繁体   English   中英

Websphere 6.1,数据源,两个应用程序

[英]Websphere 6.1, Datasource, two apps

我有一个在Websphere 6.1 Server上运行的webapp,该JNDI查找数据源。 该Web应用程序运行良好,Websphere服务器可以识别web.xml等中的数据源引用。

现在,我们添加了第二个webapp,该webapp应该以相同的配置使用此数据源,但是当我尝试访问数据源时,我收到ClassCastException

为了找到问题,我已将其放入代码中

try{
        InitialContext ctx = new InitialContext();  
        Object obj = ctx.lookup(N2WebConstants.datasourceJNDI);
        System.err.println(obj.toString());
        System.err.println(obj.getClass());
        con = ((DataSource) obj).getConnection();
    }catch (Exception e){
        System.err.println(e);
        System.err.println(e.getCause());
    }

在错误日志中打印

[5/10/10 9:45:13:531 CEST] 00000176 SystemErr     R com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource@e9240c0
[5/10/10 9:45:13:532 CEST] 00000176 SystemErr     R class com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource
[5/10/10 9:45:13:539 CEST] 00000176 SystemErr     R java.lang.ClassCastException
    at java.lang.Throwable.<init>(Throwable.java:181)
    at java.lang.Exception.<init>(Exception.java:29)
    at java.lang.RuntimeException.<init>(RuntimeException.java:32)
    at java.lang.ClassCastException.<init>(ClassCastException.java:29)
    at de.ac.action.MAction.execute(MAction.java:77)
    at de.ac.web.GetTheView.doService(GetTheView.java:88)
    at de.ac.web.GetTheView.doGet(GetTheView.java:60)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1096)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:570)
    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3444)
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:267)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:815)
    at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1466)
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:119)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:267)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager.requestComplete(WorkQueueManager.java:556)
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager.attemptIO(WorkQueueManager.java:583)
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager.workerRun(WorkQueueManager.java:979)
    at com.ibm.ws.tcp.channel.impl.WorkQueueManager$Worker.run(WorkQueueManager.java:1064)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1462)

[5/10/10 9:45:13:539 CEST] 00000176 SystemErr     R null

因此,我得到了com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource类的对象,但是强制转换DataSource导致ClassCastException吗?

我在另一台服务器上尝试了该应用程序,WAS 6.1全新安装,可以正常运行。 它也可以在tomcat环境中使用。

更重要的一件事:这是一个使用jt400.jar的DB2数据源-Oracle JDBC驱动程序和WAS 6存在一些类似的问题。

也许你们当中有一些建议?

可以在几个影响其可见性的范围内定义数据源。 如果您在运行第一个应用程序的服务器级别上定义了它,则该服务器之外的任何对象都看不到它。 我使用WebSphere的“服务器”重载定义,因为大多数商店会为每个应用程序创建单独的服务器,以便它们在自己的JVM中运行。 如果要使两个应用程序对同一数据源具有可见性,请在两个应用程序共有的更高级别上对其进行定义。

感谢您的更新。 我可以看到JNDI查找成功。 我还看到WSJdbcDataSource返回的类型暗示了WSDataSource(反过来又从javax.sql.DataSource扩展了),所以我在这里看不到任何错误。

现在,您可以在强制转换的行之后打印出con对象。 (将是您的try块的最后一行)。

您提供的堆栈在de.ac.action.MAction.execute(MAction.java:77)上显示为CCE @。 这是您的try块的最后一行吗?

最后一条消息为null(是e.getCause())

还要对导入的DataSource进行完整性检查,以确保它确实是javax.sql.DataSource。

PS:昨天我添加了与评论相同的信息,但总是以某种方式隐藏了该信息,您需要单击显示评论才能看到该信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM