Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Совет по Web-сервисам: Применение асинхронных bean-компонентов для повышения производительности Web-сервисов

Шайлеш К. Михра, инженер-программист, IBM
Шайлеш К. Михра (Shailesh K. Mishra) – инженер-программист, работающий в лаборатории India Software Lab, Гургаон (Индия). В настоящее время трудится над бизнес-портлетами в качестве разработчика технологии IBM Portlet.

Описание:  Ищете пути повышения производительности ваших Web-сервисов? Попробуйте воспользоваться асинхронными bean-компонентами. В этой статье поясняется, как Web-сервисы осуществляют доступ к контенту, размещенному на различных ресурсах, для последовательного выполнения бизнес-операций и рассказывается, как асинхронные bean-компоненты могут в этом помочь.

Больше статей из этой серии

Дата:  24.06.2009
Уровень сложности:  средний
Активность:  902 просмотров
Комментарии:  


Введение

Асинхронные bean-компоненты являются особенностью IBM® WebSphere® Application Server V6.0. В состав WebSphere Application Server входит набор интерфейсов прикладного программирования (API), которые позволяют приложениям Java™ 2 Platform, Enterprise Edition (J2EE) параллельно выполнять свои задачи. Асинхронный bean-компонент – это объект Java или Enterprise JavaBeans (EJB), который может асинхронно выполняться приложением J2EE. При этом bean-компонент использует контекст J2EE своего создателя. Имеются следующие типы асинхронных bean-компонентов:

  • Work – это объект, который реализует интерфейс com.ibm.websphere.asynchbeans.Work. Объект выполняется параллельно с вызывающим объектом с помощью метода WorkManager.startWork.
  • AlarmListener – это объект, который реализует интерфейс com.ibm.websphere.asynchbeans.AlarmListener. Он вызывается по завершении выдачи краткосрочного предупреждения.
  • EventListener – объект, который может реализовывать любой интерфейс. Он представляет собой облегченный механизм асинхронного уведомления для асинхронных событий, возникающих в пределах одной виртуальной машины Java (JVM). Его основная область применения – компоненты J2EE в составе одного EAR-файла, сигнализирующие друг другу о различных асинхронных событиях приложения.

Подробнее узнать об асинхронных bean-компонентах можно в Руководстве по программированию bean-компонентов и на других ресурсах, приведенных в разделе «Ресурсы» в конце этой статьи.

В следующем разделе описывается, как асинхронные bean-компоненты могут быть использованы в Web-сервисах.

Использование асинхронных bean-компонентов в Web-сервисах

Примечание. О том, как создавать Web-сервисы Java, можно узнать в руководстве IBM "WebSphere Version 6 Web Services Handbook Development and Deployment" (EN) (Справочник по разработке и развертыванию Web-сервисов WebSphere Version 6).

Рассмотрим Web-сервис, который извлекает данные с двух различных ресурсов для выполнения определенных операций бизнес-логики. Вы можете использовать здесь объект Work (один из представителей асинхронных bean-компонентов) для объединения этих двух задач (выборка данных с ресурсов). Теперь вы можете выполнять эти две задачи параллельно. В качестве примера возьмем Web-сервис, который объединяет содержимое двух файлов и возвращает этот объединенный контент. Код, представленный в листингах 1 и 2, иллюстрирует, как bean-компонент Java используется для создания этого Web-сервиса.


Листинг 1. Bean-компонент Java, используемый для создания Web-сервиса
                
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;

/**
 * Создан 9 июля 2007 г.
 * 
 * @author Shailesh K Mishra (shailekm@in.ibm.com)
 *  
 */
public class WSAsyncBean {
	WorkManager workManager = null;

	/**
	 *  
	 */
	public WSAsyncBean() {
		super();
		// Автоматически генерируемый
		// конструктор stub
	}

	public String getContent() {
		String str = "";
		// Сначала получить экземпляр WorkManager
		if (workManager == null)
			getWorkManager();

		        try {
			      WorkItem item = workManager.startWork
					  (new FetchFileContentTask("1.txt"));
				  
			      WorkItem item1 = workManager.startWork
				 	 (new FetchFileContentTask("2.txt"));


			   // Создание объекта ArrayList
				ArrayList items = new ArrayList();
			  // Добавление предыдущего объекта WorkItems в объект ArrayList
				items.add(item);
				items.add(item1);
			  // Объединение с использованием метода 
			  // 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) {
			// Автоматически генерируемый блок catch 
			e.printStackTrace();
		    }

	 }
}
		
      


Листинг 2. Класс Java, реализующий интерфейс Work
                
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;

/**
 * Создан 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();
// Чтение текстового файла, представленного в корневом каталоге.
try {
		/*
		 * Чтение текстового файла с заданным именем, 
		 * содержащимся в корневом каталоге этого приложения (для примера).
		 * Здесь вы можете выполнить любую задачу, например 
		 * извлечение информации из БД, вызов другого приложения, 
		 * web-сервиса и т. д.
 		 */
		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-компонента получает ссылку на объект по умолчанию WorkManager, вызывая метод getWorkManager. Затем он инициирует задачи извлечения контента из двух исходных файлов (заключенных в класс FetchFileContentTask), вызывая метод startWork объекта WorkManager. Класс FetchFileContentTask реализует интерфейс Work, который предоставляет возможности для реализации двух методов – запуска и освобождения. В листинге 2 представлен код для класса FetchFileContentTask. После успешного параллельного выполнения двух задач вы извлекаете файловый контент, сформированный этими задачами, и объединяете его. Наконец, объединенная строка возвращается Web-сервисом.


Заключение

В этой статье вы узнали, как использовать асинхронные bean-компоненты в Web-сервисах для повышения их производительности. Преимущество использования асинхронных bean-компонентов состоит в том, что они позволяют Web-сервису выполнять задачи одновременно, как параллельные потоки. При этом потоки выполняются в том же самом контексте, что и их создатель.


Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Об авторе

Шайлеш К. Михра (Shailesh K. Mishra) – инженер-программист, работающий в лаборатории India Software Lab, Гургаон (Индия). В настоящее время трудится над бизнес-портлетами в качестве разработчика технологии IBM Portlet.

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=SOA и Web-сервисы
ArticleID=399194
ArticleTitle=Совет по Web-сервисам: Применение асинхронных bean-компонентов для повышения производительности Web-сервисов
publish-date=06242009
author1-email=shailekm@in.ibm.com
author1-email-cc=

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).