2013-03-19 21 views
3

我現在面臨使用JBoss EAP 6.0數據源在JBoss中沒有選擇正確的類

的問題很奇怪的問題,基本上我已經配置,在standalone.xml數據源

  <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> 

這是的驅動程序的配置,我已經安裝了相同的模塊:

  <drivers> 
       <driver name="h2" module="com.h2database.h2"> 
        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> 
       </driver> 
       <driver name="sqlserver-jdbc" module="com.himanshu.jdbc"> 
        <datasource-class>com.himanshu.jdbcdriver.datasource.DataSource</datasource-class> 
       </driver> 
      </drivers> 

com.himanshu.jdbcdriver.datasource.DataSource類基本上延伸com.microsoft.sqlserver.jdbc.SQL ServerDataSource:

但是當我運行測試時,我可以得出結論,它不使用我提到的數據源類。由於這兩個方法,

@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; 
} 

所以理想的連接應返回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> 

UPDATE:

它原來是在JBoss中的錯誤: https://issues.jboss.org/browse/JBJCA-1014

回答

0

Jboss的實例化數據源是由自己的所使用的類加載器不知道您的應用程序類,這就是爲什麼您需要在配置驅動程序時在jboss模塊目錄中提供驅動程序實現的原因。
因此,您的類對jboss不可見,並且在加載數據源時無法使用它。除非將其添加到位於jboss模塊目錄中的特定jar中

請參閱http://magnus-k-karlsson.blogspot.fr/2012/08/how-to-install-mysql-datasource-on.html。從jboss中的模塊配置數據源。關心命名。

+0

如果你看看這裏的配置,我安裝它,因爲只有一個模塊: <驅動程序名稱=「sqlserver的-JDBC」模塊=「com.himanshu.jdbc」> <數據源類> com.himanshu .jdbcdriver.datasource.DataSource 我已經將它安裝爲模塊。我甚至能夠從數據庫查詢,但它使用SQLJDBC4.jar的類,我已經做了擴展。 – 2013-03-19 09:25:40

+0

你提供了你的類打包在$ JBOSS_HOME/modules/com/himanshu/jdbc中的jar嗎?原始驅動程序impl也是如此?您是否在module.xml中添加了對原始驅動程序的顯式依賴關係?你能提供這個文件內容嗎? – Gab 2013-03-19 09:50:29

+0

其他解決方法是通過在裏面添加你的類來修改原來的驅動jar,避免添加2個模塊。無論如何,這有點髒。 – Gab 2013-03-19 09:52:23