1

このような静的 dozer マッパーを使用すると、同時実行エラーが発生する可能性があるのではないかと考えています。

public static Mapper mapper = new DozerBeanMapper();
public static MyDTO toDTO(MyEntity e) {
    MyDTO dto = mapper.map(e, MyDTO.class);
    return dto;
}

または、常にこのコードを使用する必要があります:

public static MyDTO toDTO(MyEntity e) {
    Mapper mapper = new DozerBeanMapper();
    MyDTO dto = mapper.map(e, MyDTO.class);
    return dto;
}

このメソッドは JBoss サーバーの @Stateless セッション Bean で使用され、同時にアクセスできます。実際には、Dozer がライブラリ内の静的変数またはインスタンス変数を使用して、静的 Mapper を使用できるかどうか、またはすべての呼び出しで新しいインスタンスを作成する必要があるかどうかを判断するかどうかはわかりません。

4

2 に答える 2

6

Dozer インスタンスは静的である可能性があります。リクエストごとに新しいインスタンスを作成すると、毎回多くのキャッシュが初期化されるため、パフォーマンスが大幅に低下します。ConcurrencyErrors は、カスタム コンバーターのバグまたは Dozer の内部問題が原因で発生する可能性があります。

于 2013-03-15T16:31:34.167 に答える
1

ドキュメントから、DozerMapper インスタンスはシングルトンとしてビルドする必要があります。DozerBeanMapper はスレッド セーフであるため、複数のスレッドを危険にさらしても使用できます。

これも使用できることを確認するためにDozerBeanMapperSingletonWrapper.getInstance();、シングルトン部分を処理します。

マッパーをパブリック静的フィールドとして使用するのは本当に良い考えだとは思いません。

Selmaを使用してマッピングを処理することもできます。これは、コンパイル時にマッピング コードを生成する Annotation プロセッサに基づく新しいライブラリです。それを使用すると、コードは次のようになります。

// Configure the mapping
@Mapper
public interface DtoMapper {

    MyDTO toDTO(MyEntity e);
}

// Retrieve the mapper 
public static DtoMapper mapper = Selma.getMapper(DtoMapper.class);

// and some where in the code use
mapper.toDto(entity);
于 2014-05-21T09:33:41.047 に答える