我需要向现有的ejb项目添加某些功能。特别是客户端信息,如IP地址、登录凭据(连接的是谁)和客户端应用程序名称我的bean是无状态的,所以我担心这种方法存在问题。我的客户端代码目前有以下内容:
private static MySession getmySession() throws RemoteException {
if(mySession != null) return mySession; //mySession is a private variable
try {
Properties h = new Properties();
h.put(Context.INITIAL_CONTEXT_FACTORY, contextFactory);
h.put(Context.PROVIDER_URL, serverUrl ); //t3://localhost
InitialContext ctx = new InitialContext(h);
mySessionHome home = (mySessionHome) ctx.lookup( "mySessionEJB" );
mySession = home.create();
return mySession;
} catch(NamingException ne) {
throw new RemoteException(ne.getMessage());
} catch(CreateException ce) {
throw new RemoteException(ce.getMessage());
}
}
理想情况下,我希望我的'mySession'在它返回时知道客户端。如果这可能不可能,我想在MySession的一个特定方法被调用时发送一个客户端信息。在这段代码的某个地方
public static List getAllMembers() throws RemoteException, CatalogException
{
getMySession();
List list = mySession.getAllMembers() );
return list;
}
有很多这样的方法,所以这是不理想的。但如果能解决问题,我就接受。在一天结束时,当"getAllMembers()"在服务器上执行时,我想知道哪个客户机调用了它的特定信息。(可以有很多不同的,包括webservices)
谢谢
第一件事-您要对客户端信息做什么?如果您计划将其用于审计,那么这听起来是拦截器的完美用途!
访问用户信息的EJB方法是通过用户的主体,在无状态bean中使用这种方法没有问题。您可能会发现,这并没有得到您想要的所有信息-这个答案表明获取用户IP并不完全支持。