WebSphere 7. Внедрить EJB из другого приложения - PullRequest
10 голосов
/ 17 февраля 2012

Я пытаюсь внедрить EJB с аннотацией @EJB:

  • , когда я вставляю EJB в другой EJB в том же ухе, он работает нормально.
  • , когда я внедряюEJB в другой EJB от другого уха на том же сервере Я получаю исключение:

EJB сгенерировал непредвиденное (необъявленное) исключение во время вызова метода "sayHello".Данные об исключении: javax.ejb.EJBException: Ошибка впрыска;вложенное исключение: com.ibm.ejs.container.EJBNotFoundException: EJB с интерфейсом com.mycompany.myapp.ejb.test2 отсутствует в приложении myapp1

Я использую WebSphere 7 и EJB 3.0.Когда я сам выполняю поиск jndi, он работает нормально.Как сообщить контейнеру, откуда вводить мои удаленные bean-компоненты?

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 Ответ

5 голосов
/ 18 февраля 2012

Укажите привязку при развертывании приложения ( 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="..."/>.

...