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

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

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

我用persistence.xml创建了app:

   org.eclipse.persistence.jpa.PersistenceProvider         

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

 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日志中的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) .... 

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

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

示例Glassfish 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组件(如servletfilter,生命周期模块和第三方持久性管理器)使用此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结尾的资源。 这会强制使用此资源查找的所有连接都是非事务性的。

(我的同一个post,但现在有适当的帐户):

使用设置配置持久性时,只需在persistence.xml中为JDBC池设置JNDI名称。 可选,您可以设置目标数据库名称。

  jdbc/mysql    

我还鼓励将’drop-and-create-table’更改为’create-tables’,这样就不会丢失数据,这应该是以下列方式提供EclipseLink的属性:

  

也方便

  

这将创建模式和SQL脚本。

有关更多信息,请访问: http : //wiki.eclipse.org/EclipseLink/Examples/JPA/DDL或http://docs.oracle.com/cd/E19798-01/821-1752/gbwmj/index.html

我有同样的问题。

解决方案(适用于任何仍有此问题的人):

  1. 如果您使用带有Glassfish 4.1.1的NetBeans IDE 8.1,我建议您将其更改为Glassfish 4.1
  2. 转到NetBeans中的左侧面板。 单击services > server > glassfish然后右键单击(在Glassfish服务器中)并选择查看域管理控制台,应显示一个网页。 转到左侧,选择resources > JDBC和JDBC连接池。 单击“ new添加新连接池,键入池名称。 接下来,选择javax.sql.ConnectionPoolDataSourcedatadriver (在我的例子中是MySQL)并单击下一步。 之后,您应该输入数据库的所有必需信息。
  3. 返回Resources > JDBC 。 这次,JDBC资源创建了一个新的JDBC资源(对我来说,我把它命名为jdbc/test )。 不要忘记将它与您已创建的连接池链接。
  4. 在NetBeans中,转到ejb项目并修改persistence.xml文件。 将datasource更改为数据库资源(在我的示例中为jdbc/test )并保存所有datasource

这应该工作(y)。

当我在netbeans instalattion向导创建的服务器上运行/部署应用程序时,我遇到了同样的问题。

为了解决我从官方网站下载了最后一个glassfish版本并转到:Netbeans>“服务选项卡”>“服务器”>“添加服务器…”。

请记住更改项目配置以使用新的glassfish服务器实例。

我有同样的问题,我坚信它是由一些keepig-cache引起的。

就在我完成之后

 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(); 

我遇到了这个问题。我在admin consol中设置了jdbc连接池和jdbc资源。 但是我没有在persistence.xml中设置数据源。

   jdbc/your-name false