struts2+hibernate4+spring3
1 开发步骤:
jar包链接:
http://download.csdn.net/detail/kinbridge/9425213
1.1 工程结构
1.2 创建表插入测试数据;
create table A_USER ( userid NUMBER(10) not null primary key, username NVARCHAR2(20) not null, pass NVARCHAR2(500) not null )
INSERT INTO A_USER(userid,username,pass) VALUES(1,'a1','123456'); INSERT INTO A_USER(userid,username,pass) VALUES(2,'a2','123456'); COMMIT; |
1.3 jdbc.properties
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username =accp
jdbc.password=123456
proxool.maxConnCount=10
proxool.minConnCount=2
proxool.simultaneousBuildThrottle=60000
1.4 增加实体类和配置文件
第一种:使用注解 User.java package com.struts.bean;
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "A_USER") public class User { @Id private int userId;
@Column(name = "USERNAME") private String username;
@Column(name = "PASS") private String userpwd;
public int getUserId() { return userId; }--省略set和get方法 }
第二种:或者实体类+配置文件 User.java
public class User {
private int userId; private String username; private String userpwd; --省略set和get方法
user-hbn.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package=" com.struts.bean"> <class name="user" table="a_user"> <id name="id" column="userId"> <generator class="assigned" /> </id> <property name="username" column="username"></property> <property name="PASS" column="pass"></property>
</hibernate-mapping>
|
1.5 数据访问层接口和实现类
接口UserDao.java
package com.struts.dao;
import java.util.List; import com.struts.bean.User;
public interface UserDao { public List<User> queryAllUsers();
boolean saveUser(User user); public String rturnTest() ; }
实现类:UserDaoImpl.java
//@Repository("UserDao") public class UserDaoImpl implements UserDao { //@Autowired private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; }
public Session getCurrentSession() { return sessionFactory.getCurrentSession();// 增删改使用的session }
public Session qryCurrentSesion() { return sessionFactory.openSession();// 查询使用的session }
@Override public List<User> queryAllUsers() { // TODO Auto-generated method stub return null; }
public String rturnTest() { // TODO Auto-generated method stub return "rturnTest"; }
@Test public void saveUserTest() { System.out.println("11111"); @SuppressWarnings("resource") ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); sessionFactory = (SessionFactory)context.getBean("sessionFactory"); System.out.println("1111111111111111111111111111111"+sessionFactory); Session session = sessionFactory.getCurrentSession();
System.out.println("2"+session); }
public boolean saveUser(User user) { Session session = getCurrentSession(); Transaction tx = session.beginTransaction(); try { session.save(user); tx.commit(); return true; } catch (Exception e) { if (e != null) { tx.rollback(); } } return false; } }
|
1.6 业务逻辑层接口和实现类:
UserService.java public interface UserService { public List<User> queryAllUsers();
boolean saveUser(User user); }
UserServiceImpl.java public class UserServiceImpl implements UserService {
//@Autowired private UserDao userDao;
public UserDao getUserDao() { return userDao; }
public void setUserDao(UserDao userDao) { this.userDao = userDao; }
@Override public List<User> queryAllUsers() { return userDao.queryAllUsers(); }
@Override public boolean saveUser(User user) { System.out.println(userDao); System.out.println("user-->"+user.getUserId()); return userDao.saveUser(user); }
}
|
1.7 控制器action
SaveUserAction.java public class SaveUserAction extends ActionSupport implements SessionAware{
private static final long serialVersionUID = 1L;
private UserService userService;
//---------------〉使用已存在的实体对象 页面命名为:user.userId :对象.属性 private User user; public User getUser() { return user; }
public void setUser(User user) { this.user = user; } //----------------->停止
public UserService getUserService() { return userService; }
public void setUserService(UserService userService) { this.userService = userService; }
/*<!-- 第一种 --> 不使用已存在的实体对象 * private String username; private String userpwd; private Integer userid;
public Integer getUserid() { return userid; }
public void setUserid(Integer userid) { this.userid = userid; }
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String getUserpwd() { return userpwd; }
public void setUserpwd(String userpwd) { this.userpwd = userpwd; }
*/ public String saveUser() throws Exception {
/* 不使用已存在的实体对象 * User user = new User(); user.setUserId(this.getUserid()); user.setUsername(this.getUsername()); user.setUserpwd(this.getUserpwd());*/ System.out.println("------>"+user.getUserId()); boolean status = userService.saveUser(user); System.out.println("保存成功"+status); return SUCCESS; }
@Override public void setSession(Map<String, Object> arg0) { // TODO Auto-generated method stub }
}
|
1.8 spring配置文件
注意:实际开发Dao层、services层根据模块分开
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
<!-- 自动扫描所有注解该路径 --> <context:component-scan base-package="com.struts.*,com.struts.*.*" />
<!-- 数据库连接 --> <!-- 引入jdbc.properties文件 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy"> <property name="targetDataSource"> <bean class="org.logicalcobwebs.proxool.ProxoolDataSource"> <property name="driver" value="${jdbc.driverClassName}" /> <property name="driverUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}"></property> <property name="maximumConnectionCount" value="${proxool.maxConnCount}" /> <property name="minimumConnectionCount" value="${proxool.minConnCount}" /> <property name="simultaneousBuildThrottle" value="${proxool.simultaneousBuildThrottle}" /> </bean> </property> </bean>
<!--Hibernate的Spring配置 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" > <!-- 数据库连接 --> <property name="dataSource" ref="dataSource" />
<!-- hibernate自身属性 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>
<!-- 解决no session found --> <prop key="hibernate.current_session_context_class">thread</prop>
<!--Spring 3.x 对 Hibernate 4.x 不提供 HibernateDaoSupport,所以在dao的实现层注入SessionFactory --> <!-- <prop key="hibernate.current_session_context_class"> org.springframework.orm.hibernate4.SpringSessionContext </prop> -->
</props> </property> <!-- 映射文件 --> <property name="annotatedClasses"> <list> <value>com.struts.bean.User</value> </list> </property> </bean>
<!-- 用户Dao --> <bean id="userDao" class="com.struts.dao.impl.UserDaoImpl" scope="prototype"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean>
<!-- 用户Service --> <bean id="userService" class="com.struts.service.impl.UserServiceImpl" scope="prototype"> <property name="userDao"> <ref local="userDao" /> </property> </bean> <!-- struts2交给spring管理 --> <bean id="SaveUserAction" class="com.struts.action.SaveUserAction" scope="prototype"> <property name="userService" ref="userService"></property> </bean>
<!--hibernate4必须配置为开启事务否则 getCurrentSession()获取不到--> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 事物通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="sav*" propagation="REQUIRED" rollback-for="Exception"/> <!-- rollback-for回滚事物,果存在一个事务,则支持当前事务。如果没有事务则开启 --> <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="upd*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="qry*" propagation="NOT_SUPPORTED" read-only="true"/> <tx:method name="*" propagation="NOT_SUPPORTED" read-only="true"/> </tx:attributes> </tx:advice> </beans>
|
1.9 struts2配置文件
Struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.i18n.encoding" value="utf-8"></constant>
<package name="default" namespace="/" extends="struts-default"> <action name="SaveUserAction" class="SaveUserAction" method="saveUser"> <result name="success">/Test.jsp</result> </action> </package> </struts>
|
1.10 web.xml
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
<!-- 创建spring工厂监听器 --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
<!-- 告知spring context config location 的存储位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>
<!-- 防止spring内存溢出监听器 --> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener>
<!-- openSessionInView配置 --> <filter> <filter-name>openSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>singleSession</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>openSessionInViewFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
<!-- struts2拦截器 --> <filter> <filter-name>struts</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
|
1.11 页面(表现层)
addUser.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="SaveUserAction.action" method="post">
<!-- 第一种 --> <!-- 序号<input type="text" name="userid"/><hr/> 用户名<input type="text" name="username"/><hr/> 密码<input type="password" name="userpwd" ><hr/> <input type="submit" value="save"/> -->
序号<input type="text" name="user.userId"/><hr/> 用户名<input type="text" name="user.username"/><hr/> 密码<input type="password" name="user.userpwd" ><hr/> <input type="submit" value="save"/> </form> </body> </html> |
2 hibernate3和hibernate4的区别
ibernate4的改动较大只有spring3.1以上版本能够支持,Spring3.1取消了HibernateTemplate,因为Hibernate4的事务管理已经很好了,不用Spring再扩展了。这里简单介绍了hibernate4相对于hibernate3配置时出现的错误,只列举了问题和解决方法,详细原理如果大家感兴趣还是去自己搜吧,网上很多。
2.1 Spring3.1去掉了HibernateDaoSupport类。hibernate4需要通过getCurrentSession()获取session。并且设置
<propkey="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
(在hibernate3的时候是thread和jta)。
2.2 缓存设置改为<prop
key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop>
<propkey="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
2.3 Spring对hibernate的事务管理,不论是注解方式还是配置文件方式统一改为:
<bean id="txManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory"><refbean="sessionFactory"/>
</property>
</bean>
2.4 getCurrentSession()事务会自动关闭,所以在有所jsp页面查询数据都会关闭session。要想在jsp查询数据库需要加入:
org.springframework.orm.hibernate4.support.OpenSessionInViewFilter过滤器。
Hibernate分页出现 ResultSet mayonly be accessed in a forward direction 需要设置hibernate结果集滚动
<propkey="jdbc.use_scrollable_resultset">false</prop>
--------------------------------------------------------------------
找到篇好文章,我之前遇到的问题都在这都能找到。其实出现这些问题的关键就是hibernate4和hibernate3出现了session管理的变动。
spring也作出相应的变动....
2.5 可能的错误和解决办法:
错误1:java.lang.NoClassDefFoundError: org/hibernate/cache/CacheProvider
原因:spring的sessionfactory和transactionmanager与支持hibernate3时不同。
解决:
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
...
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
错误2:java.lang.NoSuchMethodError:org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session
原因:hibernate4之后,spring31把HibernateDaoSupport去除,包括数据访问都不需要hibernatetemplate,这意味着dao需要改写,直接使用hibernate的session和query接口。
解决:为了改写dao,足足花了一天时间,然后一个个接口进行单元测试,这是蛋疼的一个主要原因。
错误3:nested exception is org.hibernate.HibernateException: No Session found for current thread
原因:发现一些bean无法获得当前session,需要把之前一些方法的事务从NOT_SUPPORT提升到required,readonly=true
见https://jira.springsource.org/browse/SPR-9020, http://www.iteye.com/topic/1120924
解决:
<tx:advice id="baseServiceAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" propagation="REQUIRED"/><!--之前是NOT_SUPPORT-->
<tx:method name="find*" read-only="true" propagation="REQUIRED"/><!--之前是NOT_SUPPORT-->
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="remove*" propagation="REQUIRED"/>
<tx:method name="add*" propagation="REQUIRED"/>
<!--默认其他方法都是REQUIRED-->
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
错误4:与错误3报错类似,java.lang.NoSuchMethodError:org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session;
at org.springframework.orm.hibernate3.SessionFactoryUtils.doGetSession(SessionFactoryUtils.java:324) [spring-orm-3.1.1.RELEASE.jar:3.1.1.RELEASE]
at org.springframework.orm.hibernate3.SessionFactoryUtils.getSession(SessionFactoryUtils.java:202) [spring-orm-3.1.1.RELEASE.jar:3.1.1.RELEASE]
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
原因:因为opensessioninview filter的问题,如果你的配置还是hibernate3,需要改为hibernate4
<filter>
<filter-name>openSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
</filter>
--------------------------------------------------------------------
由于Hibernate4已经完全可以实现事务了, 与Spring3.1中的hibernatedao,hibernateTemplete等有冲突,所以Spring3.1里已经不提供Hibernatedaosupport,HibernateTemplete了,只能用Hibernate原始的方式用session:
Session session = sessionFactory.openSession();
Session session = sessionFactory.getCurrentSession();
在basedao里可以用注入的sessionFactory获取session.
注意, 配置事务的时候必须将父类baseServiceImpl也配上,要不然会出现错误:No Session found for currentthread, 以前是不需要的
SessionFactory.getCurrentSession()的后台实现是可拔插的。因此,引入了新的扩展接口 (org.hibernate.context.spi.CurrentSessionContext)和
新的配置参数(hibernate.current_session_context_class),以便对什么是“当前session”的范围和上下文(scope and context)的定义进行拔插。
在Spring @Transactional声明式事务管理,”currentSession”的定义为: 当前被 Spring事务管理器 管理的Session,此时应配置:
hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext。
此处一定注意 使用 hibernate4,在不使用OpenSessionInView模式时,在使用getCurrentSession()时会有如下问题: 当有一个方法list 传播行为为Supports,当在另一个方法getPage()(无事务)调用list方法时会抛出org.hibernate.HibernateException: No Session found for current thread 异常。 这是因为getCurrentSession()在没有session的情况下不会自动创建一个,不知道这是不是Spring3.1实现的bug。 因此最好的解决方案是使用REQUIRED的传播行为。
标签太多了,转自http://hi.baidu.com/austincao/item/fc9907da3d854e44fa576861
3 jar包时问题汇总及解决办法
连接地址:本文整理如下
http://www.hongyanliren.com/2014m11/18835.html
3.1 NoClassDefFoundError
1.java.lang.NoClassDefFoundError:org/objectweb/asm/ClassVisitor
缺少asm-3.3.jar
2.java.lang.NoClassDefFoundError:org/objectweb/asm/commons/EmptyVisitor
缺少asm-commons-3.3.jar
3.java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory
问题及解决办法:缺少commons-logging.jar,需要在lib中添加。
4.NoClassDefFoundError:org/logicalcobwebs/cglib/core/NamingPolicy
问题及解决办法:默认hibernate4下连接池jar包为较老的proxool-0.8.3.jar。需要换成proxool-0.9.1.jar和proxool-cglib.jar
3.2 ClassNotFoundException
1.java.lang.ClassNotFoundException:org.springframework.web.util.Log4jConfigListener
缺少spring-web-3.2.3.RELEASE.jar
2.java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener
缺少spring-web-3.2.3.RELEASE.jar
3.java.lang.ClassNotFoundException:org.springframework.web.context.request.RequestContextListener
缺少spring-web-3.2.3.RELEASE.jar
4.java.lang.ClassNotFoundException:org.springframework.web.util.IntrospectorCleanupListener
缺少spring-web-3.2.3.RELEASE.jar
5.Caused by:java.lang.ClassNotFoundException: org.springframework.beans.FatalBeanException
缺少spring-beans-3.2.3.RELEASE.jar
6.Caused by:java.lang.ClassNotFoundException: org.springframework.core.NestedRuntimeException
缺少spring-core-3.2.3.RELEASE.jar
3.3 BeanDefinitionParsingException
1.org.springframework.beans.factory.parsing.BeanDefinitionParsingException:Configuration problem: Unable to locate Spring NamespaceHandler for XML schemanamespace [http://www.springframework.org/schema/tx]
缺少spring-tx-3.2.3.RELEASE.jar
2.org.springframework.beans.factory.BeanDefinitionStoreException:Unexpected exception parsing XML document from class path resource[resource/applicationContext.xml]; nested exception isjava.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor
缺少aopalliance-1.0.jar
3. org.springframework.beans.factory.parsing.BeanDefinitionParsingException:Configuration problem: Unable to locate Spring NamespaceHandler for XML schemanamespace [http://www.springframework.org/schema/aop]
缺少spring-aop-3.2.3.RELEASE.jar
3.4 BeanCreationException
1.org.springframework.beans.factory.BeanCreationException:Error creating bean with name ‘dataSource’ defined in class path resource[resource/applicationContext.xml]: BeanPostProcessor before instantiation ofbean failed; nested exception isorg.springframework.beans.factory.BeanCreationException: Error creating beanwith name‘org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0′: Cannotresolve reference to bean ‘pointcut’ while setting bean property ‘pointcut’;nested exception is org.springframework.beans.factory.BeanCreationException:Error creating bean with name ‘pointcut’: Instantiation of bean failed; nestedexception is java.lang.NoClassDefFoundError:org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
缺少spring-aspects-3.2.3.RELEASE.jar、aspectjweaver.jar、aspectjrt.jar
2.org.springframework.beans.factory.BeanCreationException:Error creating bean with name ‘sessionFactory’defined in class path resource [resource/applicationContext.xml]: Invocation ofinit method failed; nested exception is java.lang.NoClassDefFoundError:org/hibernate/annotations/common/reflection/ReflectionManager
缺少hibernate-commons-annotations-4.0.2.Final.jar
3.org.springframework.beans.factory.BeanCreationException:Error creating bean with name ‘sessionFactory’ defined in class path resource[resource/applicationContext.xml]: Invocation of init method failed; nestedexception is java.lang.NoClassDefFoundError: org/dom4j/DocumentException
缺少dom4j-1.6.1.jar
4.org.springframework.beans.factory.BeanCreationException: Error creatingbean with name ‘sessionFactory’ defined in class path resource[resource/applicationContext.xml]: Invocation of init method failed; nestedexception is java.lang.NoClassDefFoundError: org/jboss/logging/BasicLogger
缺少jboss-logging-3.1.1.GA.jar
5. org.springframework.beans.factory.BeanCreationException:Error creating bean with name ‘sessionFactory’ defined in class path resource[resource/applicationContext.xml]: Invocation of init method failed; nestedexception is java.lang.NoClassDefFoundError: javax/transaction/SystemException
缺少jboss-transaction-api_1.1_spec-1.0.1.Final.jar
6. org.springframework.beans.factory.BeanCreationException:Error creating bean with name ‘sessionFactory’ defined in class path resource[resource/applicationContext.xml]: Invocation of init method failed; nestedexception is java.lang.NoClassDefFoundError: javax/persistence/Entity
缺少hibernate-jpa-2.0-api-1.0.1.Final.jar
7.org.springframework.beans.factory.BeanCreationException:Error creating bean with name ‘sessionFactory’ defined in class path resource[resource/applicationContext.xml]: Invocation of init method failed; nestedexception is org.hibernate.cache.NoCacheRegionFactoryAvailableException:Second-level cache is used in the application, but property hibernate.cache.region.factory_classis not given, please either disable second level cache or set correct regionfactory class name to property hibernate.cache.region.factory_class (and makesure the second level cache provider, hibernate-infinispan, for example, is availablein the classpath).
hibernate.cfg.xml配置中需添加:
<propertyname=”hibernate.cache.use_second_level_cache”>true</property>
<propertyname=”hibernate.cache.provider_class”>net.sf.ehcache.hibernate.EhCacheProvider</property>
<property name=”hibernate.cache.region.factory_class”>org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
8.org.springframework.beans.factory.BeanCreationException:Error creating bean with name ‘sessionFactory’ defined in class path resource[resource/applicationContext.xml]: Invocation of init method failed; nestedexception is java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
缺少slf4j-api-1.6.1.jar
9.org.springframework.beans.factory.BeanCreationException:Error creating bean with name ‘transactionManager’ defined in class pathresource [resource/applicationContext.xml]: Invocation of init method failed;nested exception is java.lang.NoClassDefFoundError:org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy
缺少spring-jdbc-3.2.3.RELEASE.jar
10.Caused by:Cannot locate the chosen ObjectFactory implementation: spring – [unknownlocation]
缺少struts2-spring-plugin-2.3.15.jar
3.5 CannotLoadBeanClassException
1..org.springframework.beans.factory.CannotLoadBeanClassException:Cannot find class [org.springframework.orm.hibernate4.LocalSessionFactoryBean]for bean with name ‘sessionFactory’ defined in class path resource[resource/applicationContext.xml]; nested exception isjava.lang.ClassNotFoundException:org.springframework.orm.hibernate4.LocalSessionFactoryBean
缺少spring-orm-3.2.3.RELEASE.jar
update [0];actual row count: 0; expected: 1
2.org.logicalcobwebs.proxool.ShutdownHook– Problem calling “get cause” on IllegalStateException.
问题及解决办法:默认hibernate4下连接池jar包为较老的proxool-0.8.3.jar。需要换成proxool-0.9.1.jar和proxool-cglib.jar