Java 在GlassFish中为远程数据库创建JDBC连接池

Java 在GlassFish中为远程数据库创建JDBC连接池,java,mysql,jakarta-ee,jpa,glassfish,Java,Mysql,Jakarta Ee,Jpa,Glassfish,我是否需要在GlassFish服务器控制台中为远程数据库创建连接池 详细信息: 我正在为我的数据库使用MySQL Amazon RDS实例。我已经从AWS控制台设置并运行了数据库。使用Eclipse数据源工具,ping成功。我使用EclipseLink作为我的JPA提供商。我的peristence.xml文件如下所示: <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://

我是否需要在GlassFish服务器控制台中为远程数据库创建连接池

详细信息:

我正在为我的数据库使用MySQL Amazon RDS实例。我已经从AWS控制台设置并运行了数据库。使用Eclipse数据源工具,ping成功。我使用EclipseLink作为我的JPA提供商。我的
peristence.xml
文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="WebApplication" transaction-type="JTA">
    <properties>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"></property>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://link-to-my-database.amazonaws.com:3306/TestDB"></property>
        <property name="javax.persistence.jdbc.user" value="admin"/>
        <property name="javax.persistence.jdbc.password" value="my-password"/>
        <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
        <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
    </properties>
</persistence-unit>
因为我在容器管理的环境中运行,所以我甚至可以测试注入的
EntityManager
是否正确连接:

@PersistenceContext(unitName = "WebApplication")
private EntityManager em;

System.out.println("CONNECTION PROPERTIES:");
Map<String, Object> props = em.getProperties();
for(Map.Entry<String, Object> prop : props.entrySet()){
    System.out.println("Property: " + prop.getKey() + " Value: " + prop.getValue());
}
因此,在我看来,连接应该是良好的,并且工作正常。但是,当尝试使用Eclipse数据源浏览器视图(数据工具平台)和MySQL工作台查看表时,没有要查看的表(是的,我已刷新)。这让我相信数据被存储在其他地方,就像存储到默认位置一样。我打开GlassFish开发者控制台(localhost:4848)>JDBC>连接池。我删除了一个“默认”连接池。现在,在运行应用程序时,我在堆栈跟踪的开头出现以下错误:

2015-05-14T17:06:27.493-0400|Severe: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method
2015-05-14T17:06:27.516-0400|Severe: Exception while preparing the app
2015-05-14T17:06:27.517-0400|Severe: Exception during lifecycle processing
java.lang.RuntimeException: Invalid resource : jdbc/__default__pm 

但是,我从未指定服务器连接到
jdbc/\uuu default\uu pm
。这让我相信,如果它无法连接到
persistence.xml
文件中指定的连接池,它会寻找一个“默认”连接池作为备用但是,连接可以正常工作—似乎不是由应用程序建立的,这是因为我必须在GlassFish服务器控制台的连接池中指定远程连接吗?还是我遗漏了其他内容?

您正在persistence.xml中设置JTA事务类型,这意味着应用服务器将管理数据库连接,您只需要提供在应用服务器中配置的数据源的JNDI名称

如果需要使用javax.persistence.jdbc.*属性在persistence.xml文件中设置数据源,则需要切换到资源本地事务类型,在这种情况下,还需要管理应用程序中的事务(不确定是否需要)

有关更多信息,请参阅

2015-05-14T16:23:44.320-0400|Info: CONNECTION PROPERTIES:
2015-05-14T16:23:44.320-0400|Info: Property: eclipselink.ddl-generation Value: drop-and-create-tables
2015-05-14T16:23:44.320-0400|Info: Property: javax.persistence.jdbc.url Value: jdbc:mysql://link-to-my-database.us-east-1.rds.amazonaws.com:3306/TestDB
2015-05-14T16:23:44.320-0400|Info: Property: javax.persistence.jdbc.user Value: admin
2015-05-14T16:23:44.320-0400|Info: Property: javax.persistence.jdbc.driver Value: com.mysql.jdbc.Driver
2015-05-14T16:23:44.320-0400|Info: Property: javax.persistence.jdbc.password Value: password
2015-05-14T16:23:44.320-0400|Info: Property: javax.persistence.schema-generation.database.action Value: drop-and-create
2015-05-14T16:23:44.320-0400|Info: Property: hibernate.transaction.manager_lookup_class Value: org.hibernate.transaction.SunONETransactionManagerLookup
2015-05-14T16:23:44.320-0400|Info: Property: eclipselink.target-server Value: SunAS9
2015-05-14T16:23:44.320-0400|Info: Property: toplink.target-server Value: SunAS9
2015-05-14T17:06:27.493-0400|Severe: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method
2015-05-14T17:06:27.516-0400|Severe: Exception while preparing the app
2015-05-14T17:06:27.517-0400|Severe: Exception during lifecycle processing
java.lang.RuntimeException: Invalid resource : jdbc/__default__pm