我在glassfish上部署了两个应用程序 - 应用程序A和B.
两者都部署为war包,应用程序B使用应用程序A中的一些组件。
现在在应用程序A中我有一个界面:
public interface BusinessInterface() extends SomeOtherInterface {
void someAction();
}
我有3个这个接口的实现 - 两个在应用程序A中,一个在应用程序B中:BusinessInterfaceA1, BusinessInterfaceA2, BusinessInterfaceB
只要所有这些都是CDIBeans,一切都很好 - 我正在使用自定义@Qualifier注释(@ BusinessInterfaceA1,@ BusinessInterfaceA2)和@Default注释来实现B的区别。
但是现在我需要两个应用程序的A实现都是有状态EJB,这就是它变得有趣的地方。
当我在两个实现上添加@Statefull注释时,我得到了类似的东西:
javax.servlet.ServletException: org.jboss.weld.exceptions.WeldException: WELD-000049
细节:
java.lang.IllegalStateException: Unable to convert ejbRef for ejb BusinessInterfaceA1 to a business object of type interface SomeOtherInterface
我该如何解决?我需要所有实现都可以通过我可以像
那样注入它们的方式来实现@Inject @SomeAnnotation private BusinessInterface businessInterface;
答案 0 :(得分:1)
Glassfish 3.1中的bug。解决方法是,使用所有必需的接口标记实现,例如:
@Statefull/@Stateless
public class BusinessInterfaceImpl implements BusinessInterface, SomeOtherInterface {
// implementation
}
甚至BusinessInterface
扩展了SomeOtherInterface
,而且从Java规范来看,它无用,但作为该bug的解决方法,它可以正常工作。
另一种解决方案是使用Glassfish 4.0