Java JBoss中的数据源未选择正确的类
我在使用JBoss EAP 6.0时遇到了一个非常奇怪的问题 问题基本上是我已经在standalone.xml中配置了一个数据源Java JBoss中的数据源未选择正确的类,java,jboss,jboss6.x,Java,Jboss,Jboss6.x,我在使用JBoss EAP 6.0时遇到了一个非常奇怪的问题 问题基本上是我已经在standalone.xml中配置了一个数据源 <datasource jndi-name="java:jboss/jdbc/ejb/testconn" pool-name="test-cluster-Pool" enabled="true" use-java-context="true"> <connection-url>jdbc:s
<datasource jndi-name="java:jboss/jdbc/ejb/testconn" pool-name="test-cluster-Pool" enabled="true" use-java-context="true">
<connection-url>jdbc:sqlserver://127.0.0.1:1433;databaseName=testdb;</connection-url>
<driver>sqlserver-jdbc</driver>
<pool>
<min-pool-size>10</min-pool-size>
<max-pool-size>100</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
<statement>
<prepared-statement-cache-size>32</prepared-statement-cache-size>
<share-prepared-statements>true</share-prepared-statements>
</statement>
</datasource>
因此理想情况下,连接应该返回null,但是连接既没有返回null,也没有打印这些SOP,因此无法理解我到底错在哪里
module.xml类似于以下内容:
<module xmlns="urn:jboss:module:1.1" name="com.himanshu.jdbc">
<resources>
<resource-root path="custom-datasource-jar-with-dependencies.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.servlet.api" optional="true"/>
</dependencies>
</module>
更新:
这是JBOSS中的一个bug:
Jboss InstanceBy是自己的数据源,使用的类加载器不知道您的应用程序类,这就是为什么在配置驱动程序时需要在Jboss模块目录中提供驱动程序实现。
因此Jboss看不到您的类,并且在加载数据源时无法使用它。除非您将其添加到jboss模块目录中的特定jar中
看。从jboss中的模块配置数据源。注意命名。如果您查看此处的配置,我只将其作为模块安装:com.himanshu.jdbcdriver.datasource.datasource我已将其作为模块安装。我甚至可以从DB进行查询,但它使用的是SQLJDBC4.jar的类,我已经对这些类进行了扩展。您是否在$JBOSS_HOME/modules/com/himanshu/jdbc中提供了打包在jar中的类?与原始驱动程序impl相同?是否在module.xml中添加了对原始驱动程序的显式依赖项?你能提供这个文件的内容吗?另一个解决方案是通过在里面添加你的类来修改原来的驱动程序jar,避免添加2个模块。不管怎么说,这有点脏。是的,我实际做的是使用maven目标导入sqljdbc4.jar的所有类。因此,在我的jar中,我有我的自定义数据源以及SQLJDBC4.jar的所有类,文件中的META-INF/service/java.sql.driver中也提到了驱动程序类名。如果你愿意,我可以共享源代码,请告知。我没有时间设置环境(当前为@work),只需发布问题中的module.xml内容即可
@Override
public Connection getConnection() throws SQLServerException {
System.out.println("TRYING TO GET CONNECTION");
return null;
}
@Override
public Connection getConnection(String arg0, String arg1)
throws SQLServerException {
System.out.println("TRYING TO GET CONNECTION");
return null;
}
<module xmlns="urn:jboss:module:1.1" name="com.himanshu.jdbc">
<resources>
<resource-root path="custom-datasource-jar-with-dependencies.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.servlet.api" optional="true"/>
</dependencies>
</module>