通过上面的代码,我得到了一个随机的结果:大多数情况下,下面的代码工作正常,但在一些罕见的情况下,对“service.get()”的调用会导致异常“org.jboss.weld.exceptions.weldeexception:object不是声明类的示例”。
在这种情况下,注入的服务类似于“proxy for view class:package.iservicea of ejb:serviceinpl”(通过@local接口之一注入),而不是“proxy for view class:package.serviceinpl of ejb:serviceinpl”(通过@localbean类注入)。
我不明白的是为什么这种行为是不可预测的?为什么同一代码有两种可能的情况(行为随部署的不同而变化)
我们正在使用wildfly 8.1.0。有没有我们不知道的bug?
import javax.ejb.EJB;
import javax.ejb.Local;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.inject.Inject;
@Local
public interface IServiceA {
}
@Local
public interface IServiceB<E> {
E get();
}
public abstract class AbstractService<T extends SomeRootType> implements IServiceA, IServiceB<T> {
@Override
public T get() {
// Some code
}
}
@Stateless
@LocalBean
public class ServiceImpl extends AbstractService<SomeType> implements IServiceA, IServiceB<SomeType> {
}
public class SomeRootType {}
public class SomeType extends SomeRootType {}
public class ExampleA {
@Inject
ServiceImpl service;
public void execute() {
/*
Sometimes, injected service is "Proxy for view class: package.IServiceA of EJB: ServiceImpl" and cause "org.jboss.weld.exceptions.WeldException: object is not an instance of declaring class".
Rest of the time, injected service is "Proxy for view class: package.ServiceImpl of EJB: ServiceImpl" and works fine.
*/
service.get();
}
暂无答案!
目前还没有任何答案,快来回答吧!