java - 当我尝试在 wildfly 9.0.2 中注入 SessionContextImpl 时出现 NullPointerException
问题描述
我正在将一个jboss 5.1.0 GA 应用程序迁移到 Wildfly 9.0.2,我在其中管理 EJB,在一个无状态bean 中,EJBContext 以这种方式注入到 jboss 5 中并且它可以工作:
import javax.ejb.EJBContext;
@Stateless
@SecurityDomain (SystemSetting.SECURITY_DOMAIN)
@PermitAll
public class SystemServiceBean implements SystemServiceLocal {
@Resource
EjbContext ctx;
然后在这个方法中使用它
private Principal getCallerPrincipal () {
try {
return SecurityUtil.getCallerPrincipal (ctx, (Subject) PolicyContext.getContext ("javax.security.auth.Subject.container"));
PolicyContext.getContext ("javax.security.auth.Subject.container"));
} catch (PolicyContextException e) {
e.printStackTrace ();
}
return ctx.getCallerPrincipal ();
}
后来尝试用这个方法返回main
public class SecurityUtil {
public static Principal getCallerPrincipal (EJBContext ctx, Subject subject) {
try {
if (subject! = null) {
Set <Group> subjectGroups = subject.getPrincipals (Group.class);
Iterator <Group> iter = subjectGroups.iterator ();
while (iter.hasNext ()) {
Group group = iter.next ();
String name = group.getName ();
if (name.equals ("CallerPrincipal")) {
Enumeration <? extends Home> members = group.members ();
if (members.hasMoreElements ()) {
Main principal = (Main) members.nextElement ();
return principal;
}
}
}
}
} catch (Exception e) {
System.out.println ("============================= catch:");
Logger.getLogger (SecurityUtil.class.getName ()). Error (e);
}
return ctx.getCallerPrincipal ();
}
但现在wildfly会引发以下错误:
**Caused by: javax.ejb.EJBException: java.lang.IllegalArgumentException: Can not set javax.ejb.EJBContext field net.ps.ais.system.ejb.SystemServiceBean.ctx to org.jboss.as.ejb3.context.SessionContextImpl
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx (CMTTxInterceptor.java:187)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx (CMTTxInterceptor.java:277)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew (CMTTxInterceptor.java:344)
at org.jboss.as.ejb3.tx.LifecycleCMTTxInterceptor.processInvocation (LifecycleCMTTxInterceptor.java:66)
at org.jboss.invocation.InterceptorContext.proceed (InterceptorContext.java:340)
at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation (CurrentInvocationContextInterceptor.java:41)
at org.jboss.invocation.InterceptorContext.proceed (InterceptorContext.java:340)
at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation (ConcurrentContextInterceptor.java:45)
at org.jboss.invocation.InterceptorContext.proceed (InterceptorContext.java:340)
at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation (ContextClassLoaderInterceptor.java:64)
at org.jboss.invocation.InterceptorContext.proceed (InterceptorContext.java:340)
at org.jboss.invocation.InterceptorContext.run (InterceptorContext.java:356)
at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation (PrivilegedWithCombinerInterceptor.java:80)
at org.jboss.invocation.InterceptorContext.proceed (InterceptorContext.java:340)
at org.jboss.invocation.ChainedInterceptor.processInvocation (ChainedInterceptor.java:61)
at org.jboss.as.ee.component.BasicComponent.constructComponentInstance (BasicComponent.java:161)**
如果我将注入方式更改为:
import org.jboss.as.ejb3.context.SessionContextImpl;
@Resource
SessionContextImpl ctx;
抛出:
**Caused by: java.lang.NullPointerException
at net.ps.ais.system.ejb.SystemServiceBean.helloWorld(SystemServiceBean.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:254)**
有人可以帮助我吗?
解决方案
推荐阅读
- javascript - Javascript onnclick 调用 ejs 中的函数
- javascript - 在Javascript中合并两个对象数组
- c - 头文件中数组的生命周期
- java - Java - 针对白名单的手动对象验证
- .net - 属性值无效:关键字不支持:“主机”?
- ios - iOS 应用程序无法在设备上正确显示
- php - 检查是否已在 PHP 中更新了 MySql 数据库
- android - 使用 RemoteViews 设置小部件按钮的可见性
- jquery - 如何使用 jQuery UI 获取可拖动和可调整大小元素的坐标
- python - 从 Python 的列表中为现有文件的每一行添加一个额外的字母