Как использовать единый EJB как для клиентского, так и для веб-приложения

#java #ejb #ejb-3.0

#java #ejb #ejb-3.0

Вопрос:

Я очень новичок в этой концепции EJB. Мне поручено разработать приложение, которое является точной копией netflix. У нас есть два модуля:

  • У владельца будет настольное приложение
  • у пользователей будет веб-приложение.

Как мне настроить как настольное приложение, так и веб-приложение для одного EJB?

Ответ №1:

Итак, у вас есть EJB, развернутый на сервере приложений (например, Glassfish, JBoss и т. Д.), И вы хотите, Чтобы клиенты из настольных (J2SE) и веб-приложений (например, Tomcat) использовали этот (удаленный, конечно) EJB.

Если это то, что у вас есть, вам нужно, чтобы ваши клиенты подключались к удаленному EJB с помощью JNDI, следующим образом (пример JBoss):

 try {
    Context context = new InitialContext(getJNDISetup());
    MyServiceEJBRemote delegate = (MyServiceEJBRemote)context.lookup(MY_SERVICEEJB_JNDI_NAME);               
} catch (NamingException e) {
    // log exception
}

private static Hashtable<?, ?> getJNDISetup() {
    // perform jndi lookup with your favorite method, hashtable, properties file... in this case, hashtable.
    Hashtable<String, String> setup = new Hashtable<String, String>();
    setup.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
    setup.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
    setup.put("java.naming.provider.url","localhost:1099");

    return setup;

}
  

В зависимости от вашего сервера приложений вам может потребоваться изменить ключевые элементы, определенные в HashMap.

Очевидно, что ваши клиенты (destkop, web) должны быть осведомлены об интерфейсе EJB. Как веб-серверу, так и настольному модулю потребуются также библиотеки именования сервера приложений.