2012-03-21 3 views
0

分散トランザクションの作業中です。トランザクションマネージャーとしてAtomikosを使用してXAトランザクションを実装しようとしています。私の問題の1つは、Websphere 6.1サーバー上でホストされているDB2データベースから「XADataSource」を取得できることです。私は以下のようにデータソースを取得するためにJNDIルックアップを使用しています :しかし、この検索は次の例外が発生Websphere 6.1でホストされているDB2データベースからXADatasourceを取得する方法

Context ctx=new InitialContext(); 
XADataSource ds = (XADataSource) ctx.lookup(dataSourceName); 

[3/21/12 12:08:47:551 EDT] 00000026 SystemErr  R java.lang.ClassCastException: com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource incompatible with javax.sql.XADataSource 
[3/21/12 12:08:47:551 EDT] 00000026 SystemErr  R  at com.BusinessEntities.JndiConn.<init>(JndiConn.java:21) 
[3/21/12 12:08:47:551 EDT] 00000026 SystemErr  R  at com.Servlet.InitialServlet.doGet(InitialServlet.java:41) 
[3/21/12 12:08:47:551 EDT] 00000026 SystemErr  R  at com.Servlet.InitialServlet.doPost(InitialServlet.java:186) 
[3/21/12 12:08:47:551 EDT] 00000026 SystemErr  R  at javax.servlet.http.HttpServlet.service(HttpServlet.java:763) 
[3/21/12 12:08:47:551 EDT] 00000026 SystemErr  R  at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) 
[3/21/12 12:08:47:551 EDT] 00000026 SystemErr  R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1101) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:569) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3440) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:267) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:815) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1461) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:118) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873) 
[3/21/12 12:08:47:566 EDT] 00000026 SystemErr  R  at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473) 

の属性「DS」は代わりにDataSourceタイプであれば同じことが正常に動作しますXADataSourceのしかし、私はXAConnectionsを取得したいので、XADataSourceが必要です。私はたくさんの検索を試みましたが、このキャスト例外を回避する方法を理解することができません。 私は何をすべきかについての指針は何ですか?

答えて

1

XADataSourceにキャストすることはできません。

XADataSourceと通常のDataSourceの両方をWSJdbcDataSourceとして利用できます。

WSJdbcDataSourceはWSDataSourceを実装し、WSDataSourceはDataSourceを拡張します。

このデータソースをホストする基本JDBCドライバがXA対応の場合、接続はまだXA対応です。

申し訳ありませんXADataSourceを入手する方法を提供することができません。利用できない可能性があります。

Manglu

1

XADataSource/XAConnectionを自分で管理したいのはなぜですか?代わりに、UserTransactionを開始し、通常のDataSourceを取得し、通常のConnectionを取得し、作業を行い、UserTransactionをコミットします。 UserTransactionにより、XAがカバーの下で使用されます。

+0

私はAtomikosのような別のAPIを使用するのではなく、TMを自分自身で使用しようとしています。したがって、XADataSourceが必要です。 DataSourceを使用したUserTransactionは正常に機能しますが、私はthtを実装したいと思いません。 – Andy

+0

その場合、RRAはトランザクションのやりとりを完全に制御できると想定しているため、コンテナ管理のデータソースを確実に使用する方法はないと私は考えています。おそらく、DriverManagerを使用するか、直接DB2クラスと対話する方がよいでしょう。 –

+0

@Andy:実際に達成しようとしていること(帽子はまだWebSphereのトランザクションマネージャーによって提供されていません)? –

関連する問題