在阅读了这么久之后,我现在有机会弄脏EJB。我在Ubuntu上使用Glassfish + Eclipse 3.7。
我首先创建了一个只返回问候消息的EJB。然后我创建应用程序客户端以使用InitialContext访问此EJB。这与预期完全一样。
然后,我创建了一个servlet来访问该EJB。使用@EJB和InitialContext都无法访问。
当我使用@EJB时,404页面会出现此描述:“请求的资源()不可用。”
当我使用InitialContent时,抛出ClassNotFoundException。显然,servlet的类加载器无法访问EJB类。我试图将EJB jar文件添加到servlet的lib文件夹中,并收到JNDI名称已存在的错误消息。显然,Glass Fish也尝试在Servlet的lib文件夹中发布EJB。
实现此功能的唯一方法是使用servlet发布EJB。这样,我可以获得servlet和独立应用程序来访问该EJB。问题是我需要始终将EJB与EJB一起使用,这是不可取的,因为我的客户可能不想使用Web前端。
无论如何,我的问题是如何让servlet访问在类加载器之外使用的EJB而不重复发布EJB。
P.S。问题也可能是Eclipse配置和使用这些组件的方式。
非常感谢任何帮助。
答案 0 :(得分:1)
也许您需要将EJB组件视为远程组件。也许真的是因为你没有详细说明你的部署方式。试试http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#nonJavaEEwebcontainerRemoteEJB的说明。
答案 1 :(得分:1)
一些指示:
.ear
(企业应用程序)中并将其部署到glassfish 答案 2 :(得分:0)
尝试了一段时间后,我发现我可以将其称为“/”。这甚至适用于注射。