Настройка одного уха для вызова удаленного ejb3 на другое ухо в JBoss - PullRequest
2 голосов
/ 12 июня 2009

Я новичок в 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

Я попробовал несколько вещей, но, если кто-нибудь может указать мне правильное направление по этому поводу, я был бы признателен.

1 Ответ

2 голосов
/ 26 июня 2009

Похоже, свойства JNDI должны быть установлены так, как если бы это был удаленный клиент вне сервера приложений из-за настройки изоляции ушей.

    properties.put(Context.PROVIDER_URL, url);
    InitialContext ctx = new InitialContext(properties);

Просто укажите URL для InitialContext, и это должно сработать.

...