1

私は、休止状態の注釈付きクラスを使用し、DAO サービス層を使用する wicket アスペクト j アプリケーションを持っています。

アプリケーションコンテキストで実行されない updatetask を開発しました。そのため、メイン メソッドを作成し、コンテキストをグローバル変数としてロードしました。

public static void main(String[] args) throws Exception
{
    context = new ClassPathXmlApplicationContext(LOCATIONS);
    XS2RAWebApp webApp = new XS2RAWebApp() {
        @Override
        public void init() {
            getComponentInstantiationListeners().add(new SpringComponentInjector(this, context,true));
        }
    };
    ThreadContext.setApplication(webApp);
    ResponseUpdateTask updatetask = new ResponseUpdateTask();

    updatetask.run();
}

ご覧のとおり、SpringComponentInjector には springcomponent インジェクターが用意されています。

この更新タスクでは、休止状態でデータを保存したいと考えています。

Hibernate エンティティがあり、このエンティティ内にサービス DAO への参照があります。

@MappedSuperclass()
public abstract class Entiteit {
    private static final Logger log = LoggerFactory.getLogger(Entiteit.class);

    @SpringBean()
    @Transient
    private transient DataAccessHelper daoHelper;
    ...
    public DataAccessHelper getDaoHelper() {
    if (daoHelper== null) {
        Injector.get().inject(daoHelper);
    }
    return daoHelper;
  }
}

私が試したこと

  1. Mockapplication を使用して、新しい new SpringComponentInjector(this, context,true) を追加するだけです。これにより、アプリケーションで init を実行するように指示する例外が発生します (Apllication.init())
    1. 試行錯誤の解決策

私が試したことはあまりないように思えますが、今は本当に選択肢がありません:S

4

1 に答える 1

2

ServetContext と WicketFilter へのリンクを持つアプリケーションを登録する必要があります。これはプログラムで行うことができます:

public static void main(String[] args) throws Exception
{
    context = new ClassPathXmlApplicationContext(LOCATIONS);
    XS2RAWebApp webApp = new XS2RAWebApp() {
        @Override
        public void init() {
            getComponentInstantiationListeners().add(new SpringComponentInjector(this, context,true));
        }
    };
    ThreadContext.setApplication(webApp);
    webApp.setServletContext(new MockServletContext());
webApp.setWicketFilter(new WicketFilter(webApp));
webApp.initApplication();

    ResponseUpdateTask updatetask = new ResponseUpdateTask();
    updatetask.run();
}
于 2012-11-06T15:48:13.480 に答える