Java 如何更改无状态EJB的web服务端点的http会话超时?
我有一个无状态EJB,并且通过注解@WebService(如下所示)为它定义了一个web服务端点。我使用HTTP会话和WebServiceContext管理身份验证和会话。代码工作正常Java 如何更改无状态EJB的web服务端点的http会话超时?,java,ejb,Java,Ejb,我有一个无状态EJB,并且通过注解@WebService(如下所示)为它定义了一个web服务端点。我使用HTTP会话和WebServiceContext管理身份验证和会话。代码工作正常 @Stateless @WebService public class UserManager implements UserManagerRemote{ @Resource private WebServiceContext webServiceContext; @Override @
@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;
}
}
我需要做的是更改EJBWebService端点的http会话超时。我已经尝试了所有的方法,但是由于该程序在glassfish上部署为ejb jar,因此没有web.xml。如何更改EJB web服务端点的http会话超时?
另外,我不能使用有状态EJB,因为我要使用web服务端点。
我解决了它!我找不到任何用于更改会话超时的全局参数,但可以通过HttpSession.setMaxInactiveInterval(int interval)为每个会话更改该参数。虽然基于此方法获取的时间间隔以秒为单位,但显然是以毫秒为单位。
将其打包为WAR如何?打包结构为EAR,它包含一个WAR文件用于其他用途。我在WAR中更改了会话超时,但对EJBIs不起作用—真的创建了会话吗?是的,当您访问HttpSession时,会自动为web服务客户端创建会话。(web服务客户端应该启用cookies)不过,为什么不把它打包成一个WAR呢?一只耳朵可以容纳多场战争。