2009-11-19 92 views
0

我想让Guice与Struts,Hibernate和Quartz scheduler一起工作。当我部署我在Tomcat下的应用程序,我碰到下面的错误 -Guice创建异常

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的servlet,过滤器和监听器。


如果是你的问题猜测则GuiceServletContextListener不包含ManagerModule参考。