我有一个打开Web服务会话的方法。方法结构如下所示:
public Soap getServicePort()
{
//TODO: Open a connect and return the SOAP object
return soap;
}
我要求在退货后直接添加显示器。监视器的工作是等待2小时并激活会话并重建一个新会话 - 因此当前会话当时无效,因此我们需要重建并返回一个新会话。
有人能提出合理的方法吗?
感谢。
答案 0 :(得分:1)
public Soap getServicePort()
{
try {
return soap;
} finally {
// add monitor here.
}
}
但要小心:监视器不应该抛出异常。把它的启动ito try / catch。
可能更好的解决方案是包装模式。例如,您可以使用方法getServicePort()和2个实现来定义接口:一个是真正的实现,另一个是真实的并且添加了监视器。该解决方案更灵活。例如,您可能需要创建您的监视器以及其他方法,甚至在其他类中实现其他方法之后。
在这种情况下,您可以使用AOP。有几种方法可以使用它。一个是使用java的动态代理。其他人正在使用像AspectJ这样的特殊工具。
所以,选择你的解决方案。您的选择应取决于您的任务的复杂性以及实现此功能所需的方法/类的数量。如果只有一个方法使用try / finally,如果它是同一个类中的几个方法,请使用包装器模式。如果几个类中的多个方法都需要使用Proxy或AspectJ。
答案 1 :(得分:0)
您可以像这样尝试 logic
..无需监控此
private Soap soap = null;
public Soap getServicePort()
{
try {
if(soap!=null && soap.isValide()){
// not sure about the method isValide(), some condition to check session
return soap;
}else{
// create new soap & return
return soap;
}
} catch(Exception e){
}// END Catch
}// END MEthod
根据需要多次调用该方法......