我公开了一些WebServices(Weblogic Jdk 1.6),并且在这些方法的XML请求中有一个MarketType元素。
这个Xml元素值我需要在一些工厂POJO中访问,所以我的工厂他们自己知道对于这个“会话/事务”,MarketType是ABC,所以当Code需要来自Factory的Object时,Factory返回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();
}
}
}
}
答案 0 :(得分:1)
一个选项是将MarketType元素存储在ThreadLocal中,以便可以从该行的不同位置访问它。始终在线程完成其任务之前调用ThreadLocal实例上的remove()。这很重要,因为在servlet容器中,如果未清除ThreadLocal,则会重用线程并导致内存泄漏。调用set和remove的适当位置可以是过滤器。