Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Websphere клиент


Автор: KostenkoSergey 16.4.2007, 10:49
Как можно вызвать EJB, развёрнутый на WebSphere AppServer с другого сервера приложений (ну или контейнера для сервлетов) ?


Пробую , для начала, по аналогии с другими серверами, написать просто майновый класс, что-то типа:
Код

import java.util.Hashtable;
import javax.naming.*;
public class TestClinet {
  public static void main(String[] args) throws Exception {
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
    env.put (Context.PROVIDER_URL, "localhost");
    InitialContext icontext = new InitialContext(env);
}
}


а в ответ :
Код

java.lang.NoClassDefFoundError: com/ibm/CORBA/iiop/ObjectURL
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:141)
    at com.ibm.websphere.naming.WsnInitialContextFactory.init_implClassCtor(WsnInitialContextFactory.java:172)
    at com.ibm.websphere.naming.WsnInitialContextFactory.getInitialContext(WsnInitialContextFactory.java:112)
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243)
    at javax.naming.InitialContext.init(InitialContext.java:219)
    at javax.naming.InitialContext.<init>(InitialContext.java:195)


Библиотеки WebSphere 6.0. Client подключил  smile 

Автор: KostenkoSergey 16.4.2007, 11:05
Прошу прощения - поспешил с вопросом.
Нужно включить  ibmorb.jar в classpath, из ibm jdk (i.e. inside jre\lib folder).

Автор: y3u 16.4.2007, 11:07
ну написано же, нету классика, проверь есть он или нету его...

Автор: KostenkoSergey 16.4.2007, 11:36
Цитата(y3u @  16.4.2007,  11:07 Найти цитируемый пост)
ну написано же, нету классика, проверь есть он или нету его...


да.. эт я уже понял smile Спасибо.
Пошёл дальше:
Код

 Object remoteObj =  icontext.lookup("ejb/io/ExHome");


И тут же напоролся на :
Код

javax.naming.NamingException: Failed to initialize the ORB [Root exception is java.lang.ClassCastException]
    at com.ibm.ws.naming.util.Helpers.getOrb(Helpers.java:294)
    at com.ibm.ws.naming.util.WsnInitCtxFactory.getInitialContextInternal(WsnInitCtxFactory.java:373)
    at com.ibm.ws.naming.util.WsnInitCtx.getContext(WsnInitCtx.java:112)
    at com.ibm.ws.naming.util.WsnInitCtx.getContextIfNull(WsnInitCtx.java:422)
    at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:143)
    at javax.naming.InitialContext.lookup(InitialContext.java:347)
    at TestClinet.main(TestClinet.java:20)
Caused by: java.lang.ClassCastException
    at com.ibm.ws.orb.GlobalORBFactory.init(GlobalORBFactory.java:82)
    at com.ibm.ejs.oa.EJSORBImpl.initializeORB(EJSORBImpl.java:174)
    at com.ibm.ejs.oa.EJSClientORBImpl.<init>(EJSClientORBImpl.java:97)
    at com.ibm.ejs.oa.EJSClientORBImpl.<init>(EJSClientORBImpl.java:73)
    at com.ibm.ejs.oa.EJSORB.init(EJSORB.java:386)
    at com.ibm.ws.naming.util.Helpers.getOrb(Helpers.java:285)
    ... 6 more
Exception in thread "main" 

Автор: y3u 16.4.2007, 12:10
ну пройдись по стеку вызовов, посмотри где что к чему кастится и в дебаггере глянь какие реально инстансы достаются откуда... такие ж эксцепшены надо на отладке смотреть, больше ни чем помочь не могу...

Автор: KostenkoSergey 16.4.2007, 12:25
Похоже дело в том, что  я пытоаюсь получить доступ по JNDI на Websphere 6 из Sun JRE,  попробовал из-под ibm-овской - прошло.
Но получить доступ нужно мименно из под Sun JRE ...
Вот тебе  и портабельность :(

2y3u - спасибо за участие, но про "пройтись по стеку" недопонял .. стек вызовов привлекших к ошибке я привёл. Что ещё мне даст  дебаг ?

Автор: y3u 16.4.2007, 12:31
на дебаге можно посмотреть на класс каст эксцепшен, который тебе все валит, можно посмотреть какой инстанс нужен и какой инстанс реально приходит и сделать вывод почему не кастится

Автор: chief39 16.4.2007, 13:09
Цитата(KostenkoSergey @  16.4.2007,  12:25 Найти цитируемый пост)
Похоже дело в том, что  я пытоаюсь получить доступ по JNDI на Websphere 6 из Sun JRE,  попробовал из-под ibm-овской - прошло.
Но получить доступ нужно мименно из под Sun JRE ...
Вот тебе  и портабельность :(

Закинь необходимые ибмовские либы в сановскую жре в эндорсед

Автор: KostenkoSergey 16.4.2007, 15:11
Вариант с endorsed  не катит, пробовал.
Если патчить ibm-овскими либами оно просит пропатчить ещё и core.jar, но в этом случае:

Код

Error occurred during initialization of VM
java.lang.NoSuchMethodException: java.lang.ClassLoader.addClass

Автор: w1nd 16.4.2007, 16:07
О-о... всё не так просто, как кажется. Мне для того, чтобы подключится к удаленной вебсфере из sun jvm потребовалось:

Положить в системное свойство com.ibm.CORBA.ConfigURL урл к конфигурационному файлу, содержащему следующее:

Код

com.ibm.CORBA.securityEnabled=true
com.ibm.CORBA.authenticationTarget=BasicAuth
com.ibm.CORBA.authenticationRetryEnabled=true
com.ibm.CORBA.authenticationRetryCount=3
com.ibm.CORBA.validateBasicAuth=true
com.ibm.CORBA.securityServerHost=
com.ibm.CORBA.securityServerPort=
com.ibm.CORBA.loginTimeout=300
com.ibm.CORBA.loginSource=prompt
com.ibm.CORBA.loginUserid=
com.ibm.CORBA.loginPassword=
com.ibm.CSI.performStateful=true
com.ibm.CSI.performClientAuthenticationRequired=false
com.ibm.CSI.performClientAuthenticationSupported=true
com.ibm.CSI.performTLClientAuthenticationRequired=false
com.ibm.CSI.performTLClientAuthenticationSupported=false
com.ibm.CSI.performTransportAssocSSLTLSRequired=false
com.ibm.CSI.performTransportAssocSSLTLSSupported=false
com.ibm.CSI.performMessageIntegrityRequired=true
com.ibm.CSI.performMessageIntegritySupported=true
com.ibm.CSI.performMessageConfidentialityRequired=false
com.ibm.CSI.performMessageConfidentialitySupported=true
com.ibm.ssl.alias=DefaultSSLSettings
com.ibm.CORBA.requestTimeout=180


Также установить системные свойства:

org.omg.CORBA.ORBClass = com.ibm.CORBA.iiop.ORB
org.omg.CORBA.ORBSingletonClass = com.ibm.rmi.corba.ORBSingleton
javax.rmi.CORBA.StubClass = com.ibm.rmi.javax.rmi.CORBA.StubDelegateImpl
javax.rmi.CORBA.PortableRemoteObjectClass = com.ibm.rmi.javax.rmi.PortableRemoteObject
javax.rmi.CORBA.UtilClass = com.ibm.ws.orb.WSUtilDelegateImpl
com.ibm.CORBA.ORBPluginClass.com.ibm.ws.wlm.client.WLMClient = 
com.ibm.CORBA.ORBPluginClass.com.ibm.ws.orbimpl.transport.WSTransport = 
com.ibm.CORBA.ORBPluginClass.com.ibm.ws.orbimpl.WSORBPropertyManager =
com.ibm.CORBA.ORBPluginClass.com.ibm.ISecurityUtilityImpl.SecurityPropertyManager = 
com.ibm.CORBA.ORBPluginClass.com.ibm.ws.orb.WSSubcontractInitImpl = 
org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ws.Transaction.JTS.TxInterceptorInitializer = 
org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ejs.ras.RasContextSupport = 
org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ISecurityLocalObjectBaseL13Impl.ClientRIWrapper = 
org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ws.activity.remote.cos.ActivityServiceClientInterceptor = 
org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ISecurityLocalObjectBaseL13Impl.CSIClientRI =  
org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.debug.olt.ivbtrjrt.OLT_RI = 
org.omg.PortableInterceptor.ORBInitializerClass.com.ibm.ws.wlm.client.WLMClientInitializer =
com.ibm.ws.orb.transport.ConnectionInterceptorName = com.ibm.ISecurityLocalObjectBaseL13Impl.SecurityConnectionInterceptor
com.ibm.ws.orb.transport.WSSSLClientSocketFactoryName = com.ibm.ws.security.orbssl.WSSSLClientSocketFactoryImpl
com.ibm.CORBA.enableLocateRequest = true
com.ibm.CORBA.ORBCharEncoding = UTF8
com.ibm.CORBA.ForceTunnel = never
com.ibm.CORBA.TransportMode = Pluggable

В класс-путь поместить:

bootstrap.jar
com.ibm.ws.runtime_6.1.0.jar
com.ibm.ws.sib.server_2.0.0.jar
com.ibm.ws.sib.utils_2.0.0.jar
com.ibm.ws.webservices.thinclient_6.1.0.jar
ecore.jar
ecutils.jar
ffdc.jar
ibmorb.jar
iwsorbutil.jar
lmproxy.jar
marshall.jar
properties.jar
querybean.jar
utils.jar
wsexception.jar
ws_runtime.jar
xml.jar



Автор: KostenkoSergey 16.4.2007, 16:47
Цитата(w1nd @  16.4.2007,  16:07 Найти цитируемый пост)
О-о... всё не так просто, как кажется. Итак, для того, чтобы подключится к удаленной вебсфере из sun jvm нужно


 smile  Ну ни фига себе !!!!!!!  Откуда ты это узнал ? smile

Спасибо, сичас буду пробовать.. получается дело не в патчах к Sun JRE, а в  настройках WS ?

 
1. У меня sas.client.props расположен в \was\profiles\AppSrv01\properties\  - это он? Можешь поподробнее, где этот урл писать и что за формат конфига ?

Автор: w1nd 16.4.2007, 17:02
Цитата(KostenkoSergey @  16.4.2007,  16:47 Найти цитируемый пост)
Откуда ты это узнал?

Узнал это не я, а мой коллега, в результате долгих попыток и поисков. Я теперь этим пользуюсь smile 

Цитата(KostenkoSergey @  16.4.2007,  16:47 Найти цитируемый пост)
У меня sas.client.props расположен в \was\profiles\AppSrv01\properties\  - это он? Можешь поподробнее, где этот урл писать и что за формат конфига?

Формат конфига - копи-паст с моего сообщения. Урл писать в системное свойство с названием "com.ibm.CORBA.ConfigURL". Конечно, кое-какое настройки, возможно, вам не подойдут, но дальше уж разберётесь.

Автор: KostenkoSergey 16.4.2007, 17:47
У меня IBM WebSphere Application Server, 6.0.0.0
Я что то нигде не могу найти скледующие файлы:
com.ibm.ws.runtime_6.0.0.jar
com.ibm.ws.sib.server_2.0.0.jar
com.ibm.ws.sib.utils_2.0.0.jar
com.ibm.ws.webservices.thinclient_6.0.0.jar

 smile 

Автор: KostenkoSergey 17.4.2007, 10:38
w1nd, а вы точно не плугабили жре от сан ?
Я вот тут посмотрел [http://www-1.ibm.com/support/docview.wss?rs=180&uid=swg27007298]
Так, если правильно понял - то для Sun 32-bit Java 2 SDK, v 1.4.2_05 какой-то Pluggable Application client должен быть ...

И ещё возвращаясь к твоему совету "Также установить системные свойства:" - это где надо было сделать ? Может я не туда их вписал :(

Автор: KostenkoSergey 17.4.2007, 16:15
Есть небольшой сдвиг.
В дистрибутиве с WS ND есть AppClient, после его инсталяции обнаружил следующие библиотеки: ibmext.jar, ibmorb.jar, ibmorbapi.jar, после того как пропатчил ими Sun JRE  endorsed Standalone приложение заработало, а вот сервер по прежнему возвращает ошибку :(

Скорее всего - это из-за того, что клиент кастит com.ibm.websphere.naming.WsnInitialContextFactory на com.sun.corba.se.impl.orb.ORBImpl, а сервер в моём случае на сom.inprise.vbroker.orb.ORB...  smile 

и шо его блин делать  smile 



Автор: chief39 17.4.2007, 19:16
Тих, не лупи так башкой апстену, соседи сбегутся smile


Цитата(KostenkoSergey @  17.4.2007,  16:15 Найти цитируемый пост)
В дистрибутиве с WS ND есть AppClient, после его инсталяции обнаружил следующие библиотеки: ibmext.jar, ibmorb.jar, ibmorbapi.jar, 

Клиент, гришь, въебсферовски?

И он же кастит въебсферовски контекстфэктори на орбимпл?
Цитата(KostenkoSergey @  17.4.2007,  16:15 Найти цитируемый пост)
Скорее всего - это из-за того, что клиент кастит com.ibm.websphere.naming.WsnInitialContextFactory на com.sun.corba.se.impl.orb.ORBImpl, а сервер в моём случае на сom.inprise.vbroker.orb.ORB...


А у тебя вылазят бесовские уши, так?
Попробуй поглядеть в джариках въебсферовского клиента их реализацию контекста. И попробуй явно указать этот класс при 
Цитата(KostenkoSergey @  16.4.2007,  10:49 Найти цитируемый пост)
InitialContext icontext = new InitialContext(env);
.
Типа org.ws.bla-bla.our.great.mega.Context вместо InitialContext

Автор: KostenkoSergey 17.4.2007, 20:14
Цитата(chief39 @  17.4.2007,  19:16 Найти цитируемый пост)
А у тебя вылазят бесовские уши, так?


ну не совсем бесовские ... 

Код

2007-04-17 20:12:30,593 ERROR  - javax.naming.NamingException: Failed to initialize the ORB [Root exception is java.lang.ClassCastExcept
ion: com.inprise.vbroker.orb.ORB]
2007-04-17 20:12:30,593 ERROR  -        at com.ibm.ws.naming.util.Helpers.getOrb(Helpers.java:294)
2007-04-17 20:12:30,593 ERROR  -        at com.ibm.ws.naming.util.WsnInitCtxFactory.getInitialContextInternal(WsnInitCtxFactory.java:373
)
2007-04-17 20:12:30,593 ERROR  -        at com.ibm.ws.naming.util.WsnInitCtx.getContext(WsnInitCtx.java:112)
2007-04-17 20:12:30,593 ERROR  -        at com.ibm.ws.naming.util.WsnInitCtx.getContextIfNull(WsnInitCtx.java:422)
2007-04-17 20:12:30,593 ERROR  -        at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:143)
2007-04-17 20:12:30,593 ERROR  -        at javax.naming.InitialContext.lookup(InitialContext.java:351)


я так понял этот самый орб om.ibm.ws.naming.util.Helpers.getOrb просто не кастится на com.inprise.vbroker.orb.ORB толи из-за различий в ибмовских и сановских интерфейсах, толи исчё какогото... вообчем полная ...

Автор: KostenkoSergey 18.4.2007, 12:35
Наконец-то удалось победить lockup:  smile 
Оказываеццо, через CORBA object URL можно обращаться к WS, минуя ибмовскую реализацию jndi.
Пробовал через borlandовскую, прокатило :

Код

      Hashtable env = new Hashtable();
      //env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
      env.put(Context.INITIAL_CONTEXT_FACTORY, "com.inprise.j2ee.jndi.CtxFactory");
      env.put (Context.PROVIDER_URL, "corbaname:iiop:localhost:9100/NameServiceServerRoot");
      InitialContext icontext = new InitialContext(env);
      Object remoteObj =  icontext.lookup("ejb/ua/io/SQLEntryHome");


Через сановскую, кстати тоже: com.sun.jndi.cosnaming.CNCtxFactory

источник: http://publib.boulder.ibm.com/infocenter/wasinfo/v5r1//index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/rnam_example_prop2.html

Правда до конца схема всё же ещё не работает  smile  smile  smile 

Найденая ссылка портаблится(portableRemoteObject.narrow), объект создаётся, но при попытке вызвать remote-метод получаю:
Код

java.rmi.MarshalException: CORBA MARSHAL 1229125786[]; nested exception is: 
    org.omg.CORBA.MARSHAL:   vmcid: 0x4942f000  minor code: 2202  completed: No


С чем это может быть связано ?

Автор: chief39 18.4.2007, 13:09
Цитата(chief39 @  17.4.2007,  19:16 Найти цитируемый пост)
Попробуй поглядеть в джариках въебсферовского клиента их реализацию контекста. И попробуй явно указать этот класс при 
Цитата(KostenkoSergey @  16.4.2007,  10:49 Найти цитируемый пост)
InitialContext icontext = new InitialContext(env);
.
Типа org.ws.bla-bla.our.great.mega.Context вместо InitialContext

Пробовал?

У тебя и на сервере и на клиенте должна быть WS реализация, выходит что на сервере ты просто гребёшь WS а на клиенте, по дефалту, создаёшь реализацию БЕСовского контекста.
Попробуй явно создать WSский инитиал контекст через нью и передать его переменой типа InitialContext

Автор: KostenkoSergey 18.4.2007, 14:46
Цитата(chief39 @  18.4.2007,  13:09 Найти цитируемый пост)
Пробовал?


Это ничего не меняет, когда я  делаю : env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory"), я и так получаю IBM'овский контекст, соответственно с его jndi- и ORB-реализацией, последние под Sun JRE глючат.

Используя другой контекст, соответственно получаю другую реализацию, к-я отрабатывает.
Цитата(chief39 @  18.4.2007,  13:09 Найти цитируемый пост)
У тебя и на сервере и на клиенте должна быть WS реализация
 - тут, наверное, немного не так. Не то, что бы "должна быть одинаковой", а достаточно что бы реализации "понимали" друг друга.
Используя CORBA URL это достигается.

Что примечательно: Вызов без параметров или с пераметрами = null до WS доходит и отрабатывается, а с не нуловыми значениями приводит к возникновению приведённой выше ошибки. Это наталкивает на мысль, что проблема переместилась на уровень "упаковки параметров"



Автор: w1nd 19.4.2007, 11:32
Цитата(KostenkoSergey @  17.4.2007,  10:38 Найти цитируемый пост)
w1nd, а вы точно не плугабили жре от сан ?

Что значит "плугабили"? JRE нетронутый.


Цитата(KostenkoSergey @  17.4.2007,  10:38 Найти цитируемый пост)
И ещё возвращаясь к твоему совету "Также установить системные свойства:" - это где надо было сделать ?

Можно при старте приложения, до создания каких-либо контекстов получения каких-либо удалённых объектов. Ы помощью System.setProperty(). Только у меня websphere 6.1.0

Добавлено @ 11:36

Цитата(KostenkoSergey @  18.4.2007,  14:46 Найти цитируемый пост)
Используя CORBA URL это достигается

Урл такого вида: corbaloc:iiop:<имя_сервера>:<порт> (с WsnInitialContextFactory)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)