1

我正在尝试让 Tomcat 7(带有 OpenEJB)与 Jersey 1.9 一起使用。我让我的 Jersey RestFUL 服务与 Tomcat 6 一起工作。但是,一旦我将 war 文件部署到 Tomcat 7(OpenEJB),我就会收到以下错误。

我在 Eclipse 中创建了一个新的动态 Web 项目,并将以下 jars 添加到 WEB-INF/lib 文件夹中,而没有添加任何额外的代码,但我仍然遇到同样的错误。Tomcat 7 的 OpenEJB 似乎不喜欢 Jersey jars。

  • asm-3.1.jar
  • jersey-core-1.9-ea04.jar
  • jersey-server-1.9-ea04.jar

原因:org.apache.openejb.OpenEJBException:无法实例化应用程序类:com.sun.jersey.api.core.ResourceConfig:在 org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy 处为空(AnnotationDeployer.java:1685 ) 在 org.apache.openejb.config.AnnotationDeployer.deploy(AnnotationDeployer.java:293) 在 org.apache.openejb.config 的 org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:1482)。 ConfigurationFactory$Chain.deploy(ConfigurationFactory.java:263) 在 org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:693) 在 org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:588) ... 23 更多

原因:java.lang.reflect.Constructor.newInstance(Constructor.java:513) 处的 sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30) 处的 java.lang.InstantiationException (Class) .java:355) 在 java.lang.Class.newInstance(Class.java:308) 在 org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:1682)

4

2 回答 2

2

Check out Apache TomEE Plus it is Tomcat with JAX-RS already integrated. You can skip the part where you hunt down libraries and try to get them integrated and move on to the writing code part.

Here's a video on how to set it up in Eclipse using the Tomcat web adpater and a simple Dynamic Web Project.

On the note of using EJBs as RESTful services, there are plenty of people that do that especially when JPA is involved. Aside from getting transactions for free, you also don't need a JAX-RS Application subclass or to map any REST servlets. A small perk, but nice.

As well you can expose the same class as a @Remote object and invoke it over RMI, as an JAX-WS @WebService and invoke it over HTTP/SOAP, or just annotate it @LocalBean and you can use the same object internally without the HTTP overhead. Nice to have the flexibility.

于 2012-06-05T22:52:33.087 回答
0

这个堆栈跟踪让我想知道 ResourceConfig 是否有一个无参数的默认构造函数。如果 OpenEJB 部署预期并没有找到它,您会看到这一点。

既然 REST 是用于 Web 服务的 HTTP API,那么为什么要将它与 OpenEJB 一起使用呢?我猜这两者将是相互排斥的。我会使用会话 EJB 或 REST 服务编写服务,但不能同时使用两者。

于 2012-06-03T16:18:47.757 回答