Session 访问WebSphere命令/JSP/etc调用的POJO中的httprequest对象?

Session 访问WebSphere命令/JSP/etc调用的POJO中的httprequest对象?,session,websphere,httprequest,commerce,web-container,Session,Websphere,Httprequest,Commerce,Web Container,简短版本:如何从由WebContainer执行的命令/JSP调用的POJO代码访问HttpRequest对象 POJO不知道CommandContext或HttpRequest(或它的近亲) POJO在执行堆栈中非常深入,因此更改方法签名意味着更改所有父方法签名以及调用这些方法的位置 我也查看了一篇类似的帖子(我的POJO是由WebContainer调用的,必须有一种方法能够以某种方式访问请求,而不必像这样费尽周折): Long version:我一直在大海捞针:试图找到一种通过当前WebC

简短版本:如何从由WebContainer执行的命令/JSP调用的POJO代码访问HttpRequest对象

  • POJO不知道CommandContext或HttpRequest(或它的近亲)
  • POJO在执行堆栈中非常深入,因此更改方法签名意味着更改所有父方法签名以及调用这些方法的位置
我也查看了一篇类似的帖子(我的POJO是由WebContainer调用的,必须有一种方法能够以某种方式访问请求,而不必像这样费尽周折):

Long version:我一直在大海捞针:试图找到一种通过当前WebContainer线程访问WebSphereApplicationServer(实际上是Commerce)中HttpRequest对象(或其同类对象)的方法(或任何其他方式,类似于通过TransactionManager获得交易)

知道这些容器线程绑定到一个执行的页面/命令/等等,我想知道是否有一种方法可以做到这一点,而不使用WorkArea,ThredLocal风格的不太理想的方法

我们面临的问题是,多年来编写的许多代码都不关心storeId或langId。因此,与其修复所有这些代码,我们希望以某种方式访问会话上下文(使用HttpRequest对象)因此,我们可以获取CommandContext和/或其他结构,以找到我们的storeId和langId以及与会话相关的其他数据

如需更多详细信息,请随时询问

一个示例伪代码段:

public class MyLittleHelper {

. . . 

void unawareMethod() {
  // I know it is really bad practice not to pass the actual objects around...  
  // But hear me out for a sec... 
  // This could be the easiest way of changing things, however bad it looks. 

  // my storeId and langId unaware method now needs to access to storeId and langId

}

. . .
} // end of class

任何帮助都将不胜感激。

我为这一混乱表示歉意,但您不想使用ThreadLocal?或者您在问这是否是一种可接受的方法?我理解这一混乱,只是考虑到线程池的性质,WebSphere不太擅长使用ThreadLocal。不过,IBM确实建议使用工作区,但我不是正在尝试找出是否有一种方法可以访问某个地方的静态帮助器方法,以找到连接到当前服务Web容器线程的当前http请求的方法。我现在很感兴趣。您是否有一个指向WebSphere下ThreadLocal的官方声明的链接?这不像是一个请求会在threa和threa之间跳转ds,是吗?我们肯定在WebSphere下使用了ThreadLocal。虽然ThreadLocal使用中的内存不足问题似乎是一个普遍问题,但该声明实际上并不是直接来自IBM。我认为使用ThreadLocal作为工作区似乎是一种过分的做法……尽管我希望看到一种访问http请求对象u的方法不知何故,唱WebContainer。仍然找不到任何方法来做。这里是一个参考(非IBM)当前位置这篇文章的作者Billy Newport非常犀利,他知道自己在说什么。另一方面,这篇文章非常古老,甚至提到了即将到来的Java更改,这些更改已经过时很久了。他的警告是合理的,但在我看来,如果您不希望请求之间存在值,并且如果在完成请求之前清除值。