我需要为现有的ejb项目添加某些功能。 具体而言 - 客户端信息,例如IP地址,登录凭据(已连接)和客户端应用程序名称 我的豆是无国籍的,所以我担心这种方法存在问题。 我的客户端代码目前有以下内容:
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的特定方法时发送客户端信息。 在此代码的某处
public static List getAllMembers() throws RemoteException, CatalogException
{
getMySession();
List list = mySession.getAllMembers() );
return list;
}
有很多这样的方法,所以这是不太理想的。但如果能解决这个问题,我会接受它。 在一天结束时," getAllMembers()"在服务器上执行,我想知道哪个客户端调用它的特定信息。 (可能有很多不同,包括webservices)
由于
答案 0 :(得分:1)
首先 - 您对客户信息做了什么?如果您计划将其用于审核,这听起来像是Interceptors的完美用法!
访问用户信息的EJB方式是通过用户的Principal,在无状态bean中使用它没有问题。您可能会发现这并不能获得您想要的所有信息 - this answer建议不要完全支持用户IP。