2013-06-26 32 views
0

我創建了一個獨立的應用程序來訪問我的數據庫(mssql或h2) 我創建了一個輔助類,它通過傳遞連接詳細信息來連接到我的服務器。PersistenceProvider createEntityManagerFactory在Eclipse插件中返回null

所有的罰款和工作,因爲它應該是。

現在我將我的代碼移動到一個Eclipse插件( - > OSGi) 首先我遇到了Driver Not Found錯誤,但我通過將我的ClassLoader傳遞給PersistenceProvider來解決此問題。

現在我得到了下一個問題,我不能夠解決: 的PersistenceProvider類返回,當我打電話的createEntityManagerFactory通過持久單元的名字和我的地圖。

它不拋出任何異常......只是返回

所以我猜這個司機被發現...... 作爲獨立的應用程序工作時,它不可能是任何的persistence.xml ...

有什麼想法嗎?

這裏我的persistence.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<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_2_0.xsd" 
    version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> 
    <persistence-unit name="EclipseLinkTest" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
<!-- <mapping-file>META-INF/contact-orm.xml</mapping-file>  --> 
    <properties> 
<!--  <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" /> --> 
<!--  <property name="javax.persistence.jdbc.url" value="jdbc:h2:D:/JAVA/Final/lumo.osgi.service.eclipselink.impl/db/embedded.db" /> --> 
<!--  <property name="javax.persistence.jdbc.user" value="admin" /> --> 
<!--  <property name="javax.persistence.jdbc.password" value="admin" /> --> 

<!--  <property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" /> --> 
<!--  <property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://dbserverIP:1433;DatabaseName=testsystem" /> --> 
<!--  <property name="javax.persistence.jdbc.user" value="editor" /> --> 
<!--  <property name="javax.persistence.jdbc.password" value="editorpwd" /> --> 


     <!-- EclipseLink should create the database schema automatically --> 
<!--  <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> --> 
<!--  <property name="eclipselink.ddl-generation" value="create-tables" /> --> 
<!--  <property name="eclipselink.ddl-generation.output-mode" value="database" /> --> 
<!--  <property name="eclipselink.weaving" value="true"/> --> 
     <property name="eclipselink.logging.level" value="WARNING"/> 
    </properties> 

    </persistence-unit> 
</persistence> 

,這是代碼來獲取配置(應用程序的主類 - 所以它的類加載器了關於我的目標定義的一切信息)

public Properties getEmbeddedConfiguration(String path, String database, 
      String login, String password) { 
     Properties props = new Properties(); 
     // this one is for getting started in OSGi & JPA 

     // No suitable driver found for jdbc:h2:file:C:\temp\Thumbs.db;IFEXISTS=TRUE 
//  props.put(PersistenceUnitProperties.CLASSLOADER, 
//    EclipseLinkServiceImpl.class.getClassLoader()); 
     // this fixes the driver not found but leaves a nullpointer 
     props.put(PersistenceUnitProperties.CLASSLOADER, 
       Application.class.getClassLoader()); 

     String connectionString = String.format(
     "jdbc:h2:file:%s%s;IFEXISTS=TRUE", path, database); 
     props.put("javax.persistence.jdbc.driver", "org.h2.Driver"); 
     props.put("javax.persistence.jdbc.url", connectionString); 
     props.put("javax.persistence.jdbc.user", login); 
     props.put("javax.persistence.jdbc.password", password); 

     props.put("eclipselink.target-database", 
     "org.eclipse.persistence.platform.database.H2Platform"); 
     props.put("eclipselink.ddl-generation", "drop-and-create-tables"); 
     props.put("eclipselink.ddl-generation.output-mode", "database"); 
     return props; 
    } 

和最後但並非最不重要的創建

PersistenceProvider p = new PersistenceProvider(); 
factory = p.createEntityManagerFactory(PERSISTENCE_UNIT_NAME, 
getEmbeddedConfiguration(folder, database, username, pwd)); 
System.out.println("factory: " + factory); 
em = factory.createEntityManager(); 
+2

除非你顯示你的代碼和persistence.xml文件,否則我們不能提供幫助。 –

回答

0

若要JPA運行我的一部分n OSGi看看Gemini project

+0

這就是我現在所做的,但我有ConfigurationAdmin服務沒有啓動的問題... – lumo

+0

你不應該擺弄類加載器。您是否擁有正確的MANIFEST.MF條目,如「JPA-PersistenceUnits:MyPu」,其中「MyPu」是您的持久性單元名稱? – earcam

+0

您對ConfigurationAdmin有什麼錯誤? – earcam