2011-06-16 43 views
0

我有一个打开Web服务会话的方法。方法结构看起来像这样:返回关键字后的计划程序

public Soap getServicePort() 
{ 
    //TODO: Open a connect and return the SOAP object 
    return soap; 
} 

我有要求在返回后直接添加显示器。显示器的工作是等待2小时,然后激活会话并重新建立一个新会话 - 理由很可能是当前会话在当时无效,因此我们需要重建并返回一个新会话。

任何人都可以提出一个合理的方法来做到这一点?

谢谢。

回答

1
public Soap getServicePort() 
{ 
    try { 
    return soap; 
    } finally { 
     // add monitor here. 
    } 
} 

但要小心:监视器不应该抛出异常。把它的启动ito try/catch。

可能更好的解决方案是包装模式。例如,您可以使用方法getServicePort()和2个实现来定义接口:一个是您真实的实现,另一个是实际的并添加了监视器。这个解决方案更加灵活。例如,可能你必须创建其他方法,甚至在其他类中实现其他方法之后创建监视器。

在这种情况下,您可以使用AOP。有几种使用方法。一个是使用java的动态代理。其他人则使用AspectJ等特殊工具。

所以,选择你的解决方案。您的选择应该取决于您的任务的复杂性以及实现此功能所需的方法/类的数量。如果只有一个方法使用try/finally,如果它是同一类中的几个方法,则使用包装器模式。如果需要几个类中的几个方法,请使用Proxy或AspectJ。

+0

我这样做的方式,是注释类和使用反射来实现监视器包装。 – Bitmap 2011-06-16 12:51:56

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 

调用方法,只要你想多次显示器...