2009-11-19 5 views
0

J'essaie de faire fonctionner Guice avec Struts, Hibernate et Quartz Scheduler. Quand je ma demande sous déployer Tomcat, je reçois l'erreur suivante -Guice Creation Exception

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) 

Et le code

@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(); 
     } 
    } 

Et le 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> 

Quelqu'un peut-il s'il vous plaît faire la lumière sur pourquoi cette application plante? J'ai hérité de ce code de quelqu'un et je ne comprends pas complètement comment l'injection se passe en utilisant Guice.

Je soupçonne que cela a à voir avec des bocaux ou des problèmes de configuration?

Toute aide est grandement appréciée,

Merci

Répondre

2

J'ai hérité ce code de quelqu'un et je ne comprends pas bien comment l'injection se produit à l'aide Guice.

Les détails sont décrits dans le Guice wiki. Mais grossièrement simplifié:

Le GuiceFilter intercepte tous les appels et permet à Guice de les rediriger vers des objets injectés par Guice.

Une classe construite par l'utilisateur qui s'étend de GuiceServletContextListener renvoie un Injecter correctement configuré avec lequel Guice créera vos objets. Ceci est défini dans votre fichier XML en tant qu'auditeur.

Ceci utilise Module s et un ou plusieurs ServletModule s. Ces derniers permettent un code-based configuration de servlets, de filtres et d'écouteurs.


Si était de deviner à votre problème, la GuiceServletContextListener ne contient pas de référence à ManagerModule.