2013-02-14 4 views
2

Может ли кто-нибудь сказать мне, где я могу найти информацию по названию JNDI по умолчанию для EJB 3?Weblogic 10.3.5 & EJB 3 JNDI names

Использует ли Weblogic портативные имена JNDI, такие как Glassfish?

Могу ли я найти (как для Glassfish) трассировку развертывания EJB с использованием имен JNDI?

Например:

  • интерфейс (Service) только с @Remote
  • боба (ServiceImpl) с только @Stateless реализующий интерфейс
  • все упакованное в .ear файл (сервис-приложения -1,0)

При развертывании на Weblogic только ссылка JNDI я вижу:

service-application-1.0service-application-1.0_jarServiceImpl_Home 

но я не могу использовать это имя при поиске по контексту. Если я

Service myService = (Service) context.lookup("service-application-1.0service-application-1.0_jarServiceImpl_Home"); 

это дает мне

Exception in thread "main" java.lang.ClassCastException: weblogic.ejb.container.internal.StatelessEJBHomeImpl_1035_WLStub cannot be cast to com.tuto.Service 
at com.tuto.TestEjb.main(TestEjb.java:24) 

PS. С Glassfish это дает мне

Portable jndi names for .... : java:global/service-application-1.0/service-application-ejb-1.0/ServiceImpl 

И

Service myService = (Service) context.lookup("java:global/service-application-1.0/service-application-ejb-1.0/ServiceImpl"); 

работает.

ответ

5

К сожалению, EJB 3.0 не указывает стандартное именование JNDI и оставляет его поставщику сервера. Вы правы, указав документацию WL о mappedName: «Если вы укажете этот атрибут, сеансовый компонент без состояния не может быть переносимым». Недостатком атрибута mappedName является то, что глобальное имя JNDI будет по умолчанию сопоставленоName # FullyQualifiedRemoteInterface. Поскольку mappedName является аннотацией в исходном коде, это делает ваш код не переносимым. Предпочтительным способом является сохранение специфического для поставщика поведения в конкретных дескрипторах развертывания поставщика, таких как weblogic-ejb-jar.xml. Таким образом, у вас также есть выбор указать собственное имя JNDI без предопределенного формата как сопоставленноеName # FullyQualifiedRemoteInterface.

EJB 3.1 предпринял некоторые усилия для стандартизации имен JNDI на глобальном, прикладном и модульном уровнях. См. http://docs.oracle.com/cd/E19798-01/821-1841/girgn/index.html

+0

Хорошо, спасибо. Но я не нашел в этом случае wl 10.3.5, что такое jndi-имя ejb для конкретного поставщика, без каких-либо аннотаций или дескрипторов развертывания? – tweetysat

+0

@tweetysat: В книге «Oracle WebLogic Server» (написанной Робертом Патриком, Грегори Нюбергом и Филиппом Астоном, с Джошем Брегманом и Полом Доном) Глава 6: Создание Enterprise JavaBeans на сервере WebLogic Page 19 « » WebLogic Server предоставляет два варианта сопоставление удаленных бизнес-интерфейсов сеансового компонента в глобальном дереве JNDI. Отображение может быть указано в дескрипторе развертывания weblogic-ejb-jar.xml или может использоваться элемент mappedName аннотаций @ Stateless или @ Stateful. " Таким образом, имя jndi по умолчанию отсутствует, если вы не используете mappedName или weblogic- ejb-jar.xml – Lan

+0

Спасибо Вспышка. Теперь у меня есть мой ответ .... ;-) – tweetysat

1

Вы можете попробовать context.lookup("ServiveImpl#com.Service");, где ServiveImpl это отображенный имя бина & после # должен быть полностью квалифицированное имя интерфейса.

+0

Хорошо, я пробовал, но не работал. Мой ejb находится в пакете com.tuto. Поэтому я попробовал context.lookup («ServiceImpl # com.tuto.Service») ... не нашел subcontext ServiceImpl # com ..... – tweetysat

+0

@tweetysat Вы указали 'mappedName' как' ServiceImpl' для bean-компонента. существует один удаленный интерфейс для bean-компонента, тогда вы можете попробовать 'lookup (« Service »). –

+0

Да, используя mappedName, он работает. Если я поставлю« toto », я могу найти jndi toto # com.tuto.Service But это не reponsding мой вопрос о том, что имя jndi по умолчанию, не что-то вроде mappedName? В соответствии с документацией wl, mappedName и имя НЕ требуются. И они даже говорят: «Если вы укажете этот атрибут, сессионный компонент без состояния не может быть переносимым ,«Итак, что такое портативное имя по умолчанию? – tweetysat

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