首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Hibernate 3 整合 JBoss 3.2.x 完整部署指南

     編輯:Java 程式設計入門

整合架構優勢

JBoss 3.2.x 基於 JMX 微內核,Hibernate 實現 org.hibernate.jmx.HibernateService MBean 接口,可作為 JMX 服務部署,享受:

  • JBoss 連接池管理
  • JTA 事務支持(BMT/CMT)
  • 熱部署/熱卸載
  • 統一類加載器隔離

部署步驟

1. 準備庫文件


# 複製到 JBoss 共享庫目錄
cp hibernate3.jar \
   hibernate-annotations.jar \
   ehcache-*.jar \
   commons-collections-*.jar \
   dom4j-*.jar \
   javassist-*.jar \
   jta.jar \
   $JBOSS_HOME/server/default/lib/

2. 編寫 MBean 服務描述文件

文件名:hibernate-service.xml(放入 SAR 包的 META-INF/)


<?xml version="1.0" encoding="UTF-8"?>
<server>
    <mbean code="org.hibernate.jmx.HibernateService"
           name="jboss.jca:service=HibernateFactory,name=HibernateFactory">
        
        <!-- 依賴服務啟動順序 -->
        <depends>jboss.jca:service=RARDeployer</depends>
        <depends>jboss.jca:service=LocalTxCM,name=MyDataSource</depends>
        
        <!-- 映射文件路徑(相對 SAR 根目錄)-->
        <attribute name="MapResources">mappings/User.hbm.xml</attribute>
        
        <!-- JNDI 綁定名 -->
        <attribute name="JndiName">java:/HibernateFactory</attribute>
        
        <!-- 數據源 JNDI -->
        <attribute name="Datasource">java:/MyDataSource</attribute>
        
        <!-- 方言 -->
        <attribute name="Dialect">org.hibernate.dialect.SQLServerDialect</attribute>
        
        <!-- 事務策略:BMT 用 JTATransactionFactory,CMT 用 CMTTransactionFactory -->
        <attribute name="TransactionStrategy">org.hibernate.transaction.JTATransactionFactory</attribute>
        
        <!-- JBoss 事務管理器查找 -->
        <attribute name="TransactionManagerLookupStrategy">
            org.hibernate.transaction.JBossTransactionManagerLookup
        </attribute>
        
        <attribute name="UserTransactionName">UserTransaction</attribute>
        
        <!-- 可選:二級緩存配置 -->
        <attribute name="CacheProviderClass">org.hibernate.cache.EhCacheProvider</attribute>
        <attribute name="ShowSql">false</attribute>
    </mbean>
</server>

3. 打包 SAR 部署單元


# 目錄結構
myapp.sar/
├── com/myapp/model/          # 持久化類
├── mappings/
│   └── User.hbm.xml          # 映射文件
└── META-INF/
    ├── jboss-service.xml     # 上述 MBean 配置
    └── MANIFEST.MF

# 打包命令
cd myapp.sar
jar cf ../myapp.sar .
cp ../myapp.sar $JBOSS_HOME/server/default/deploy/

4. Session Bean 中使用


@Stateless
public class BookServiceBean implements BookService {
    @Resource SessionContext ctx;
    
    public void createBook() {
        try {
            InitialContext ic = new InitialContext();
            SessionFactory sf = (SessionFactory) ic.lookup("java:/HibernateFactory");
            
            Session session = sf.openSession();
            UserTransaction tx = ctx.getUserTransaction();
            
            tx.begin();
            Book book = new Book();
            book.setId(111L);
            book.setName("JBoss & Hibernate");
            book.setPrice(111f);
            session.save(book);
            tx.commit();
            
            session.close();
        } catch (Exception e) {
            throw new EJBException(e);
        }
    }
}

關鍵配置詳解

屬性BMT 值CMT 值說明
TransactionStrategyJTATransactionFactoryCMTTransactionFactory事務邊界管理方式
TransactionManagerLookupStrategyJBossTransactionManagerLookupJBossTransactionManagerLookup獲取 JBoss TM
UserTransactionNameUserTransactionN/ABMT 時 JNDI 名

常見問題排查

現象原因解決
ClassNotFound: HibernateServicehibernate3.jar 未放入 server/lib複製到共享庫目錄並重啟
DataSource 不可用depends 配置錯誤或 DS 未部署檢查 *-ds.xml 部署、JNDI 名一致
映射文件找不到MapResources 路徑錯誤相對 SAR 根目錄,區分大小寫
事務不回滾TransactionStrategy 與 Bean 類型不匹配BMT↔JTA, CMT↔CMT 對應正確
LazyInitializationExceptionSession 關閉後訪問延遲加載集合Open Session in View / fetch join / DTO 投影

進階配置:多 SessionFactory 隔離


<mbean code="org.hibernate.jmx.HibernateService"
       name="jboss.jca:service=HibernateFactory,name=CustomerFactory">
    <attribute name="JndiName">java:/CustomerFactory</attribute>
    <attribute name="Datasource">java:/CustomerDS</attribute>
    <attribute name="MapResources">mappings/customer/*.hbm.xml</attribute>
</mbean>

<mbean code="org.hibernate.jmx.HibernateService"
       name="jboss.jca:service=HibernateFactory,name=OrderFactory">
    <attribute name="JndiName">java:/OrderFactory</attribute>
    <attribute name="Datasource">java:/OrderDS</attribute>
    <attribute name="MapResources">mappings/order/*.hbm.xml</attribute>
</mbean>

遷移建議

JBoss 4.0+ 內建 Hibernate,配置簡化為 hibernate.cfg.xml + jboss-service.xml。若新建項目,建議直接使用 JBoss 4.x/5.x/7.x (WildFly) 獲得原生集成支持。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved