无法通过JBoss远程访问数据源
上下文
我有一个JBoss,我成功地部署了一个数据源mydatasource-ds.xml
。 它的JNDI名称是java:mydatasourceDS
。 JBoss声称数据源已成功部署。 JMX控制台也很好。
问题
我想从在单独的JVM上启动的客户端Java应用程序中使用此数据源。 但我得到一个例外,说java:mydatasourceDS
无法找到。
java.lang.ClassCastException: javax.naming.Reference cannot be cast to javax.sql.DataSource
细节
这是persistence.xml
文件:
java:mydatasourceDS
这是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.jar
本指南说你必须设置
false
在mydatasource-ds.xml
。 不确定你是否这样做。
如果你得到了
javax.naming.Reference
这意味着您缺少解析所需的运行时依赖项。 您可以通过检查Reference对象的classFactory成员
getFactoryClassName()
找出你缺少的第一个依赖。
在我使用JBoss6.1的情况下,它是:
org.jboss.resource.adapter.jdbc.remote.DataSourceFactory
把这个类放在类路径中的jar( 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
- 使用Mockito模拟JdbcTemplate的DataSource
- Wildfly 10无法连接数据源:无效连接
- 如何在spring中覆盖JndiObjectFactoryBean并在java中设置解密密码
- 如何在JBoss中打开的连接池中正确保持数据库连接
- 我应该在应用程序或应用程序服务器中定义数据源吗?
- 如何将JRBeanCollectionDataSource传递给iReport?
- Out容器JNDI数据源
- java.lang.ClassNotFoundException:com.microsoft.jdbc.sqlserver.SQLServerDriver:我加载了正确的驱动程序吗?
- 如何使用一个DataSource以编程方式更改Spring中的数据库?