2013-03-18 62 views
9

我试图运行一个非常简单的耳朵应用程序。我似乎碰到这个问题,但这里的讨论不为我工作JDBC resource name being modified by container (__pm being appended to it)附加了__pm的JNDI资源名称。部署失败

在我的情况下,数据源名称也被__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名称appened与__pm

而且GlassFish服务器控制台上的资源被正确地显示为FCKDatabase而不是FCKDatabase_pm

任何想法,这__pm从何而来?

系统:

  • 的Netbeans 7.3
  • GlassFish服务器3.1.2

回答

6

的问题是,MySQL的连接器JAR文件未放置到GlassFish服务器。这引发了一系列问题。我上面发布的只是服务器日志中包含的错误消息之一。我建议通过错误消息的整个列表并尝试从那里进行调试。点击以下链接帮我把jar文件在正确的位置:

+1

我把连接器放在lib和ext文件夹中,但是我仍然遇到与部署我的战争相同的问题。 – Bardelman 2015-01-02 08:14:58

+0

重新启动和刷新服务器应该可以解决问题。 – Omar 2016-05-20 23:07:23

1

由于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 ':'

+0

如果这不起作用,请确保将MySQL连接器复制到Glassfish上的正确位置:Glassfish/glassfish/domains/{your_domain}/lib – 2016-10-07 12:46:49

+0

这适用于我,但仅适用于jdbc/sample默认数据库,我无法使用我自己的。但无论如何,对于我所需要的就足够了。 – Edeph 2016-12-30 09:34:06

0

这里是我发现,这将是有帮助的任何其他解决方案。

复制您面临问题的资源名称并按照以下步骤操作。

  1. 登录到Glassfish的控制台
  2. 转到资源
  3. JDBC - > JDBC资源
  4. 点击新建按钮添加资源
  5. 输入复制的资源到JNDI名称字段中,选择池名称并输入描述。
  6. 点击OK按钮

重新部署应用程序和检查。