2012-02-25 3 views
0

Я недавно написал очень простой RESTful сервис развернут на JBoss AS 7.Config службы Resteasy с использованием Spring

У меня есть интерфейс JAX-RS нечистый, как (с помощью Скале):

@Provider 
@Path("/customers") 
trait ICustomerService { 
    @GET 
    @Path("/{id}") 
    @Produces(Array("application/xml")) 
    def getCustomer(@PathParam("id") id: Int): StreamingOutput 
} 

и А класс использует его (используя scala):

class ServiceFacade extends ICustomerService { 
    val ctx = new ClassPathXmlApplicationContext("orderservice.xml") 
    val customerService = ctx.getBean("customerService").asInstanceOf[CustomerService] 

    def getCustomer(id: Int): StreamingOutput = { 
    customerService.getCustomer(id) 
    } 
} 

Здесь проблема. Каждый раз, когда я выдаю запрос из клиентского браузера, Joboss создает новый ServiceFacade, поэтому один раз анализируется файл Spring xml.

Есть ли в любом случае я могу создать ServiceFacade самостоятельно в конфигурации Spring и просто позволить JBoss использовать его, а не создавать для каждого отдельного запроса clieng?

Большое спасибо.

ответ

0

Вы создаете новый контекст Spring при каждом создании экземпляра вашего ServiceFacade, попробуйте либо вставить контекст, либо создать синглтон. Я не верю, что JAX-RS или RestEasy gurantees создан только один экземпляр аннотированного класса.

Кроме того, я просто встаю, чтобы ускорить сам Скала, но не стоит ли размещать аннотации на реализацию, а не на черту?

+0

Спасибо за ваш ответ. То, как я хочу, чтобы это работало, - это создать только один ServiceFacade, используя весну, и как-то позволить resteasy использовать его, а не позволить resteasy создать его для каждого отдельного запроса. Есть идеи? – Kevin

+0

Взгляните на мой ответ на соответствующий вопрос: http://stackoverflow.com/questions/9009660/inject-spring-beans-into-resteasy/9445952#9445952. Если это не сработает для вас, я знаю, что Джерси предоставляет аннотацию @Singleton, которая заставляет контейнер поддерживать только один экземпляр. Я не знаю, предоставляет ли RestEasy то же самое. Вы можете попробовать использовать Джерси вместо стандартного JBoss RestEasy. –

Смежные вопросы