JNDI资源名称附加__pm。部署失败

时间:2013-03-18 09:56:49

标签: java java-ee netbeans glassfish ear

我正在尝试运行一个非常简单的耳朵应用程序。我似乎遇到了这个问题,但这里的讨论对我不起作用JDBC resource name being modified by container (__pm being appended to it)

在我的情况下,__pm也会附加数据源名称。我不知道它来自哪里但是服务器日志指出这样的事实:它不是搜索databasename而是搜索databasename__pm并且无法部署。

Persistence.xml: -

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="FCK-ejbPU" transaction-type="JTA">
    <jta-data-source>FCKDatabase</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties/>
  </persistence-unit>
</persistence>

Glassfish日志:

  Error occurred during deployment: Exception while preparing the app : Invalid resource : { ResourceInfo : (jndiName=java:app/jdbc/FCKDatabase__pm), (applicationName=FCK) }. Please see server.log for more details.
        Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method : java.lang.RuntimeException: Invalid resource : { ResourceInfo : (jndiName=java:app/jdbc/FCKDatabase__pm), (applicationName=FCK) }
        Invalid resource : { ResourceInfo : (jndiName=java:app/jdbc/FCKDatabase__pm), (applicationName=FCK) }

正如您所看到的,我的资源的JNDI名称附加了__pm

同样在Glassfish服务器控制台上,资源正确显示为FCKDatabase而不是FCKDatabase_pm

知道这个__pm来自何处?

系统:

  • Netbeans 7.3
  • Glassfish Server 3.1.2

4 个答案:

答案 0 :(得分:6)

问题是mysql连接器jar文件没有放入glassfish服务器。这引发了一系列问题。我上面发布的那个只是服务器日志包含的错误消息之一。我建议浏览整个错误消息列表并尝试从那里进行调试。以下链接帮助我将jar文件放在正确的位置:

答案 1 :(得分:2)

由于Netbeans 7.1在IDE生成persistence.xml jta字段且glassfish-resouces JDNI名称生成时带有前缀java:module/,因此必须在两个文件中删除它,它必须看起来像jdbc/[anyName]。这是在Netbeans 8.1和Glassfish 4.0上测试的。

In the image, the second option shows the generated name, which is invalid en Glassfish because the ':'

答案 2 :(得分:0)

这是我发现的另一种解决方案,对任何人都有帮助。

复制您遇到问题的资源名称,然后按照以下步骤操作。

  1. 登录Glassfish控制台
  2. 转到资源
  3. JDBC - &gt; JDBC资源
  4. 点击新建按钮添加资源
  5. 将复制的资源输入JNDI名称字段,然后选择池名称并输入说明。
  6. 点击“确定”按钮
  7. 重新部署应用程序并检查。

答案 3 :(得分:0)

就我而言,我刚刚移动了我的glassfish-resources.xml文件

发件人:

my_web_app / src / main / webapp / WEB-INF

my_web_app / src / main / 设置

GlassFish开始识别创建资源的文件。