我正在开发部署在glassfish-3服务器上的Java6 web-app(.war)。我的逻辑的一部分,关心数据库连接等是另一个项目的一部分 - .ear与我的应用程序一起部署。这一切都运行良好,直到我不得不为注入逻辑创建另一层抽象而不是简单的托管bean。也许代码会解释得最好。
我的网络应用:
public class OtherClass {
@EJB(name = "IClass", mappedName = "A")
private IClass iClass;
}
}
.ear已部署应用:
public abstract class AbClass {...}
@Stateless(name = "IClass", mappedName = "A")
public class A extends AbClass implements IClass {...}
@Stateless(name = "IClass", mappedName = "B")
public class B extends AbClass implements IClass {...}
常见导入(另一个项目作为maven依赖项):
@Remote
public interface IClass extends Serializable {...}
然而,在尝试解决@EJB
投掷时,这不起作用:
引起:javax.naming.NameNotFoundException:找不到#.com.example.IClass
...
引起:java.lang.IllegalStateException:异常尝试注入Remote ejb-ref name = IClass,Remote 3.x interface = com.example.IClass,ejb-link = null,lookup =,mappedName = A,jndi -name =,refType =类com.example.ItherClass中的Session:查找失败的' java:comp / env / IClass'在SerialContext中[myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory,java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs = com.sun.enterprise.naming}
我知道我可以解决这个问题,例如创建一个工厂,但我觉得这种方法应该有效。