我用Glassfish的3.1.2.2(建5),JPA的EclipseLink,MySQL的
我通过GlassFish管理面板中创建MySQL的游泳池。 平到MySQL从GF管理面板就可以了。
我创建的应用程序与persistence.xml中:
<?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>
我试图部署,并得到了错误:
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
堆栈跟踪在GF日志是巨大的。 发起者
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)
....
有没有人有想法发生了什么,做什么?
如果您只创建了MySQL数据库连接池,您还必须创建一个JDBC资源。 这可以从用于创建连接池的一个以上的上下文菜单中创建。
在我Glassfish的,我的JDBC资源,JDBC / __默认使用连接池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的创建-JDBC连接池命令allownoncomponentcallers选项。 欲了解更多信息,请参阅Oracle GlassFish应用服务器3.0.1参考手册。
指定要在的asadmin set命令允许-非组件-呼叫者选项。 例如:
的asadmin设置domain1.resources.jdbc连接-pool.DerbyPool.allow-非组件-呼叫者=真
欲了解更多信息,请参阅Oracle GlassFish应用服务器3.0.1参考手册。
创建一个__pm后缀的JDBC资源。
和__nontx
从https://docs.oracle.com/cd/E19798-01/821-1752/beamu/index.html
使用非事务连接
您可以指定任一方式非事务性的数据库连接:
检查在管理控制台中新的JDBC连接池或编辑连接池页面非事务连接盒。 默认为选中。 欲了解更多信息,请单击管理控制台中的帮助按钮。
指定要在asadmin的创建-JDBC连接池命令---- nontransactionalconnections选项。 欲了解更多信息,请参阅Oracle GlassFish应用服务器3.0.1参考手册。
指定使用asadmin set命令的非事务性的连接选项。 例如:
的asadmin设置domain1.resources.jdbc连接-pool.DerbyPool.non事务的连接=真
欲了解更多信息,请参阅Oracle GlassFish应用服务器3.0.1参考手册。
使用在GlassFish应用服务器,它提供了一个getNonTxConnection方法的DataSource实现。 该方法检索的JDBC连接,是不是在任何事务的范围内。 有两个变种。
公共java.sql.Connection中getNonTxConnection()抛出值java.sql.SQLException
公共java.sql.Connection中getNonTxConnection(用户字符串,字符串密码)抛出值java.sql.SQLException
创建于__nontx结束JNDI名称的资源。 这迫使所有连接抬起头来使用这种资源是不可交易。
(同一职位矿山适当考虑但现在):
当您的设置配置持久性,只为在persistence.xml中的JDBC池设置的JNDI名称。 可选的,你可以将目标数据库名。
<persistence-unit name="foo" transaction-type="JTA">
<jta-data-source>jdbc/mysql</jta-data-source>
<!--optional-->
<property name="eclipselink.target-database" value="MySQL4"/>
</persistence-unit>
我也鼓励改变“落和创建表”到“创造桌”,让你做不松动的数据,这应该是在下列方式提供的EclipseLink的属性:
<property name="eclipselink.ddl-generation" value="create-tables"/>
也得心应手
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
将创建模式和SQL脚本。
欲了解更多信息,请访问: http://wiki.eclipse.org/EclipseLink/Examples/JPA/DDL或http://docs.oracle.com/cd/E19798-01/821-1752/gbwmj/index.html
我有同样的问题,当我运行/通过NetBeans的instalattion向导创建一个服务器上部署的应用程序。
为了解决我从官方网站下载了最后版本的GlassFish和去:Netbeans的>“服务的选项卡”>“服务器”>“添加服务器...”。
请记住,改变你的项目配置为使用新的GlassFish服务器实例。
我有同样的问题,我坚信它是由一些remainig缓存造成的。
只是我已经做了之后
asadmin remove-domain domain1
asadmin create-domain domain1
firefox http://localhost:4848
现在__pm
不再被追加到JDBC资源。
如果这样没有帮助,那么我假设你正在使用
@PersistenceContext
EntityManager em;
这应该与如更换
em=Persistence.createEntityManagerFactory("DefaultPU(PUT_PERSISTANCE_UNIT_NAME_HERE").createEntityManager();
String ret="Hello " + txt + ", "+ em.createNamedQuery("Usertable.findAll").getResultList().get(0).toString() +" !" ;
em.close();
我有这个疑难问题设置管理员CONSOL JDBC连接池和JDBC资源。 但我没有在persistence.xml中设置数据源。
<persistence-unit name="OnlinePrintService-warPU" transaction-type="JTA">
<jta-data-source>jdbc/your-name</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>