【问题标题】:How to Make Web Service Thread Safe?如何使 Web 服务线程安全?
【发布时间】:2012-04-13 05:33:42
【问题描述】:

Web 服务是 Servlet 的内部实现。并且 web/app 服务器将通过新线程为每个新请求提供服务。

这意味着内部网络服务的每个请求都将在新线程中提供服务。现在考虑这个服务有多个消费者。有可能所有消费者同时向提供者发送请求。这意味着这个 Web 服务实现需要线程安全才能克服这种情况。

已经知道,没有成员变量会使 Web 服务线程安全。但是,我需要使用成员变量,这些变量是通过 spring bean 注入的。

关于如何使它们线程安全的任何建议?

编辑:

根据定义,如果class1,一个线程安全的类正在使用另一个非线程安全的类的对象,那么class1 的线程安全性更高。

我的意思是使用 spring bean 已经在我的服务中完成,现在,想让它们成为线程安全的。对此有何建议。

无法考虑请求范围,因为在内部它使用的是 jms 消息而不是 http 请求和响应。对此有何想法?

【问题讨论】:

    标签: jakarta-ee


    【解决方案1】:

    由于您的调用是通过 Spring bean 发生的,因此您需要制作一个 Spring bean 来请求范围 bean。这就是您从 Spring API 制作此类 bean 的方式。http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-request.The 请求 bean 的实现是线程安全的,它在内部使用 ThreadLocal 对象实施它。

    这里还有一个有趣的线程可以解决这个问题。

    Should I put my ThreadLocals in a spring-injected singleton?

    希望对您有所帮助。

    【讨论】:

    • 我的观点是,如果class1,线程安全的类正在使用另一个非线程安全的类的对象,那么class1会更加线程安全。我的观点是在我的服务中已经使用了 spring bean,现在,想让它们成为线程安全的。对此有任何建议。
    • 所以你的工作是从 Spring 调用非线程安全类?
    • 是的,当这些类是 Web 应用程序的一部分时。我想不出请求范围,因为在内部它使用的是 jms 消息而不是 http 请求和响应。对此有何想法?
    • @neo,请相应地编辑问题,因为您的要求和问题的详细信息有点不同。因此,如果可以,请编辑问题以反映此上下文。
    • 感谢您的回答。但是,只想重申请求范围对我没有用,因为我的 webapp 是 JMS 消费者,所以每条消息都不会出现在新请求中。
    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多