WebSphere 7. Inject EJB из другого приложения
Я пытаюсь ввести EJB с помощью аннотации @EJB:
- когда я вставляю EJB в другой EJB в том же ухе, он отлично работает.
- когда я вставляю EJB в другой EJB из другого уха в том же
server Я получаю исключение:
EJB бросил неожиданное (не объявленное) исключение при вызове метод "sayHello". Исключенные данные: javax.ejb.EJBException: Injection недостаточность; Вложенное исключение: com.ibm.ejs.container.EJBNotFoundException: EJB с интерфейсом com.mycompany.myapp.ejb.test2 нет в приложении myapp1
Я использую WebSphere 7 и EJB 3.0. Когда я делаю поиск в jndi, он работает нормально. Как я могу сообщить контейнеру, откуда ввести мой удаленный beans?
myapp1.ear содержит следующее: myapp1.jar(где EJB есть)
myapp1 EJB:
package com.mycompany.myapp1.ejb.test1;
@Remote
public interface HelloEjb1 {
public String sayHello();
}
EJB Impl:
package com.mycompany.myapp.ejb.test1;
@Stateless
public class HelloEjbImpl1 implements HelloEjb1 {
@EJB
HelloEjb2 helloEjb2;
@Override
public String sayHello() {
return HelloEjb2.sayHello();
}
}
myapp2.ear содержит следующее: myapp2.jar(где EJB есть)
myapp2 EJB:
package com.mycompany.myapp2.ejb.test2;
@Remote
public interface HelloEjb2 {
public String sayHello();
}
EJB Impl:
package com.mycompany.myapp2.ejb.test2;
@Stateless
public class HelloEjbImpl2 implements HelloEjb2 {
@Override
public String sayHello() {
return "Hello";
}
}
Ответы
Ответ 1
Укажите привязку при развертывании приложения (1, 2), или включить META-INF/ibm-ejb-jar-bnd.xml в ваш клиентский модуль (myapp1) EJB. Он будет выглядеть примерно так:
<ejb-jar-bnd
xmlns="http://websphere.ibm.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd"
version "1.0">
<session name="HelloEjbImpl1">
<ejb-ref name="com.mycompany.myapp.ejb.test1/helloEjb2"
binding-name="myapp2/myapp2.jar/HelloEjbImpl2#com.mycompany.myapp1.ejb.test1.HelloEjb1"
</session>
</ejb-jar-bnd>
ejb-ref name="..."
можно упростить, если вы используете @EJB(name="myrefname")
. Имя привязки может быть упрощено, если ваш myapp2.jar содержит похожий файл привязки с элементом <interface class="..." binding-name="..."/>
.