Я новичок в EJB3 и мне чего-то не хватает, когда дело доходит до доступа к бину @Remote @Stateless, развернутому как модуль ejb внутри файла ear. Я хочу получить доступ к удаленному бину в lima.ear из soup.ear.
Вот что я сейчас делаю (несколько сокращенно):
//deployed under lima.ear
@Remote
@Stateless
public interface LimaBean {
String sayName();
}
Я хочу положить LimaBean в Суп:
//deployed in soup.ear
@Stateless
public class Soup implements SoupLocal {
@EJB
private LimaBean limaBean;
public String taste() {
return limaBean.sayName();
}
}
Когда я запускаю JBoss, я получаю следующую ошибку:
java.lang.RuntimeException: не удалось разрешить глобальное имя JNDI для @EJB для контейнера. Суп: ссылочный класс: com.example.LimaBean. EjbLink: не используется ни одним EJB-компонентом
Мне было трудно выяснить, что это за ejbLink, если это правильный путь, чтобы пойти вниз.
Если я разверну LimaBean как jar-файл в jboss, то все будет прекрасно!
Я наткнулся на статью, в которой был раздел «2.5.3. Ссылки между компонентами в разных банках и разных ушах»
(http://jonas.ow2.org/doc/howto/jboss2_4-to-jonas3_0/html/x111.html)
Пример файла jboss.xml для SB_BrowseRegions:
<jboss>
<session>
<ejb-name>SB_BrowseRegions</ejb-name>
<ejb-ref>
<ejb-ref-name>ejb/Region</ejb-ref-name>
<jndi-name>protocol://serverName/directory/RegionHome</jndi-name>
</ejb-ref>
</session>
</jboss>
Если я прикасаюсь к супу. Год после запуска JBoss, то он развертывается нормально, поэтому я предполагаю, что мне нужно указать зависимость, как сказано в статье выше.
Но даже после его развертывания я получаю сообщение об ошибке при доступе к удаленному LimaBean:
Вызывается: java.lang.IllegalArgumentException: Не удается установить для поля com.soup.LimaBean com.soup.Soup.limaBean значение $ Proxy147.
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException (UnsafeFieldAccessorImpl.java:146)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException (UnsafeFieldAccessorImpl.java:150)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set (UnsafeObjectFieldAccessorImpl.java:63)
в java.lang.reflect.Field.set (Field.java:657)
в org.jboss.injection.JndiFieldInjector.inject (JndiFieldInjector.java:115)
... еще 49
Я попробовал несколько вещей, но, если кто-нибудь может указать мне правильное направление по этому поводу, я был бы признателен.