1

Guice を Struts、Hibernate、Quartz スケジューラで動作させようとしています。アプリケーションを Tomcat にデプロイすると、次のエラーが発生します -

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 を使用してインジェクションがどのように行われているかを完全には理解していません。

私はそれがjarや構成の問題に関係しているのではないかと疑っていますか?

どんな助けでも大歓迎です、

ありがとう

4

1 に答える 1

2

私は誰かからこのコードを継承しましたが、Guice を使用してインジェクションがどのように行われているかを完全には理解していません。

詳細はGuice wikiに記載されています。しかし、非常に単純化されています:

GuiceFilterすべての呼び出しをインターセプトし、Guice が呼び出しを Guice が挿入したオブジェクトにリダイレクトできるようにします。

ユーザーが作成したクラスの拡張は、 Guice がオブジェクトを作成するのに使用するGuiceServletContextListener、正しく構成された を返します。Injecterこれは、リスナーとして XML ファイルに設定されます。

これは、通常Moduleの と 1 つ以上ServletModuleの を使用します。後者は、サーブレット、フィルター、およびリスナーのコードベースの構成を可能にします。


問題を推測すると、 には へGuiceServletContextListenerの参照が含まれていませんManagerModule

于 2009-11-20T11:39:58.017 に答える