如何跨多个PU最好份额的实体类/ DAO的?(How to best share entity cl

2019-10-18 00:59发布

让我们来简单的例子,假设我们有一个实体类

@Entity
public class User {
}

以及处理的数据DAO:

public interface UserDao {
    @Transactional
    public void changeUser(User user);
}

@Repository
public class UserDaoImpl implements UserDao {
    @PersistenceContext
    private EntityManager em;

    @Override
    public void changeUser(User user) {
        // ...
    }
}

我们有一个包含了大量的其他子项目主要Maven项目,我们用来构建多个应用程序(战争,JAR文件等)。 我们选择的框架是春天。

每一个应用程序需要上述实体/ DAO和有不需要每个应用程序的定制,一切依旧。 每个应用程序都有其自己的数据源/持久单元/事务管理。

如何才能最好的重复使用跨多个应用程序上面的实体/ DAO? 该实体需要在应用程序的数据库被保留,我们还就需要重新使用应用程序的事务管理器。

那你在类似的情况吗?

Answer 1:

我会创建单独的Maven模块,将包含实体和DAO(你甚至可以创建两个模块 - 一个用于实体和一个用于DAO的)。

该模块将被添加作为一个依赖于任何其他应用程序模块(EJB或WAR模块),这需要DB层。 在Spring配置必须先定义数据源,持久化上下文,事务管理,等等。这样,注射的规则,你将有不同的配置公共代码。



Answer 2:

我同意,模块化类是比较容易的部分; 自动配置查找/加载的是棘手的部分。

我想一个可以创建一个applicationContext.xml为每个模块(清单豆在其中,控制器等),并使用所述多个配置支持加载它们。 但是,因为显然我们不能说出所有XML文件一样,我建议如下:

主要项目的web.xml

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:auto-appctx-*.xml</param-value>
    </context-param>

和一个Maven / Ant脚本,将这样的各模块/ JAR的包装过程中的时间戳XML文件:

    <target name="copy-unique-appctx">
        <timestamp/>
        <copy src="src/resource/applicationContext.xml"
            dest="build/classes/auto-appctx-${timestamp}.xml"/>
    </target>

请注意,这个Ant目标是“通过记忆”,这是粗略的时刻,需要加以纠正(如果这个想法实际工作)类型。



文章来源: How to best share entity classes/DAOs across multiple PUs?