2009-11-19 3 views
0

Я пытаюсь заставить Guice работать с планировщиками Struts, Hibernate и Quartz. Когда я раскрываю мое приложение под Tomcat, я получаю следующее сообщение об ошибке -Исключение Guice Creation

Nov 19, 2009 2:11:26 PM com.google.inject.struts2.GuiceObjectFactory buildBean 
INFO: Creating injector... 
com.google.inject.CreationException: Guice configuration errors: 

1) Error at com.sample.common.entity.PersistenceServiceImpl.scheduler(PersistenceServiceImpl.java:22): 
    Error while injecting at com.sample.cacher.UiAction.persistenceService(UiAction.java:27): Error while injecting at com.sample.cacher.UiAction.persistenceService(UiAction.java:27): Binding to org.quartz.Scheduler not found. No bindings to that type were found. 

2) Error at com.sample.common.entity.PersistenceServiceImpl.session(PersistenceServiceImpl.java:22): 
    Error while injecting at com.sample.cacher.UiAction.persistenceService(UiAction.java:27): Error while injecting at com.sample.cacher.UiAction.persistenceService(UiAction.java:27): Binding to org.hibernate.Session not found. No bindings to that type were found. 

2 error[s] 
    at com.google.inject.BinderImpl.createInjector(BinderImpl.java:277) 
    at com.google.inject.Guice.createInjector(Guice.java:79) 
    at com.google.inject.Guice.createInjector(Guice.java:53) 
    at com.google.inject.Guice.createInjector(Guice.java:43) 

И код

@ImplementedBy(PersistenceServiceImpl.class) 
public interface PersistenceService { 
public void save(JobInformation dataObject); 

public void remove(String jobName, String jobGroup, Class jobClass); 

public List getActiveJobsFor(String userName, Class clazz) throws Exception; 
} 

public class PersistenceServiceImpl implements PersistenceService 
{ 
    @Inject 
    private Session session; 
    @Inject 
    private Scheduler scheduler; 
    ... 
} 

package com.sample.common.entity; 
public class ManagerModule extends AbstractModule { 
protected void configure() { 
    bind(Session.class) 
      .toProvider(SessionProvider.class); 
    bind(Scheduler.class) 
      .toProvider(SchedulerProvider.class); 
} 
} 

public class UiAction extends ActionSupport implements PrincipalAware 
{ 
    @Inject 
    private PersistenceService persistenceService; 
    .... 

    public String doSave() throws ParseException { 


     persistenceService.save(data); 

     return doList(); 
     } 
    } 

И в web.xml

<filter> 
    <filter-name>guice</filter-name> 
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> 
    </filter> 
    <filter-mapping> 
    <filter-name>guice</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Может кто-нибудь, пожалуйста, пролить некоторый свет на почему это приложение рушится? Я унаследовал этот код от кого-то, и я не совсем понимаю, как происходит инъекция с использованием Guice.

Я подозреваю, что это связано с любыми проблемами или проблемами с конфигурацией?

Любая помощь очень ценится,

Благодаря

ответ

2

Я унаследовал этот код от кого-то, и я не в полной мере понять, как инъекции происходит с помощью Guice.

Подробности описаны на Guice wiki. Но грубо упрощено:

GuiceFilter перехватывает все вызовы и позволяет Guice перенаправить их на объекты, введенные в Guice.

Пользовательский класс, расширяемый GuiceServletContextListener, возвращает правильно сконфигурированный Injecter, с помощью которого Guice создаст ваши объекты. Это устанавливается в вашем XML-файле в качестве слушателя.

Используется обычный Module s и один или несколько ServletModule s. Последние позволяют использовать code-based configuration сервлетов, фильтров и прослушивателей.


Если было угадать вашу проблему, то GuiceServletContextListener не содержит ссылку на ManagerModule.