Struts2 线程安全,大多都是在就action是线程安全,小弟有个愚蠢的问题:是不是说 ActionContext 这个类可以在任何地方直接调用?(如在Service层或其它自己写的类里,直接调用ActionContext,从里面获取request parameters等变量)而不会造成多用户的线程安全,数据混乱的情况?同理ServletActionContext也是不是可以在任何地方直接调用?因为这些类都使用ThreadLocal,谢谢。
[b]问题补充:[/b]
是不是说 ActionContext 这个类可以在任何地方直接调用?如Service层??????????????
[b]问题补充:[/b]
谢谢你们的回答,其实我不是想验证类中使用,请参考这个
http://www.iteye.com/problems/34205或
http://www.iteye.com/topic/569841
我最担心的是多用户下,ActionContext value stack中findValue(...)会不会出现混乱的情况。谢谢
应该不会有问题的。由Threadlocal保存的,是线程安全的。
它是线程安全的
详细说明可以参考下
http://blog.csdn.net/tryfirst/archive/2009/05/18/4199015.aspx
对啊,一般采取threadlocal的线程都是安全的,这种机制不光在struts2在spring事务管理部分也都是用,threadlocal去保存的,但是具体实现里,还是比较复杂的,因为它们还考虑了顺序的问题。
下面两篇文章希望对你有帮助。
http://zhyxfancy.iteye.com/blog/281045
http://japi.iteye.com/blog/432617
是可以直接调用,但service层不应该依赖到web层的东西
ActionContext 只有在用户发送请求的时候里面才会有request的参数之类的
不行。。。一个软件首先得设计良好 而这设计良好的基础就是 分层明确
例如在action里可以用service的方法,而service里不要放action的东西 它应该放的 是一些业务逻辑,以及对数据库的操作(dao)。如果你这样做会造成双向耦合,为你的维护增加很大难度。其实按常规的问题完全可以解决问题的。你可以说说你现在遇到的问题,我们帮你想想解决方案。
如果是由threadlocal底层实现的话,不会有并发问题。我看你给我这两个连接,它把ActionContext的逻辑放到service层了,我感觉这样很不合理,设计的是否合理,一个比较好的思路是,如果把你这个项目换成C/S的,你的业务逻辑层,是否可以完全复用.如果把ACTIONCONTEXT很明显,复用不了,其实如果的确有这个必要,你可以再service层上再加一层,领域模型层,这样如果serive的逻辑就不依赖页面的东西了