`
tovegar
  • 浏览: 31334 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一种繁琐的SSH设计(一)

阅读更多
当使用的这个框架之后就是觉得挺累。一个简单的东西要写N个配置和文件。

层次比较清晰:
DAO - > SERVICE - > MODEL - > ACTION - > FORMBEAN - > VIEW

数据层 和 业务层:spring dao + hibernate
action:struts
view : struts + jsp + jsf
整个模型按照ModelsTry的模型来设计的:
先看一下数据层和 业务层:
jdbc.properties:
#c3p0
datasource.driverClassName=oracle.jdbc.driver.OracleDriver
datasource.url=jdbc:oracle:thin:@192.168.1.9:1521:import
hibernate.c3p0.minPoolSize=10
hibernate.c3p0.maxPoolSize=150
hibernate.c3p0.maxIdleTime=20
hibernate.c3p0.timeout=100000
hibernate.c3p0.max_statement=50
datasource.username=cms
datasource.password=123456

#proxool
proxool.alias=bidcms
proxool.driverClassName=oracle.jdbc.driver.OracleDriver
proxool.url=jdbc:oracle:thin:@192.168.1.9:1521:import
proxool.user=cms
proxool.password=123456
proxool.maximumConnectionCount=150
proxool.minimumConnectionCount=10
proxool.prototypeCount=5


#mysql icb
icb.jdbc.driverClassName=com.mysql.jdbc.Driver
icb.jdbc.url=jdbc:mysql://192.168.1.9:3306/release?autoReconnect=true&useUnicode=true&characterEncoding=GBK&zeroDateTimeBehavior=convertToNull
icb.jdbc.username=cms
icb.jdbc.password=123456
icb.jdbc.maxsize=50
icb.jdbc.maxidle=10
icb.jdbc.maxwait=15000


applicationContext-resource.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
	<!-- For mail settings and future properties files -->
	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:jdbc.properties</value>
			</list>
		</property>
	</bean>
	
	 <bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
        <property name="alias" value="${proxool.alias}" />
        <property name="driver" value="${proxool.driverClassName}" />
        <property name="driverUrl" value="${proxool.url}" />
        <property name="user" value="${proxool.user}"/>
        <property name="password" value="${proxool.password}"/>
        <property name="maximumConnectionCount" value="${proxool.maximumConnectionCount}" />
	    <property name="minimumConnectionCount" value="${proxool.minimumConnectionCount}" />
	    <property name="prototypeCount" value="${proxool.prototypeCount}" />
	    <property name="delegateProperties" value="user=${proxool.user},password=${proxool.password}"/>  
    </bean>
    
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource" />
	</bean>

	<bean id="icbDataSource"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName">
			<value>${icb.jdbc.driverClassName}</value>
		</property>
		<property name="url">
			<value>${icb.jdbc.url}</value>
		</property>
		<property name="username">
			<value>${icb.jdbc.username}</value>
		</property>
		<property name="password">
			<value>${icb.jdbc.password}</value>
		</property>
		<property name="maxActive">
			<value>${icb.jdbc.maxsize}</value>
		</property>
		<property name="maxIdle">
			<value>${icb.jdbc.maxidle}</value>
		</property>
		<property name="maxWait">
			<value>${icb.jdbc.maxwait}</value>
		</property>
	</bean>

	<bean id="jdbcTemplateICB"
		class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="icbDataSource" />
	</bean>

</beans>

与hibernate搭配
applicationContext-hibernate.xml
<?xml version="1.0"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.Oracle9Dialect
				</prop>
			</props>
		</property>
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="configLocation">
			<value>classpath:hibernate.cfg.xml</value>
		</property>
		<property name="lobHandler">
			<ref bean="oracleLobHandler" />
		</property>
	</bean>

	<!-- 使用spring+hibernate处理oracle BLOB-->
	<bean id="nativeJdbcExtractor"
		class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" />
	<bean id="oracleLobHandler"
		class="org.springframework.jdbc.support.lob.OracleLobHandler"
		lazy-init="true">
		<property name="nativeJdbcExtractor">
			<ref bean="nativeJdbcExtractor" />
		</property>
	</bean>
	<!-- 完毕-->

	<!-- Document索引luncene创建拦截起 -->
	<bean id="indexAfterAdvice"
		class="com.bidlink.cms.system.IndexAfterAdvice" autowire="byName">
		<!-- <property name="jmsTemplate">
			<ref bean="jmsTemplate" />
		</property> -->
	</bean>
	<bean id="indexAdvisor"
		class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
		<property name="advice">
			<ref local="indexAfterAdvice" />
		</property>
		<property name="patterns">
			<list>
				<value>.*save.*</value>
				<value>.*update.*</value>
				<value>.*remove.*</value>
				<value>.*transFromBidInfo.*</value>
			</list>
		</property>
	</bean>

	<!-- 日志拦截器-->
	<bean id="logBeforeAdvice"
		class="com.bidlink.cms.system.LogBeforeAdvice">
		<property name="sessionFactory">
			<ref local="sessionFactory" />
		</property>
	</bean>
	<bean id="logAdvisor"
		class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
		<property name="advice">
			<ref local="logBeforeAdvice" />
		</property>
		<property name="patterns">
			<list>
				<value>.*save.*</value>
				<value>.*update.*</value>
				<value>.*remove.*</value>
				<!-- 7大分类的信息浏览还没有截获-->
			</list>
		</property>
	</bean>

	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

	<bean id="transactionInterceptor"
		class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="save*">PROPAGATION_REQUIRED</prop>
				<prop key="remove*">PROPAGATION_REQUIRED</prop>
				<prop key="update*">PROPAGATION_REQUIRED</prop>
				<prop key="userObtainInfo">PROPAGATION_REQUIRED</prop>
				<prop key="loadUserByUsername">PROPAGATION_REQUIRED</prop>
				<prop key="trans*">PROPAGATION_REQUIRED</prop>
				<prop key="reverseTrans*">PROPAGATION_REQUIRED</prop>
				<prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>
				<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
			</props>
		</property>
	</bean>

	<bean
		class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
		<property name="beanNames">
			<value>*Service</value>
		</property>
		<property name="interceptorNames">
			<list>
				<value>transactionInterceptor</value>
				<value>logAdvisor</value>
				<value>indexAdvisor</value>
				<!-- 此处增加新的Interceptor -->
			</list>
		</property>
	</bean>

	<bean
		class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
		<property name="transactionInterceptor"
			ref="transactionInterceptor" />
	</bean>

	<bean id="userDao"
		class="com.bidlink.cms.dao.system.hibernate.UserDaoImp">
		<property name="sessionFactory">
			<ref local="sessionFactory" />
		</property>
	</bean>

	<bean id="userService"
		class="com.bidlink.cms.service.system.spring.UserServiceImp"
		autowire="byName">
		<property name="userDao">
			<ref local="userDao" />
		</property>
		<property name="roleCacheByCode">
			<ref bean="roleCacheByCode" />
		</property>
		<property name="mailServer">
			<ref bean="mailServer" />
		</property>
	</bean>



可以看到跟大多数数据库处理的模式一样的。
日志利用spring AOP连接 记录
而在文档建立之后,利用spring after连接对文档进行拦截和建立索引。
后又在此过程中加入JMS以此来保证需要建立索引的所有文档都可以利用队列进行,
保证不会因很多原因导致的文档索引丢失。
分享到:
评论
4 楼 抛出异常的爱 2008-09-25  
tovegar 写道
当使用的这个框架之后就是觉得挺累。一个简单的东西要写N个配置和文件。

层次比较清晰:
DAO - > SERVICE - > MODEL - > ACTION - > FORMBEAN - > VIEW

数据层 和 业务层:spring dao + hibernate
action:struts
view : struts + jsp + jsf
整个模型按照ModelsTry的模型来设计的:

可以看到跟大多数数据库处理的模式一样的。
日志利用spring AOP连接 记录
而在文档建立之后,利用spring after连接对文档进行拦截和建立索引。
后又在此过程中加入JMS以此来保证需要建立索引的所有文档都可以利用队列进行,
保证不会因很多原因导致的文档索引丢失。

model放到service内吧
那样子设计还是有一点充血的意思的.

formbean与view不能算作一层吧....

如果真的 有ajax层在 formbean里 也是可以理解的.
3 楼 Gudice 2008-09-25  
你是在bidlink吧!
2 楼 tovegar 2008-04-14  
引用
hc_face 昨天
proxool.url=jdbc:oracle:thin:@192.168.1.9:1521:import
大哥你的这个import是什么意思?

192.168.1.9上oracle 的SID为import
1 楼 hc_face 2008-04-12  
proxool.url=jdbc:oracle:thin:@192.168.1.9:1521:import 
大哥你的这个import是什么意思?

相关推荐

    ssh课程设计--课程设计管理系统

    针对学生在专业技术方面实施基础训练,在这个过程当中,学生的理论知识能力可以得到提高,可以帮助学生将课堂的理论知识转化为实践能力,提高在实际操作当中处理问题的效率,同时也能够作为一种方式,来检测理论实际...

    ssh网上商城项目代码全 课程设计

    - **查询语言**:支持HQL和Criteria API两种查询方式,其中HQL是一种面向对象的查询语言,接近于SQL但更易用。 #### 四、项目结构设计 - **Web层**:使用Struts框架进行页面展示和用户交互逻辑处理。 - **业务逻辑...

    SSH-struts第一种方式整合

    在本项目"SSH-struts第一种方式整合"中,我们将深入探讨如何将这三个组件结合在一起,构建出强大的后端业务逻辑和直观的前端展示。 首先,Struts作为MVC(模型-视图-控制器)设计模式的实现,主要负责处理HTTP请求...

    毕业设计 基于SSH框架的系统

    【标题】"基于SSH框架的系统"是一种常见的企业级应用开发模式,SSH分别代表Spring、Struts和Hibernate三个开源框架的首字母缩写。Spring作为核心的IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented ...

    SSH课程设计——博客网站

    它提供了一种灵活的Action机制,使得开发者可以通过配置文件或注解定义URL到Action的映射,以及Action执行后的结果跳转。在这个博客系统中,Struts2可能用于处理用户的登录、注册、发布文章、评论等操作。 2. **...

    SSH框架毕业设计

    在这个SSH毕业设计项目中,很可能是使用MySQL作为后端数据库,MySQL是一种广泛使用的开源关系型数据库管理系统,因其高效、稳定和易于管理而受到青睐。JSP(JavaServer Pages)则被用作视图层,用于展示动态生成的...

    SSH框架课程设计影院管理系统.rar

    它提供了一种组织应用结构的方式,使得视图、模型和控制器之间保持松耦合。Struts通过Action类处理用户请求,并将结果转发到JSP页面进行展示。 Hibernate作为ORM(对象关系映射)工具,解决了Java应用程序与数据库...

    SSH三大框架的网页系统设计

    本项目通过整合这三个框架,旨在提供一种便捷的方式来设计和实现复杂的网页系统。 Struts2是MVC(Model-View-Controller)架构模式的一个优秀实现,它为开发者提供了强大的请求处理和视图展示能力。Struts2框架通过...

    JSP基于SSH2物流快递管理系统设计毕业源码案例设计.zip

    【描述】提到的"使用Java开发的毕业设计系统项目源码"意味着该系统是用Java编程语言编写的,这是一种广泛应用的、面向对象的语言,特别适合于企业级应用开发。它具有高度的可移植性,能够运行在多种操作系统上。此外...

    java web课程设计+ssh

    Struts2提供了一种灵活的拦截器机制,可以方便地扩展和定制应用程序的行为。 2. **Hibernate**:作为持久层,它是一个强大的对象关系映射(ORM)框架,使得开发者可以用Java对象来操作数据库,而无需编写SQL语句。...

    一个简单的SSH框架程序

    它提供了一种灵活的方式来控制应用程序的行为,通过Action类处理请求,并使用配置文件或注解来定义URL到Action的映射。Struts2还支持拦截器机制,可以方便地添加日志、权限检查等通用功能。 **Spring框架**: ...

    基于ssh的毕业设计(hr人力资源管理系统)项目完整

    在信息技术领域,SSH(Struts2+Spring+Hibernate)框架是一种广泛应用于企业级Web应用开发的组合。这个标题所指的“基于SSH的毕业设计”是一个以人力资源管理为核心功能的系统,适合学生作为毕业设计项目来提升其在...

    基于SSH技术的Linux远程控制系统的设计与实现.pdf

    2. Windows操作系统的图形化优势:Windows操作系统凭借其图形化操作优势,设计开发一种Windows平台下的跨平台操作Linux系统的软件具有重要意义。 3. SSH技术的安全性:SSH技术可以把所有传输的数据进行加密,从而...

    完整的SSH框架开发的系统源码包含数据库设计等

    它提供了一种对象关系映射(ORM)机制,将数据库操作转化为对Java对象的操作,降低了SQL的使用难度。Hibernate支持 CRUD(创建、读取、更新、删除)操作,以及复杂查询和事务管理。 4. **数据库设计**:在SSH框架...

    java毕业设计基于SSH

    它的主要优点是提供了一种声明式编程方式,通过配置文件可以轻松管理控制器逻辑。Struts2还提供了丰富的拦截器机制,允许开发者自定义行为,如登录验证、权限检查等。 2. **Spring框架**:Spring是Java企业级应用的...

    java ssh框架的加法计算器

    这个项目是一个基于SSH框架实现的简单加法计算器,对于初学者来说,它是理解SSH框架工作原理和结构的一个良好起点。 Struts2作为MVC(Model-View-Controller)模式的实现,负责处理HTTP请求,控制应用流程,并将...

    基于SSH酒店管理系统的设计与实现

    SSH是Java Web开发中的一种经典组合,提供了强大的MVC(模型-视图-控制器)架构支持,使得开发高效且易于维护。 Spring框架作为核心,负责管理和协调各个组件,提供依赖注入(DI)和面向切面编程(AOP)的功能,...

    基于SSH三大框架的信息管理系统的毕业设计带数据库和论文

    1. **Struts2**:作为表现层框架,它提供了一种组织应用结构和处理HTTP请求的方式。Struts2的核心是Action,它负责接收请求,调用业务逻辑,然后返回结果到视图。此外,Struts2还有丰富的拦截器机制,可以实现如权限...

Global site tag (gtag.js) - Google Analytics