2013-06-02 2 views
2

У меня есть автономный проект весны, и мне нужно запустить встроенный сервис отдыха с ним. Я мог бы запустить сервер с гризли, моя проблема в том, что когда я запускаю сервер grizzly, он создает свой собственный контекст приложения. поэтому экземпляры, созданные моим родительским приложением, недоступны через службу REST.Grizzly, разделяя весенний контекст

В любом случае, существует разделение контекста родительского приложения между сервером Grizzly и родительским приложением, отличным от получения контекста сгенерированного гризли.

Это мой код для запуска сервера гризли.

public class RemotingServer { 

    private HttpServer httpServer; 
    private String host; 
    private int port; 

    public RemotingServer(String host, int port) { 
     this.host = host; 
     this.port = port; 
    } 

    public void init() throws Exception { 
     URI uri = UriBuilder.fromUri("http://" + host + "/").port(port).build(); 

     ResourceConfig rc = new DefaultResourceConfig(); 

     ConfigurableApplicationContext cac = 
       new ClassPathXmlApplicationContext("classpath:remoting-context.xml"); 

     IoCComponentProviderFactory factory = new SpringComponentProviderFactory(rc, cac); 

     httpServer = GrizzlyServerFactory.createHttpServer(uri, rc, factory); 
     httpServer.start(); 

    } 

    public void stop() { 
     httpServer.stop(); 
    } 
} 

Я попытался установить текущий контекст как родитель cac «s слишком. Затем я получил следующее исключение.

java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

спасибо.

ответ

0

Попробуйте это:

ConfigurableApplicationContext cac = 
      new ClassPathXmlApplicationContext("classpath:remoting-context.xml"); 
// Have Spring load the context 
cac.refresh(); 
IoCComponentProviderFactory factory = new SpringComponentProviderFactory(rc, cac); 
Смежные вопросы