2014-05-20 3 views
0

У меня есть SFSB объявлен как таковой:Какое название контекста используется при поиске JNDI?

@Stateful(name="StatefulBean") 
public class StatefulBean implements MyListener 
{ 
    private String id; 

    public StatefulBean() 
    { 
    } 

    public void setId(String id) 
    { 
     this.id = id; 
    } 
} 

Я пытаюсь создать его экземпляр в методе doGet сервлета, как это:

protected void doGet(final HttpServletRequest request, 
    final HttpServletResponse response) throws ServletException, IOException 
{ 
    Date now = new Date(); 
    String id = new Long(now.getTime()).toString(); 

    try 
    { 
     Context context = new InitialContext(); 
     StatefulBean statefulBean = (StatefulBean) context.lookup("name"); 
     statefulBean.setId(id); 
     response.getWriter().write("Created StatefulBean with id " + id); 
    } 
    catch(Exception ex) 
    { 
     response.getWriter().write("Exception creating bean:" + ex.getMessage()); 
    } 
} 

Оба сервлетов и боб принадлежат my.package и развертываются в том же файле войны, что и BeanTest.war, на сервер Glassfish3.

У меня возникли вопросы, определяющие, что должно быть name. В GlassFish Server.log говорится, что:

[#|2014-05-20T16:31:51.720-0600|INFO|glassfish3.1.2|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=988;_ThreadName=Thread-14;|EJB5181:Portable JNDI names for EJB StatefulBean: [java:global/BeanTest/StatefulBean!my.package.MyListener, java:global/BeanTest/StatefulBean]|#] 

Я попытался установить name в вызове поиска как к java:global/BeanTest/StatefulBean!ca.shaw.tno.oss.MyListener и java:global/BeanTest/StatefulBean. Когда doGet вызывается либо, я получаю эту ошибку:

Exception processing batch:com.sun.proxy.$Proxy353 cannot be cast to my.package.StatefulBean 

Поскольку те только два варианта именования, данные сервера GlassFish, что я должен использовать?

ответ

0

Проблема в том, что у меня не было моего StatefulBean, аннотированного с @LocalBean. Как только я добавил, поиск JNDI преуспел.

@Stateful(name="StatefulBean") 
@LocalBean 
public class StatefulBean implements MyListener 
{ 
    private String id; 

    public StatefulBean() 
    { 
    } 

    public void setId(String id) 
    { 
     this.id = id; 
    } 
} 
Смежные вопросы