Jboss 推土机绘图机的静态使用

Jboss 推土机绘图机的静态使用,jboss,mapping,dozer,stateless-session-bean,Jboss,Mapping,Dozer,Stateless Session Bean,只是想知道这样的静态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

只是想知道这样的静态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是否使用库中的静态变量或实例变量来决定是否可以/应该使用静态映射器或在每次调用时创建新实例。

Dozer实例可能是静态的。若要为每个请求创建新实例,性能会差得多,因为每次都会初始化大量缓存。由于自定义转换器中的错误或内部推土机问题,可能会遇到并发错误。

推土机实例可能是静态的。若要为每个请求创建新实例,性能会差得多,因为每次都会初始化大量缓存。由于自定义转换器中的错误或内部推土机问题,可能会遇到并发错误。

从中,DozerMapper实例应构建为单例。DozerBeanMapper是线程安全的,因此您可以在任何情况下使用多线程

为了确保您也可以使用
DozerBeanMapperSingletonWrapper.getInstance()这将为您处理单例部分

我认为将映射器用作公共静态字段不是一个好主意

您还可以使用,来处理您的映射。这是一个基于注释处理器的新库,该处理器在编译时生成映射代码。有了它,您的代码将如下所示:

// 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);
从中,DozerMapper实例应构建为单例。DozerBeanMapper是线程安全的,因此您可以在任何情况下使用多线程

为了确保您也可以使用
DozerBeanMapperSingletonWrapper.getInstance()这将为您处理单例部分

我认为将映射器用作公共静态字段不是一个好主意

您还可以使用,来处理您的映射。这是一个基于注释处理器的新库,该处理器在编译时生成映射代码。有了它,您的代码将如下所示:

// 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);

我目前不使用自定义转换器。因此,我应该是安全的。我将更改静态实例的代码。我当前不使用自定义转换器。因此,我应该是安全的。我将更改静态实例的代码。