【发布时间】:2011-07-01 23:17:24
【问题描述】:
我正在尝试将远程句柄持久保存到有状态 EJB3.0 bean。定义了这个 bean 的接口:
@Remote
public interface Hello extends Serializable {
Handle getHandle();
void sayHello();
}
实现是:
@Stateful
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class HelloBean implements Hello {
@Resource
private SessionContext ctx;
@Override
public Handle getHandle() {
try {
return ctx.getEJBObject().getHandle();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public Handle sayHello() {
System.out.println("hello");
}
}
根据 EJB 规范,这应该为我提供一个可序列化的句柄。但相反,我得到:
Caused by: java.lang.IllegalStateException: EJBObject not available
at com.sun.ejb.containers.EJBContextImpl.getEJBObject(EJBContextImpl.java:328)
at com.zzz.zzz.HelloBean.getHandle(WorkHolderBean.java:125)
... 75 more
我不确定我是否理解我做错了什么......所有有状态的 bean 都应该有一个可序列化的句柄。在 EJB3.0 中是否有一种“正确”的方式来获取可序列化句柄?
【问题讨论】:
标签: java jakarta-ee glassfish ejb-3.0