У меня есть 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, что я должен использовать?