3.8.4. JMX部署

为了将SessionFactory注册到JNDI中,cfg.buildSessionFactory()这行代码仍需在某处被执行. 你可在一个static初始化块(像HibernateUtil中的那样)中执行它或将Hibernate部署为一个托管的服务.

为了部署在一个支持JMX的应用程序服务器上,Hibernate和 org.hibernate.jmx.HibernateService一同分发,如Jboss AS。 实际的部署和配置是由应用程序服务器提供者指定的. 这里是JBoss 4.0.x的jboss-service.xml样例:

  1. <?xml version="1.0"?>
  2. <server>
  3. <mbean code="org.hibernate.jmx.HibernateService"
  4. name="jboss.jca:service=HibernateFactory,name=HibernateFactory">
  5. <!-- 必须的服务 -->
  6. <depends>jboss.jca:service=RARDeployer</depends>
  7. <depends>jboss.jca:service=LocalTxCM,name=HsqlDS</depends>
  8. <!-- 将Hibernate服务绑定到JNDI -->
  9. <attribute name="JndiName">java:/hibernate/SessionFactory</attribute>
  10. <!-- 数据源设置 -->
  11. <attribute name="Datasource">java:HsqlDS</attribute>
  12. <attribute name="Dialect">org.hibernate.dialect.HSQLDialect</attribute>
  13. <!-- 事务集成 -->
  14. <attribute name="TransactionStrategy">
  15. org.hibernate.transaction.JTATransactionFactory</attribute>
  16. <attribute name="TransactionManagerLookupStrategy">
  17. org.hibernate.transaction.JBossTransactionManagerLookup</attribute>
  18. <attribute name="FlushBeforeCompletionEnabled">true</attribute>
  19. <attribute name="AutoCloseSessionEnabled">true</attribute>
  20. <!-- 抓取选项 -->
  21. <attribute name="MaximumFetchDepth">5</attribute>
  22. <!-- 二级缓存 -->
  23. <attribute name="SecondLevelCacheEnabled">true</attribute>
  24. <attribute name="CacheProviderClass">org.hibernate.cache.EhCacheProvider</attribute>
  25. <attribute name="QueryCacheEnabled">true</attribute>
  26. <!-- 日志 -->
  27. <attribute name="ShowSqlEnabled">true</attribute>
  28. <!-- 映射定义文件 -->
  29. <attribute name="MapResources">auction/Item.hbm.xml,auction/Category.hbm.xml</attribute>
  30. </mbean>
  31. </server>

这个文件是部署在META-INF目录下的, 并会被打包到以.sar (service archive)为扩展名的JAR文件中. 同时,你需要将Hibernate、它所需要的第三方库、你编译好的持久化类以及你的映射定义文件打包进同一个文档. 你的企业Bean(一般为会话Bean)可能会被打包成它们自己的JAR文件, 但你也许会将EJB JAR文件一同包含进能独立(热)部署的主服务文档. 参考JBoss AS文档以了解更多的JMX服务与EJB部署的信息.