[英]Create a Derby DB in Glassfish and connect to Java EE application
我正在嘗試編寫一個使用JPA訪問數據庫的Java EE應用程序。 直到現在,我只使用@Entity批注並將其他所有內容保留為默認狀態(例如,persistence.xml文件使用_TimerPool作為jta-data-source,並且我未創建任何db)。
所以我想嘗試並使用一個實際的數據庫。 我進入服務屏幕,JavaBD>創建新數據庫,並使用名稱和密碼進行設置。
數據庫的URL:jdbc:derby:// localhost:1527 / Prova
然后,我通過Glassfish的向導為我的應用程序創建了persistence.xml文件:
<persistence-unit name="JobsPU" transaction-type="JTA">
<jta-data-source>java:app/Prova</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
<property name="javax.persistence.schema-generation.database.target" value="database-and-scripts"/>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/Prova"/>
<property name="javax.persistence.jdbc.user" value="paolo"/>
<property name="javax.persistence.jdbc.password" value="paolo"/>
</properties>
</persistence-unit>
當我嘗試部署時,出現以下異常:
Grave: Exception while preparing the app : Invalid resource : { ResourceInfo : (jndiName=java:app/Prova__pm), (applicationName=Jobs) }
com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Invalid resource : { ResourceInfo : (jndiName=java:app/Prova__pm), (applicationName=Jobs) }
似乎與JNDI命名有關。 老實說,我還不知道,我還在努力學習。 如果我轉到Glassfish的控制台,則在JNDI列表下,我看不到任何與我的數據庫相關的內容(不在JDBC連接池或JDBC資源中)。 我該怎么辦?
非常感謝您的幫助。
要為EE容器配置PersistenceUnit,您必須使用jta-data-source
和transaction-type="JTA"
。 對於jta-data-source
,必須指定JDBC ConnectionPool的JNDI名稱,該名稱必須在EE容器(您的情況下為glassfish服務器)中進行配置。 有一個教程“ 如何在Glassfish上設置JDBC連接池” 。 同樣在這種情況下,PersistenceUnit屬性例如
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/Prova"/>
<property name="javax.persistence.jdbc.user" value="paolo"/>
<property name="javax.persistence.jdbc.password" value="paolo"/>
對於EE容器將被忽略(請參閱本文檔 )。 要使用此屬性,您可以為SE環境配置PersistenceUnit。 在此之前,我建議您閱讀RESOURCE_LOCAL和JTA持久性上下文之間的文章區別 。 SE應用程序的配置如下所示:
<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
<provider>
org.eclipse.persistence.jpa.PersistenceProvider
</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/Prova"/>
<property name="javax.persistence.jdbc.user" value="paolo"/>
<property name="javax.persistence.jdbc.password" value="paolo"/>
</properties>
</persistence-unit>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.