繁体   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