我創建了一個獨立的應用程序來訪問我的數據庫(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();
除非你顯示你的代碼和persistence.xml文件,否則我們不能提供幫助。 –