gpt4 book ai didi

java - 需要在Java中存储 session /事务的数据

转载 作者:行者123 更新时间:2023-12-01 11:07:42 25 4
gpt4 key购买 nike

我公开了一些 WebServices (Weblogic Jdk 1.6),并且在这些方法的 XML 请求中存在一个 MarketType 元素。

我需要在某些工厂 POJO 中访问此 Xml 元素值,因此我的工厂自己知道对于此“ session /交易”,MarketType 是 ABC,因此当代码需要来自工厂的对象时,工厂会返回MarketType 特定对象..
现在,需要将 MarketType 值“拖动”到所有代码和所有层,因为在代码中调用不同位置的工厂需要该值。

那么如何/在哪里存储这个值呢?以及如何以安全的方式访问它?

这是今天的一些代码:

interface DataFactory {
PriceCalulator getPriceCalculator(MarketType type);
}

class DataFactoryImpl implements DataFactory {

public PriceCalulator getPriceCalculator(MarketType type) {
switch(type) {
case : DK {
return new DKPriceCalculator();
}
case : NL {
return new NLPriceCalculator();
}
}
}
}

我希望能够做类似的事情

public XmlCalcResult price(XmlRequest request) {
ServicePrice impl = new ServicePrice();
// Set MarkeType in "Global/Session" ..
MarketType type = SessionScope.setMarketType(request.getMarketType())

return impl.executePrice(ctx, session, request);
}

class ServicePrice {
public XmlCalcResult executePrice(ctx, session, request) {
PriceCalulator calc = DataFactoryImpl.getPriceCalculator();

return new XmlCalcResult(calc.doCalculation()) ;
}
}

interface DataFactory {
PriceCalulator getPriceCalculator();
}

class DataFactoryImpl implements DataFactory {

// Get from "Global/Session" ..
MarketType type = SessionScope.getMarketType()


public PriceCalulator getPriceCalculator() {
switch(type) {
case : DK {
return new DKPriceCalculator();
}
case : NL {
return new NLPriceCalculator();
}
}
}
}

最佳答案

一种选择是将 MarketType 元素存储在 ThreadLocal 中,以便可以从不同位置访问它。始终在线程完成其任务之前调用 ThreadLocal 实例上的remove()。这一点很重要,因为在 servlet 容器中,线程会被重用,如果不清除 ThreadLocal,可能会导致内存泄漏。调用 set 和 remove 的适当位置可以是过滤器。

关于java - 需要在Java中存储 session /事务的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32764226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com