2012-10-10 24 views
3

我一直在用Glassfish開發一個小的Java EE應用程序。它基本上是一個RESTful服務應用程序。這是一個帶有作爲EJB開發的RESTful服務的Web應用程序。整個事情是使用Netbeans嚮導創建的,並且Glassfish 3.1.1上的所有功能都完美運行。RESTeasy,EJBs和@Context對象注入

我試圖在JBoss 7.1.1上部署應用程序,並開始出現問題。我嘗試使用Jersey並且一切正常,但持久單元未正確注入到EJB中。我將應用程序轉換爲通常包含在耳朵中的完整Java EE應用程序(war,ejb-jar,ear),並將web.xml中的RESTEasy配置爲使用EJB。現在一切正常,但使用@Context注入javax.ws.rs.core.HttpHeaders實例, javax.ws.rs.core.Request等無法正常工作。這些字段始終爲空。

令人沮喪的是,在每一步中我都會發現RESTeasy存在問題。

這是我的web.xml的一個簡化版本:

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <context-param> 
     <param-name>resteasy.jndi.resources</param-name> 
     <param-value>java:module/CountryFacadeREST</param-value> 
    </context-param> 
    <context-param> 
     <param-name>resteasy.servlet.mapping.prefix</param-name> 
     <param-value>/webresources</param-value> 
    </context-param> 
    <listener> 
     <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class> 
    </listener> 
    <servlet> 
     <servlet-name>RESTeasy</servlet-name> 
     <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>RESTeasy</servlet-name> 
     <url-pattern>/webresources/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

這是一個示例EJB:

package com.mt.rest.service; 

import java.util.List; 

import javax.ejb.Stateless; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.DELETE; 
import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.HttpHeaders; 
import javax.ws.rs.core.Request; 
import com.mt.entity.Country; 

/** 
* 
* @author mt 
*/ 
@Stateless 
@Path("country") 
public class CountryFacadeREST extends AbstractFacade<Country> { 
    @PersistenceContext(unitName = "myparkPU") 
    private EntityManager em; 

    @Context 
    HttpHeaders requestHeaders; 

    @Context 
    Request request; 

    public CountryFacadeREST() { 
     super(Country.class); 
    } 

    @POST 
    @Override 
    @Consumes({ "application/json" }) 
    public void create(Country entity) { 
     super.create(entity); 
    } 

    @PUT 
    @Override 
    @Consumes({ "application/json" }) 
    public void edit(Country entity) { 
     super.edit(entity); 
    } 

    @DELETE 
    @Path("{id}") 
    public void remove(@PathParam("id") Integer id) { 
     super.remove(super.find(id)); 
    } 

    @GET 
    @Path("{id}") 
    @Produces({ "application/json" }) 
    public Country find(@PathParam("id") Integer id) { 
     return super.find(id); 
    } 

    @GET 
    @Produces({ "application/json" }) 
    public List<Country> findAll() { 
     return super.findAll(); 
    } 

    @GET 
    @Path("{from}/{to}") 
    @Produces({ "application/json" }) 
    public List<Country> findRange(@PathParam("from") Integer from, 
      @PathParam("to") Integer to) { 
     return super.findRange(new int[] { from, to }); 
    } 

    @GET 
    @Path("count") 
    @Produces("text/plain") 
    public String countREST() { 
     return String.valueOf(super.count()); 
    } 

    @Override 
    protected EntityManager getEntityManager() { 
     return em; 
    } 
} 

我跟着從RestEasy的文檔以下的建議,但一切都沒有改變:

3.6。修補JBoss AS 7 Resteasy與JBoss AS 7捆綁在一起。您可能需要升級AS7中的Resteasy。 Resteasy 發行版附帶了一個名爲 的zip文件resteasy-jboss-modules-2.3.4.Final.zip。在頂層目錄 JBoss AS 7(帶有modules /目錄的目錄)中,解壓縮這個文件。在此之後,你應該用最新的最好的Resteasy修補你的 。

我提供了一個空的web.xml和創建的應用程序的類:

package com.mt.rest.service; 

import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 

@ApplicationPath("/webresources") 
public class ApplicationConfig extends Application { } 

但仍在@Context對象噴射失敗。請注意,持久單元已正確注入。

回答