- 浏览: 142455 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
huqing2010:
不能直提供war包呀
Spring Security demo -
jqs1124:
pl/sql调试存储过程 -
zhouxianglh:
太全了!
常用bash shell 脚本 -
fcoffee:
1. myeclipse != eclipse2. *.lin ...
Eclipse 插件管理 -
hgalois:
巴错如果再加点path的修改linux下java开发环境配置就 ...
常用Linux命令
今天发现一个奇怪的问题,Spring2.5的事物处理过程中,在web中事物控制无效,但是利用ClassPathXmlApplicationContext加载bean的方式可以进行事物控制。Web的代码如下:
/WEB-INF/SpringDemo-servlet.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"
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">
<!-- ①:对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
<context:component-scan base-package="com.example.springdemo"/>
<!-- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<!-- ③:对模型视图名称的解析,即在模型视图名称添加前后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>
</beans>
Classpath: 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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/springdemo" />
<property name="username" value="root" />
<property name="password" value="sa" />
</bean>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="txManager" proxy-target-class="true"/>
<!--
利用ClassPathXmlApplicationContext方式加载时需要打开注释
<context:component-scan base-package="com.example.springdemo"/>
-->
</beans>
log4j.properties
log4j.rootLogger=INFO, A1 , R
log4j.logger.org.apache=INFO
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=C:/OSWorkflowDemo.log
log4j.appender.R.MaxFileSize=1000KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
测试的java函数:
public static void main(String[] args) {
// TODO Auto-generated method stub
String [] conf = new String[2];
conf[0]="applicationContext.xml";
conf[1]="dataAccessContext-jdbc.xml";
ApplicationContext appContext = new ClassPathXmlApplicationContext(conf);
UserService us = (UserService) appContext.getBean("userService");
us.testTx();
// System.out.println("hello");
}
其他java类的主要函数如下:
public interface UserService {
void testTx();
}
@Service("userService")
public class UserServiceImpl implements UserService{
@Autowired
@Qualifier("userDao")
private UserDAO userDao;
public void testTx() {
userDao.insertTwoRecord();
}
}
public interface UserDAO {
void insertTwoRecord();
}
@Component("userDao")
@Transactional
public class UserDAOImpl implements UserDAO{
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDataSource(@Qualifier("dataSource")DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Transactional(readOnly=false)
public void insertTwoRecord() {
System.out.println("hello ");
jdbcTemplate.execute("INSERT INTO USER(USERNAME,PASSWORD,EMAIL)VALUES('123','123','123')");
jdbcTemplate.execute("INSERT INTO USER(USERNAME,PASSWORD,EMAIL)VALUES('12322222222222222222','123','123')");
}
}
@Controller
public class HelloController {
@Autowired
@Qualifier("userService")
private UserService userService;
@RequestMapping("/sayHello.do")
public String sayHello(ModelMap map,@RequestParam("id") Long userId){
map.put("username", "sayHello 1 ");
userService.testTx();
return "sayHello";
}
@RequestMapping("/sayHello2.do")
public String sayHello2(ModelMap map,@RequestParam("name") String username){
map.put("username", username);
return "sayHello";
}
}
数据库的脚本如下:
CREATE TABLE `user` (
`ID` int(11) NOT NULL auto_increment,
`PASSWORD` varchar(10) default NULL,
`USERNAME` varchar(16) NOT NULL,
`EMAIL` varchar(64) default NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Web.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- Spring 服务层的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml,classpath:dataAccessContext-jdbc.xml</param-value>
</context-param>
<!-- Spring 容器启动监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- Spring MVC 的Servlet,它将加载WEB-INF/annomvc-servlet.xml 的
配置文件,以启动Spring MVC模块-->
<servlet>
<servlet-name>SpringDemo</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringDemo</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
其中,dataAccessContext-jdbc.xml是个空文件,上面的配置没有列出。在上面的代码测试过程中,遇到了不少的问题,下面进行简单的列举。
1、关于beans里面的xmlns=http://www.springframework.org/schema/beans错误,总是在提示出现错误。发现是lib下面的spring的jar包存在不同的版本,删除jar包后重新加入一个spring的包后好了。
2、后来出现了一个问题,错误提示信息没有记下,反正在网上也是找到了解决的办法。错误的原因是利用myeclipse加入了hibernate和spring的jar包,其中,asm系列的包有冲突,删除之后好了。
3、利用ClassPathXmlApplicationContext方式加载时需要加入 context:component-scan ,不然不能识别bean,并且在SpringDemo-servlet.xml文件中,必须有上面xml文件中的1,2,3.否则的话web模式下请求的url不被识别。
4、最后一个问题还是最要命的,就是两种bean的加载模式下,事物控制有效和无效。网上有人提出:估计spring初始化时优先component-scan bean,注入Web Controller 的Service直接拿了上下文中的@Service("someService"),这个时候@Transactional (readOnly=false, isolation = Isolation.READ_COMMITTED) 还没有被处理.所以Web Controller 的Service是SomeServiceImpl而不是AOP的$ProxyNO。提出的解决办法是:不让spring扫描到ServiceImpl类,直接写在xml文件,其它的配置和annotation照用,这样事务就起作用了。这样可以,但是service就必须写在xml文件里面了。感觉不爽。
发表评论
-
ServletContextListener使用详解
2014-02-09 17:38 826在 Servlet API 中有一个 ... -
时间
2013-10-29 23:10 0public static boolean isDate(O ... -
google项目托管得不到svn的提交密码的解决方案
2011-03-18 23:35 1344第一要有个google账号然后从https://code. ... -
使用jquery ajax解决跨域调用的问题
2010-12-03 11:14 1116client: function get_svn_status ... -
jquery
2010-08-17 23:37 828flexselect: a jQuery plugin, v ... -
flexselect相应onchange事件
2010-08-17 21:27 1929jquery.flexselect.js /* ... -
svn 备份脚本
2010-05-12 18:03 962@echo off rem 设置SVN可执行文件所在的目录s ... -
存储过程使用游标-实例
2009-11-22 14:53 1158/**房产税抽取*创建时间 ... -
随后笔记3
2009-08-22 11:46 92417. WeakReference 弱引用 ... -
随手笔记2--中间件
2009-08-22 11:45 74916.中間件 满足大量应 ... -
bbs_guestbook
2009-08-08 17:14 2264Ext.onReady(function(){ Ex ... -
commliberaryforspring2.5part2
2009-07-11 12:55 0these all are for Spring2.5.(pa ... -
jbpm example
2009-06-27 14:09 1497===========工作流程================ ... -
分頁功能實現
2009-06-10 14:57 8961.客戶端 jquery顯示數據的表格ID:infotabl ... -
將JAVA數據類型轉換Json對象是日期類的處理
2009-06-05 13:34 12391.implement interface /** * 轉換 ... -
java 写的 Sliding tiles小游戏
2009-05-17 19:07 769花了整整半天时间帮朋友写了个小游戏,自己一次没玩成功过。。。 ... -
jquery instruction
2009-05-16 10:04 765jquery instruction -
Spring2.5-->datasource configer
2009-05-16 09:51 1006hibernate.cache.provider_class= ... -
spring2.5 web.xml
2009-05-16 09:47 2108<?xml version="1.0" ... -
c3p0+log4j+jdom
2009-05-16 09:46 880liberary for c3p0 , log4j ,jdom ...
相关推荐
《Spring 2.5 MVC 完整项目:深入解析与实践》 在IT行业中,Spring框架作为Java领域的重要支柱,其MVC(Model-View-Controller)模块在Web应用程序开发中占据着举足轻重的地位。本文将针对“Spring 2.5 MVC 完整...
《Spring 2.5 MVC与iBatis 2整合详解》 在Web开发领域,Spring框架以其强大的功能和灵活性备受开发者喜爱。Spring 2.5版本是Spring发展史上的一个重要里程碑,它引入了许多新特性,使得开发更加高效。同时,iBatis...
这篇博客"Spring2.5 MVC -- 基于注解的附件上传"详细介绍了如何在Spring MVC 2.5中实现这一功能。 首先,我们需要了解Spring MVC中处理文件上传的基本概念。文件上传主要涉及到两个组件:`MultipartResolver`和`@...
总的来说,Spring 2.5 MVC 提供了一个强大且灵活的平台,让开发者能够高效地构建 Web 应用程序。通过注解驱动、AOP 集成以及丰富的组件支持,它简化了开发流程,提高了代码质量。在实际项目中,深入理解和熟练运用...
Spring 2.5 MVC框架是Java Web开发中的一个重要组成部分,它提供了一种强大的方式来构建可维护、可扩展的Web应用程序。在这个处理管道的概念中,我们主要指的是Spring MVC的DispatcherServlet,请求处理流程,以及...
本主题将深入探讨Spring 2.0、2.5版本的MVC特性和Portlet MVC的相关知识。 首先,Spring 2.0在MVC方面引入了显著的改进,包括: 1. **依赖注入(DI)**:Spring 2.0增强了对MVC组件的依赖注入支持,允许开发者更...
目前介绍springMVC的资料...本文根据笔者一年多对spring2.5 MVC的学习与实践,将平时的学习笔记进行了整理与完善,对springMVC中涉及到的绝大部分处理管道进行了详细的描述,其中所有列举的配置方式,笔者都做过测试。
标题中的"FLEX4+Gilead+BlazeDS+pureMVC+spring2.5 MVC+hibernate3.3+SLF4J+CXF2.3.0"涉及了多个关键技术和框架,这些都是在构建分布式、企业级Web应用程序时常用的技术组件。下面将逐一解析这些技术的核心概念和...
spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 ...
《精通Spring2.5》是一本深度探讨Spring框架的权威指南,主要针对Spring 2.5版本进行深入解析。Spring是Java企业级应用开发中最受欢迎的框架之一,它以其轻量级、模块化的设计,以及对IoC(Inversion of Control,...
Spring2.5版本是该框架的一个重要里程碑,它在2008年发布,带来了许多新特性和改进,提升了开发者在构建应用程序时的灵活性和效率。 **依赖注入(DI)和控制反转(IoC)** Spring的核心特性之一是依赖注入(Dependency...
6. **Web-MVC增强**:Spring MVC在2.5版本中提供了更多的特性,如:模型-视图-适配器(MVA)模式的改进,支持RESTful风格的URL映射,以及对HTTP上传文件的支持。 7. **Spring Expression Language (SpEL)**:Spring...
Spring 2.5在MVC方面有许多改进,包括对注解的支持,比如`@RequestMapping`、`@Controller`等,使得控制器的定义更加简洁。 7. **国际化(i18n)与本地化(l10n)**: Spring 2.5提供了强大的本地化支持,允许...
这个"Spring2.5-中文参考手册chm.zip"文件包含了关于Spring 2.5版本的详细中文指南,对于学习和理解Spring框架具有很高的价值。 Spring框架的核心特性包括依赖注入(Dependency Injection,DI)、面向切面编程...
除此之外,Spring2.5在MVC(Model-View-Controller)方面也有显著提升。Spring MVC是构建Web应用的重要部分,提供了处理HTTP请求、模型绑定、视图解析等功能。2.5版本引入了`@RequestMapping`注解,使得控制器方法与...
通过阅读《Spring2.5-中文参考手册.chm》这份文档,开发者可以深入了解Spring 2.5的各种特性和用法,解决实际开发中遇到的问题,提升开发效率。文档不仅包含详细的API参考,还包含丰富的示例和最佳实践指导,是学习...
总结来说,这个demo项目提供了一个学习和实践Struts1.2、Spring2.5和Hibernate3.2集成的平台,涵盖了MVC设计模式、依赖注入、面向切面编程和对象关系映射等多个关键概念。通过深入研究和修改这个项目,开发者能够...
Struts2.1、Spring2.5和Hibernate3.3是经典的Java企业级开发框架组合,它们各自在应用程序的不同层面提供了强大的支持。本篇将详细阐述这三个组件的整合过程,以及各自的核心特性。 首先,Struts2是一个基于MVC设计...
7. **MVC框架增强**:Spring MVC在2.5版本中也得到了改进,支持RESTful风格的URL映射,提供了更强大的视图解析和模型绑定功能。 8. **更多数据访问支持**:Spring 2.5增强了对各种持久层技术的支持,如JDBC、...
9. **Web应用增强**:Spring 2.5在MVC框架中引入了诸如`@RequestMapping`、`@RequestParam`等注解,简化了控制器方法的映射和参数绑定。 10. **数据访问增强**:Spring 2.5增强了对JDBC、Hibernate、JPA等数据访问...