Struts2+Spring3+Hibernate4+JavaEE6 配置

来源:互联网 发布:微信加友软件免费下载 编辑:程序博客网 时间:2024/05/01 07:10

Struts2+Spring3+Hibernate4+JavaEE6 配置

Struts2, Spring3, Hibernate4, JavaEE6, JDK 7, Tomcat8, MyEclipse 2014, MySQL 5, DBCP

本文参照自 使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境。所以不再这里赘述了。

这里说说这篇文章配置时遇到的问题吧:

博客写得很赞!做到4.7、编写单元测试代码这一步时候报出以下错误:

Loading properties file from class path resource [config.properties]org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'userService' is definedat org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687)at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1168)at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:281)at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956)at com.hellossh.test.TestSpring.test(TestSpring.java:16)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:606)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)at org.junit.runners.ParentRunner.run(ParentRunner.java:300)at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

主要是数据库连接池的问题,那篇教程使用的是 Druid连接池包 。在实例化的时候报错了。所以测试不通过。

可以查看这个提交。讲明了如何更换连接池包。这里更换为 dbcp

pom.xml 添加 dbcp 连接池的依赖。

        <!-- dbcp -->        <dependency>            <groupId>commons-dbcp</groupId>            <artifactId>commons-dbcp</artifactId>            <version>1.4</version>        </dependency>        <!-- dbcp -->

spring-hibernate.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:tx="http://www.springframework.org/schema/tx"    xmlns:aop="http://www.springframework.org/schema/aop"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">    <!-- JNDI方式配置数据源 -->    <!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">         <property name="jndiName" value="${jndiName}"></property> </bean> -->    <!-- 定义一个使用 DBCP 实现的数据源 -->    <bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">        <property name="url" value="${jdbc_url}" />        <property name="username" value="${jdbc_username}" />        <property name="password" value="${jdbc_password}" />    </bean>    <!-- 配置hibernate session工厂 -->    <bean id="sessionFactory"        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">        <property name="dataSource" ref="dataSource" />        <property name="hibernateProperties">            <props>                <!-- web项目启动时是否更新表结构 -->                <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>                <!-- 系统使用的数据库方言,也就是使用的数据库类型 -->                <prop key="hibernate.dialect">${hibernate.dialect}</prop>                <!-- 是否打印Hibernate生成的SQL到控制台 -->                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>                <!-- 是否格式化打印出来的SQL -->                <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>            </props>        </property>        <!-- 自动扫描注解方式配置的hibernate类文件 -->        <property name="packagesToScan">            <list>                <value>me.gacl.model</value>            </list>        </property>        <!-- 自动扫描hbm方式配置的hibernate文件和.hbm文件 -->        <!-- <property name="mappingDirectoryLocations"> <list> <value>classpath:me/gacl/model/hbm</value>             </list> </property> -->    </bean>    <!-- 配置事务管理器 -->    <bean name="transactionManager"        class="org.springframework.orm.hibernate4.HibernateTransactionManager">        <property name="sessionFactory" ref="sessionFactory"></property>    </bean>    <!-- 注解方式配置事物 -->    <!-- <tx:annotation-driven transaction-manager="transactionManager" /> -->    <!-- 拦截器方式配置事物 -->    <tx:advice id="transactionAdvice" transaction-manager="transactionManager">        <tx:attributes>            <!-- 以如下关键字开头的方法使用事物 -->            <tx:method name="add*" />            <tx:method name="save*" />            <tx:method name="update*" />            <tx:method name="modify*" />            <tx:method name="edit*" />            <tx:method name="delete*" />            <tx:method name="remove*" />            <tx:method name="repair" />            <tx:method name="deleteAndRepair" />            <!-- 以如下关键字开头的方法不使用事物 -->            <tx:method name="get*" propagation="SUPPORTS" />            <tx:method name="find*" propagation="SUPPORTS" />            <tx:method name="load*" propagation="SUPPORTS" />            <tx:method name="search*" propagation="SUPPORTS" />            <tx:method name="datagrid*" propagation="SUPPORTS" />            <!-- 其他方法不使用事物 -->            <tx:method name="*" propagation="SUPPORTS" />        </tx:attributes>    </tx:advice>    <!-- 切面,将事物用在哪些对象上 -->    <aop:config>        <aop:pointcut id="transactionPointcut"            expression="execution(* me.gacl.service..*Impl.*(..))" />        <aop:advisor pointcut-ref="transactionPointcut"            advice-ref="transactionAdvice" />    </aop:config></beans>

不过现在提少企业使用 Hibernate4 了。

1 0
原创粉丝点击