Java,JPA,Glassfish,无效资源:jdbc/__ default__pm

Vic*_*rin 26 java deployment jpa glassfish

我使用Glassfish 3.1.2.2(build 5),JPA,EclipseLink,MySQL

我通过Glassfish管理面板创建了MySQL池.从GF管理面板ping到MySQL是可以的.

我用persistence.xml创建了app:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="myUnit">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <properties>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/myDBName"/>
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="myPass"/>
        <property name="javax.persistence.ddl-generation" value="drop-and-create-tables"/>
    </properties>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)

我试图部署它并得到错误:

Invalid resource : jdbc/__default__pm

[#|2012-11-16T02:20:59.480+0400|SEVERE|glassfish3.1.2|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=43;_ThreadName=Thread-2;|Invalid resource : jdbc/__default__pm
java.lang.RuntimeException: Invalid resource : jdbc/__default__pm
Run Code Online (Sandbox Code Playgroud)

GF日志中的Stacktrace是巨大的.由...开始

at com.sun.enterprise.connectors.ConnectorRuntime.lookupDataSourceInDAS(ConnectorRuntime.java:540)
at com.sun.enterprise.connectors.ConnectorRuntime.lookupPMResource(ConnectorRuntime.java:469)
at org.glassfish.persistence.common.PersistenceHelper.lookupPMResource(PersistenceHelper.java:63)
at org.glassfish.persistence.jpa.ProviderContainerContractInfoBase.lookupDataSource(ProviderContainerContractInfoBase.java:71)
....
Run Code Online (Sandbox Code Playgroud)

有没有人有想法发生了什么,该怎么办?

Kev*_*vin 24

如果您只创建了MySQL连接池,则还必须创建JDBC资源.这可以从用于创建连接池的上下文菜单中创建.

示例Glassfish jdbc资源设置

在我的Glassfish中,我的JDBC资源jdbc/__ default使用连接池mysql_lemon.

  • 但是,从哪里来*__ pm < - ?? (12认同)

Ber*_*ard 6

__nontx和__pm是池的扩展.文档:https://docs.oracle.com/cd/E19798-01/821-1752/beamr/index.html (其他地方http://docs.oracle.com/cd/E26576_01/doc.312/e24930/ jdbc.htm#GSDVG00185http://docs.oracle.com/cd/E26576_01/doc.312/e24930/transaction-service.htm#GSDVG00512)

第一个__pm

来自https://docs.oracle.com/cd/E19798-01/821-1752/gavro/index.html

允许非组件呼叫者

您可以允许非Java-EE组件(例如servlet过滤器,生命周期模块和第三方持久性管理器)使用此JDBC连接池.返回的连接将自动登记从事务管理器获取的事务上下文.标准Java EE组件也可以使用此类池.非组件调用者获取的连接不会在容器的事务结束时自动关闭.它们必须由调用者明确关闭.

您可以通过以下方式启用非组件调用方:

在管理控制台的"编辑连接池高级属性"页面上,选中"允许非组件调用方"框.默认值为false.有关更多信息,请单击管理控制台中的"帮助"按钮.

在asadmin create-jdbc-connection-pool命令中指定---- allownoncomponentcallers选项.有关更多信息,请参阅"Oracle GlassFish Server 3.0.1参考手册".

在asadmin set命令中指定allow-non-component-callers选项.例如:

asadmin set domain1.resources.jdbc-connection-pool.DerbyPool.allow-non-component-callers = true

有关更多信息,请参阅"Oracle GlassFish Server 3.0.1参考手册".

使用__pm后缀创建JDBC资源.

__nontx

来自https://docs.oracle.com/cd/E19798-01/821-1752/beamu/index.html

使用非事务性连接

您可以通过以下任何方式指定非事务性数据库连接:

检查管理控制台中"新建JDBC连接池"或"编辑连接池"页面上的"非事务性连接"框.默认为未选中.有关更多信息,请单击管理控制台中的"帮助"按钮.

在asadmin create-jdbc-connection-pool命令中指定---- nontransactionalconnections选项.有关更多信息,请参阅"Oracle GlassFish Server 3.0.1参考手册".

在asadmin set命令中指定non-transactional-connections选项.例如:

asadmin set domain1.resources.jdbc-connection-pool.DerbyPool.non-transactional-connections = true

有关更多信息,请参阅"Oracle GlassFish Server 3.0.1参考手册".

使用GlassFish Server中的DataSource实现,它提供了一个getNonTxConnection方法.此方法检索不在任何事务范围内的JDBC连接.有两种变体.

public java.sql.Connection getNonTxConnection()抛出java.sql.SQLException

public java.sql.Connection getNonTxConnection(String user,String password)抛出java.sql.SQLException

创建JNDI名称以__nontx结尾的资源.这会强制使用此资源查找的所有连接都是非事务性的.