Glassfish:无法使用glassfish-web.xml将数据源JNDI名称映射到可移植名称 [英] Glassfish: Unable to map datasource JNDI name to portable name using glassfish-web.xml

查看:163
本文介绍了Glassfish:无法使用glassfish-web.xml将数据源JNDI名称映射到可移植名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我试图在Glassfish AS 3.x和JBoss AS 6之间建立一个Java EE 6 webapp可移植性,因为每个服务器都以不同的方式映射数据源的JNDI名称,所以我需要在persistence.xml中为数据源指定应用程序专用的内部名称,然后使用glassfish-web.xml或jboss-web.xml(根据需要)将其映射为实际数据源名称在服务器中。



理论很简单(对于EE):

$ ul

  • 在persistence.xml中使用内部名称,例如my-datasource

  • 向web.xml添加resource-ref条目,声明您的应用程序需要一个名为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上开展工作。



    Glassfish在报告无效资源:my-datasource__pm时试图部署引用my- datasource在persistence.xml中:

     <?xml version =1.0encoding =UTF-8?> 
    < persistence version =2.0xmlns =http://java.sun.com/xml/ns/persistencexmlns:xsi =http://www.w3.org/2001/XMLSchema-实例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-SNAPSHOTPUtransaction-type =JTA>
    < jta-data-source> my-datasource< / jta-data-source>
    < exclude-unlisted-classes> false< / exclude-unlisted-classes>
    < properties />
    < / persistence-unit>
    < /余辉>

    并通过web.xml将其映射到已知的现有数据源:

     <?xml version =1.0encoding =UTF-8?> 
    < web-app version =3.0xmlns =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声明等消失... - >

    < resource-ref>
    < res-ref-name> my-datasource< / res-ref-name>
    < res-type> javax.sql.DataSource< / res-type>
    < res-auth>容器< / res-auth>
    < res-sharing-scope>可分享< / res-sharing-scope>
    < / resource-ref>

    < / web-app>

    ...和glassfish-web.xml:

     <?xml version =1.0encoding =UTF-8?> 
    <!DOCTYPE glassfish-web-app PUBLIC - // GlassFish.org //DTD GlassFish Application Server 3.1 Servlet 3.0 // ENhttp://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显示实际的数据源JNDI名称, web.xml以及使用Glassfish生成的__pm后缀列出另一个条目:

      $ asadmin list-jndi-条目
    ....无关的输出....
    realdsname__pm:javax.naming.Reference
    realdsname:javax.naming.Reference

    不用说,这让我完全陷入了困境。关于我缺少的任何想法?

    解决方案

    好的,情况就是这样。



    这不应该起作用(请参阅 http://java.net/jira/browse / GLASSFISH-17024 ),显然没关系。

    显然,每个人都在注释中定义他们的数据源,在web.xml< data-source />子句,或只是针对一个应用程序服务器。尽管对于@Resource注入,JNDI查找,Spring等来说,所有映射的东西对于JPA来说都是完全不起作用的。



    我已经将这添加到了我的已经太长了 Java EE 6疣和陷阱页面


    I'm going slightly insane trying to make a Java EE 6 webapp portable between Glassfish AS 3.x and JBoss AS 6 (and 7 when released).

    Because each server maps JNDI names for datasources differently, I need to specify an application-private internal name for the datasource in persistence.xml then use glassfish-web.xml or jboss-web.xml (as appropriate) to map that to a real datasource name in the server.

    The theory is simple (well, for EE):

    • Use internal name in persistence.xml, eg "my-datasource"
    • Add a resource-ref entry to web.xml declaring that your app needs a resource called "my-datasource"
    • Add a mapping in glassfish-web.xml and jboss-web.xml with the appropriate server's syntax, declaring that "my-datasource" should be mapped to the app server provided data source named "real-DS-created-by-admin"

    Unfortunately, the theory is about as far as it goes, because for the life of me I cannot make it work in Glassfish AS 3.1, 3.1.1, 3.2 beta, JBoss AS 6, or JBoss AS 7 beta. Right now I'm focusing on getting it working on Glassfish.

    Glassfish reports "Invalid resource : my-datasource__pm" when I try to deploy an app that references "my-datasource" in 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="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>
    

    and maps it to a known existing datasource via 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>
    

    ... and 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" shows the actual datasource JNDI name exactly as it appears in glassfish-web.xml as well as listing another entry with a "__pm" suffix that's generated by Glassfish:

    $ asadmin list-jndi-entries
    .... unrelated output ....
    realdsname__pm: javax.naming.Reference
    realdsname: javax.naming.Reference
    

    Needless to say, this is driving me completely up the wall. Any ideas on what I'm missing?

    解决方案

    OK, here's the situation.

    It's not supposed to work (see http://java.net/jira/browse/GLASSFISH-17024) and apparently that's OK.

    Apparently everybody defines their data sources in annotations, in web.xml <data-source/> clauses, or just targets only one app server. All the mapping stuff is completely non-functional for JPA even though it works fine for @Resource injection, JNDI lookups, Spring, etc.

    I've added this to my already-way-too-long java EE 6 warts and traps page.

    这篇关于Glassfish:无法使用glassfish-web.xml将数据源JNDI名称映射到可移植名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆