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资源jdbc/__ default使用连接池mysql_lemon.
__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#GSDVG00185和http://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结尾的资源.这会强制使用此资源查找的所有连接都是非事务性的.