Гарантирует ли EJB-заглушка работу удаленного EJB для любого клиента?

У меня есть EJB (EJB 2x) на удаленном сервере. У меня есть файл-заглушка, который я использую на своем клиенте для доступа к методам EJB.

Мой клиент работает на другом хосте. Раньше он работал под точно тем же сервером, что и EJB, который он вызывает. Но теперь я развернул клиент на сервере другого поставщика, и теперь вызов методов EJB вызывает исключение CORBA.

Гарантирует ли наличие файла-заглушки EJB успешный доступ к методам EJB с любого сервера? Если могут быть какие-то ограничения, то какими?

Я попытался отладить исключение, но оно возникает где-то внутри транспорта CORBA, который является yoko для моего конкретного клиента, и я не смог получить никакой значимой информации.

Трассировка стека у меня есть:

org.omg.CORBA.portable.UnknownException: originalEx: org.omg.CORBA.MARSHAL: encountered null wchar in wstring:  vmcid: Apache minor code: 0x15  completed: No:  vmcid: 0x0 minor code: 0x0  completed: Maybe
    at org.apache.yoko.rmi.impl.ValueDescriptor.readSerializable(ValueDescriptor.java:747)
    at org.apache.yoko.rmi.impl.ValueDescriptor.readValue(ValueDescriptor.java:726)
    at org.apache.yoko.rmi.impl.ValueDescriptor.readValue(ValueDescriptor.java:584)
    at org.apache.yoko.rmi.impl.ValueHandlerImpl.readValue0(ValueHandlerImpl.java:114)

person Alexander Kulyakhtin    schedule 06.06.2017    source источник
comment
Это может быть проблема между различными ORB, какие клиентские и серверные ORB вы используете?   -  person Johnny Willemsen    schedule 09.06.2017
comment
@JohnnyWillemsen Мой EJB2 работает в полном профиле WebSphere, и я пытаюсь вызвать его методы из WebSphere Liberty.   -  person Alexander Kulyakhtin    schedule 09.06.2017
comment
Не уверен, что происходит, без подробностей об исключении CORBA, которое вы получаете, и некоторых выводов журнала, вероятно, никто не сможет вам здесь помочь.   -  person Johnny Willemsen    schedule 09.06.2017
comment
Я просто спросил, возможна ли такая проблема и из-за чего. Из вашего комментария я понял, что это возможно из-за различий в реализациях CORBA (я думаю, что полный профиль WS имеет реализацию, отличную от той, что есть у Liberty). Я могу принять ваш комментарий в качестве ответа, если не будет более подробных ответов (маловероятно). Спасибо большое за помощь.   -  person Alexander Kulyakhtin    schedule 09.06.2017
comment
Могут быть разные причины, любую информацию об исключении CORBA, которую вы получаете, существует набор исключений, каждое из которых имеет разные значения.   -  person Johnny Willemsen    schedule 09.06.2017
comment
У меня есть это исключение: org.omg.CORBA.portable.UnknownException: originalEx: org.omg.CORBA.MARSHAL: обнаружен нулевой wchar в wstring. На форуме IBM также есть тот же вопрос от меня: ="nofollow noreferrer">ibm.com/developerworks/community/forums/html/   -  person Alexander Kulyakhtin    schedule 09.06.2017
comment
Для каждого продукта вы должны генерировать свои собственные заглушки на основе вашего IDL. Когда вы изменили клиентскую сторону, вы должны заново сгенерировать заглушки для клиента, используя свой IDL. Сгенерированные заглушки содержат связующий код между вашим клиентским кодом и реализацией ORB, он зависит от поставщика и может измениться при обновлении версии.   -  person Johnny Willemsen    schedule 09.06.2017
comment
Итак, если клиент переместился на другой сервер, существующая банка-заглушка может/не будет работать? И поскольку у меня нет исходников этого EJB, я не могу его восстановить самостоятельно? Парень из IBM, кажется, говорит, что банка может остаться прежней.   -  person Alexander Kulyakhtin    schedule 09.06.2017
comment
Вы должны перегенерировать свой IDL в тот момент, когда вы используете другую реализацию клиента. Если вы просто перейдете на другой сервер, который использует ту же версию программного обеспечения, нет необходимости регенерировать. Оглядываясь назад, кажется, что вы сейчас используете другой сервер с другой версией программного обеспечения, что не должно влиять на клиент, если только нет каких-либо ошибок. Вероятно, лучше всего обратиться в IBM, поскольку вы используете продукты IBM.   -  person Johnny Willemsen    schedule 09.06.2017
comment
Можете ли вы поделиться полной трассировкой стека здесь?   -  person kolossus    schedule 12.06.2017
comment
@kolossus Я добавил трассировку стека к вопросу   -  person Alexander Kulyakhtin    schedule 12.06.2017
comment
Не могли бы вы проверить ответ, если он отвечает на ваши вопросы?   -  person Hash    schedule 03.07.2017


Ответы (1)


Недавно я столкнулся с похожей ситуацией в телекоммуникационной компании, но на Weblogic, и на данный момент я не могу написать POC для вашей конкретной проблемы.

Ответьте на исходные вопросы

Гарантирует ли наличие файла-заглушки EJB успешный доступ к методам EJB с любого сервера?

Заглушка EJB сама по себе не является гарантией чего-либо. По сути, это прокси-объект, реализующий требуемый интерфейс. В его обязанности входит сериализация и десериализация объектов, вызов RMI-сервера с потоком байтов и попытка сопоставления ответа для вас.

Если могут быть какие-то ограничения, то какими?

Проблемы могут возникнуть в широком диапазоне. Последний раз, когда я сталкивался с одним из них, было изменение внутренней реализации в упомянутом Weblogic. Во время аутентификации было выдано NullPointerException. Все потому, что внутри экземпляра Weblogic использовался пароль, который не был установлен, но с предыдущими версиями он работал хорошо. Решение состояло в том, чтобы добавить пустой параметр String в InitialContext (Context.CREDENTIALS).

Также важно учитывать сетевые накладные расходы, поскольку два сервера теперь находятся на разных машинах и т. д.

В настоящее время в большинстве случаев заглушки генерируются во время выполнения, поэтому нет необходимости создавать их статически (например, с помощью rmic).

Дополнительная трассировка стека

Трудно сказать, в чем именно может быть ваша проблема (лог должен быть намного больше, чтобы определить), но я подозреваю, что проблема аналогична той, что была в нашем случае. Включите немного больше из журнала вперед и попробуйте добавить больше свойств в контекст, если вы можете это попробовать.

person Hash    schedule 15.06.2017