Невозможно получить доступ к источнику данных удаленно через JBoss - PullRequest
3 голосов
/ 22 декабря 2011

Контекст

У меня есть JBoss, где я успешно развернул источник данных mydatasource-ds.xml.Это имя JNDI java:mydatasourceDS.JBoss утверждает, что источник данных успешно развернут.Агресс JMX-консоли тоже.

Проблема

Я хочу использовать этот источник данных из клиентского java-приложения, запущенного на отдельной JVM.Но я получаю исключение о том, что java:mydatasourceDS не может быть найден.

java.lang.ClassCastException: javax.naming.Reference cannot be cast to javax.sql.DataSource

Подробности

Вот файл persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="mydatasource-db" transaction-type="JTA">
    <jta-data-source>java:mydatasourceDS</jta-data-source>
    <properties>
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true" />

        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
        <property name="hibernate.default_schema" value="rec" />

        <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
    </properties>
</persistence-unit>

Вот файл jndi.properties:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

Вот путь к классу приложения:

jndi.properties
log4j.properties
META-INF\persistence.xml
hibernate-jpa-2.0-api-1.0.0.Final.jar
jnp-client-5.0.3.GA.jar
jboss-common-core-2.2.14.GA.jar
jboss-logging-spi-2.1.0.GA.jar
hibernate-entitymanager-3.6.4.Final.jar
hibernate-core-3.6.4.Final.jar
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-3.2.0.Final.jar
jta-1.1.jar
javassist-3.12.0.GA.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
log4j-1.2.16.jar
xstream-1.4.1.jar
xmlpull-1.1.3.1.jar
xpp3_min-1.1.4c.jar

РЕДАКТИРОВАТЬ У меня естьнашел источник проблемы.javax.sql.DataSource, которое было доступно моему клиентскому приложению, НЕ было получено от JNDI.Тот, который я получаю от JNDI - это JBoss javax.sql.DataSource.То же имя, но немного другие классы, следовательно, ClassCastException ...

На момент написания статьи JBoss javax.sql.DataSource можно найти в этом пакете: jboss-j2ee-4.2.3.GA.баночка

Ответы [ 2 ]

3 голосов
/ 08 ноября 2012

Если вы получаете

javax.naming.Reference 

, это означает, что вы пропустили зависимости времени выполнения, необходимые для его разрешения.Вы можете проверить член classFactory объекта Reference с помощью

getFactoryClassName() 

, чтобы выяснить первую отсутствующую зависимость.

В моем случае с использованием JBoss6.1 это было:

org.jboss.resource.adapter.jdbc.remote.DataSourceFactory

Поместив банку, в которой этот класс находится на пути к классам (common/lib/jbosscx-client.jar), я прошел первый шаг, а затем следил за отслеживанием всех ошибок ClassNotFoundException.

Полный списокJBoss6.1 оказался:

- client/jnp-client.jar
- client/jboss-logging.jar
- common/lib/jbosscx-client.jar
- client/concurrent.jar
- client/jboss-client.jar
- client/jboss-common-core.jar
- client/jboss-integration.jar
- client/jboss-remoting.jar
- client/jboss-security-spi.jar
- client/jboss-serialization.jar
- client/jboss-transaction-api_1.1_spec.jar
2 голосов
/ 22 декабря 2011

В этом руководстве говорится, что вы должны установить

<use-java-context>false</use-java-context>

в mydatasource-ds.xml.Не уверен, что сделал.

...