Как получить XADatasource из базы данных DB2, размещенной на Websphere 6.1 - PullRequest
0 голосов
/ 21 марта 2012

Я работаю над распределенными транзакциями.Я пытаюсь реализовать транзакцию XA, используя Atomikos в качестве менеджера транзакций.Одной из моих проблем является возможность получить «XADataSource» из базы данных DB2, размещенной на сервере Websphere 6.1.Я использую поиск jndi для получения источника данных, как показано ниже:

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.Я много пробовал искать, но не могу понять, как избежать этого исключения.Любые указатели на то, что я должен делать по-другому?

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Вы не сможете привести его к XADataSource.

И XADataSource, и обычный DataSource доступны для вас как WSJdbcDataSource.

WSJdbcDataSource реализует WSDataSource, который, в свою очередь, расширяет DataSource.

У вашего соединения по-прежнему включено XA, если базовый драйвер JDBC, на котором размещен этот источник данных, включен XA.

Извините, я не могу предоставить вам способы получения XADataSource, поскольку он, вероятно, недоступен.

Manglu

1 голос
/ 21 марта 2012

Почему вы хотите самостоятельно управлять XADataSource / XAConnection?Вместо этого начните UserTransaction, получите обычный DataSource, получите нормальное Connection, выполните свою работу, а затем зафиксируйте UserTransaction.UserTransaction приведет к тому, что XA будет использоваться под прикрытием.

...