爪哇,JPA,Glassfish的,无效的资源:JDBC / __ default__pm(Java

2019-06-21 04:28发布

我用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)
....

有没有人有想法发生了什么,做什么?

Answer 1:

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

在我Glassfish的,我的JDBC资源,JDBC / __默认使用连接池mysql_lemon。



Answer 2:

在__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名称的资源。 这迫使所有连接抬起头来使用这种资源是不可交易。



Answer 3:

(同一职位矿山适当考虑但现在):

当您的设置配置持久性,只为在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



Answer 4:

我有同样的问题。

(即仍然有这个问题的人)的解决方案:

  1. 如果你正在使用NetBeans IDE 8.1与Glassfish的4.1.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 ),并保存所有。

这应该工作(Y)。



Answer 5:

我有同样的问题,当我运行/通过NetBeans的instalattion向导创建一个服务器上部署的应用程序。

为了解决我从官方网站下载了最后版本的GlassFish和去:Netbeans的>“服务的选项卡”>“服务器”>“添加服务器...”。

请记住,改变你的项目配置为使用新的GlassFish服务器实例。



Answer 6:

我有同样的问题,我坚信它是由一些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();


Answer 7:

我有这个疑难问题设置管理员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>


文章来源: Java, JPA, Glassfish, Invalid resource : jdbc/__default__pm