2010-05-03 2 views
1

У меня есть webapp, работающий на сервере Websphere 6.1, который JNDI ищет для источника данных. Это веб-приложение работает нормально, сервер Websphere распознает источник данных реф в web.xml и т.д ..Websphere 6.1, Datasource, два приложения

Теперь мы добавили второй веб-приложение, которое следует использовать этот источник данных с одинаковой конфигурацией, но я Получать 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 env.

Еще одна важная вещь: Это источник данных DB2, который использует jt400.jar - есть некоторые simliar проблемы с драйвером Oracle JDBC и 6.

Может быть, один из вас есть какие-то предложения?

+0

Вам нужно включить трассировку стека, или люди просто будут гадать. –

+0

В дополнение к тому, что упомянуто в bkail, вам также необходимо предоставить топологию. Эти два веб-приложения работают на одном сервере. Является ли это единственным сервером или настройкой ND и т. Д. В стеке, которое вы предоставили, отображается информация из вашего приложения - по адресу java.lang.ClassCastException. (ClassCastException.java:29) at de.ac.action.ServiceAction.execute (ServiceAction.java: 65) Нам нужно знать, есть ли классный класс в DataSource или какой-либо другой компонент/класс. Этот стек не предоставляет никакой такой информации, чтобы люди могли вам помочь. – Manglu

+0

Извините, но: Конечно, есть источник данных, иначе мой вопрос не имеет никакого смысла. Определен один сервер, и на этом сервере должны запускаться два приложения и использовать этот один источник данных. Как уже упоминалось в моем вопросе: приложение одно проверяет источник данных успешно, приложение два бросает мне только это исключение. Связи ресурсов JDBC точно такие же, как и JNDI lookupname. – onigunn

ответ

0

Источники данных могут быть определены в нескольких различных областях, которые влияют на их видимость. Если вы определили его на уровне сервера, который запускает первое приложение, он не будет виден никому за пределами этого сервера. Я использую перегруженное определение сервера «WebSphere» в том смысле, что большинство магазинов создают отдельные серверы для каждого приложения, поэтому они запускаются в своей собственной JVM. Если вы хотите, чтобы два приложения имели видимость для одного и того же источника данных, определите его на более высоком уровне, который является общим для обоих приложений.

+0

У источника данных есть область для сервера 1, который является единственным сервером там. На этом сервере развертываются два приложения. – onigunn

0

Спасибо за обновленное сообщение. Я вижу, что JNDI выглядит успешно. Я также вижу, что тип, возвращаемый в WSJdbcDataSource, который вставляет WSDataSource (который, в свою очередь, распространяется из javax.sql.DataSource). Поэтому я не вижу здесь ничего плохого.

Теперь вы можете распечатать объект con после строки, которая его отличает. (будет последней строкой блока try).

Стек, который вы предоставили, показан как CCE @ на de.ac.action.MAction.execute (MAction.java:77). Это последняя строка вашего блока try?

Последнее сообщение от нулевой (в том, что e.getCause())

также сделать проверку вменяемости на вашем импорте DataSource, чтобы убедиться, что он действительно javax.sql.DataSource

PS: Я добавила ту же самую информацию, что и вчера, но почему-то она всегда скрыта, и вам нужно нажать на комментарий, чтобы увидеть это.

Смежные вопросы