2011-05-20 38 views
1

我会尽量缩短和最具体。可以创建类,类属性或将为每个请求创建的“东西”?我的意思是什么不会持续整个容器(静态类属性)。如何创建请求安全类或类属性

我需要将内部标识符存储到类或属性中,这对每个请求都是不同的,对于整个请求来说是持久的。我使用的是Java过滤器,在doFilter之前,我需要将该标识符保存在“某处”。因为我需要在应用程序中使用该标识符进行某些操作。在doFilter之后,我需要从“某处”获取该标识符并更新其他一些内容。

感谢任何建议如何解决这个问题?


编辑的2011年5月24日上午10:25

好吧,我会尽量密切解释我的问题。

我在BlazeDS utils中使用Tomcat 6。此服务器作为Flex应用程序的后端工作。 所以,如果我想送一些消息或物体或任何其他服务器只需要调用是这样的:

service.doSomethingWithThis(data) 

在flex是“服务”属性映射到类,EQ。 “foo.bar.BazService”并且此服务具有参数“data”的方法“doSomethingWithThis”。当请求被服务器接收时,“doSomethingWithThis”方法用参数“data”执行。

public int doSomethingWithThis(Object data) { 
    GenericDAO genDao = new GenericDao(); 
    genDao.create(data); 
} 

因此,正如您所看到的,我无法访问请求属性。我在Flex方面称之为Java方面。

另一个问题是与该DAO对象(在这种情况下是GenericDAO)。这些DAO对象具有一点特定性。他们要求数据库连接,并且该连接由单个类提供,该单元类为整个应用程序保存数据库连接。所以,我没有像往常一样将连接参数传递给DAO对象,但他们自己要求连接。我知道这不是正确的方法:)。

现在我们正在尝试解决这个问题,我们想要使用由Tomcat提供的池化数据库连接。有问题。如果我检索连接,则需要将该连接放回池中。但是我的DAO对象没有关闭数据库连接。解决方案可以是在调用服务方法时将连接参数传递给DAO对象,并在结束时关闭该连接,但是我有很多服务并且它有很多重构。所以我试图找到另一种方式,当我将能够封装整个请求(Java Filters)并将数据库连接存储在“某处”时。而我的DAO对象可以从“某处”进行连接。

在请求中存储数据库连接是一种解决方案,但正如您所看到的,我不知道如何在我的DAO类或服务类中访问此请求。其他方式是使用会话,但也有问题。可以向服务器发送多个请求,并且将完成的第一个请求将关闭该连接。所以,其他请求不能再使用该数据库连接,因为它已返回到池中。

所以我的目标是解决方案,当我将能够获得一个数据库连接的整个请求。

回答

2
request.setAttribute("name", variable); 

将持续请求的寿命,而不再。

+0

这种方法的一个可能的缺点是,如果需要在不同的类中检索该值,那么对请求对象的引用将需要传递给该类,这可能使得它的界面比需要的更复杂。 – DaveH 2011-05-20 15:32:53

+0

或者对象本身(属性值)可以传递给该类或方法。更复杂?也许 - 但至少明确的论点可以更容易地看到发生了什么。 – 2011-05-20 15:38:50

+0

同意 - 我重新读了这个问题,并意识到它是重要的过滤器之间的沟通。 – DaveH 2011-05-20 15:42:37

2

如果我的请求在不同的线程中执行,您可以将变量存储在ThreadLocal变量中,该变量对于每个线程(和请求)具有不同的值。

+0

我会尝试使用ThreadLocal,我们将看到这种方法是如何工作的。我会让你知道的。 – Peter 2011-05-22 12:49:40