2013-04-29 131 views
1

我有一個無狀態的EJB,我已經通過註釋@WebService爲它定義了一個Web服務端點(如下所示)。我使用HTTP會話和WebServiceContext管理身份驗證和會話。代碼工作正常。如何更改無狀態EJB的Web服務端點的http會話超時?

@Stateless 
@WebService 
public class UserManager implements UserManagerRemote{ 
    @Resource 
    private WebServiceContext webServiceContext; 

    @Override @WebMethod 
    public boolean login(String username, String password){ 
     if(!checkUser(username, password)) 
      return false; 
     HttpSession session = HttpServletRequest)webServiceContext.getMessageContext(). 
        get(MessageContext.SERVLET_REQUEST)).getSession(); 
     session.setAttribute("username", username); 
     return true; 
    } 

    @Override @WebMethod 
    public int doSomthing(){ 
     HttpSession session = ((HttpServletRequest)webServiceContext.getMessageContext(). 
      get(MessageContext.SERVLET_REQUEST)).getSession(); 
     if(session == null) 
      return -1; 
     //do the thing and return the result 
     return 1; 
    } 

} 

我需要做的是更改EJB Web服務端點的http會話超時。我嘗試了所有的東西,但是因爲程序在glassfish上部署爲ejb-jar,所以沒有web.xml。如何更改EJB Web服務端點的http會話超時? P.S.我不能使用有狀態EJB,因爲我要使用Web服務端點。

+0

如何將它打包爲WAR? – kfis 2013-04-29 07:42:53

+0

包裝結構是EAR,它包含一個用於其他目的的WAR文件。我在WAR中更改了會話超時,但並不適用於EJB – Milad 2013-04-29 08:16:16

+0

是否真的創建了會話? – 2013-04-29 08:32:56

回答

0

我有點解決它!我找不到任何全局參數來更改會話超時,但可以通過HttpSession.setMaxInactiveInterval(int interval)爲每個會話更改。儘管基於Java documentation該方法獲得的時間間隔以秒爲單位,但它顯然工作了毫秒。

相關問題