Archive

Archive for January, 2012

JBoss-seam double datasource

January 11, 2012 Leave a comment

Suatu hari anak muda mendapat tugas membuat sopwer yang menggunakan dua database. Yang satu menggunakan MySQL dan satu lagi Oracle. Sang anak muda sudah terbiasa menggunakan seam-framework dan akan menggunakan seam juga untuk membuat program yang ditugaskan.

Datasource yang pertama digunakan untuk main data transaction (smsgw), sedangkan datasource yang kedua digunakan sekedar baca (mbmcDatasource). Berikut adalah langkah2 yang dilakukan oleh anak muda dalam menggunakan dua datasource di seam-projectnya:

  1. Definisikan datasource di *-ds.xml
    <local-tx-datasource>
    <jndi-name>smsgwDatasource</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/smsgw</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>smsgw</user-name>
    <password>rahasia</password>
    </local-tx-datasource>

    <no-tx-datasource>
    <jndi-name>mbmcDatasource</jndi-name>
    <connection-url>jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:ORACLESID</connection-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <user-name>root</user-name>
    <password>rahasia</password>
    </no-tx-datasource>

  2. Definisikan entity manager di component.xml
    <persistence:managed-persistence-context name=”entityManager”
    auto-create=”true”
    entity-manager-factory=”#{smsgwEntityManagerFactory}”/>
    <persistence:entity-manager-factory name=”smsgwEntityManagerFactory”
    persistence-unit-name=”smsgw”/>
    <persistence:managed-persistence-context name=”mbmcEntityManager”
    auto-create=”true”
    entity-manager-factory=”#{mbmcEntityManagerFactory}”/>
    <persistence:entity-manager-factory name=”mbmcEntityManagerFactory”
    persistence-unit-name=”mbmc”/>
  3. Definisikan jndi datasource nya di persistence-*.xml
    <persistence-unit name=”smsgw” transaction-type=”JTA”>
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>java:/smsgwDatasource</jta-data-source>
    <properties>
    <property name=”hibernate.dialect” value=”org.hibernate.dialect.MySQLDialect”/>
    <!– property name=”hibernate.hbm2ddl.auto” value=”update”/–>
    <property name=”hibernate.show_sql” value=”true”/>
    <property name=”hibernate.format_sql” value=”true”/>
    <property name=”hibernate.transaction.manager_lookup_class” value=”org.hibernate.transaction.JBossTransactionManagerLookup”/>
    <property name=”hibernate.connection.release_mode” value=”after_transaction”/>
    </properties>
    </persistence-unit>

    <persistence-unit name=”mbmc” transaction-type=”RESOURCE_LOCAL”>
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source>java:/mbmcDatasource</non-jta-data-source>
    <properties>
    <property name=”hibernate.dialect” value=”org.hibernate.dialect.Oracle10gDialect”/>
    <property name=”hibernate.show_sql” value=”true”/>
    <property name=”hibernate.format_sql” value=”true”/>
    <property name=”jboss.entity.manager.factory.jndi.name” value=”java:/mbmcEntityManagerFactory”/>
    <property name=”hibernate.connection.release_mode” value=”after_transaction”/>
    </properties>
    </persistence-unit>
    4. Untuk menggunakan masing-masing entityManager, sang anak muda cukup menggunakan anotasi lookup @In yang dimiliki oleh seamframework.
    —SomeWhere.java–
    @In
    private EntityManager entityManager;
    @In
    private EntityManager mbmcEntityManager;

Seingat anak muda itulah step2 yang dilakukannya. Semoga bermanfaat. Salam.

Categories: Ngoprek, NyanyianKode, seam