2010-05-03 43 views
1

我有一個webapp運行在Websphere 6.1服務器上,JNDI查找數據源。這個Web應用程序運行正常,在WebSphere服務器識別在web.xml等數據源裁判..Websphere 6.1,Datasource,兩個應用程序

現在,我們添加了應該使用與數據源配置相同,但 第二web應用我收到一個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 [email protected] 
[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驅動程序的一些simliar問題,併爲6

也許你們中的一個具有一些建議嗎?

+0

你需要包含堆棧跟蹤或人們只是猜測。 – 2010-05-03 14:44:09

+0

除了bkail提到的之外,還需要提供拓撲。這兩個Web應用程序是否在同一臺服務器上運行。這是單個服務器還是ND設置等。 您提供的堆棧顯示來自應用程序的信息 - 位於java.lang.ClassCastException。 (ServiceAction。)上的(ClassCastException.java:29) (位於de.ac.action.ServiceAction.execute(ServiceAction。java:65) 我們需要知道classcast是否在DataSource或某個其他組件/類上。此堆棧不提供任何此類信息供人們幫助您。 – Manglu 2010-05-04 02:22:50

+0

對不起,但:當然有一個DataSource的預期,否則我的問題沒有任何意義。 定義了一臺服務器,並在該服務器上運行兩個應用程序並共享這一個數據源。正如我的問題中所提到的:應用程序一成功查找數據源,應用程序二拋出我這個異常。 JDBC資源綁定完全相同,以及JNDI查找名稱。 – onigunn 2010-05-04 06:49:22

回答

0

數據源可能定義在幾個影響其可見性的不同範圍。如果您在運行第一個應用程序的服務器級別定義它,則該服務器以外的任何內容都將無法看到它。我使用的是WebSphere的重載定義「服務器」,因爲大多數商店爲每個應用程序創建單獨的服務器,以便它們在自己的JVM中運行。如果您希望兩個應用程序能夠看到相同的數據源,請在兩個應用程序共有的較高級別上對其進行定義。

+0

數據源具有server1的範圍,server1是唯一的服務器。在此服務器中部署了兩個應用程序。 – onigunn 2010-05-04 06:50:49

0

感謝您的更新後的帖子。我可以看到JNDI查找成功。我也看到WSJdbcDataSource返回的類型包含WSDataSource(它繼而從javax.sql.DataSource擴展),所以我在這裏沒有看到任何錯誤。

現在,您可以在投射它的行之後打印出con對象。 (將會是你的try塊的最後一行)。

您提供的堆棧在de.ac.action.MAction.execute(MAction.java:77)處顯示爲CCE @。這是你的try塊的最後一行嗎?

空的最後消息(就是e.getCause())

也做了仔細的檢查你的數據源的進口,以確保它確實是javax.sql.DataSource的

PS:我添加了與昨天評論相同的信息,但不知怎的,它總是隱藏,你需要點擊顯示評論才能看到。