구성요소 호출

모듈이 있는 구성요소는 WebSphere Process Server 클러스터의 모든 노드에서 구성요소를 사용할 수 있습니다.

시작하기 전에

구성요소를 호출하기 전에 구성요소가 들어 있는 모듈이 WebSphere® Process Server에 설치되어 있는지 확인하십시오.

이 타스크의 수행 목적 및 시기

구성요소는 구성요소 이름을 사용하고 구성요소가 예상하는 데이터 유형을 전달하여 WebSphere Process Server 클러스터에서 사용할 수 있는 모든 서비스 구성요소를 사용할 수 있습니다. 이 환경에서 구성요소를 호출하는 것은 필요한 구성요소에 대한 참조를 찾아 작성하는 것을 포함합니다.
주: 모듈에 있는 구성요소는 같은 모듈에 있는 구성요소를 호출할 수 있는데, 이를 모듈 내 호출이라고 합니다. 제공 구성요소에 있는 인터페이스를 내보내고 이 인터페이스를 호출 구성요소에 가져옴으로써 외부 호출(모듈 간 호출)을 구현합니다.
중요사항: 호출 모듈이 실행 중인 서버와 다른 서버에 상주하는 구성요소를 호출할 때 이들 서버에 추가 구성을 수행해야 합니다. 필요한 구성은 구성요소가 비동기 또는 동기로 호출되는지에 따라 다릅니다. 이 경우 Application Server를 구성하는 방법은 관련 타스크에 설명되어 있습니다.

이 타스크의 단계

  1. 호출 모듈에서 필요한 구성요소를 결정하십시오.

    구성요소의 인터페이스 이름 및 인터페이스에 필요한 데이터 유형을 참고하십시오.

  2. 데이터 오브젝트를 정의하십시오.

    입력 또는 리턴이 Java™ 클래스일 수는 있지만 서비스 데이터 오브젝트가 최적입니다.

  3. 구성요소를 찾으십시오.
    1. ServiceManager 클래스를 사용하여 호출 모듈에 사용 가능한 참조를 얻으십시오.
    2. locateService() 메소드를 사용하여 구성요소를 찾으십시오.

      구성요소에 따라 인터페이스는 WSDL(Web Service Descriptor Language) 포트 유형 또는 Java 인터페이스가 될 수 있습니다.

  4. 구성요소를 동기 또는 비동기적으로 호출하십시오.

    Java 인터페이스를 통해 구성요소를 호출하거나 invoke() 메소드를 사용하여 구성요소를 동적으로 호출할 수 있습니다.

  5. 리턴을 처리하십시오.

    구성요소는 예외를 생성할 수 있으므로 클라이언트가 이러한 가능성을 처리할 수 있어야 합니다.

호출 구성요소의 예제

호출 구성요소의 예제

다음 예에서 ServiceManager 클래스를 작성합니다.
ServiceManager serviceManager = new ServiceManager();
다음 예제에서는 ServiceManager 클래스를 사용하여 구성요소 참조를 포함하는 파일에서 구성요소 목록을 가져옵니다.
InputStream myReferences = new FileInputStream("MyReferences.references");
ServiceManager serviceManager = new ServiceManager(myReferences);
다음 코드는 StockQuote Java 인터페이스를 구현하는 구성요소를 찾습니다.
StockQuote stockQuote = (StockQuote)serviceManager.locateService("stockQuote");
다음 코드는 Java 또는 WSDL 포트 유형 인터페이스를 구현하는 구성요소를 찾습니다. 호출 모듈은 Service 인터페이스를 사용하여 구성요소와 상호작용합니다.
팁: 구성요소가 Java 인터페이스를 구현하는 경우 구성요소는 인터페이스 또는 invoke() 메소드를 통해 호출될 수 있습니다.
Service stockQuote = (Service)serviceManager.locateService("stockQuote");
다음 예에서 다른 구성요소를 호출하는 코드인 MyValue를 보여줍니다.
public class MyValueImpl implements MyValue {

	public float myValue throws MyValueException {
		
		ServiceManager serviceManager = new ServiceManager();

	    // variables
	        Customer customer = null;
	        float quote = 0;
	        float value = 0;

	        // invoke
	        CustomerInfo cInfo =
						(CustomerInfo)serviceManager.locateService("customerInfo");
	        customer = cInfo.getCustomerInfo(customerID);

	    if (customer.getErrorMsg().equals("")) {

	        // invoke
	    		StockQuoteAsync sQuote = 
						(StockQuoteAsync)serviceManager.locateService("stockQuote");
	    		Ticket ticket =  sQuote.getQuoteAsync(customer.getSymbol());
				// … do something else …
	    		quote =  sQuote.getQuoteResponse(ticket, Service.WAIT);

	        // assign
	        	value = quote * customer.getNumShares();
	    } else {

	        // throw
	       	throw new MyValueException(customer.getErrorMsg()); 
	    }
	    // reply
	        return value;
	}
}

다음에 수행할 작업

호출 모듈 참조와 구성요소 인터페이스의 연결을 구성합니다.

동적으로 구성요소 호출

모듈이 WSDL(Web Service Descriptor Language) 포트 유형 인터페이스가 포함된 구성요소를 호출할 때 모듈은 invoke() 메소드를 사용하여 동적으로 구성요소를 호출해야 합니다.

시작하기 전에

이 타스크에서는 호출 구성요소가 구성요소를 동적으로 호출한다고 가정합니다.

이 타스크의 수행 목적 및 시기

WSDL 포트 유형 인터페이스에서 호출 구성요소는 invoke() 메소드를 사용하여 구성요소를 호출해야 합니다. 이러한 방법으로 호출 모듈은 Java 인터페이스가 있는 구성요소를 호출할 수도 있습니다.

이 타스크의 단계

  1. 필수 구성요소를 포함하는 모듈을 판별하십시오.
  2. 구성요소에서 필요한 배열을 판별하십시오.
    입력 배열은 다음 세 유형 중 하나입니다.
    • 기본 대문자 Java 유형 또는 유형의 배열
    • 정규 Java 클래스 또는 클래스의 배열
    • 서비스 데이터 오브젝트(SDO)
  3. 구성요소의 응답을 포함하도록 배열을 정의하십시오.

    응답 배열은 입력 배열과 동일한 유형일 수 있습니다.

  4. invoke() 메소드를 사용하여 필수 구성요소를 호출하고 배열 오브젝트를 구성요소로 전달하십시오.
  5. 결과를 처리하십시오.

구성요소 동적 호출 예

구성요소 동적 호출 예

다음 예에서는 모듈이 invoke() 메소드를 사용하여 기본 대문자 Java 데이터 유형을 사용하는 구성요소를 호출합니다.
Service service = (Service)serviceManager.locateService("multiParamInf");
		
		Reference reference = service.getReference();

		OperationType methodMultiType = 
				reference.getOperationType("methodWithMultiParameter");

		Type t = methodMultiType.getInputType();

		BOFactory boFactory = (BOFactory)serviceManager.locateService
				("com/ibm/websphere/bo/BOFactory");

		DataObject paramObject = boFactory.createbyType(t);

		paramObject.set(0,"input1")
		paramObject.set(1,"input2")
		paramObject.set(2,"input3")

		service.invoke("methodMultiParamater",paramObject);

다음 예는 WSDL 포트 유형 인터페이스를 대상으로 가지는 호출 메소드를 사용합니다.

Service serviceOne = (Service)serviceManager.locateService("multiParamInfWSDL");
	
	DataObject dob = factory.create("http://MultiCallWSServerOne/bos", "SameBO");
			dob.setString("attribute1", stringArg);

	DataObject wrapBo = factory.createByElement
		("http://MultiCallWSServerOne/wsdl/ServerOneInf", "methodOne");
			wrapBo.set("input1", dob); //wrapBo encapsulates all the parameters of methodOne
			wrapBo.set("input2", "XXXX");
			wrapBo.set("input3", "yyyy");

	DataObject resBo= (DataObject)serviceOne.invoke("methodOne", wrapBo);

ⓒ Copyright IBM Corporation 2005, 2006.
이 Information Center는 Eclipse 기술을 기반으로 합니다. (http://www.eclipse.org)