Emply EJB和Servlet

时间:2011-04-18 05:04:52

标签: deployment servlets ejb

在阅读了这么久之后,我现在有机会弄脏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配置和使用这些组件的方式。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

也许您需要将EJB组件视为远程组件。也许真的是因为你没有详细说明你的部署方式。试试http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#nonJavaEEwebcontainerRemoteEJB的说明。

答案 1 :(得分:1)

一些指示:

  • 您可能需要将webapp和ejb-jar放在.ear(企业应用程序)中并将其部署到glassfish
  • 您可能需要webapp的类路径上的远程接口(如果它们在运行时不可用,但它们在编译时,您不能指望它可以工作)。
  • 对于创建和部署应用程序的企业内容和向导,NetBeans通常更好。试一试。

答案 2 :(得分:0)

尝试了一段时间后,我发现我可以将其称为“/”。这甚至适用于注射。