2014-05-20 85 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; 
    } 
} 

我想它實例化一個servlet的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()); 
    } 
} 

無論是servlet和豆屬於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]|#] 

我試圖在查找調用設置namejava:global/BeanTest/StatefulBean!ca.shaw.tno.oss.MyListenerjava:global/BeanTest/StatefulBean。當使用doGet被調用,要麼,我得到這個錯誤:

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

因爲這些是由GlassFish服務器給出的只有兩個命名選項,那我應該使用?

回答

0

問題是我沒有使用@LocalBean註釋的StatefulBean。一旦我添加了,JNDI查找成功了。

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

    public StatefulBean() 
    { 
    } 

    public void setId(String id) 
    { 
     this.id = id; 
    } 
} 
相關問題