Glassfish: невозможно сопоставить имя JNDI источника данных с переносимым именем с помощью glassfish-web.xml - PullRequest
6 голосов
/ 12 июля 2011

Я немного схожу с ума, пытаясь сделать переносимое веб-приложение Java EE 6 между Glassfish AS 3.x и JBoss AS 6 (и 7, когда выйдет).

Поскольку каждый сервер отображает имена JNDI для источников данных по-своему, мне нужно указать внутреннее частное имя приложения для источника данных в файле persistence.xml, а затем использовать glassfish-web.xml или jboss-web.xml (в зависимости от ситуации) для сопоставления этого к реальному имени источника данных на сервере.

Теория проста (ну для EE):

  • Использовать внутреннее имя в файле persistence.xml, например, "my-datasource"
  • Добавьте запись resource-ref в web.xml, заявляющую, что вашему приложению нужен ресурс под названием «my-datasource»
  • Добавьте сопоставление в glassfish-web.xml и jboss-web.xml с синтаксисом соответствующего сервера, заявив, что «my-datasource» должен быть сопоставлен с сервером приложений при условии источника данных с именем «real-DS-made-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.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-records" отображает фактическое имя JNDI источника данных в точности так, как оно отображается в glassfish-web.xml, а также выводит другую запись с суффиксом "__pm", сгенерированным Glassfish:

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

Само собой разумеется, это заставляет меня полностью подняться на стену. Есть идеи о том, что мне не хватает?

1 Ответ

9 голосов
/ 14 июля 2011

ОК, вот ситуация.

Это не должно работать (см. http://java.net/jira/browse/GLASSFISH-17024), и, видимо, все в порядке.

Очевидно, что каждый определяет свои источники данных в аннотациях, в Интернете.xmlпункты или только нацелены только на один сервер приложений.Все средства отображения полностью не функционируют для JPA, даже если они отлично работают для внедрения @Resource, поиска JNDI, Spring и т. Д.

Я добавил это в свою уже слишком длинную java EE 6 страница бородавок и ловушек .

...