1

ステートレス EJB があり、注釈 @WebService によって Web サービス エンドポイントを定義しました (以下を参照)。HTTP セッションと WebServiceContext を使用して、認証とセッションを管理します。コードは正常に動作します。

@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 セッションのタイムアウトを変更することです。私はあらゆることを試しましたが、プログラムはグラスフィッシュに ejb-jar としてデプロイされるため、web.xml はありません。EJB Web サービス エンドポイントの http セッション タイムアウトを変更するにはどうすればよいですか? PS Web サービス エンドポイントを使用するため、ステートフル EJB を使用できません。

4

1 に答える 1

0

なんとなく解決!セッション タイムアウトを変更するためのグローバル パラメータは見つかりませんでしたが、個々のセッションごとに HttpSession.setMaxInactiveInterval(int interval) を介して変更できます。Javaのドキュメントに基づいていますが、このメソッドは秒単位で間隔を取得しますが、明らかにミリ秒単位で機能しました。

于 2013-04-29T11:15:10.503 に答える