gpt4 book ai didi

Glassfish:无法使用 glassfish-web.xml 将数据源 JNDI 名称映射到可移植名称

转载 作者:行者123 更新时间:2023-12-04 14:18:17 26 4
gpt4 key购买 nike

我试图让 Java EE 6 webapp 在 Glassfish AS 3.x 和 JBoss AS 6(以及 7 发布时)之间移植有点疯狂。

因为每个服务器为数据源映射 JNDI 名称的方式不同,所以我需要在 persistence.xml 中为数据源指定一个应用程序私有(private)的内部名称,然后使用 glassfish-web.xml 或 jboss-web.xml(根据需要)将其映射到真实的服务器中的数据源名称。

理论很简单(嗯,对于 EE):

  • 在 persistence.xml 中使用内部名称,例如“my-datasource”
  • 向 web.xml 添加一个资源引用条目,声明您的应用程序需要一个名为“my-datasource”的资源
  • 使用适当的服务器语法在 glassfish-web.xml 和 jboss-web.xml 中添加映射,声明“my-datasource”应该映射到应用服务器提供的名为“real-DS-created-by-admin”的数据源

  • 不幸的是,这个理论就目前为止,因为在我的一生中,我无法让它在 Glassfish AS 3.1、3.1.1、3.2 beta、JBoss AS 6 或 JBoss AS 7 beta 中工作。现在我专注于让它在 Glassfish 上工作。

    当我尝试部署在 persistence.xml 中引用“my-datasource”的应用程序时,Glassfish 报告“无效资源:my-datasource__pm”:
    <?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="org.example_glassfish-webxml-datasource-jndi-mapping_war_1.0-SNAPSHOTPU" transaction-type="JTA">
    <jta-data-source>my-datasource</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties/>
    </persistence-unit>
    </persistence>

    并通过 web.xml 将其映射到已知的现有数据源:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <!-- servlet declarations etc elided ... -->

    <resource-ref>
    <res-ref-name>my-datasource</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>

    </web-app>

    ... 和 glassfish-web.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
    <glassfish-web-app error-url="">
    <resource-ref>
    <res-ref-name>my-datasource</res-ref-name>
    <jndi-name>realdsname</jndi-name>
    </resource-ref>
    </glassfish-web-app>

    “asadmin list-jndi-entries”显示了与 glassfish-web.xml 中显示的完全相同的实际数据源 JNDI 名称,并列出了 Glassfish 生成的另一个带有“__pm”后缀的条目:
    $ asadmin list-jndi-entries
    .... unrelated output ....
    realdsname__pm: javax.naming.Reference
    realdsname: javax.naming.Reference

    不用说,这让我彻底崩溃了。关于我所缺少的任何想法?

    最佳答案

    好的,情况就是这样。

    它不应该工作(见 http://java.net/jira/browse/GLASSFISH-17024 ),显然没关系。

    显然每个人都在注释、web.xml 子句中定义他们的数据源,或者只针对一个应用服务器。所有映射的东西对于 JPA 来说都是完全不起作用的,即使它对于 @Resource 注入(inject)、JNDI 查找、Spring 等都可以正常工作。

    我已将此添加到我已经太长的 java EE 6 warts and traps page .

    关于Glassfish:无法使用 glassfish-web.xml 将数据源 JNDI 名称映射到可移植名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6660416/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com