Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Websphere 6.1,数据源,两个应用程序_Java_Websphere_Datasource - Fatal编程技术网

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

Java Websphere 6.1,数据源,两个应用程序,java,websphere,datasource,Java,Websphere,Datasource,我有一个运行在WebSphere6.1服务器上的webapp,JNDI会查找数据源。这个webapp运行良好,Websphere服务器识别web.xml等文件中的datasource ref 现在我们添加了第二个webapp,它应该使用相同配置的数据源,但是 当我尝试访问数据源时,我收到一个ClassCastException 为了找到问题所在,我已将其放入我的代码中 try{ InitialContext ctx = new InitialContext();

我有一个运行在WebSphere6.1服务器上的webapp,JNDI会查找数据源。这个webapp运行良好,Websphere服务器识别web.xml等文件中的datasource ref

现在我们添加了第二个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

我在另一台服务器上试用了这个应用程序,它是6.1新安装的,可以正常工作。它也可以在tomcat环境中工作

还有一件更重要的事情:它是一个使用jt400.jar的DB2数据源——Oracle JDBC驱动程序和WAS6也存在一些类似的问题


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

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

感谢更新的帖子。我可以看到JNDI查找是成功的。我还看到了WSJdbcDataSource中返回的类型,它实现了WSDataSource,WSDataSource又从javax.sql.DataSource扩展而来,所以我在这里没有看到任何错误

现在,您可以在投射con对象的行之后打印它了。将是您的try块的最后一行

您提供的堆栈在de.ac.action.MAction.executeAction.java:77处显示为CCE@。这是你试块的最后一行吗

null的最后一条消息是e.getCause

还要对数据源的导入进行健全性检查,以确保它确实是javax.sql.DataSource


PS:我昨天添加了与comment相同的信息,但不知何故它总是隐藏的,你需要单击show comment来查看。

你需要包括堆栈跟踪,否则人们只会猜测。除了Bmail提到的内容,你还需要提供拓扑。这两个web应用在同一台服务器上运行。这是一台服务器还是一个ND设置等。您提供的堆栈显示了来自应用程序的信息-位于java.lang.ClassCastException.ClassCastException.java:29位于de.ac.action.ServiceAction.executeServiceAction.java:65我们需要知道classcast是否位于数据源或其他组件/类。这个堆栈不提供任何这样的信息给帮助你的人。对不起,但是:确保有一个预期的数据源,否则我的问题就没有任何意义了。定义了一台服务器,在此服务器上,两个应用程序应运行并共享这一数据源。正如我在问题中提到的:应用程序1成功地查找了数据源,应用程序2抛出了这个异常。JDBC资源绑定和JNDI lookupname完全相同。您提到过:当我调用JNDI查找时,NULL对象JNDI查找的结果应该是引用或NameNotFoundException。它不应该返回空值。我也不明白null如何导致ClassCastException。我能理解NPE,但不能理解ClassCastException。嗨,Manglu,我更新了我的帖子,也许你想看看这个。数据源的作用域是server1,它是那里唯一的服务器。在此服务器中部署了两个应用程序。