2010-05-03 4 views
1

데이터 소스를 JNDI에서 조회하는 Websphere 6.1 서버에서 실행되는 webapp가 있습니다. 이 웹 애플리케이션은 잘 실행, WebSphere 서버는 Websphere 6.1, Datasource, 두 개의 앱

이제 우리는 내가 액세스하려고 할 때 나는 ClassCastException을받을 동일한 구성하지만 와이 데이터 소스를 사용한다 두 번째 웹 애플리케이션을 추가 ...은 web.xml 등의 데이터 소스 심판을 인식 데이터 소스.

그래서

[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 

인쇄 나는이 로그 오류에 내 코드

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()); 
    } 

이 점을 넣어 한 문제를 찾으려면, 내가 클래스 com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource의 객체 만 DataSource 원인을 주조를 얻을 수 ClassCastException?

다른 애플 리케이션에서이 애플 리케이션을 시험해 보았는데, WAS 6.1을 새로 설치하면 작동한다. 그것은 또한 바람둥이 환경에서 작동합니다.

한 가지 더 중요한 것은 : 그것은 jt400.jar를 사용하는 DB2 데이터 소스입니다 - 거기 오라클 JDBC 드라이버 일부를 닮아 문제가 있으며

6. 아마 당신의 일이 몇 가지 제안을 가지고 있었나요?

+0

스택 추적을 포함시켜야하거나 사람들이 추측 할 수 있습니다. –

+0

bkail이 언급 한 것 외에도 토폴로지를 제공해야합니다. 이 두 웹 응용 프로그램이 동일한 서버에서 실행되고 있습니까? 이것은 단일 서버 또는 ND 설정입니까? 제공된 스택은 응용 프로그램의 정보 (예 : )를 java.lang.ClassCastException에 표시합니다. (ServiceAction.java : 65) 클래스 캐스트가 DataSource에 있는지 또는 다른 구성 요소/클래스에 있는지 알아야합니다. 이 스택은 사람들에게 도움이되는 그러한 정보를 제공하지 않습니다. – Manglu

+0

실례지만 : 확실하게 DataSource가 있어야합니다. 그렇지 않으면 제 질문이 의미가 없습니다. 하나의 서버가 정의되어 있으며이 서버에는 두 개의 앱이 실행되고이 하나의 데이터 소스를 공유해야합니다. 내 질문에 언급 한 바와 같이 : 응용 프로그램 하나는 데이터 소스를 성공적으로 조회하고 응용 프로그램 2는이 예외 만받습니다. JDBC 자원 바인딩은 정확히 동일하며 JNDI 조회 이름도 마찬가지입니다. – onigunn

답변

0

데이터 소스는 가시성에 영향을주는 여러 다른 범위에서 정의 될 수 있습니다. 첫 번째 앱을 실행하는 서버 수준에서 정의한 경우 해당 서버 외부의 항목에는 표시되지 않습니다. 나는 대부분의 상점이 각 애플리케이션마다 별도의 서버를 만들어서 자신의 JVM에서 실행된다는 의미에서 '서버'라는 WebSphere의 과부하 된 정의를 사용하고 있습니다. 두 개의 앱이 동일한 데이터 소스에 대한 가시성을 갖도록하려면 두 앱에 공통적으로 높은 수준으로 정의하십시오.

+0

데이터 소스에는 server1의 범위가 있으며, 거기에는 유일한 서버입니다. 이 서버에는 두 개의 앱이 배포됩니다. – onigunn

0

업데이트 된 게시물 주셔서 감사합니다. JNDI 조회가 성공적이라는 것을 알 수 있습니다. 또한 형식 WSDataSource (차례로에서 확장하는 javax.sql.DataSource) 의미하는 WSJdbcDataSource에서 반환되는 참조하십시오 그래서 여기에 아무것도 잘못 표시되지 않습니다.

이제 con 오브젝트를 변환 한 행 다음에 출력 할 수 있습니다. (당신의 try 블록의 마지막 줄이 될 것입니다).

제공된 스택은 CCE @ de.ac.action.MAction.execute (MAction.java:77)에 표시됩니다. 이 부분이 try 블록의 마지막 줄입니까?

널의 마지막 메시지는 또한 데이터 소스의 가져 오기에 전성 검사를 할

가 실제로는 javax.sql.DataSource

PS 보장하기 위해합니다 (e.getCause은()이다) : 나는 어제 코멘트와 동일한 정보를 추가했지만 어떻게 든 그것은 항상 숨겨져 있으며 당신은 그것을보기 위해 쇼 쇼 코멘트를 클릭해야합니다.

관련 문제