2015-04-29 69 views
2

我使用的EclipseLink作爲我JPA實現(KARAF)。而下面的罐被使用: -在OSGI使用的EclipseLink JPA(Karaf)

install -s mvn:org.eclipse.persistence/org.eclipse.persistence.antlr/2.5.0 
install -s mvn:org.eclipse.persistence/org.eclipse.persistence.asm/2.5.0 
install -s mvn:org.eclipse.persistence/org.eclipse.persistence.core/2.5.0 
install -s mvn:org.apache.geronimo.specs/geronimo-jpa_2.0_spec/1.1 
install -s mvn:org.osgi/org.osgi.compendium/4.2.0 
install -s mvn:org.osgi/org.osgi.enterprise/4.2.0 
org.eclipse.gemini.dbaccess.derby_1.0.0.M1-incubation.jar 
org.eclipse.gemini.jpa.weaving_1.0.0.RC1.jar 
org.eclipse.gemini.jpa_1.0.0.RC1.jar 

persistence.xml是: -

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 

    <persistence-unit name="resource" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <class>myPkg.entity.Resource</class> 
     <properties> 
      <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" 
       /> <property name="javax.persistence.jdbc.url" value="jdbc:derby:DB;create=true" 
       /> 

      <!-- <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver" /> 
      <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/D:\DB;create=true" /> --> 


      <property name="javax.persistence.jdbc.user" value="test" /> 
      <property name="javax.persistence.jdbc.password" value="test" /> 
      <property name="eclipselink.logging.level" value="OFF" /> 

      <!-- EclipseLink should create the database schema automatically --> 
      <property name="eclipselink.ddl-generation" value="create-tables" /> 
      <property name="eclipselink.ddl-generation.output-mode" 
       value="database" /> 
      <property name="connection.autocommit" value="false" /> 
      <property name="eclipselink.persistence-context.flush-mode" value="commit" /> 
      <!-- <property name="eclipselink.allow-zero-id" value="true"/> --> 
     </properties> 
    </persistence-unit> 
</persistence> 

但是Installed狀態下的gemini.dbaccess.derby_1.0.0.M1-incubation jar Remians以及gemini.jpa.weaving jar仍處於已解決狀態。

重新啓動gemini.dbaccess.derby_1.0.0.M1-incubation提供了以下錯誤: -

Reason: Missing Constraint: Import-Package: org.apache.derby.client.am; version="0.0.0" 

而且我的應用程序提供了以下錯誤: -

Could not find data source factory in registry: org.apache.derby.jdbc.ClientDriver 

我是新來的OSGI使用的EclipseLink,我在這裏失蹤?

回答

1

Apache karaf 4.0.0已經發布,這個版本的karaf提供了eclipseLink支持。

feature:install eclipselink 

因此沒有必要使用外部適配器使用的EclipseLink

+0

什麼庫有eclipseLink功能? –

+0

功能:install命令區分大小寫 - 功能:安裝eclipselink –

0

這裏是org.eclipse.gemini.dbaccess.derby_1.0.0.M1-incubation.jar的清單的內容:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: Gemini DBAccess (Incubation) 
Bundle-SymbolicName: org.eclipse.gemini.dbaccess.derby 
Bundle-Version: 1.0.0.M1-incubation 
Bundle-Activator: org.eclipse.gemini.dbaccess.derby.Activator 
Bundle-Vendor: Oracle Corporation 
Bundle-RequiredExecutionEnvironment: J2SE-1.5 
Import-Package: javax.sql, 
org.apache.derby.client.am, 
org.apache.derby.jdbc, 
org.osgi.framework;version="[1.3,2)", 
org.osgi.service.jdbc;version="[1.0,2.0)" 

還有兩個未解決的依賴於Derby二進制文件:

  • org.apache.derby.client.am
  • org.apache.derby.jdbc

兩者都缺少版本號,這就是爲什麼消息狀態爲0.0.0

這兩個軟件包是derbyclient.jar文件的一部分,可作爲Derby二進制文件中的OSGi包使用。問題是此軟件包的Export-Package子句僅公開了org.apache.derby.jdbc包。

一個簡單的解決方案是SpringSource-packaged bundle:它公開了兩個必需的包。請注意,它對Java transaction API有額外的依賴性。

+1

那麼sholud我做..?我的應用程序未運行 –

+0

下載德比檔案並在容器中部署* derbyclient.jar *文件。它將提供JDBC組件作爲導出的包(JAR MANIFEST.MF中的* Export-Package *子句)。這應該可以解決你的錯誤。您可能會面臨* org.apache.derby.client.am *包上的依賴關係問題,因爲它在類路徑中可用,但未在* Export-Package *子句中公開。在這種情況下,您可能必須重新打包該包,但這是[另一個故事](http://stackoverflow.com/a/9821072/1207019)。 – bdulac

+0

[* SpringSource * -packaged bundle](http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.org.apache.derby.client&version=10.5.1000001.764942)是準備使用:它公開了兩個必需的軟件包。 – bdulac

0

首先,確保您已經安裝了Karaf的區域功能,如果您使用的版本是< 4(尚未發佈),則默認安裝Apache Aries Blueprint實現。所以如果你想堅持雙子座,這會干擾。因此請確保您已安裝區域。其次,我認爲有一個用於安裝eclipse-link捆綁軟件的功能。可能想看看它,以獲得正確的捆綁對齊。

如果你堅持白羊座藍圖impl,那麼它更簡單。只要安裝了以下功能:

feature:install jpa jta jndi 

,如果你想使用的德比,可能還需要安裝JDBC功能。這會給你一些用來連接數據庫和/或創建數據源的命令。如果您使用數據源命令,則可以爲德比數據庫創建數據源,並根據需要安裝正確的工作德比客戶端罐。