Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在多个项目中使用同一个Hibernate管理的数据库时会导致问题吗?_Java_Hibernate_Wildfly_Jta - Fatal编程技术网

Java 在多个项目中使用同一个Hibernate管理的数据库时会导致问题吗?

Java 在多个项目中使用同一个Hibernate管理的数据库时会导致问题吗?,java,hibernate,wildfly,jta,Java,Hibernate,Wildfly,Jta,我将Wildfly与Hibernate一起使用,我将有两个不同的项目访问同一个数据库。每个项目都有自己的persistence.xml,但是persistence.xml中的数据源是相同的。目前我有一个包含这些数据源的项目。这看起来像这样: 项目A: <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http

我将Wildfly与Hibernate一起使用,我将有两个不同的项目访问同一个数据库。每个项目都有自己的persistence.xml,但是persistence.xml中的数据源是相同的。目前我有一个包含这些数据源的项目。这看起来像这样:

项目A:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
    version="2.1">

    <persistence-unit name="MyProjectPersistenceUnit" transaction-type="JTA">
        <jta-data-source>java:jboss/datasources/myprojectDS</jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.connection.useUnicode" value="true" />
            <property name="hibernate.connection.characterEncoding" value="UTF-8" />
            <property name="hibernate.connection.charSet" value="UTF-8" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="validate" />
        </properties>
    </persistence-unit>

    <persistence-unit name="MyProjectLoggingUnit" transaction-type="RESOURCE_LOCAL">
        <non-jta-data-source>java:jboss/datasources/myprojectDS</non-jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.connection.useUnicode" value="true" />
            <property name="hibernate.connection.characterEncoding" value="UTF-8" />
            <property name="hibernate.connection.charSet" value="UTF-8" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="validate" />
        </properties>
    </persistence-unit>

</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
    version="2.1">

    <persistence-unit name="MyProjectLoggingUnit" transaction-type="JTA">
        <jta-data-source>java:jboss/datasources/myprojectDS</jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.connection.useUnicode" value="true" />
            <property name="hibernate.connection.characterEncoding" value="UTF-8" />
            <property name="hibernate.connection.charSet" value="UTF-8" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="validate" />
        </properties>
    </persistence-unit>

</persistence>
第一个项目使用JTA和RESOURCE_本地事务,因此我可以“手动”处理日志记录。第二个项目只使用JTA,因为我只在那里做日志记录操作。项目A执行CRUD操作,项目B仅创建操作。两个项目都在同一个Wildfly服务器中运行。在项目A和项目B之间使用来自不同项目的相同数据源访问同一数据库时,是否可能会出现任何问题(可能是数据库锁定、Wildfly中的事务或其他问题)?
我不这么认为,但我担心可能会出现一些“副作用”,我还不知道。

应该没有问题,因为数据源由jboss管理,它将根据您的配置分配连接,如果您使用同一行处理不同项目,可能会发生锁定,但请让数据库来处理


还有不同的实体可以避免产生任何问题,比如TCP连接是相同的/共享的会话,事务在操作上是不同的,spring和hibernate都是成熟的,它们做得最好,除非你弄乱了配置;),您的看起来不错。

应该没有问题,因为数据源由jboss管理,它将根据您的配置分配连接,如果您使用同一行处理来自不同项目的数据,则可能会发生锁定,但请让数据库处理


还有不同的实体可以避免产生任何问题,比如TCP连接是相同的/共享的会话,事务在操作上是不同的,spring和hibernate都是成熟的,它们做得最好,除非你弄乱了配置;),你看起来不错。

我同意原则上你不必担心!但是,由于我们不是在讨论魔术,而且当某些东西不起作用时,总会有一种解释,因此您应该担心的唯一情况是两个应用程序之间可能存在业务耦合,当然最终会出现在数据库中。我想说的是,如果Application1与Application2使用相同的DB,它在实体上执行的操作最终会对另一个应用程序上的逻辑可见/更新,那么是的,您可能会面临一些技术上的死锁(对于DB来说最终很好)但在业务代码级别上可能会出现问题


这是一个设计和更高耦合的问题,这恰好导致DB上的技术耦合。我不确定我的描述是否正确,作为一个高度关注:)

我同意原则上你不应该担心!但是,由于我们不是在讨论魔术,而且当某些东西不起作用时,总会有一种解释,因此您应该担心的唯一情况是两个应用程序之间可能存在业务耦合,当然最终会出现在数据库中。我想说的是,如果Application1与Application2使用相同的DB,它在实体上执行的操作最终会对另一个应用程序上的逻辑可见/更新,那么是的,您可能会面临一些技术上的死锁(对于DB来说最终很好)但在业务代码级别上可能会出现问题


这是一个设计和更高耦合的问题,这恰好导致DB上的技术耦合。我不确定我的描述是否正确,因为这是一个高度关注的问题:)

你是对的,但这不会发生。我唯一要做的就是从两个项目都使用的公共表中读取数据,然后写入两个项目都使用的日志表。这两个操作的业务逻辑没有问题。(实际上,两个子项目都属于一个大项目,但它们是其中的不同部分)。你是对的,但这不会发生。我唯一要做的就是从两个项目都使用的公共表中读取数据,然后写入两个项目都使用的日志表。这两个操作的业务逻辑没有问题。(实际上,两个子项目都属于一个大项目,但它们是其中的不同部分)。