我有一个单实例类,实现了ExceptionMapper.它不是一个静态类,但它是一个我知道只创建单个实例的类(我检查过 - 构造函数只被调用一次).
我的类使用@Context HttpServletRequest,我可以清楚地看到,当调用我的ExceptionMapper.toResponse()方法时,@ Context'request'参数有一个值,该值与抛出异常的请求相关.
该文档说 这确实是由设计支持的功能,并且它是通过使用"代理"来完成的.
我想知道这是如何实现的 - 单个实例如何同时具有不同的成员变量值?
谢谢你,
AG
PS:这是测试代码:
@Provider
public class MyExceptionMapper implements ExceptionMapper<Exception> {
public MyExceptionMapper() {
System.out.println("CTOR!!");
}
@Context HttpServletRequest req;
public static boolean done = false;
public Response toResponse(Exception ex) {
if (!done) {
done = true;
Thread.sleep(10000);
}
System.out.println(req.getRequestURI());
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我的REST处理程序方法抛出异常,所以当我"并行"执行以下2个请求时(上面的睡眠确保当第二个到达时第一个没有完成并且恕我直言应该修改唯一的'req'字段):
- http://localhost/app/one
- http://localhost/app/two
Run Code Online (Sandbox Code Playgroud)
我的程序打印:
CTOR!
http://localhost/app/one
http://localhost/app/two
Run Code Online (Sandbox Code Playgroud) 我试图追踪玻璃鱼中污染我们的日志文件的恼人消息的原因.
为了简化我们的设置,我们有2个运行3.1.2.2的glassfish服务器.
服务器A在其上部署了Web服务,使用基于证书的安全性,该安全性使用Web服务中的角色以及sun-ejb-jar.xml和sun-application.xml中的映射进行定义.
服务器B上部署了远程EJB,未配置任何安全性.
在服务器B上调用远程EJB时,使用以下代码从服务器A上的Web服务:
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
props.setProperty("org.omg.CORBA.ORBInitialHost", server.getServer());
props.setProperty("org.omg.CORBA.ORBInitialPort", Integer.toString(server.getEjb3Port()));
InitialContext ic = new InitialContext(props);
return ((MyIF)ic.lookup(MyIF.class.getName())).doWork();
Run Code Online (Sandbox Code Playgroud)
登录服务器A会记录以下内容,但EJB调用按预期工作.
[#|2012-09-20T08:43:42.141+0100|SEVERE|glassfish3.1.2|javax.enterprise.system.core.security.com.sun.enterprise.iiop.security|_ThreadID=26;_ThreadName=Thread-2;|IIOP1002: Principal propagation: Cannot find principal information in subject|#]
Run Code Online (Sandbox Code Playgroud)
有没有人有这个错误的经验,知道如何解决这个问题?
在Oracle文档上的信息是不是非常有帮助.
IIOP1002主要传播:无法在主题中找到主要信息
原因:主题中未找到主要信息
操作:请检查身份传播的配置设置