작업 관리자

작업 관리자는 Java™ EE(Java Platform, Enterprise Edition) 애플리케이션에 스레딩을 제공합니다.

관리 콘솔을 사용하여 관리자는 여러 작업 관리자를 구성할 수 있습니다. 관리자는 작업 관리자에 제출된 태스크에 대한 Java EE 컨텍스트 상속 정책을 포함하는 작업 관리자의 특성을 지정합니다. 관리자는 각각의 작업 관리자를 JNDI(Java Naming and Directory Interface)의 고유 위치에 바인드합니다.다음 인터페이스 중 하나에서 작업 관리자 오브젝트를 사용할 수 있습니다.
  • 관리 대상 실행자
    • javax.enterprise.concurrent.ManagedExecutorService
    • javax.enterprise.concurrent.ManagedScheduledExecutorService
    • java.util.concurrent.ExecutorService
    • java.util.concurrent.ScheduledExecutorService
  • 스레드 팩토리
    • javax.enterprise.concurrent.ManagedThreadFactory
    • java.util.concurrent.ThreadFactory
  • 스레드 컨텍스트 서비스
    • javax.enterprise.concurrent.ContextService
  • 비동기 Bean
    • com.ibm.websphere.asynchbeans.WorkManager
  • CommonJ 작업 관리자
    • commonj.work.WorkManager
선택된 인터페이스 유형은 자원 환경 참조에 지정하는 값을 기반으로 JNDI 검색 시간 동안 해결됩니다.

작업 관리자는 Java EE 애플리케이션에 프로그래밍 모델을 제공합니다. 자세한 정보는 프로그래밍 모델 섹션을 참조하십시오.

문제점 방지 문제점 방지: javax.resource.spi.work.WorkManager 클래스는 JCA(Java EE Connector Architecture) 자원 어댑터에서 사용하는 Java 인터페이스입니다. WorkManager의 실제 구현이 아니며, Java EE 애플리케이션에 의해 사용됩니다. gotcha

Java EE 또는 비동기 Bean에 대해 동시성 유틸리티를 사용하는 EJB(Enterprise JavaBeans) 컴포넌트 또는 웹을 작성 중일 때, 개발자는 관리 대상 실행기, 스레드 팩토리, 컨텍스트 서비스 또는 작업 관리자에 대한 액세스 권한이 필요한 각 컴포넌트에 자원 환경 참조를 포함해야 합니다. 자원 참조에 대한 자세한 정보는 참조 주제를 참조하십시오. 컴포넌트는 데이터 소스, 엔터프라이즈 Bean 또는 연결 팩토리를 찾는 것과 같이 컴포넌트 java: comp 네임스페이스에서 로컬 이름을 사용하는 관리 대상 실행기, 스레드 팩토리, 컨텍스트 서비스 또는 작업 관리자를 검색합니다.

배치자는 애플리케이션이 배치될 때 실제 작업 관리자를 논리 자원 환경 참조(관리 대상 실행기, 스레드 팩토리, 컨텍스트 서비스 또는 작업 관리자)에 바인드합니다.

예를 들어 개발자가 금, 은, 동 레벨 사이의 작업을 파티션하기 위해 세 가지의 스레드 풀을 필요로 하는 경우 개발자는 클라이언트 애플리케이션의 프로파일에 있는 속성에 준한 논리 풀을 선택하기 위한 컴포넌트를 씁니다. 배치자는 세 스레드 풀에 대해 이러한 요청을 맵핑하는 방법을 결정하는 데 유연성을 가지고 있습니다. 배치자는 작은 시스템에 단일 스레드 풀을 사용할 것을 결정할 수도 있습니다. 이러한 경우 개발자는 모든 세 자원 참조를 동일한 작업 관리자 인터페이스(즉, 동일한 JDNI 이름)에 바인드합니다. 대형 시스템은 세 가지 스레드 풀을 지원할 수도 있으므로 배치자는 각각의 자원 참조를 다른 작업 관리자에 바인드합니다. 작업 관리자는 동일한 서버에 설치되어 있는 여러 Java EE 애플리케이션 사이에서 공유될 수 있습니다.

애플리케이션 개발자는 필요한 경우 여러 논리 자원 환경 참조로서 사용할 수 있습니다. 배치자는 하나의 실제 작업 관리자 또는 여러 작업 관리자를 애플리케이션에 정의된 논리 관리 대상 실행기, 스레드 팩토리, 컨텍스트 서비스 또는 작업 관리자에 맵핑할 것인지를 선택합니다.

비동기 범위 오브젝트를 공유해야 하는 모든 Java EE 컴포넌트는 동일한 작업 관리자를 사용해야 합니다. 이러한 범위 오브젝트는 단일 작업 관리자와 친화력이 있습니다. 비동기 범위를 사용하는 애플리케이션은 범위 오브젝트를 사용하는 모든 컴포넌트가 동일한 작업 관리자를 사용하는지 확인해야 합니다.

여러 작업 관리자가 정의되어 있는 경우, 해당 JVM(Java Virtual Machine) 내에서 애플리케이션이 작업 관리자를 찾아볼 때만 JVM에 기본 스레드 풀이 작성됩니다. 예를 들어, 10개의 스레드 풀(작업 관리자)이 정의되어 있지만, 애플리케이션이 이러한 풀을 찾을 때까지는 실제로 작성되는 스레드 풀은 없습니다.

중요사항: 작업 관리자는 원격 JVM에 대한 작업 제출을 지원하지 않습니다.

CommonJ 작업 관리자

CommonJ 작업 관리자에는 비동기 Bean 작업 관리자 메소드의 서브세트를 포함합니다. CommonJ 작업 관리자가 Java EE 환경에서 기능하더라도, 이 스펙이 Java EE 스펙에 포함되지 않으므로 인터페이스는 각 JNDI 네이밍 검색에 대해 새 인스턴스를 리턴하지 않습니다.

원격으로 실행 중인 작업의 CommonJ 작업 스펙 선택적 기능은 지원되지 않습니다. 작업 단위가 java.io.Serializable 인터페이스를 구현하는 경우에도, 작업 단위는 원격으로 실행하지 않습니다.

관리 대상 실행기를 검색하는 방법

애플리케이션은 다음과 같이 관리 대상 실행기를 검색할 수 있습니다. 다음은 컴포넌트가 전개될 때 실제 작업 관리자에 바인드된 concurrent/myExecutor라는 이름의 자원 환경 참조를 포함합니다.
InitialContext ic = new InitialContext(); 
ManagedExecutorService executor = (ManagedExecutorService) ic.lookup("java:comp/env/concurrent/myExecutor");

상속 Java EE 컨텍스트

관리 대상 실행기와 작업 관리자에 제출된 태스크는 제출 스레드로부터 다음 Java EE 컨텍스트를 상속받을 수 있습니다. 컨텍스트상 프록시는 컨텍스트상 프록시를 작성하기 위해 컨텍스트 서비스를 호출하는 스레드로부터 이런 종류의 컨텍스트를 상속받을 수 있습니다. 관리된 스레드 팩토리 스레드는 관리된 스레드 팩토리를 검색하거나 삽입하는 스레드로부터 이런 유형의 컨텍스트를 상속받을 수 있습니다.
글로벌 컨텍스트
이 옵션이 선택되고 국제화 서비스가 사용 가능으로 설정되면 스케줄링 스레드에 존재하는 국제화 컨텍스트를 대상 스레드에서 사용 가능합니다.
작업 영역
이 업션이 선택되면 스케줄링 스레드에 존재하는 모든 작업 영역 파티션의 작업 영역 컨텍스트를 대상 스레드에서 사용 가능합니다.
애플리케이션 프로파일 (제공되지 않음)
애플리케이션 프로파일 컨텍스트는 지원되지 않고 대부분의 애플리케이션에 사용 가능하지 않습니다. Java EE 1.3 애플리케이션의 경우, 이 옵션을 선택하면 애플리케이션 프로파일 서비스가 사용 가능해지고 애플리케이션 프로파일 서비스 특성인 5.x 호환성 모드가 선택됩니다. 스케줄링 스레드와 연관된 애플리케이션 프로파일 태스크는 Java EE 1.3 애플리케이션에 대한 대상 스레드에서 사용 가능합니다. Java EE 1.4 이상 애플리케이션의 경우, 애플리케이션 프로파일 태스크는 스레드보다 작업의 해당 연관된 장치의 특성입니다. 이 옵션은 Java EE 1.4 이상 애플리케이션에서 태스크의 동작에는 영향을 미치지 않습니다. Java EE 1.4 애플리케이션에서 실행되는 스케줄링된 작업은 스케줄링 스레드의 프로파일링 태스크를 수신하지 않습니다.
보안
태스크는 익명으로 실행될 수 있거나 이를 작성하고 제출한 스레드에 인증된 클라이언트로서 실행될 수 있습니다. 이 작동은 태스크가 호출자가 수행할 수 있는 것만 수행할 수 있으므로 유용합니다. 예를 들면, 이 조치는 RUN_AS 메커니즘 보다 더 유용하며, 이런 종류의 동작을 방지합니다. 보안 옵션이 선택되면 스케줄링 스레드에 존재하는 JAAS 주제를 대상 스레드에서 사용 가능합니다. 선택하지 않은 경우, 스레드는 익명으로 실행합니다.
컴포넌트 메타데이터
태스크가 단순한 Java 오브젝트일 때만 컴포넌트 메타데이터가 적절합니다. 태스크가 엔터프라이즈 Bean과 같은 Java EE 컴포넌트인 경우, 컴포넌트 메타데이터가 활성화됩니다.

상속될 수 있는 컨텍스트는 작업 관리자에 따라 다르고, 태스크를 작성하고 제출하는 애플리케이션에 의해 사용됩니다. 관리 콘솔을 사용하여 관리자는 작업 관리자를 사용 가능하게 만드는 서비스를 선택하여 작업 관리자의 sticky 컨텍스트를 정의합니다.

프로그래밍 모델

작업 관리자는 다음의 프로그래밍 모델를 지원합니다.
  • Java EE에 대한 동시성 유틸리티. Java EE 스펙은 이 프로그래밍 모델을 표준화하며, 관리 대상 실행기, 관리 대상 스케줄된 실행기 및 관리된 스레드 팩토리를 포함하며, 익숙한 Java SE java.util.concurrent API로부터 상속받습니다. 또한 컨텍스트 서비스를 포함하며, java.util.concurrent API에 등가물이 없습니다.
  • 비동기 beans. 현재 비동기적 Bean 작업 관리자, 이벤트 소스, 비동기적 범위, 서브시스템 모니터 및 Java EE 컨텍스트 인터페이스는 비동기 Bean 프로그래밍 모델의 일부분입니다.
  • CommonJ 스펙. CommonJ 프로그래밍 모델은 WorkManager 및 TimerManager를 사용하여 Java EE 1.4 환경에서 스레드 및 타이머를 비동기식으로 관리합니다.

관리 대상 실행기, 스레드 팩토리, 컨텍스트 서비스 및 작업 관리자 API에 대한 자세한 정보는 Javadoc을 참조하십시오.

동시성 예

표 1. 관리 대상 실행기 또는 작업 관리자 검색
관리 대상 실행기 비동기 Bean CommonJ
InitialContext ctx = new InitialContext();
ManagedExecutorService executor =
(ManagedExecutorService)
   ctx.lookup("java:comp/env/wm/myWorkMgr");
InitialContext ctx = new InitialContext();
com.ibm.websphere.asynchbeans.WorkManager wm  =
(com.ibm.websphere.asynchbeans.WorkManager)
   	       ctx.lookup(“java:comp/env/wm/MyWorkMgr”);
InitialContext ctx = new InitialContext();
commonj.work.WorkManager wm =
 (commonj.work.WorkManager)
   	       ctx.lookup(“java:comp/env/wm/MyWorkMgr”);
표 2. 사용자 태스크 작성
관리 대상 실행기 비동기 Bean CommonJ
 public class MyWork implements Callable<Integer> {
     public Integer call() {
       	     System.out.println(“Running.....”);
       return 1;
     }
   }
public class MyWork implements 
com.ibm.websphere.asynchbeans.Work {
   public void release() {
            ......
   }
   	   public void run() {
    	     System.out.println(“Running.....”);
}
public class MyWork implements 
commonj.work.Work{
   	   public boolean isDaemon() {
                               return false;
   }
   	   public void release () {
        .....
   }
    	  public void run () {
     	     System.out.println(“Running.....”);
  }
표 3. 태스크 제출
관리 대상 실행기 비동기 Bean CommonJ
	MyWork work1 = new MyWork();
	MyWork work2 = new MyWork();

	// case 1: block until all items are done
Collection<MyWork> tasks =
    Arrays.asList(work1, work2);
List<Future<Integer>> futures =
    executor.invokeAll(tasks);
for (Future<Integer> future : futures)
    System.out.println("work data=" + future.get());

//case 2: wait up to 1000 milliseconds for any of the items to complete.
Integer result = executor.invokeAny(
    tasks, 1, TimeUnit.SECONDS);
System.out.println("work data=" + result);
	MyWork work1 = new MyWork();
	MyWork work2 = new MyWork();

	WorkItem item1;
	WorkItem item2;
	Item1=wm.startWork(work1);
	Item2=wm.startWork(work2);
	
	// case 1: block until all items are done
	ArrayList col1 = new ArrayList();
	Col1.add(item1);
	Col1.add(item2);
wm.join(col1, WorkManager.JOIN_AND, WorkManager.INDEFINITE);
	// when the works are done
	System.out.println(“work1 data=”+work1.getData());
	System.out.println(“work2 data=”+work2.getData());
	
	// you should complete case 1 before case 2
//case 2: wait up to 1000 milliseconds for any of the items to complete.
Boolean ret = wm.join(col1, WorkManager.JOIN_OR, 1000);
	MyWork work1 = new MyWork();
	MyWork work2 = new MyWork();
	
	WorkItem item1;
	WorkItem item2;
	Item1=wm.schedule(work1 );
	Item2=wm.schedule(work2);
	
	// case 1: block until all items are done
	Collection col1 = new ArrayList();
	col1.add(item1);
	col1.add(item2);
	wm.waitForAll(col1, WorkManager.INDEFINITE);
	// when the works are done
	System.out.println(“work1 data=”+work1.getData());
	System.out.println(“work2 data=”+work2.getData());
	
	// you should complete case 1 before case 2
//case 2: wait up to 1000 milliseconds for any of the items to complete.
Collection finished = wm.waitForAny(col1,1000);
	// check the workItems status
	if (finished != null) {
	  Iterator I = finished.iterator();
	  	  if (i.hasNext()) {
	     	     WorkItem wi = (WorkItem) i.next();
	      	      if (wi.equals(item1)) {
	        	        System.out.println(“work1 =
 										 “+ work1.getData());
	      	      } else if (wi.equals(item2)) {
	        	        System.out.println(“work1 =
					 					 “+ work1.getData());
	      }
	  }
}
표 4. 관리 대상 스케줄된 실행기, 알람 관리자 또는 타이머 관리자 작성
관리 대상 스케줄된 실행기 비동기 Bean CommonJ
InitialContext ctx = new InitialContext();
ManagedScheduledExecutorService executor =
  (ManagedScheduledExecutorService)
    ctx.lookup("java:comp/env/wm/MyWorkMgr");
InitialContext ctx = new InitialContext();
com.ibm.websphere.asynchbeans.WorkManager wm  =
    (com.ibm.websphere.asynchbeans.WorkManager)
      	       ctx.lookup(“java:comp/env/wm/MyWorkMgr”);	
	AsynchScope ascope;
Try {
  	  Ascope = wm.createAsynchScope(“ABScope”);
	} Catch (DuplicateKeyException ex)
{
   	   Ascope = wm.findAsynchScope(“ABScope”);
   ex.printStackTrace();
}

	// get an AlarmManager 
	AlarmManager  aMgr= ascope.getAlarmManager();
InitialContext ctx = new InitialContext();
	Commonj.timers.TimerManager tm =
 (commonj.timers.TimerManager)
   ctx.lookup(“java:comp/env/tm/MyTimerManager”);
표 5. 태스크, 알람 또는 타이머 스케줄링
관리되는 스케줄된 실행자 비동기 Bean CommonJ
// create task
Runnable task = new StockQuoteTask(
    “qqq”, “johndoe@example.com”);
ScheduledFuture<?> future =
     executor.schedule(task, 1, TimeUnit.MINUTES);

// Fixed-delay: schedule task to run
// 1 minute from now and repeat every
// hour thereafter.  
ScheduledFuture<?> future =
    executor.scheduleWithFixedDelay(
        task, 1, 60, TimeUnit.MINUTES);

// Fixed-rate: schedule timer to expire
// 1 minute from now and repeat every
	// hour thereafter
ScheduledFuture<?> future =
    executor.scheduleAtFixedRate(
        task, 1, 60, TimeUnit.MINUTES);
	// create alarm
	ABAlarmListener listener = new ABAlarmListener();
	Alarm am = 
   aMgr.create(listener, “SomeContext”, 1000*60);
// create timer
	TimerListener listener =
 new StockQuoteTimerListener(“qqq”,
 “johndoe@example.com”);
	Timer timer = tm.schedule(listener, 1000*60);
	
	// Fixed-delay: schedule timer to expire in
	// 60 seconds from now and repeat every
// hour thereafter.  
Timer timer = tm.schedule(listener, 1000*60, 1000*30);
	
	// Fixed-rate: schedule timer to expire in
	// 60 seconds from now and repeat every
	// hour thereafter
Timer timer = tm.scheduleAtFixedRate(listener, 1000*60, 1000*30);

주제 유형을 표시하는 아이콘 개념 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=casb_workmgr
파일 이름:casb_workmgr.html