使用ejb3的时候,一般使用JPA,也就是用entityManager作为连接来操作持久化的业务,如果用hibernate的session来操作持久化业务,将是怎样呢?
查了一些资料,也走了一点弯路,现在把细节公布出来,希望能帮助类似项目的开发者节省一些时间,简而言之,hibernate文档中关于 把SessionFactory注册到JNDI中的方法在jboss5环境下面有问题,jboss5针对这个场景有新的办法:
原来的(struts2.1 spring2.5 hibernate3.3)架构转为 struts2+spring2.5 + jboss5( ejb3+hibernate3 )
为了继续能使用hibernate的会话以及一大堆BO DAO的代码,希望不使用entityManager,继续使用hibernate session,
那么为了得到sessionFactory,看了hibernate的文档,原来的mbean的方式是针对以前版本jboss4的写法,在jboss5下面报错。
<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=HsqlDS</depends>
<!-- 将Hibernate服务绑定到JNDI -->
<attribute name="JndiName">java:/hibernate/SessionFactory</attribute>
<!-- 数据源设置 -->
<attribute name="Datasource">java:HsqlDS</attribute>
<attribute name="Dialect">org.hibernate.dialect.HSQLDialect</attribute>
<!-- 事务集成 -->
<attribute name="TransactionStrategy">
org.hibernate.transaction.JTATransactionFactory</attribute>
<attribute name="TransactionManagerLookupStrategy">
org.hibernate.transaction.JBossTransactionManagerLookup</attribute>
<attribute name="FlushBeforeCompletionEnabled">true</attribute>
<attribute name="AutoCloseSessionEnabled">true</attribute>
<!-- 抓取选项 -->
<attribute name="MaximumFetchDepth">5</attribute>
<!-- 二级缓存 -->
<attribute name="SecondLevelCacheEnabled">true</attribute>
<attribute name="CacheProviderClass">org.hibernate.cache.EhCacheProvider</attribute>
<attribute name="QueryCacheEnabled">true</attribute>
<!-- 日志 -->
<attribute name="ShowSqlEnabled">true</attribute>
<!-- 映射定义文件 -->
<attribute name="MapResources">auction/Item.hbm.xml,auction/Category.hbm.xml</attribute>
</mbean>
现在jboss5下面,使用的是如下的方法:
在deploy目录下面,新建一个以 -hibernate.xml结尾的xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<hibernate-configuration xmlns="urn:jboss:hibernate-deployer:1.0">
<session-factory name="java:/hib-timers/SessionFactory" bean="jboss.test.har:service=Hibernate,testcase=TimersUnitTestCase">
<property name="datasourceName">java:/PostgresDS</property>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<!--
<property name="sessionFactoryInterceptor">org.jboss.test.hibernate.SimpleInterceptor</property>
-->
<property name="hbm2ddlAuto">update</property>
<depends>jboss:service=Naming</depends>
<depends>jboss:service=TransactionManager</depends>
</session-factory>
</hibernate-configuration>
这样的话即可。启动jboss5出现 如下log:
18:30:47,906 INFO [Hibernate] SessionFactory successfully built and bound into JNDI [java:/hib-timers/SessionFactory]
那么算是成功的创建了sessionFactory
检查一下上面的log,发现SimpleInterceptor有noFoundException,但是sessionFactory还是创建成功
再检查检查...
学习参考来源:
http://community.jboss.org/wiki/JBossHibernate3
分享到:
相关推荐
本文将详细讲解如何在JBoss应用服务器上整合Hibernate和EJB。 **一、EJB简介** EJB是Java EE平台的一部分,它提供了一种标准的方式来创建分布式、事务处理、安全和可管理的企业级服务。EJB类型主要包括会话Bean...
3. **SessionFactory 创建**:在应用程序中,通过读取`hibernate.cfg.xml`创建SessionFactory,并使用它来创建Session,进而进行数据库操作。 ```java Configuration config = new Configuration().configure(); ...
EJB3.0通过JPA(Java Persistence API)引入了实体管理,使得开发者可以使用ORM(对象关系映射)框架,如Hibernate,来实现数据访问层。 2. **会话Bean**:会话Bean提供业务逻辑,可以分为有状态和无状态两种。无...
《精通JBoss——EJB与Web Services开发精解》是一本深入探讨企业级Java应用开发的专业书籍,专注于JBoss应用服务器的使用以及EJB(Enterprise JavaBeans)和Web Services的集成开发。本书旨在帮助读者全面掌握如何在...
1. **注解驱动(Annotation-based)**:在EJB3中,开发者可以使用注解来声明组件的角色、生命周期方法和持久化属性,如`@Entity`、`@Stateless`、`@Stateful`、`@SessionBean`等,大大减少了XML配置文件的使用。...
**企业级JavaBeans (EJB) 3.0:核心概念与Session Bean详解** 企业级JavaBeans(Enterprise JavaBeans,简称EJB)是Java平台上用于构建可部署在服务器端的企业级应用的重要组件模型。EJB 3.0是EJB规范的一个重大...
结合这个配置,我们可以推断这是一个使用myEclipse进行开发,Jboss作为应用服务器,mysql作为数据库,且应用中可能使用了EJB技术的环境。开发者可以利用myEclipse的集成特性,编写EJB组件,并在Jboss上进行部署和...
3. **Session Beans**:会话bean(Session Bean)是EJB3.0中的业务逻辑组件,它们负责处理应用逻辑。相关的jar可能包括EJB容器提供的API,如`ejb-api.jar`,以及可能的实现库,如`geronimo-ejb_3.1_spec.jar`。 4. ...
此外,EJB3的持久化机制也可以与Hibernate、OpenJPA等ORM工具配合使用,提供更高级的功能和性能优化。 总结,ejb3-persistence.jar是Java EE中实现EJB3持久化规范的关键组成部分,它极大地简化了Java应用与数据库...
在本实例中,我们将使用MyEclipse6.0作为集成开发环境,以及JBoss3.2.1作为应用服务器来创建一个基本的EJB3入门项目。 **1. 开发环境准备** 首先,确保安装了JDK 1.5或更高版本,因为EJB3需要Java 5以上的支持。在...
3. **无容器依赖的Session Bean**:EJB3的无容器依赖的Session Bean(也称为“Plain Old Java Object”,POJO)允许开发者使用普通Java类来实现业务逻辑,无需继承特定的接口或实现特定的方法。 4. **容器管理事务*...
尽管JPA允许使用注解代替XML配置,但仍然需要一个名为persistence.xml的配置文件来指定数据源和其他服务器特定的属性,如在JBoss中配置Hibernate。 ```xml <persistence-unit name="Ejb3Tutorial"> ...
5. **javassist.jar**:Hibernate使用这个库来动态生成字节码,处理实体类的动态代理和类转换。 6. **jta.jar**:Java Transaction API,用于处理事务管理,确保数据的一致性和完整性。 7. **jboss-logging.jar**...
5. **Action和EJB3的交互**:在Action中注入EJB3 Session Bean,或者通过JNDI查找。例如,使用`@EJB`注解注入: ```java @EJB private MySessionBean ejbRef; ``` 6. **视图层**:Struts1.x的视图通常由JSP页面...
1. **hibernate3.jar**:这是Hibernate的核心库,包含了许多主要的类和接口,如SessionFactory、Session、Query等,以及实体管理、事务处理和事件监听等功能。 2. **dom4j-1.6.1.jar**:DOM4J是一个用于XML处理的...
本教程详尽地涵盖了Hibernate5框架的各个方面,旨在帮助开发者深入理解和熟练使用这一强大的ORM(对象关系映射)工具。ORM技术的核心思想是将Java对象模型与关系数据库模型进行映射,使得在Java代码中可以直接操作...
8. **ejb3-persistence.jar**: EJB 3持久化API,虽然Hibernate 2.1版本相对较早,但这个文件可能用于与EJB 3规范兼容。 9. **log4j.jar**: 日志记录库,用于记录Hibernate的操作日志,便于调试和问题排查。 10. **...