跳到导航
BEA Dev2Dev Oracle and BEA
首页 资源中心 dev2dev学堂 在线技术论坛 User Group CodeShare
dev2dev 首页 > 资源中心 > 专家Blog > 专家Blog文章
使用Workshop Webservice上下文

时间:2005-04-12
作者:David Maddison
浏览次数:
本文关键字:contextmethodcallbackdeprecatedWeb Service 上下文方法回调不赞成使用
文章工具
推荐给朋友 推荐给朋友
打印文章 打印文章
使用Workshop Webservice上下文

默认情况下,当创建一个Workshop Webservice(JWS文件)时,并不会自动公开一个上下文(Context)对象,这不太好,因为WebService上下文包含了许多有用的方法和回调。在此我将向您展示如何添加和使用JwsContext以便使Workshop Webservice发挥更大的作用。

添加上下文注释

为使Workshop可以填充上下文对象变量,需要使用 @common:context注释。下面的代码在WebService中创建了一个上下文对象jwsCtx。记住,只可以向一个WebService添加一个上下文对象。再多的话,Workshop就会发出警告!

    /**
     * @common:context
     */
    JwsContext jwsCtx;

 

注意:当按下【ALT+ENTER】键自动导入JwsContext时,一定要选择com.bea.control.JwsContext,而不赞成使用weblogic.jws.control.JwsContext类。

使用上下文方法

一旦指定了上下文对象,就可以像使用标准的Java对象一样使用它了。Workshop运行时将会使用关于当前的WebService调用的上下文信息来填充它。

com.bea.control.JwsContext上下文类中包含有许多方法,我们在此不一一说明,只介绍一些比较有用的方法:

  • getLogger()返回一个记录器,可以将其直接写入磁盘日志文件。
  • isCallerInRole(String roleName)如果所验证的principal属于指定的角色,就返回true。
  • getService()返回一个ServiceHandle对象,它可以用于获取关于当前WebService的附加信息。
  • getInputHeaders()返回一个元素数组,表示当前请求的SOAP标题。
  • finishedConversation()在会话式服务中,该方法将显式结束会话。可以使用该方法代替对特定方法设置@conversation phase="finish"

关于可用的所有方法,请访问http://e-docs.bea.com/workshop/docs81/doc/en/workshop/java-class/com/bea/control/JwsContext.html

使用上下文回调

该上下文对象的一个特别的特性就是在其生存期内可以用它来调用WebService实现。回调的实现是通过使用<CONTEXT_VARIABLE_NAME>_<CALLBACK_METHOD_NAME>的专用方法命名约定创建的。下面的代码是一个例子,它展示了初次创建WebService对象时如何执行代码:

    /**
     * @common:context
     */
    JwsContext jwsCtx;

    // This method will be called when the WebService is first created
    public void jwsCtx_onCreate() {
        
        // Just a test message but could possibly setup WebService state         
        System.out.println("Webservice Object has been Created!");
    }

 

还有许多其他的上下文回调,这些回调在下面的站点上均有描述:http://e-docs.bea.com/workshop/docs81/doc/en/workshop/java-class/com/bea/control/JwsContext.Callback.html

不赞成使用的上下文方法

BEA说明文档关于上下文方法(如getCallbackURL)的描述很容易令人混淆。对于JwsContext中的这些方法,说明文档说,不赞成使用它们,而应该使用ServiceControl,但是它却没有说明如何获得该ServiceControl接口的实例。

说明文档试图说明的是,WebService中的回调(Callback)对象现在就是一个ServiceControl实例。当然了,回调对象只有在定义了回调方法的情况下才可用。只要定义了回调方法,就可以使用callback.getEndPoint()访问方法(比如getEndPoint())。

这是有原因的:只有定义了回调方法,CallbackURL才真正有效。关于ServiceControl接口的可用方法的更多信息,可访问http://e-docs.bea.com/workshop/docs81/doc/en/workshop/java-class/com/bea/control/ServiceControl.html

原文出处:http://dev2dev.bea.com/blog/maddison/archive/2005/04/using_the_works_1.html

dot dot dot

dot
  作者其它文章
您对本文的评价
您对这篇文章的看法如何?
太棒了!5分 不错啊 4分 一般般 3分 有待提高 2分 不好 1分