1

Dozer のドキュメントには、サーバー上のアプリで DozerBeanMapper のインスタンスを 1 つだけ実行する必要があると記載されています。最初の開発ではこれを無視しましたが、今はこれを行うようにアプリを更新したいと考えています。

アプリケーションが Glassfish で起動したときに DozerBeanMapper クラスをインスタンス化するにはどうすればよいですか?また、アプリケーションが起動または新しくデプロイされたら、別のクラスでその「マップ」メソッドにアクセスするにはどうすればよいですか?

これは EJB 用であるため、サーブレットを使用してこれを行うことはできません。



OK、ようやくこのコードをリファクタリングする時間ができました。@Mikko Maunu からのポインタを使用して、質問を編集して、将来役に立つと思われる人のために、私のために働いているコードを提供しています。

package com.xyz.utilities.singleton;

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import org.dozer.DozerBeanMapper;

@Startup
@Singleton
public class DozerInstantiator {

  private DozerBeanMapper mapper = null;

  @PostConstruct
  void init() {
    mapper = new DozerBeanMapper();
  }

  public DozerBeanMapper getMapper() {
    return mapper;
  }

}

そして、ここに簡単なユースケースがあります:

EJB メンバー変数をクライアント クラスに注入します。

  @EJB
  DozerInstantiator di;

クライアント クラスのどこかにあるメソッド内で、次のように dozer マッパーを呼び出すことができます。

Credentials credentials = di.getMapper().map(credentialsDTO, Credentials.class);
// or
Credentials credentials = new Credentials();
di.getMapper().map(credentialsDTO, credentials);

これが間違っているか、ベースから外れている場合は、誰かがコメントを残してください. それまでは、これでうまくいくようですので、Mikko の意見で開発したこのソリューションを使用します。

4

1 に答える 1

1

GlassFish 3.x を使用している場合は、EJB 3.1 シングルトン セッション Bean を使用できます。

@Startup //initialization in application startup
@Singleton //only one instance 
public class DozerInitializer {
    private String status;

    @PostConstruct //executed once and only once when sole instance is created
    void init {
        //do steps needed to instantiate DozerBeanMapper
        //here
    }
}
于 2012-06-17T17:17:01.033 に答える