我一直在尝试从小程序中注入(inject)/使用我的 EJB,但没有成功。我创建了一个新的 Java EE Enterprise 应用程序。我正在使用 glassfish 3 和 netbeans 7.1
主要问题是实例化 InitialContext
。
这是我的 bean 的声明。
@Stateless
public class UserFacade implements UserFacadeLocal {
@PersistenceContext(unitName = "MetroEntitiesPU")
private EntityManager em;
@Remote
public interface UserFacadeLocal {
我已经能够通过包含 gf-client.jar
类路径并使用以下代码来创建独立的 Java 客户端。
try {
UserFacadeLocal ufl = (UserFacadeLocal) new InitialContext()
.lookup("bidd.data.ejb.UserFacadeLocal");
System.out.println("FROM EJB COUNT: " + String.valueOf(ufl.count()));
} catch (NamingException ex) {
Logger.getLogger(JavaApplication3.class.getName())
.log(Level.SEVERE, null, ex);
}
问题是当我尝试在小程序中执行相同操作时。该小程序在 jar 文件中编译,然后从 jsp 网站加载,该网站是我在 netbeans 中的企业应用程序的一部分。
这是 init 方法中的一行,它给出了随后的错误。
UserFacadeLocal ufl = (UserFacadeLocal) new InitialContext()
.lookup("bidd.data.ejb.UserFacadeLocal");
错误
Need to specify class name in environment or system property,
or as an applet parameter,
or in an application resource file: java.naming.factory.initial
如何解决这个错误?
最佳答案
Need to specify class name in environment or system property,
or as an applet parameter,
or in an application resource file: java.naming.factory.initial
-
environment or system property
对于公开部署的小程序来说不实用1。 -
as an applet parameter
应该是微不足道的1。类似于:
<applet ..><param name='the.name' value='bidd.data.ejb.UserFacadeLocal'> </applet>
-
in an application resource file
可能可行,但大概您需要添加param
识别该文件。
- 小程序:这同样适用于 JWS 应用程序。这是我实际上推荐的此部署方式。
关于java - 在小程序中使用 EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10330792/