dwr2.0+spring2.5+hibernate3.2整合
来源:互联网 发布:建筑大数据 编辑:程序博客网 时间:2024/05/16 04:41
dwr越来越强大和spring的结合也很方便
log4j.propertiesapplicationContext.xmldatabase_conn.properties
applicationContext-tx.xmlapplicationContext-annotation.xml这个是dwr配置的关键,尤其是命名空间TMD超多容易搞错配置文件就暂时就这些.关于dao的配置在这里:http://blog.csdn.net/tom_221x/archive/2008/12/05/3453312.aspx
用dwr直接调用spring和hibernate整合后的service层 这样可以绕开使用struts jsf 这样的mvc框架
然后页面全部换成静态的结合jquery ext dojo yui这样的库效果
在用spring把acegi整合进来控制权限 我觉得是个不错的选择
以后如果osgi和spring hibernate的整合成熟了可以直接转成osgi的形式。
需要的包如下不能少了,最好不要有重复的可能会冲突:
web.xml如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5" 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_2_5.xsd">
- <!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔,此参数用于后面的Spring-Context loader -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- classpath:applicationContext.xml,
- classpath:com/demonstration/entityclass/applicationContext-dao.xml
- </param-value>
- </context-param>
- <!--log4j配置文件路径配置 -->
- <context-param>
- <param-name>log4jConfigLocation</param-name>
- <param-value>classpath:log4j.properties</param-value>
- </context-param>
- <!-- 著名 Character Encoding filter -->
- <filter>
- <filter-name>encodingFilter</filter-name>
- <filter-class>
- org.springframework.web.filter.CharacterEncodingFilter
- </filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- </filter>
- <!--Hibernate Open Session in View Filter-->
- <!-- 假设在你的应用中Hibernate是通过spring 来管理它的session.如果在你的应用中没有使用OpenSessionInViewFilter
- 或者OpenSessionInViewInterceptor。session会在transaction结束后关闭,此时会抛出session is close 的异常-->
- <filter>
- <filter-name>hibernateFilter</filter-name>
- <filter-class>
- org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
- </filter-class>
- </filter>
- <!-- 过滤器映射 -->
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <filter-mapping>
- <filter-name>hibernateFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!--Spring ApplicationContext 载入 -->
- <listener>
- <listener-class>
- org.springframework.web.context.ContextLoaderListener
- </listener-class>
- </listener>
- <!-- 扩展spring bean的作用域有request,session,global session等-->
- <listener>
- <listener-class>
- org.springframework.web.context.request.RequestContextListener
- </listener-class>
- </listener>
- <!-- log4j监听器载入 -->
- <listener>
- <listener-class>
- org.springframework.web.util.Log4jConfigListener
- </listener-class>
- </listener>
- <!-- session超时定义,单位为分钟 -->
- <session-config>
- <session-timeout>30</session-timeout>
- </session-config>
- <!-- dwr配置 -->
- <servlet>
- <servlet-name>dwr</servlet-name>
- <servlet-class>
- org.directwebremoting.spring.DwrSpringServlet
- </servlet-class>
- <init-param>
- <param-name>debug</param-name>
- <param-value>true</param-value>
- </init-param>
- </servlet>
- <servlet-mapping>
- <servlet-name>dwr</servlet-name>
- <url-pattern>/dwr/*</url-pattern>
- </servlet-mapping>
- <!-- -->
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
- log4j.rootLogger=INFO, stdout, logfile
- log4j.logger.org.springframework=WARN //控制spring的日志输出
- log4j.logger.org.hibernate=WARN //控制hibernate的日志输出
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- log4j.appender.stdout.layout.ConversionPattern=%p [%c] - %m%n
- log4j.appender.logfile=org.apache.log4j.RollingFileAppender
- log4j.appender.logfile.File=../logs/demonstration.log
- log4j.appender.logfile.MaxFileSize=512KB
- # Keep three backup files.
- log4j.appender.logfile.MaxBackupIndex=3
- # Pattern to output: date priority [category] - message
- log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
- log4j.appender.logfile.layout.ConversionPattern=%p [%c] - %m%n
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
- <!-- 使用外部文件配置数据源的属性 -->
- <bean
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
- <list>
- <!-- 外部文件地址 -->
- <value>classpath:database_conn.properties</value>
- </list>
- </property>
- <property name="fileEncoding" value="utf-8" />
- </bean>
- <!-- 配置数据源 -->
- <bean id="dataSource"
- class="com.mchange.v2.c3p0.ComboPooledDataSource"
- destroy-method="close">
- <property name="driverClass" value="${driverClassName}" />
- <property name="jdbcUrl" value="${url}"/>
- <property name="user" value="${username}"/>
- <property name="password" value="${password}"/>
- <!--连接池中保留的最小连接数。-->
- <property name="minPoolSize" value="5" />
- <!--连接池中保留的最大连接数。Default: 15 -->
- <property name="maxPoolSize" value="20" />
- <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
- <property name="initialPoolSize" value="10" />
- <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
- <property name="maxIdleTime" value="60" />
- <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
- <property name="acquireIncrement" value="5" />
- <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
- 属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
- 如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
- <property name="maxStatements" value="0"/>
- <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
- <property name="idleConnectionTestPeriod" value="60"/>
- <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
- <property name="acquireRetryAttempts" value="5" />
- <!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效
- 保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
- 获取连接失败后该数据源将申明已断开并永久关闭。Default: false-->
- <property name="breakAfterAcquireFailure" value="true" />
- <!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
- 时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
- 等方法来提升连接测试的性能。Default: false -->
- <property name="testConnectionOnCheckout" value="false" />
- </bean>
- <!-- hibernate3 sessionfactory配置
- 使用AnnotationSessionFactoryBean创建基于JPA注解的SessionFactory-->
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
- <!-- 引用数据源 -->
- <property name="dataSource">
- <ref bean="dataSource" />
- </property>
- <!-- hibernate的属性具体见hibernate文档 -->
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.MySQLDialect
- </prop>
- <prop key="hibernate.show_sql">true</prop>
- <prop key="hibernate.generate_statistics">true</prop>
- <prop key="hibernate.connection.release_mode">auto</prop>
- <prop key="hibernate.autoReconnect">true</prop>
- <prop key="hibernate.cache.use_query_cache">true</prop>
- <prop key="hibernate.cache.provider_class">
- org.hibernate.cache.EhCacheProvider
- </prop>
- </props>
- </property>
- <!-- annotatedClasses属性指定使用JPA注解实体类名 可以通过annotatedPackages指定实体类包名 -->
- <property name="annotatedClasses">
- <list>
- <!-- 指定注解的实体类 -->
- <value>com.demonstration.entityclass.Demodata</value>
- </list>
- </property>
- <!-- 通过相对于类路径指定映射文件 可以内嵌多个<value>的<list>元素 也可以通过逗号分隔 属性类型String[]
- 这种配置为映射文件配置-->
- <property name="mappingResources">
- <list>
- <!-- 指定xml配置文件 -->
- </list>
- </property>
- </bean>
- <!-- 导入spring aop配置文件 -->
- <import resource="applicationContext-tx.xml" />
- <!-- 导入spring 注解配置文件 -->
- <import resource="applicationContext-annotation.xml" />
- </beans>
- driverClassName=你的数据库驱动
- url=你的数据库地址
- username=数据库用户名
- password=数据库密码
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- 使用aop/tx命名空间 -->
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- 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.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
- <!-- 配置事务管理器bean,使用HibernateTransactionManager事务管理器 -->
- <bean id="txManager"
- class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <!-- 为事务管理器注入sessionFactory" -->
- <property name="sessionFactory">
- <ref bean="sessionFactory" />
- </property>
- </bean>
- <!-- 通过aop定义事务增强切面 -->
- <aop:config>
- <!-- 使用强大的切点表达式语言轻松定义目标方法 -->
- <aop:pointcut id="serviceMethod"
- expression="execution(* com.demonstration.hibernate.basedao.BaseDao.*(..))" />
- <!-- 引用事务增强 -->
- <aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" />
- </aop:config>
- <!-- 事务增强 -->
- <tx:advice id="txAdvice" transaction-manager="txManager">
- <!-- 属性事务定义 -->
- <tx:attributes>
- <!--OpenSessionInViewFilter在getSession的时候,会把获取回来的session的flush mode 设为FlushMode.NEVER。
- 然后把该sessionFactory绑定到TransactionSynchronizationManager,使request的整个过程都使用同一个session,
- 在请求过后再接除该sessionFactory的绑定,最后closeSessionIfNecessary根据该session是否已和transaction绑定来决定是否关闭session。
- 在这个过程中,若HibernateTemplate 发现自当前session有不是readOnly的transaction,就会获取到FlushMode.AUTO Session,使方法拥有写权限。
- 也即是,如果有不是readOnly的transaction就可以由Flush.NEVER转为Flush.AUTO,拥有insert,update,delete操作权限,如果没有transaction,
- 并且没有另外人为地设flush model的话,则doFilter的整个过程都是Flush.NEVER。所以受transaction保护的方法有写权限,没受保护的则没有 -->
- <tx:method name="get*" />
- <tx:method name="save*" />
- <tx:method name="create*" />
- <tx:method name="remove*"/>
- </tx:attributes>
- </tx:advice>
- </beans>
- <?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:dwr="http://www.directwebremoting.org/schema/spring-dwr"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-2.5.xsd
- http://www.directwebremoting.org/schema/spring-dwr
- http://www.directwebremoting.org/schema/spring-dwr-2.0.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
- <!-- 隐式注册了AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor -->
- <context:component-scan base-package="com.demonstration.service" />
- <!-- dwr初始化配置参看官方文档 -->
- <dwr:configuration></dwr:configuration>
- <bean class="com.demonstration.dwrinvoke.DemoTest" scope="session">
- <dwr:remote javascript="DemoTest">
- <dwr:include method="getDemodata"/>
- <dwr:convert type="bean" class="com.demonstration.entityclass.Demodata" />
- </dwr:remote>
- <!-- 如果想要scope='session'起作用的话就加上下面这句
- 并且保证这个bean实现了接口 这个接口有上面dwr声明要
- 调用的方法 -->
- <aop:scoped-proxy proxy-target-class="false"/>
- </bean>
- </beans>
- <!-- 隐式注册了AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor -->
- <context:component-scan base-package="com.demonstration.service" />
说明了在com.demonstration.service这个包下面的类是spring注解的并且有spring自动加载
- package com.demonstration.service;
- import java.util.List;
- import javax.annotation.PostConstruct;
- import javax.annotation.Resource;
- import org.springframework.stereotype.Service;
- import com.demonstration.base.BaseService;
- import com.demonstration.entityclass.Demodata;
- import com.demonstration.hibernate.basedao.IBaseDao;
- import com.demonstration.service.interfaces.ITest;
- @Service("testServiceImp") //表示这个类注解为spring的bean 引号里的是bean的id
- public class TestServiceImp extends BaseService implements ITest{
- @Resource(name="demoDao") //把spring容器中id为demoDao的dao注入到这里(不需要setter方法了)
- private IBaseDao<Demodata> demoDao;
- @PostConstruct //会在这个bean加载前调用这个方法 纯属测试用的
- public void postConstruct() {
- log.info("测试service bean初始化成功");
- }
- public List<Demodata> getDemodata() { //dao的数据库操作
- return demoDao.getAll();
- }
- }
接口一个:
- package com.demonstration.service.interfaces;
- import java.util.List;
- import com.demonstration.entityclass.Demodata;
- public interface ITest {
- public List<Demodata> getDemodata();
- }
- <bean class="com.demonstration.dwrinvoke.DemoTest" scope="session">
- <dwr:remote javascript="DemoTest">
- <dwr:include method="getDemodata"/>
- <dwr:convert type="bean" class="com.demonstration.entityclass.Demodata" />
- </dwr:remote>
- <!-- 如果想要scope='session'起作用的话就加上下面这句
- 并且保证这个bean实现了接口 这个接口有上面dwr声明要
- 调用的方法 -->
- <aop:scoped-proxy proxy-target-class="false"/>
- </bean>
- </beans>
这个配置中的com.demostration.dwrinvoke.DemoTest如下:
- package com.demonstration.dwrinvoke;
- import java.util.List;
- import javax.annotation.Resource;
- import com.demonstration.service.interfaces.ITest;
- import com.demonstration.base.BaseDwrInvoke;
- import com.demonstration.entityclass.Demodata;
- public class DemoTest extends BaseDwrInvoke implements ITest {
- @Resource(name="testServiceImp") //植入的服务类有spring注解注入
- private ITest testService;
- public List<Demodata> getDemodata(){ //这个方法就是公开给dwr在页面上调用的方法 配置文件有描述
- log.info("dwr调用成功");
- return testService.getDemodata();
- }
- }
等到dwr3.0的时候用<dwr:component-scan/>和<dwr:annotation-config/>就可以实现零xml配置了,全部用注解实现。
现在在页面上导入正确的包之后就可以用:
- function test(){
- DemoTest.getDemodata(function(data){ //调用spring的sevice bean
- dwr.util.setValue("d", data);
- });
- }
- dwr2.0+spring2.5+hibernate3.2整合
- Dwr2+Log4j+Struts1.2+Spring2.0+Hibernate3.1_in_MyEclipse5.5配置问题及解决方法
- spring2.5整合hibernate3.0
- spring2.5整合hibernate3.0整合Struts
- Struts1.2+Spring2.0+Hibernate3.1整合总结 MyEclipse5.5
- struts1.2+spring2.0+hibernate3.2 整合
- 整合spring2.5+hibernate3+struts2.0
- Java : Hibernate3.2 与 Spring2.5整合
- 整合Spring2.5+Struts2.1+Hibernate3.2
- Struts2.1.6 + Spring2.5+Hibernate3.2整合
- Struts1.3 +hibernate3.2+Spring2.5整合
- struts2+hibernate3.2+spring2.0整合篇
- dwr2.0+spring2.0+hibernate3.0开发的小程序
- 整合struts2+hibernate3+spring2.5
- Struts1.x Spring2.x Hibernate3.x DWR2.x整合工具文档v1.00
- Struts1.x Spring2.x Hibernate3.x DWR2.x 整合工具文档
- myeclipse整合Struts1.2+Hibernate3.2+Spring2.5
- 整合struts1.2+spring2.5+hibernate3.2实现简单登录
- 文件操作函数 C语言
- 如何打开文件夹(C#)
- INSTALLSHILE+DPINST.EXE 安装设备驱动-设备驱动安装最佳方法之一
- 金山WPS与微软Office的20年之争
- HI,myboy,看这里
- dwr2.0+spring2.5+hibernate3.2整合
- T-SQL 函数记录
- 合理配置 Cisco IOS的十六种权限等级
- 下面我们介绍赚钱高手八大绝招:
- 从 C++ 到 DLL 再到 COM
- SSH:加密传输 远程管理的安全通道
- 普通的正则表达式
- VC编译错误集-共2个
- VC中进行office编程