Restlet - 安全地(线程方式)将信息从 Filter 传递到 Resource
Restlet - safely (thread wise) passing information from Filter to Resource
我想将(附加)信息从过滤器传递到资源。
我目前尝试这样做的方式是,在 Filter:
getContext().getAttributes().put("additionalInformation", "info..");
并在 Resource:
中检索它
getContext().getAttributes().get("additionalInformation");
问题:
- 这是将数据从过滤器传递到资源的最佳方式吗?
- 这种方式线程安全吗 - 如果两个客户端将访问相同的资源,它们是否都使用相同的上下文?
- 用
request.getAttributes().put(...)
代替 getContext().getAttributes().put(...)
的 怎么样?优点和缺点是什么?
上下文文档:
Concurrency note: attributes and parameters of a context are stored in
concurrent collections that guarantee thread safe access and modification.
If several threads concurrently access objects and modify these collections,
they should synchronize on the lock of the Context instance.
这是否意味着上下文不是线程安全的?
是的,请求对象是 Restlet 提供的解决方案,用于使用其属性在请求处理中涉及的所有元素之间交换数据。这可以看作是请求的上下文(并且它是为此而制作的)并且这种方法确实是线程安全的。
上下文是应用程序中所有元素共享的东西。请求处理中涉及的所有元素(过滤器、服务器资源……)中的上下文通常是应用程序之一。它不是线程安全的,不应用于在请求中的元素之间共享数据。
希望对你有帮助,
蒂埃里
我想将(附加)信息从过滤器传递到资源。 我目前尝试这样做的方式是,在 Filter:
getContext().getAttributes().put("additionalInformation", "info..");
并在 Resource:
中检索它getContext().getAttributes().get("additionalInformation");
问题:
- 这是将数据从过滤器传递到资源的最佳方式吗?
- 这种方式线程安全吗 - 如果两个客户端将访问相同的资源,它们是否都使用相同的上下文?
- 用
request.getAttributes().put(...)
代替getContext().getAttributes().put(...)
的 怎么样?优点和缺点是什么?
上下文文档:
Concurrency note: attributes and parameters of a context are stored in
concurrent collections that guarantee thread safe access and modification.
If several threads concurrently access objects and modify these collections,
they should synchronize on the lock of the Context instance.
这是否意味着上下文不是线程安全的?
是的,请求对象是 Restlet 提供的解决方案,用于使用其属性在请求处理中涉及的所有元素之间交换数据。这可以看作是请求的上下文(并且它是为此而制作的)并且这种方法确实是线程安全的。
上下文是应用程序中所有元素共享的东西。请求处理中涉及的所有元素(过滤器、服务器资源……)中的上下文通常是应用程序之一。它不是线程安全的,不应用于在请求中的元素之间共享数据。
希望对你有帮助, 蒂埃里