注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Java >> JavaXML >> XMLBeans >> Java正文

使用异步Bean提高Web服务性能

文章来源:CSDN 作者:佚名 更新时间:2008-6-28 20:35:01 【 】 【加入收藏

    引言

      异步 Bean 是 ibm? WebSphere? Application server V6.0 的一个特色。WebSphere Application server 提供了一组 API,允许 Java? 2 Platform Enterprise Edition (J2EE) 应用程序并行执行任务。异步 Bean 是可以由 J2EE 应用程序以异步方式执行的 Java 对象或 Enterprise JavaBeans (EJB) 组件。Bean 使用其创建者的 J2EE 上下文异步运行。异步 Bean 的类型包括:

      Work 是实现 com.ibm.websphere.asynchbeans.Work 接口的对象。它使用 WorkManager.startWork 方法与其调用者并行执行。

      AlarmListener 是实现 com.ibm.websphere.asynchbeans.AlarmListener 接口的对象。当高速临时警报过期时将调用此对象。

      EventListener 是能够实现任何接口的对象。这是用于单个 Java 虚拟机(Java virtual machine,JVM)内的异步事件的轻量级异步通知机制。其设想的主要用途是作为单个 EAR 文件中的 J2EE 组件,指示彼此间的各种应用程序异步事件。

      您可以通过异步 Bean 编程指南 (Asynchronous operations and Web services) 和本文最后的参考资料部分提供的其他参考资料了解有关异步 Bean 的更多信息。

      接下来我们将讨论可以如何在 Web 服务中使用异步 Bean。

      在 Web 服务中使用异步 Bean

      注意:有关如何编写 Java Web 服务的信息,请参考 ibm 红皮书“WebSphere Version 6 Web Services Handbook Development and Deployment”。

      假定我们需要一个 Web 服务,此服务要从两个不同的资源获取数据来执行其业务逻辑。此时可以使用 Work 对象(异步 Bean 的一种风格)来包装这两个任务(从资源检索数据)。现在可以并行执行这两个任务了。为了进行演示,让我们以追加两个文本文件的内容并将其返回的 Web 服务为例。清单 1 和 清单 2 中的代码示例说明了如何使用 Java Bean 来创建此 Web 服务。

      清单 1 用于创建 Web 服务的 Java Bean

      

          package com.demo.asynbean.ws;
      import java.util.ArrayList;

      import javax.naming.InitialContext;

      import javax.naming.NamingException;

      import com.ibm.websphere.asynchbeans.WorkException;

      import com.ibm.websphere.asynchbeans.WorkItem;

      import com.ibm.websphere.asynchbeans.WorkManager;

      /**

      * Created on Jul 9, 2007

      *

      * @author Shailesh K Mishra (shailekm@in.ibm.com)

      *

      */

      public class WSAsyncBean {

      WorkManager workManager = null;

      /**

      *

      */

      public WSAsyncBean() {

      super();

      // TODO Auto-generated constructor stub

      }

      public String getContent() {

      String str = "";

      //get the WorkManager instance first.

      if (workManager == null)

      getWorkManager();

      try {

      WorkItem item = workManager.startWork(new FetchFileContentTask("1.txt"));

      WorkItem item1 = workManager.startWork(new FetchFileContentTask("2.txt"));

      //Create an ArrayList

      ArrayList items = new ArrayList();

      //Add the previous WorkItems to ArrayList

      items.add(item);

      items.add(item1);

      //Join them using WorkManager workManager

      workManager.join(items, WorkManager.JOIN_AND,(int) WorkManager.INDEFINITE);

      FetchFileContentTask task1 = (FetchFileContentTask) item.getResult();

      FetchFileContentTask task2 = (FetchFileContentTask) item1.getResult();

      String contentFromFile1 = task1.getContent();

      String contentFromFile2 = task2.getContent();

      str = contentFromFile1 + contentFromFile2;

      } catch (WorkException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      } catch (IllegalArgumentException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      }

      return str;

      }

      /**

      *

      */

      private void getWorkManager() {

      try {

      InitialContext ic = new InitialContext();

      workManager = (WorkManager) ic.lookup("java:comp/env/wm/myWorkManager");

      } catch (NamingException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      }

      }

      }

 

 

     清单 2 实现 Work 接口的 Java 类

             package com.demo.asynbean.ws;
      import java.io.BufferedReader;

      import java.io.IOException;

      import java.io.InputStream;

      import java.io.InputStreamReader;

      import java.net.MalformedURLException;

      import java.net.URL;

      import com.ibm.websphere.asynchbeans.Work;

      /**

      * Created on Jul 7, 2007

      * @author Shailesh K Mishra (shailekm@in.ibm.com)

      *

      */

      public class FetchFileContentTask implements Work {

      String fileName = "";

      String content ="";

      public FetchFileContentTask(String filename) {

      super();

      this.fileName = filename;

      }

      /*

      * (non-Javadoc)

      * @see javax.resource.spi.work.Work#release()

      */

      public void release() {}

      /*

      * (non-Javadoc)

      * @see java.lang.Runnable#run()

      */

      public void run() {

      StringBuffer buffer = new StringBuffer();

      // read the text file present in root directory.

      try {

      /*

      * read the given file name in this application's root   dir(for demo).

      * You can perform any task here, e.g.

      * fetching data from DB, invoking some other app, web   service, etc.

      */

      URL url = new URL  ("http://localhost:9080/WSAsynBeans/"+fileName);

      InputStream in = url.openConnection().getInputStream();

      BufferedReader br = new BufferedReader(new   InputStreamReader(in));

      String line=br.readLine();

      while (line != null) {

      try {

      buffer.append(line);

      line=br.readLine();

      }catch (IOException ioe) {

      ioe.printStackTrace();

      break;

      }

      }

      content = new String(buffer);

      } catch (NamingException e) {

      e.printStackTrace();

      } catch (IOException e) {

      e.printStackTrace();

      }

      }

      /**

      * @return Returns the name.

      */

      public String getContent() {

      return content;

      }

      }

      在清单 1 中,Bean 类通过调用 getWorkManager 方法获取对缺省 WorkManager 的引用。然后将通过调用 WorkManager 的 startWork 方法启动从两个源文件获取内容的任务(包装在 FetchFileContentTask 类中)。FetchFileContentTask 类实现 Work 接口,其提供了要实现的两个方法,即 run 和 release。清单 2 显示了 FetchFileContentTask 类的代码。成功以并行方式执行了这两个任务后,将从这些任务检索文件内容,并进行追加。最后,Web 服务返回所追加的字符串。

      结束语

      在本文中,您了解了如何在 Web 服务中使用异步 Bean 来提高性能。使用异步 Bean 的好处在于,它支持 Web 服务以并行线程的方式执行任务,而且这些线程都在与创建者相同的上下文中运行。

  • 上一篇Java:

  • 下一篇Java: 没有了
  • 最 新 热 门
     手机开发平台指南、教程和资料介绍
     关于什么叫面向接口编程
     编写高级JavaScript应用代码
     不要验证,直接转化科学计数法
     Eclipse插件开发中实现刷新和重编译介绍
     Java开源技术:Eclipse的使用技巧详解
     配置eclipse 3.2 使用JDK1.5中文JavaAPI
     集成Windows本地应用到Eclipse RCP 程序中
     hibernate.cfg.xml配置文件的说明
     eclipse开发jface时,main.class解决方法
    最 新 推 荐
     使用异步Bean提高Web服务性能
     深入探索 高效的Java异常处理框架
     Digester解析XML文档Sample
     如何实现XML+XSL+javascript数据排序
     Javascript+DOM访问XML文件数据实例
     javascript+xml实现二级下拉菜单二
     javascript+xml实现二级下拉菜单一
     Java解析XML文档――dom解析xml
     关于Xdoclet生成hibernate映射文件
     java中四种操作xml方式的比较
    相 关 文 章

    Java开源技术:Eclipse的使用技巧详解
    配置eclipse 3.2 使用JDK1.5中文JavaAPI
    结合Spring2.0和ActiveMQ进行异步消息调用
    J2ME中使用低级界面实现简单数字输入
    妙用异步Servlet扩展AJAX应用程序
    决定是否使用分布式结构
    使用Java Annotations来管理对象生命周期
    使用java模拟登陆百度
    使用java得到网页编码格式
    使用java将网页保存为mht格式

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用