사용자 정의 EJB 컴포넌트 작성: 옵션 1

권장하는 이주 기법은 사용자가 Stateless 세션 EJB를 SCA 컴포넌트로서 호출하게 하는 Stateless 세션 바인딩을 갖는 WebSphere® Integration Developer 가져오기를 사용하는 것입니다. 이주 중에 SCA Java™ 인터페이스 스타일에서 기존의 EJB 인터페이스 스타일로 변환하도록 Java 코드를 작성해야 합니다.

사용자 정의 EJB 컴포넌트를 작성하려면 다음을 수행하십시오.
  1. 모듈 프로젝트 아래에서 인터페이스를 펼치고 WebSphere Studio Application Developer Integration에서 이 EJB에 대해 생성된 WSDL 인터페이스를 선택하십시오.
  2. 이 인터페이스를 어셈블리 편집기로 끌어서 놓으십시오. 작성할 컴포넌트의 유형을 선택하는 대화 상자가 열립니다. 구현 유형이 없는 컴포넌트를 선택하고 확인을 클릭하십시오.
  3. 일반 컴포넌트가 어셈블리 다이어그램에 표시됩니다. 해당 컴포넌트를 선택한 후 특성 보기로 이동하십시오.
  4. 설명 탭에서 컴포넌트의 이름 및 표시 이름을 보다 구체적인 것으로 변경할 수 있습니다. EJB의 이름과 비슷한 이름을 선택하지만 “JavaMed” 같은 접미사를 붙이십시오. 이것이 WebSphere Studio Application Developer Integration에서 EJB에 대해 생성되는 WSDL 인터페이스와 EJB의 Java 인터페이스 사이를 중개하는 Java 컴포넌트가 되기 때문입니다.
  5. 세부사항 탭에서 어셈블리 편집기에 끌어서 놓은 하나의 인터페이스를 갖는 이 컴포넌트를 볼 수 있습니다.
  6. 어셈블리 편집기로 돌아가서 방금 작성한 컴포넌트를 마우스 오른쪽 단추로 클릭하고 구현 생성… > Java를 선택하십시오. 그런 다음 Java 구현이 생성될 패키지를 선택하십시오. 그러면 복합 유형은 commonj.sdo.DataObject인 오브젝트로 표시되고 단순 유형은 동등한 Java 오브젝트로 표시되는 SCA 프로그래밍 모델에 따라 WSDL 인터페이스를 준수하는 스켈레톤 Java 서비스가 작성됩니다.
아래 코드 예는 다음을 보여줍니다.
  1. 5.1 WSDL 인터페이스의 관련 정의
  2. WSDL에 대응하는 WebSphere Studio Application Developer Integration Edition 5.1 Java 메소드
  3. 동일한 WSDL에 대한 WebSphere Integration Developer 6.0 Java 메소드
아래 코드는 5.1 WSDL 인터페이스의 관련 정의를 보여줍니다.
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="qualified"
elementFormDefault="unqualified"
targetNamespace="http://migr.practice.ibm.com/"
xmlns:xsd1="http://migr.practice.ibm.com/">
<complexType name="StockInfo">
<all>
<element name="index" type="int"/>
<element name="price" type="double"/>
<element name="symbol" nillable="true"
type="string"/>
</all>
</complexType>
</schema>
</types>
<message name="getStockInfoRequest">
<part name="symbol" type="xsd:string"/>
</message>
<message name="getStockInfoResponse">
<part name="result" type="xsd1:StockInfo"/>
</message>
<operation name="getStockInfo" parameterOrder="symbol">
<input message="tns:getStockInfoRequest"
name="getStockInfoRequest"/>
<output message="tns:getStockInfoResponse"
name="getStockInfoResponse"/>
</operation>
다음 코드는 WSDL에 해당하는 WebSphere Studio Application Developer Integration Edition 5.1 Java 메소드를 보여줍니다.
public StockInfo getStockInfo(String symbol)
{
return new StockInfo();
}
public void setStockPrice(String symbol, float newPrice)
{
		// set some things
}
다음 코드는 동일한 WSDL에 대한 WebSphere Integration Developer 6.0 Java 메소드를 표시합니다.
public DataObject getStockInfo(String aString) {
		//TODO Needs to be implemented.
		return null;
}
	public void setStockPrice(String symbol, Float newPrice) {
		//TODO Needs to be implemented.
}
따라서 생성된 Java 구현 클래스에서 “//TODO” 태그가 표시되는 위치에 실제 코드를 채워야 합니다. 먼저 이 Java 컴포넌트에서 실제 EJB로의 참조를 작성하여 SCA 프로그래밍 모델에 따라서 EJB에 액세스할 수 있게 해야 합니다.
  1. 어셈블리 편집기를 계속 열어두고 J2EE Perspective로 전환하십시오. 서비스를 작성하려는 EJB가 들어있는 EJB 프로젝트를 찾으십시오.
  2. 배치 설명자: <project-name> 항목을 펼치고 EJB를 찾으십시오. EJB를 어셈블리 편집기로 끌어서 놓으십시오. 프로젝트 종속성을 갱신하도록 경고하는 경우 모듈 종속성 편집기 열기… 선택란을 선택하고 확인을 클릭하십시오.
  3. J2EE 섹션 아래에서 EJB 프로젝트가 나열되는지 확인하고 나열되지 않는 경우 추가…를 클릭하여 추가하십시오. 단추를 클릭하십시오.
  4. 모듈 종속성을 저장하고 편집기를 닫으십시오. 새 가져오기가 어셈블리 편집기에서 작성되었음을 알 수 있습니다. 가져오기를 선택하고 설명 탭의 특성 보기로 이동하여 가져오기의 이름 및 표시 이름을 보다 구체적인 것으로 변경할 수 있습니다. 바인딩 탭에서 가져오기 유형이 자동으로 Stateless 세션 Bean 바인딩으로 설정되고 EJB의 JNDI 이름이 이미 적절하게 설정되었음을 알 수 있습니다.
  5. 어셈블리 편집기의 팔레트에서 연결 도구를 선택하십시오.
  6. Java 컴포넌트를 클릭하고 마우스를 놓으십시오.
  7. 다음에 EJB 가져오기를 클릭하고 마우스를 놓으십시오.
  8. 일치하는 참조가 소스 노드에 작성됩니다. 계속하시겠습니까? 표시되면 확인을 클릭하십시오. 두 컴포넌트 사이에 연결이 작성됩니다.
  9. 어셈블리 편집기 및 세부사항 탭 아래의 특성 보기에서 Java 컴포넌트를 선택하고, 참조를 펼친 다음 방금 작성된 EJB에 대한 참조를 선택하십시오. 생성되는 이름이 매우 구체적이거나 적합하지 않은 경우 참조의 이름을 갱신할 수 있습니다. 나중에 사용할 수 있도록 이 참조의 이름을 기억하십시오.
  10. 어셈블리 다이어그램을 저장하십시오.
SCA 프로그래밍 모델을 사용하여 생성된 Java 클래스로부터 EJB를 호출해야 합니다. 생성된 Java 클래스를 열고 다음 단계에 따라서 EJB 서비스를 호출하는 코드를 작성하십시오. 생성된 Java 구현 클래스에 대해 다음을 수행하십시오.
  1. 개인용 변수(유형은 원격 EJB 인터페이스의 유형임)를 작성하십시오.
    private YourEJBInterface ejbService = null;
  2. 이들 변수가 사용자 EJB 인터페이스에서 복합 유형인 경우 BOFactory에 대한 개인용 변수도 작성하십시오.
    private BOFactory boFactory = (BOFactory) 
    	ServiceManager.INSTANCE.locateService(“com/ibm/websphere/bo
    /BOFactory”);
  3. Java 구현 클래스의 생성자에서, SCA API를 사용하여 EJB 참조를 해석하고(이전 단계에서 기록한 EJB 참조의 이름을 기억하기.) 개인용 변수를 이 참조와 동일하게 설정하십시오.
    // Locate the EJB service
    	this.ejbService = (YourEJBInterface) 
    ServiceManager.INSTANCE.locateService("name-of-your-ejb-reference");
생성된 Java 구현 클래스의 각 “//TODO”에 대해,
  1. 모든 매개변수를 EJB가 예상하는 매개변수 유형으로 변환하십시오.
  2. SCA 프로그래밍 모델을 사용하여 EJB 참조에서 적당한 메소드를 호출하여 변환된 매개변수를 송신하십시오.
  3. EJB의 리턴값을 생성된 Java 구현 메소드에서 선언한 리턴값으로 변환하십시오.
/**
	 * Method generated to support the implementing WSDL port type named
* "interface.MyBean".
*/
	public BusObjImpl getStockInfo(String aString) {
		BusObjImpl boImpl = null;
try {
			// invoke the EJB method
			StockInfo stockInfo = this.ejbService.getStockInfo(aString);
			// formulate the SCA data object to return.
			boImpl = (BusObjImpl) 
					this.boFactory.createByClass(StockInfo.class);
			// manually convert all data from the EJB return type into the 
			// SCA data object to return
boImpl.setInt("index", stockInfo.getIndex());
boImpl.setString("symbol", stockInfo.getSymbol());
boImpl.setDouble("price", stockInfo.getPrice());
		} catch (RemoteException e) {
			e.printStackTrace();
}
		return boImpl;
}
/**
	 * Method generated to support the implementing WSDL port type named
* "interface.MyBean".
*/
	public void setStockPrice(String symbol, Float newPrice) {
try {
			this.ejbService.setStockPrice(symbol, newPrice.floatValue());
		} catch (RemoteException e) {
			e.printStackTrace();
}
}

피드백
(C) Copyright IBM Corporation 2005, 2006. All Rights Reserved.