`
colin4k
  • 浏览: 29851 次
文章分类
社区版块
存档分类
最新评论

有没有人在struts2的action这一层做事务控制?

阅读更多
上一篇我的struts2配置,间接实现零配置
然后因为业务需求,需要对action实现事务,结果发现,通过通配符配置的action,因为是通过struts2
的自动装配,没有在struts2和spring2的配置文件中声明,经测试,在其他配置在spring中的bean中
是无法使用struts2的action的,会报nullpointer错误,所以我现在怀疑,在spring2中做的声明式
事务,可能对action也没有作用

分享到:
评论
36 楼 herman_liu76 2017-09-25  
我们的action中不写逻辑,只处理http有关的数据准备与返回。
service与http对象无关,也分层,大的service可能包含小的service,这样有事务嵌套,可配置嵌套规则。
35 楼 bukebushuo 2008-05-16  
同意楼上的,action不应该重用,action实际应当是对应到一个页面的某个动作的。
如果说一个挥手的动作,你是用一个单一的挥手Action呢还是分解成抬手Action挥Action,停止Action等等一系列Action?
这些动作分解还是放到Service中来做吧!
34 楼 slaser 2008-04-21  
Action根本就不该重用。
33 楼 Andy_Fay 2008-04-19  
colin4k 写道
action当然不应该封装业务逻辑,但是action是controller,比如在
一个action里面可能会由几个Business Service的方法组成一个流程,
如果仅对service的方法实现事务控制,那如果流程中某一个service
的方法出现了问题,流程中之前调用的其他service怎么回滚呢。


那是你的Service颗粒度有问题吧。。
32 楼 XMLDB 2008-04-14  
我支持在多个Action中的调用中使用Action级的事务控制方法,如果仅仅是想解决同一个Action里调用多个Service的事务问题,还是建议封装一个统一的Service。
31 楼 ultra 2008-04-13  
和楼主有同样的问题.
spring的声明事务在action中会出错.

关于action的业务逻辑嘛?
假设在actiont中有这样的流程

serviceA.createA();
serviceB.createB();

即不适合在servicA中createB也不适合在serviceB中createA.或者在servicC中createA和createB?
那也许并不比在action中createA和createB合适.

XMLDB 提供的代码不全吧
import com.wolfsquare.core.Application; 找不到.

楼主能否提供完整的代码呢?







30 楼 ericxu131 2008-04-12  
如果有必要在action做事务控制的的话
只能说action中包含了比较多的业务逻辑吧。
我也比较同意sevice提供粗粒度方法。
action简单做些传值就好
29 楼 flustar 2008-04-12  
在action层调用service层逻辑,在service层进行事务控制
28 楼 taelons 2008-04-04  
action里当然不应该有业务逻辑和事务控制,原因很简单,action里import了http相关的类,和协议绑定了,如果在action里放业务逻辑和事务控制的话,非http的请求就不能复用业务逻辑和事务控制功能了,所以中间再加一层是对的。
比较好的方法是在action里创建一个工厂,由工厂创建一个Handler,将httprequest里的数据转换成一个和协议无关的通用数据结构,传递给Handler,使用哪个工厂和具体Handler实现,在xml里配置就可以了。
然而Handler里可以仍然没有业务逻辑和事务控制,它只是个代理或外观模式,作用是做BO的缓存,并提供一些管理功能,如交易统计、访问日志、服务的开关、错误处理等,它调用的service可能是访问本地文件、数据库、邮件系统、外部系统、异步调用等等
27 楼 sheqiguo 2008-04-03  
加 spring 做,,很爽
26 楼 jackzhangyunjie 2008-03-30  
我不知道你为什么要在Action进行事务处理,不过从分层编码的要求来说,你这种做法是很不合理的。
你应该把事务控制交给Spring进行管理。
Spring进行事务管理根本不会像你说的那样没有办法用,你只用把Spring的Bean注入进来就可以速正常进行使用啦。
25 楼 XMLDB 2008-03-21  
再多补充一点,当Action层切分的足够细,足够原子,就会发现把他们进行组合复用其实是非常简单,非常的合乎自然语法,例如将一个又一个的对象在页面间甩来甩去,任意的对他们进行糅合,多么奇妙的体验,感觉离程序员追求的终极目标又更近了一步。
24 楼 XMLDB 2008-03-21  
很奇怪楼上这么多位居然从来不复用Action吗?
虽然Action本身没有很多的逻辑,但是能简单责简单,既然有了现场的功能就不需要另外开发了,在已经有了A,B两个功能后,用户提出了在某些时候操作完A后会立即使用A的数据操作B,但是来回切换太麻烦,因此要求将A和B另外组成一个界面,但是后台的逻辑没有任何改变,在这个背景下我们发现通过ActionChainInerspector可以完成这个功能,而且所作的改变仅仅是重新根据A的view和B的view合成一个新的View(当然还需要加上事务控制也就是楼上诸位在讨论的东西),我想使用Webwork的极致就是这样了吧,这也是我们一直苦苦追求的高度复用,webwork的确不愧是一个框架时代的终结者。
23 楼 leyifree 2008-03-21  
你可以action里调用一个service(),service()里封装了,你要操作的service1,service2,然后对service()加事务的操作!
22 楼 yyjn12 2007-11-21  
在action里调用 service1(),service2()..
这种情况不就是在action里写了业务逻辑了吗,为什么要先调用service1后service2,一个次序,service2也许还要使用service1返回的结果做参数?
这不就是业务逻辑吗/.
21 楼 yyjn12 2007-11-21  
colin4k 写道
action当然不应该封装业务逻辑,但是action是controller,比如在
一个action里面可能会由几个Business Service的方法组成一个流程,
如果仅对service的方法实现事务控制,那如果流程中某一个service
的方法出现了问题,流程中之前调用的其他service怎么回滚呢。



两种可能:
1.您的需求确实很复杂,需要这么实现.
2.您没有弄清楚为什么在dao层上面有个service层,service层是干什么用的,于是把service层当dao.又在上面套了一层,很不幸的把action控制层当成了它.
20 楼 spiritfrog 2007-11-21  
按照楼主的情况还是考虑用sturts2 interceptor吧,现实往往是残酷的。
19 楼 colin4k 2007-11-20  
江南白衣 写道
colin4k 写道
实际项目做下来,因为时间等客观因素,导致最后有很多业务逻辑直接写在
Action里面。现在我们对项目的技术框架重新构建,虽然这次严格要求业务逻辑要从Action里面抽取出来
放在BO里面,但是如果按你说的这样再抽取一层,必然会增加大量的工作量,使得这次技术框架的调整风险
更大。


不需要单独一层啊,有时候提供一个粗粒度的方法就够了。我建议业务层的每个子模块里只有极少量的Service类,每个负责一大组相关的业务,接口都足够的粗。Service类实在太大了之后,可以重构出一些内部类,但出口仍然是Service的粗粒度接口。

Action无论如何,不可以调度同一事务内的多个业务方法这条约定我觉得是还是必要的,否则就很容易像你说的把业务逻辑直接写在Action里。而且,遵循这条约定其实不难。


嗯,其实这也是我以前一直的做法,只是现在team人比较多,不太容易说服所有的人,或者说保证所有的人
都这样做有一定的风险。
现在已经用拦截器的思路实现了,有了这一层的保障,再尝试用规范约束吧。
18 楼 江南白衣 2007-11-17  
colin4k 写道
实际项目做下来,因为时间等客观因素,导致最后有很多业务逻辑直接写在
Action里面。现在我们对项目的技术框架重新构建,虽然这次严格要求业务逻辑要从Action里面抽取出来
放在BO里面,但是如果按你说的这样再抽取一层,必然会增加大量的工作量,使得这次技术框架的调整风险
更大。


不需要单独一层啊,有时候提供一个粗粒度的方法就够了。我建议业务层的每个子模块里只有极少量的Service类,每个负责一大组相关的业务,接口都足够的粗。Service类实在太大了之后,可以重构出一些内部类,但出口仍然是Service的粗粒度接口。

Action无论如何,不可以调度同一事务内的多个业务方法这条约定我觉得是还是必要的,否则就很容易像你说的把业务逻辑直接写在Action里。而且,遵循这条约定其实不难。
17 楼 xly_971223 2007-11-16  
colin4k 写道
action当然不应该封装业务逻辑,但是action是controller,比如在
一个action里面可能会由几个Business Service的方法组成一个流程,
如果仅对service的方法实现事务控制,那如果流程中某一个service
的方法出现了问题,流程中之前调用的其他service怎么回滚呢。

web层主要的作用是获取request中的数据,组织好交给service来处理,再然后处理service返回来的结果
也就是说web层起组织数据和处理结果的作用
而不应该用几个Business Service组成什么流程,这个流程应该在web层之下来完成

另外:dao在不是特复杂的项目里面跟本没必要保留,直接service会大大提供生产效率。

相关推荐

    struts2一个真正的项目事例,对struts2不了解的人可以下载学习

    SSH(Struts2、Spring、Hibernate)是Java开发中常见的集成框架,其中Struts2负责控制流程,Spring管理依赖注入和事务处理,Hibernate则作为持久层框架,处理数据库交互。 标题中提到的"struts2一个真正的项目事例...

    搭建maven spring3 struts2 mybatis工程代码 demo源码及详细文档

    这个资源包含了一个基于Maven、Spring3、Struts2和MyBatis的Java Web项目的完整示例和详细搭建步骤,旨在帮助开发者在没有现成环境的情况下快速构建一个功能齐全的Web应用程序。以下是对这些技术栈的详细介绍: 1. ...

    struts spring 实现简单的邮件发送

    3. **Struts2整合**:在Struts2的配置文件(struts.xml)中,定义一个Action类,该类会调用邮件服务类发送邮件。当用户触发特定的请求时,Struts2的拦截器会根据配置找到对应的Action并执行其方法。 4. **视图层...

    SSH2(自己写的 用了顺手)

    至于文件"Struts2Demo",这可能是作者提供的一个Struts2的示例项目,可能包含了SSH2整合和分页功能的实现代码,供其他人学习或参考。通过分析这个Demo,可以深入了解SSH2整合的细节以及分页功能如何在实际项目中应用...

    Java高级工程师面试题SSH2

    2. **与Struts1的关系:** 虽然名字相似,但Struts2与Struts1之间并没有直接的继承关系,它们是两个相对独立的框架。 3. **核心组件:** Struts2的核心组件包括FilterDispatcher(用于拦截HTTP请求)、Action(业务...

    一个标准的SSH框架要用到的包(没有报冲突错误)

    SSH框架在Java开发中是一个非常重要的组合,它包括Spring、Struts和Hibernate这三个核心组件。这个压缩包提供了构建一个无冲突问题的SSH框架所需的全部依赖。让我们深入了解一下这些组件及其在Java Web应用中的作用...

    eclipse下整合搭建ssh通用项目

    1. Struts2:这是一个基于MVC设计模式的Java Web应用框架,用于处理用户请求,控制应用程序流程,并提供了强大的Action类和拦截器机制。 2. Spring:这是一个全面的Java企业级应用开发框架,它支持依赖注入、面向切...

    ssh(structs,spring,hibernate)框架中的上传下载

    将FileActionForm直接作为业务层的接口入参,相当于将Web层传播到业务层中去,即将业务层绑定在特定的Web层实现技术中,按照分层模型学院派的观点,这是一种反模块化的设计,但在"一般"的业务系统并无需提供多种UI...

    java工程师面试题

    - **Struts 1与Struts 2**:虽然名称相似,但它们之间没有继承关系,Struts 2实际上是WebWork框架的一个扩展,具备更多的功能和灵活性。 - **Spring与Struts**:Spring主要是一个依赖注入框架,而Struts专注于Web层...

    个人学习收集

    综上所述,这个压缩包提供的学习资料涵盖了Web开发中的三个重要组件:Struts2负责控制层,Hibernate处理数据持久化,Spring则作为一个综合性的框架,整合了多种功能。对于想要深入理解Java Web开发的人来说,这些...

    java mysql+ssh+jsp

    Struts2负责控制层,Spring提供依赖注入和事务管理,Hibernate则作为持久层框架,简化数据库操作。SSH框架组合在一起,可以高效地处理业务逻辑和数据交互。 在SSH框架中: 1. **Struts2**:是一个MVC框架,它负责...

    办公自动化管理系统

    在这个特定的项目中,开发者使用了S2SH(Struts2 + Spring + Hibernate)框架与MySQL数据库相结合的方式进行开发,这是一种常见的企业级应用开发组合。 **Struts2** 是一个基于MVC(Model-View-Controller)设计...

    JavaEE 入门详细教材(附图)

    - **IoC(Inversion of Control,控制反转)**:这是一种设计模式,旨在减少代码间的耦合度。在Spring中,对象的创建和管理由Spring容器负责,而不是在代码中直接new对象。这种方式使得代码更加模块化,易于测试和...

    SSH增删查改功能(人力资源管理系统)

    在人力资源管理系统中,Spring可以管理各种bean,包括数据访问对象(DAO)、服务层对象和控制器,实现事务管理和安全控制。 Struts作为 MVC 框架,主要负责处理HTTP请求并调度到相应的控制器,以及管理视图与模型的...

    ssh网上书店代码

    在这个网上书店中,Spring可能被用来管理数据库连接、事务控制以及Service层的bean,使得代码更加解耦和易于测试。 3. **Hibernate**:作为持久层框架,Hibernate简化了与数据库的交互,通过对象关系映射(ORM)...

    自己做的小型CRM模块SSH1

    【标题】"自己做的小型CRM模块SSH1"指的是一个基于SSH(Spring、Struts、Hibernate)框架开发的轻量级客户关系管理(CRM)模块。SSH是Java Web开发中的经典组合,Spring负责依赖注入和事务管理,Struts作为MVC框架...

    java三大框架

    Struts实现的重点在C(Controller),包括ActionServlet/RequestProcessor和我们定制的 Action,也为V(View)提供了一系列定制标签(Custom Tag)。但Struts几乎没有涉及M(Model),所以Struts可以采用JAVA实现的任何形式...

    面试题集锦~需要面试的看看吧~

    完全二叉树是一种特殊的二叉树,它的每一个节点都有两个孩子节点,左孩子和右孩子,并且所有的叶子节点都在最后一层。在面试中,完全二叉树经常被用来考察候选人的数据结构知识和逻辑思维能力。 3. 什么是索引 答案...

    SSH+CRM人事资源管理(zking)

    2. **Struts框架**:Struts是MVC(模型-视图-控制器)设计模式的实现,主要处理Web层的逻辑。在这个项目中,Struts负责接收用户请求,解析参数,并将控制权传递给相应的业务逻辑组件,最后将结果数据渲染成视图返回...

Global site tag (gtag.js) - Google Analytics