2011-12-18 6 views
-2

urlとdriverを指定してDataSourceを初期化する必要があります。 OracleとSQL Serverをサポートするのに十分な汎用性が必要です。両方のための アプリはJBossの提供5.URLとドライバからDataSourceを取得する

上で実行されているサンプル:その簡単やめるよう

<db-connection name="TEST-ORACLE"> 
<url>jdbc:oracle:thin:@test:1521:ins1</url> 
<driver>oracle.jdbc.xa.client.OracleXADataSource</driver> 
<user>user</user> 
<password>{ENCR}oRloKFKlqXs=</password> 
<min-size>5</min-size> 
<max-size>30</max-size> 
<idle-timeout-minutes>1</idle-timeout-minutes> 
</db-connection> 

<db-connections> 
    <db-connection name="TEST-MSSQLSERVER"> 
    <url>jdbc:jtds:sqlserver://server:1433/db;ProgramName=program;SelectMethod=cursor;useLOBs=false</url> 
    <driver>net.sourceforge.jtds.jdbc.Driver</driver> 
    <user>user</user> 
    <password>{ENCR}oRloKFKlqXs=</password> 
    <min-size>40</min-size> 
    <max-size>80</max-size> 
    <idle-timeout-minutes>1</idle-timeout-minutes> 
</db-connection> 

OracleXADataSourceはintefaceをデータソースを実装している...しかし、十分な一般的なものイムわかりません。私は.....それらの接続にmultipile DB接続およびmultipileインスタンス/スキーマを持っている場合

私の現在のコードは次のようになりますことをachiveする方法であるべきだろうか

EDIT

private DataSource getDataSourceForTanent(TenantConfig i_Tenant) { 
     DataSource result = null; 
     ClassLoader loader = DBConnector.class.getClassLoader(); 
     try { 
      Class driverClass = loader.loadClass(i_Tenant.getDriver()); 
      Object driver = driverClass.newInstance(); 
      if(driver instanceof OracleDataSource){ 
       ((OracleDataSource)driver).setURL(i_Tenant.getUrl()); 
       ((OracleDataSource)driver).setUser(i_Tenant.getUser()); 
       ((OracleDataSource)driver).setPassword(i_Tenant.getPassword()); 
       result = (DataSource) driver; 
      } else if(driver instanceof Driver){ 
       Properties prop = new Properties(); 
       prop.put("user", i_Tenant.getUser()); 
       prop.put("password", i_Tenant.getPassword()); 
       prop.put("min-size", i_Tenant.getMinSize()); 
       prop.put("max-size", i_Tenant.getMaxSize()); 
       prop.put("idle-timeout-minutes", i_Tenant.getIdleTimeoutMinute()); 
       Connection con = ((Driver)driver).connect(i_Tenant.getUrl(), prop); 
       if(con != null){ 
        //TODO: SQLServer handling 
       } 
      } 

     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (InstantiationException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return result; 
    } 

TenantConfigは、xmlプロパティを保持するJava Beanです。

Context initContext = new InitialContext(); 
Context envContext = (Context)initContext.lookup("java:/comp/env"); 
DataSource ds = (DataSource)envContext.lookup("jdbc/mydatasource"); 

しかし、あなたのXMLファイルから私はJNDI名が何であるかわからない。ここで

+0

ここでは正確に何を求めていますか? JBossは、JDBCドライバクラスが何であるかを伝えるのであれば、DataSourceを提供する責任があります。何か気にする必要はありません。 –

+0

私は多重接続されたdbを持っており、私はdb接続名を与えられたデータソースを取得する必要があります。そのxmlファイルを使用して、接続されているすべてのdbを構成します。 –

+0

@JBNizet私は私の質問を少しはっきりさせるためにマンネージを願っています –

答えて

1

はJNDI名によってデータソースを取得するための汎用的なコードスニペットです。 XMLの方言は何ですか?

+1

@ノアム:だから何?これがJEEアプリケーションでデータソースを取得する標準的な方法です。 JEEサーバーは、その構成に基づいてDataSourceを返す責任があります。 –

+1

@ Noam:JBossのウェブサイトから実際にコピー貼り付けされています。驚き:これは正しいことであり、まともなウェブサイトはそれをそのように投稿します。 –

+0

@KasperSørensen私が尋ねていたものと、そのコードが私の問題の解決策であることを掲載したコードはちょうどisntなのではない... –

関連する問題