簡體   English   中英

在Glassfish中創建一個Derby DB並連接到Java EE應用程序

[英]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-sourcetransaction-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM