Question

I'm trying to get Tomcat 7 (comes with OpenEJB) to work with Jersey 1.9. I had my Jersey RestFUL service working with Tomcat 6. But as soon as I deployed the war file to Tomcat 7(OpenEJB) I get the following error.

I created a new dynamic web project in Eclipse and added the following jars to WEB-INF/lib folder without adding any extra code but I still got the same error. It seems like Tomcat 7's OpenEJB is not liking Jersey jars.

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

Caused by: org.apache.openejb.OpenEJBException: Unable to instantiate Application class: com.sun.jersey.api.core.ResourceConfig: null at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:1685) at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:1482) at org.apache.openejb.config.AnnotationDeployer.deploy(AnnotationDeployer.java:293) at org.apache.openejb.config.ConfigurationFactory$Chain.deploy(ConfigurationFactory.java:263) at org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:693) at org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:588) ... 23 more

Caused by: java.lang.InstantiationException at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at java.lang.Class.newInstance0(Class.java:355) at java.lang.Class.newInstance(Class.java:308) at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:1682)

Was it helpful?

Solution

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.

OTHER TIPS

This stack trace makes me wonder if ResourceConfig has a no-argument default constructor. You'd see this if the OpenEJB deployment expects on and doesn't find it.

Since REST is an HTTP API for web services, why would you be using it with OpenEJB? I would guess that the two would be mutually exclusive. I'd write services using session EJBs or REST services, but not both.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top