簡體   English   中英

在JBoss Weld中在持久性單元服務之前啟動服務

[英]Start Service Ahead of Persistence Unit Service in JBoss Weld

我目前有一個使用JBoss啟動服務和使用焊接管理EJB的應用程序。 啟動使用自定義類的Persistence Unit Manager時,@ EJB注釋以及服務為空,因此尚未被調用。 有沒有辦法設定命令以強制服務在持久性單元之前啟動?

我建議在JBoss Application Server中配置JTA數據源,以便您可以監視池化的連接對象及其使用情況。

將其復制到standalone.xml數據源子系統中: 注意:使用此數據源之前,您需要注冊供應商數據庫服務器的jdbc驅動程序。

在JBoss和Wildfly中添加數據庫驅動程序。

<datasource jta="true" jndi-name="java:/datasource/YOUR_APPLICATION_NAME" pool-name="YOUR_APPLICATION_NAME" enabled="true" use-ccm="true" statistics-enabled="true"><!--JNDI Name which will be used in your persistence.xml in your applicaton-->
                    <connection-url>jdbc:mysql://server-ip-here:3306/your-database-name</connection-url><!-- change according to your database-->
                    <driver-class>com.mysql.jdbc.Driver</driver-class><!-- change according to your database-->
                    <connection-property name="zeroDateTimeBehavior">
                        convertToNull
                    </connection-property>
                    <driver>mysql</driver><!-- change according to your database-->
                    <new-connection-sql>SELECT 1</new-connection-sql>
                    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
                    <pool>
                        <min-pool-size>3</min-pool-size>
                        <initial-pool-size>3</initial-pool-size>
                        <max-pool-size>5</max-pool-size>
                        <prefill>true</prefill>
                        <flush-strategy>FailingConnectionOnly</flush-strategy>
                    </pool>
                    <security>
                        <user-name>db-user-name</user-name>
                        <password>db-user-password</password>
                    </security>
                    <validation>
                        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/><!-- change according to your database-->
                        <check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
                        <validate-on-match>true</validate-on-match>
                        <background-validation>false</background-validation>
                        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/><!-- change according to your database-->
                    </validation>
                    <timeout>
                        <blocking-timeout-millis>6000</blocking-timeout-millis>
                        <idle-timeout-minutes>30</idle-timeout-minutes>
                        <query-timeout>60</query-timeout>
                        <allocation-retry>4</allocation-retry>
                        <allocation-retry-wait-millis>200</allocation-retry-wait-millis>
                    </timeout>
                    <statement>
                        <track-statements>true</track-statements>
                    </statement>
                </datasource>

您的src/main/java/resources/META-INF/persistence.xml文件應如下所示:

<persistence version="2.1" 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">
    <persistence-unit name="myAppPu" transaction-type="JTA">
        <description>Persistence Unit for MyApp Database</description>
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>jdbc:mysql://server-ip-here:3306/your-database-name</jta-data-source><!--This is already defined in newly created datasource-->

        !--<validation-mode>CALLBACK</validation-mode>-->
        <properties>
            <property name="javax.persistence.schema-generation.create-database-schemas" value="false" />
            <property name="javax.persistence.schema-generation.database.action" value="none" />
            <property name="hibernate.show_sql" value="true"></property>
            <property name="hibernate.format_sql" value="false"></property>
            <property name="use_sql_comments" value="false" />
            <property name="hibernate.archive.autodetection" value="class"></property>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"></property>
            <!-- Hibernate Envers -->
            <!--<property name="hibernate.auditable" value="false" />-->
        </properties>
    </persistence-unit>
</persistence>

現在您可以在應用程序中使用EntityManager了。 用法示例:

@Stateless
public class MyEjbServiceImpl implements MyEjbService {

    @PersistenceContext(unitName = "myAppPu") //this should match with unitname defined in persistence.xml
    private EntityManager em;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM