2015-05-29 4 views
0

Я новичок в концепции EJB. Я видел следующее другом сайте:Неизвестный JNDI Lookup String

Образец 1:

@Stateless 
@EJB(name="audit", beanInterface=AnotherEJBLocal.class) 
public class EmployeeBean implements EmployeeServiceLocal, EmployeeServiceRemote { 
    @PersistenceContext(unitName = "EmployeeService") 
    private EntityManager manager; 

    public void doAction(){ 
    try { 
     Context ctx = new InitialContext(); 
     AnotherEJBLocal audit = (AnotherEJBLocal) ctx.lookup("java:comp/env/audit"); 
     audit.doAnother(); 
    } catch (NamingException e) { 
     throw new EJBException(e); 
    } 

    } 
} 

Пример 2:

public static void main(String[] a) throws Exception { 

    EmployeeServiceRemote service = null; 
    service = (EmployeeServiceRemote) new InitialContext().lookup("EmployeeBean/remote"); 


    service.doAction(); 



    } 

Пример 3:

obj = ctx.lookup(ejb/CBDWebAppEAR/CBDWebApp.jar/<EJB name>/<Remote Interface Class Name>); 

CBDWebApp это название проекта, в котором боб находится.

Мой вопрос:

  1. Какова необходимость & СМЫСЛ Явы: комп/ENV/аудит

  2. Почему же тип строки не используется в случае образца 2. Я думаю, как это удаленный EJB не локальный.

  3. Почему смысл EJB искать строку в образце 3.

ответ

0
  1. Строка java:comp/env/audit смотрит вверх ссылку EJB, который был объявлен ранее @EJB(name="audit", beanInterface=AnotherEJBLocal.class). Имена, объявленные @EJB (и @Resource и все другие ссылки EE), неявно объявляются в контексте java:comp/env. С помощью этой ссылки разработчик может перенастроить ссылку «проверка» на любой EJB в приложении, реализующем интерфейс AnotherEJBLocal, или если разработчик ничего не указывает, javadoc для аннотации @EJB требует, чтобы он нацеливался на один EJB внутри то же приложение, которое реализует интерфейс.

  2. Этот главный метод (возможно) объявлен автономной программой Java. В этом случае он (возможно) настраивается с помощью свойств системы для подключения сервера JNDI сервера приложений, который вернет удаленную ссылку клиенту. Имя, которое просматривается, зависит от поставщика, и оно, вероятно, было настроено для EJB во время развертывания.

  3. Это очень похоже на # 2, с той лишь разницей, что используется конкретная строка. В этом случае он, вероятно, полагается на имя привязки «по умолчанию» сервера приложений, если ни один из них не был настроен для EJB во время развертывания, используя шаблон ejb/<app>/<module>/<bean>/<interface>.

Смежные вопросы