메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

의료 서비스 통합하기, Part 2: Apache ServiceMix를 의료 서비스 버스로 사용하기

의료 애플리케이션을 호스팅하는 여러 JBI 서버 상호 연결하기

Bilal Siddiqui, Consultant
Bilal Siddiqui photo
Bilal Siddiqui is an electronics engineer, an XML consultant, and the founder of XML4Java.com, a company focused on simplifying e-business. After graduating in 1995 with a degree in electronics engineering from the University of Engineering and Technology, Lahore, he began to design software solutions for industrial control systems. Later, he turned to XML and used his experience of programming in C++ to build Web- and Wap-based XML processing tools, server-side parsing solutions, and service applications. He is a technology evangelist and a frequently published technical author.

요약:  HSB(Healthcare Service Bus)를 사용하면 다양한 의료 애플리케이션이 효율적인 서비스 제공을 위해 서로 연결되어 상호 운용될 수 있습니다. 두 파트로 구성된 이 기사의 Part 1에서는 JBI(Java™ Business Integration) 아키텍처를 사용하여 의료 서비스를 통합하는 과정을 살펴봅니다. 이 결론 파트에서는 오픈 소스 JBI 구현(Apache ServiceMix)을 HSB로 사용하는 방법에 대해 설명합니다. 여기서는 애플리케이션을 ServiceMix가 호스팅한 내부 서비스로 구성하며 복수의 JBI 환경을 서로 연결하는 방법과 의료 상호 운용성에 대한 산업 표준을 ServiceMix에 통합하는 방법에 대해 살펴봅니다.

이 연재 자세히 보기

원문 게재일:  2010 년 6 월 08 일 번역 게재일:   2010 년 7 월 27 일
난이도:  중급 영어로:  보기 PDF:  A4 and Letter (164KB | 22 pages)Get Adobe® Reader®
페이지뷰:  3987 회
의견:  


다양한 의료 애플리케이션을 JBI(Java Business Integration) 서버에 연결하면 의료용 엔터프라이즈 서비스 버스 HSB(Healthcare Service Bus)를 빌드할 수 있다. 두 파트로 구성된 이 기사의 Part 1에서는 JBI를 소개하고 JBI의 아키텍처에 대해 설명하며 JBI를 Prescription 애플리케이션, Radiology Department 애플리케이션 및 Doner Group 애플리케이션과 같은 서비스를 통합하는 HSB로 사용하는 방법에 대해 설명한다.

이 두 번째 파트에서는 JBI 서버가 HSB로 사용될 수 있도록 이러한 서비스를 구성하는 방법에 대해 설명한다. 필자는 JBI의 유명한 오픈 소스 구현인 Apache ServiceMix를 HSB로 사용하는 방법에 대해 설명한다. 먼저 ServiceMix와 해당 중요 구성 요소 중 하나를 소개하는 것으로 시작한 후 해당 구성 요소를 사용하여 애플리케이션을 Apache ServiceMix에서 호스트되는 내부 서비스로 구성하는 방법에 대해 설명한다. 세 번째 섹션에서는 하나의 JBI 환경에 연결된 애플리케이션이 다른 JBI 환경에 연결된 애플리케이션과 서로 연결되어 상호 운용될 수 있도록 두 JBI 환경을 서로 연결하는 방법에 대해 설명한다. 마지막 섹션에서는 HL7(Part 1에서 소개한 유명한 의료 표준인 Healthcare Level 7)의 기능을 JBI에 통합하는 방법에 대한 일부 팁을 제공한다.

Apache ServiceMix 소개하기

Apache ServiceMix는 Part 1의 그림 4, 5, 67에 있는 것과 같은 JBI 애플리케이션을 호스트할 수 있다. JBI 환경의 구성 요소를 구현하기 위해 ServiceMix는 유명한 오픈 소스 Spring Framework(참고자료 참조)를 사용한다. Spring XML 구성을 사용하여 JBI 환경에서 서비스를 구성하면 인스턴스화해야 하는 Java 클래스를 간단하게 지정할 수 있다.

JBI 스펙 구현 외에도 ServiceMix에는 JBI 애플리케이션에서 직접 사용할 수 있는 유용한 사전 구성된 구성 요소가 번들로 제공된다. Part 1의 JBI에서 내부 및 외부 서비스 혼합하기 섹션에서 Radiology Department 애플리케이션과 같은 내부 서비스를 구현하기 위해서는 서비스 엔진(SE)이 필요하다고 한 것을 떠올려 본다. ServiceMix는 내부 서비스를 빌드하기 위해 사용할 수 있는 다양한 재사용 가능한 SE를 제공한다. 이 기사에서는 CXFSE(CXF Service Engine)라는 ServiceMix SE를 사용한다.

CXFSE는 오픈 소스 Apache CXF 웹 서비스 프레임워크를 위한 랩퍼이다. CXFSE를 활용하면 ServiceMix 애플리케이션에서 Apache CXF의 기능을 사용할 수 있다. Apache CXF를 사용하면 내부 비즈니스 로직과 완전히 통합되는 웹 서비스 애플리케이션을 빌드할 수 있다. CXFSE에는 HSB와 같은 애플리케이션에 사용하기에 적합한 많은 기능이 포함되어 있다.

Apache CXF는 인터셉터라는 개념을 사용하여 웹 서비스 프론트엔드(WSDL(Web Services Description Language) 파일에 정의된 인터페이스)를 웹 서비스의 비즈니스 로직과 통합한다. CXF는 바로 사용할 수 있는 몇 가지 인터셉터를 제공하며 사용자의 자체 인터셉터 추가도 허용한다. 인터셉터는 특정 작업을 수행하며 사용자는 비즈니스 로직에 필요한 작업을 정확하게 수행하도록 일련의 인터셉터를 구성할 수 있다. 예를 들어, 다음과 같은 일련의 인터셉터를 구성할 수 있다.

  1. 한 인터셉터가 서비스 이용자로부터 서비스 요청을 수신하여 해당 요청을 다른 형식으로 변환한다.
  2. 다른 인터셉터가 요청으로부터 Java 오브젝트를 작성한다.
  3. 세 번째 인터셉터가 비즈니스 로직을 호출한 후 호출과 함께 Java 오브젝트를 전달한다.
  4. 또다른 인터셉터 하나 또는 몇 개가 실제 비즈니스 로직을 포함할 수 있다.
  5. 다섯 번째 인터셉터가 비즈니스 로직 애플리케이션으로부터 새 Java 오브젝트를 페치한다.
  6. 여섯 번째 인터셉터가 Java 오브젝트를 XML 형식으로 변환한 후 응답을 다시 서비스 이용자에게 전송한다.

이 기사에서는 CXF 인터셉터의 빌드 또는 구성에 대한 세부사항은 다루지 않는다. 대신 Radiology Department 애플리케이션을 호출할 수 있는 미리 작성된 인터셉터의 단순한 기본 조합을 사용한다. Apache CXF에 대한 자세한 정보는 참고자료를 참조한다.

CXFSE는 구성 가능한 랩퍼이며 이는 XML 파일을 작성하여 SE의 동작을 제어할 수 있음을 의미한다. 여기서는 Radiology Department 애플리케이션용 CXFSE에 대한 XML 구성을 작성하는 방법에 대해 간단하게 설명한다. 하지만 먼저 ServiceMix에서 내부 애플리케이션(또는 서비스)을 호스트하기 위해 필요한 모든 조치에 대한 상위 레벨 계획을 제공한다.


Radiology Department 애플리케이션을 내부 서비스로 호스팅하기

ServiceMix에서 내부 서비스를 호출하는 프로시저에는 몇 가지 구성이 필요하며 이러한 구성은 다음과 같은 5개의 단계로 구분된다.

  1. Radiology Department 애플리케이션에 대한 비즈니스 로직이 포함된 Java 클래스를 작성 및 컴파일하고 해당 클래스를 웹 서비스로 노출한다.
  2. Spring Framework에서 Radiology Department 애플리케이션의 Java 클래스를 구성하여 해당 프레임워크가 클래스를 인스턴스화하고 애플리케이션 요구 사항에 따라 사용 가능하게 만든다.
  3. Radiology Department 애플리케이션을 위한 WSDL 인터페이스를 작성한다. JBI 스펙에서는 WSDL 2.0을 사용하여 내부 및 외부 서비스 공급자에 의해 노출되는 서비스의 인터페이스를 정의한다.
  4. 서비스 공급자(즉, Radiology Department 애플리케이션)와 서비스 이용자에 대한 JBI 구성을 작성한다. (Part 1의 그림 6에서 서비스 요청을 Radiology Department 애플리케이션에 전송하는 서비스 이용자인 Prescription 애플리케이션을 떠올려 본다.)
  5. Radiology Department 애플리케이션을 JBI 서비스 어셈블리로 패키지화한 후 해당 패키지를 ServiceMix로 복사한다.

5단계를 수행하고 나면 Prescription 애플리케이션(서비스 이용자)으로부터 Radiology Department 애플리케이션으로 메시지를 전송하여 HSB가 작동되는 것이 표시된다.

이제 각각의 단계에 대해 설명한다.

단순 Java 클래스로서의 Radiology Department 애플리케이션

Listing 1에서는 단순 Java 클래스 RadiologyDepartment를 보여 주며 여기에는 performTest()라는 하나의 메소드만 포함되어 있다.


Listing 1. RadiologyDepartment 클래스



package com.hsb;

import javax.jws.WebService;
import javax.xml.ws.Holder;

import com.hsb.Radiology;

@WebService(serviceName="RadiologyService", 
   targetNamespace="http://hsb.org/radiology-department", 
   endpointInterface="com.hsb.Radiology")

public class RadiologyDepartment implements Radiology {

    public void performTest (Holder<String> testDetails, Holder<String> testResults)
    {
       System.out.println ("
           RadiologyDepartment.performTest()- > TestDetails:"+testDetails.value);
       System.out.println ("
           RadiologyDepartment.performTest()- > TestResults:"+testResults.value);
    }
}

performTest() 메소드는 testDetailstestResults라는 두 가지 매개변수를 사용한다. 여기서 알 수 있듯이 이러한 매개변수의 유형은 Holder <String>이다. Holder는 JAX-WS(Java API for XML-Based Web Services)에 의해 정의된 클래스이다. CXFSE는 JAX-WS를 사용하므로 이 클래스의 인스턴스를 사용하여 Java 클래스와 정보를 교환하는 것이 편리하다. Holder 클래스에는 데이터를 삽입하고 인스턴스로부터 데이터를 페치하는 데 필요한 메소드가 포함되어 있다. CXF 프레임워크는 내부적으로 XML 요청 메시지의 데이터를 Holder 오브젝트에 채우고 Holder 오브젝트를 Radiology Department 애플리케이션의 Java 클래스에 전달한다.

필자는 간결성을 위해 엄격하게 performTest() 메소드를 비워두었다(몇몇 System.out문은 제외). 실제 애플리케이션에서 performTest() 메소드는 Radiology Department 애플리케이션의 비즈니스 로직에 연결된다.

RadiologyDepartment 클래스를 컴파일해야 한다. 이 기사의 다운로드에는 sample1\RadiologyService라는 폴더가 포함되어 있으며 이 폴더에는 클래스의 컴파일된 양식과 RadiologyDepartment 클래스에 대한 코드가 둘 다 포함되어 있다.

RadiologyDepartment 클래스에 해당하는 JAXB(Java API for XML Binding) 파일도 생성해야 한다. 이러한 JAXB 파일은 JAX-WS API에 의해 사용되므로 Apache CXF가 RadiologyDepartment 클래스를 웹 서비스로 노출하려면 해당 파일이 필요하다. wsgen이라는 편리한 도구를 사용하여 RadiologyDepartment 클래스에서 필요한 모든 파일을 생성할 수 있다. wsgen은 JDK 1.6 설치의 ..\jdk1.6.0_12\bin 폴더에 있다. (wsgen 도구에 대한 자세한 정보는 참고자료를 참조한다.)

이 기사의 목적상 필자는 ws.bat 파일을 다운로드에 제공했다. ws.bat를 실행하기만 하면 필요한 JAXB 파일을 생성할 수 있다. 또한 이러한 파일은 sample1\RadiologyService 폴더에서 소스 양식과 컴파일된 양식으로 찾을 수 있다.

Spring Framework에서 RadiologyDepartment 클래스 구성하기

Listing 2에서는 RadiologyDepartment 클래스에 대한 Spring XML 구성 파일을 보여 준다.


Listing 2. Radiology Department 서비스에 대한 Spring XML 구성


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0">
    <cxfse:endpoint>
        <cxfse:pojo>
          <bean class="com.hsb.RadiologyDepartment" />
        </cxfse:pojo>
    </cxfse:endpoint>
</beans>

Listing 2에 있는 루트 태그는 Spring XML 네임스페이스의 일부인 <beans>라는 것에 유의한다. <beans> 태그의 용도는 애플리케이션의 서로 다른 Java Bean(또는 Java 클래스의 인스턴스)을 보유하는 것이다. <beans> 태그 안에 애플리케이션 특정 Java Bean을 구성한다. Spring은 Java 클래스의 인스턴스화를 처리하고 클래스를 사용해야 하는 애플리케이션에 해당 클래스를 사용할 수 있게 한다. Java 클래스를 누가 인스턴스화하는지와 인스턴스가 어떻게 서로 사용 가능하게 되는지에 대해서는 걱정하지 않아도 된다. 이것은 모두 Spring이 맡는다. 사용자는 클래스를 작성한 후 Spring에서 구성하기만 하면 된다.

Listing 2<beans> 태그에는 http://servicemix.apache.org/cxfse/1.0 네임스페이스에 대한 네임스페이스 선언이 포함되어 있다. ServiceMix는 이 네임스페이스를 정의하며 그 목적은 애플리케이션 요구 사항에 따라 CXFSE의 동작을 지정하는 것이다. 필자는 이 네임스페이스를 cxfse 네임스페이스라고 부른다.

cxfse 네임스페이스에는 정확히 어디에 CXFSE를 사용할지를 지정하는 태그가 포함되어 있다. 사용 가능한 옵션이 몇 가지 있다. Listing 2에서 루트 <beans> 태그에 cxfse 네임스페이스에 속하는 <endpoint> 태그가 포함되어 있는 것을 알 수 있다. <endpoint> 태그는 통신 채널의 시작 또는 끝이다.

엔드포인트에 대한 자세한 설명은 Prescription 애플리케이션이 Radiology Department 애플리케이션에 메시지를 전송하는 Part 1의 그림 6을 다시 참조한다. Prescription 애플리케이션과 Radiology Department 애플리케이션이 엔드포인트이다. 메시지는 Prescription 애플리케이션에서 발생하여 JBI 환경의 다양한 구성 요소(예: BC(Binding Component), NMR(Normalized Message Router) 및 SE)를 통해 이동하여 결국 Radiology Department 애플리케이션에 이른다.

Listing 2에서 Radiology Department 애플리케이션을 구성하므로 <endpoint> 태그를 <beans> 태그 바로 안에서 사용한다. 이를 통해 ServiceMix에 사용자가 엔드포인트를 구성하고 있다는 것을 알린다.

엔드포인트의 유형은 여러가지가 될 수 있다. 예를 들어, 엔드포인트는 연속으로 여러 작업을 수행하는 일련의 인터셉터가 될 수 있다(예: Apache ServiceMix 소개하기 섹션에서 본 일련의 인터셉터). 하지만 단순하게 하기 위해 이 기사에서는 단순 Java 클래스(RadiologyDepartment 클래스)를 사용한다. 단순 Java 클래스의 인스턴스는 일반적으로 POJO(Plain Old Java Object)라고 부른다. cxfse 네임스페이스에는 <pojo>라는 태그가 포함되어 있으며 이 태그는 <endpoint> 태그 내부에서 이 엔드포인트가 단순히 단순 Java 클래스의 인스턴스가 되도록 지정한다.

마지막으로 Listing 2에서는 Spring 네임스페이스의 일부이며 엔드포인트 역할을 하는 Bean(Java 클래스의 인스턴스)을 지정하는 <bean> 태그를 볼 수 있다. <bean> 태그에는 class라는 속성이 포함되어 있으며 이 속성은 인스턴스가 엔드포인트가 되는 클래스의 완전한 이름(즉, com.hsb.RadiologyDepartment)을 지정한다.

다운로드의 sample1\RadiologyService\ 폴더에 있는 xbean.xml과 같은 Spring XML 구성 파일이 Listing 2에 표시된다.

Radiology 애플리케이션을 위한 WSDL 파일 작성하기

Listing 3에서는 Radiology Department 애플리케이션을 위한 WSDL 인터페이스를 보여 준다.


Listing 3. Radiology Department 애플리케이션을 위한 WSDL 인터페이스

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions targetNamespace="http://hsb.com/" xmlns="http://schemas.xmlsoap.org/wsdl/" 
xmlns:tns="http://hsb.com/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <types>
    <xsd:schema>
      <xsd:import namespace="http://hsb.com/"
          schemaLocation="Radiology_schema1.xsd"/>
    </xsd:schema>
  </types>
  <message name="performTest">
    <part name="parameters" element="tns:performTest"/>
  </message>
  <message name="performTestResponse">
    <part name="parameters" element="tns:performTestResponse"/>
  </message>
  <portType name="Radiology">
    <operation name="performTest">
      <input message="tns:performTest"/>
      <output message="tns:performTestResponse"/>
    </operation>
  </portType>
</definitions>

Listing 4에서는 Radiology Department 애플리케이션을 위한 WSDL 바인딩을 보여 준다.


Listing 4. Radiology Department 애플리케이션을 위한 WSDL 바인딩

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions targetNamespace="http://hsb.org/radiology-department" 
     name="RadiologyService" 
     xmlns="http://schemas.xmlsoap.org/wsdl/" 
     xmlns:tns="http://hsb.org/radiology-department" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
  <import namespace="http://hsb.com/" location="Radiology.wsdl"/>
  <binding name="RadiologyDepartmentPortBinding" 
    type="ns1:Radiology" xmlns:ns1="http://hsb.com/">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" 
        style="document"/>
    <operation name="performTest">
      <soap:operation soapAction=""/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>
  <service name="RadiologyService">
    <port name="RadiologyDepartmentPort" 
         binding="tns:RadiologyDepartmentPortBinding">
      <soap:address location="http://localhost:8092/RadiologyService/ "/>
    </port>
  </service>
</definitions>


웹 서비스는 단순하다는 것을 알 수 있다. 웹 서비스에는 몇 개의 매개변수와 함께 performTest라는 오퍼레이션이 포함되어 있을 뿐이다. WSDL 인터페이스 및 바인딩 세부사항은 이 기사의 범위를 벗어난다. WSDL에 대해 자세히 설명하는 developerWorks 기사의 링크는 참고자료를 참조한다.

다운로드의 sample1\RadiologyService 폴더에서는 Listing 3Listing 4에서 WSDL 파일이 각각 Radiology.wsdl과 RadiologyService.wsdl로 표시된다.

Radiology Department 애플리케이션 패키징

이제 RadiologyDepartment 클래스 및 함께 제공되는 JAXB 클래스, Spring의 xbean.xml 및 Radiology Department 애플리케이션을 위한 WSDL 파일을 RadiologyService.zip이라는 .zip 파일로 패키지화해야 한다. 다운로드의 sample1\RadiologyService\ 폴더에 이러한 파일이 모두 있다. 필자는 sample1\ 폴더에 해당 .zip 파일을 이미 준비해 두었다.

서비스 이용자 구성 및 패키징

서비스 공급자인 Radiology 애플리케이션을 패키지화했다. 하지만 JBI 서버에서 서비스 이용자를 구성하기 전에는 이 애플리케이션을 실행할 수 없다.

JBI에서 서비스 이용자를 구성하는 과정은 방금 확인한 공급자 구성을 빌드하는 과정과 매우 비슷하다. 이용자 엔드포인트에 대한 Spring XML 구성 및 WSDL 파일을 작성해야 한다.

서비스 이용자에 대한 Spring XML 구성은 Listing 5에 표시되어 있다.


Listing 5. 서비스 이용자에 대한 XML 구성


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
       xmlns:radiology="http://hsb.org/radiology-department">
    <cxfbc:consumer wsdl="classpath:RadiologyService.wsdl"
        targetService="radiology:RadiologyService" />
</beans>

Listing 5Listing 2와 매우 비슷하다는 것을 알 수 있다. Listing 5에서는 Listing 2에 있는 cxfse 네임스페이스 대신 cxfbc 네임스페이스를 사용한다. 이용자에게 SE 대신 BC가 필요하기 때문에 여기서는 cxfbc 네임스페이스를 사용한다. Part 1의 그림 6과 함께 제공되는 여섯 가지 단계를 다시 참조할 수 있다. 해당 단계에서는 Prescription 애플리케이션(서비스 이용자)에 BC가 필요하고 Radiology Department 애플리케이션(내부 서비스 공급자)에 SE가 필요하다는 것을 알 수 있다. ServiceMix는 CXF 애플리케이션에 SE와 BC 네임스페이스를 둘 다 제공하기 때문에 사용자가 원하는 방식으로 애플리케이션을 유연하게 구성할 수 있다.

서비스 이용자를 위한 WSDL 파일은 Listing 3Listing 4에 있는 WSDL 파일과 매우 비슷하다. 이러한 이용자 구성은 다운로드의 sample1\PrescriptionService 폴더에 있다.

또한 이용자를 위한 Spring의 XML 구성 및 WSDL 파일을 PrescriptionService.zip 파일로 패키지화해야 한다. 이 작업은 이미 완료해 두었다. 다운로드의 sample1\ 폴더에서 PrescriptionService.zip을 찾는다.

Radiology 애플리케이션을 Prescription 애플리케이션과 어셈블링하기

이미 두 개의 서비스 유닛(서비스 공급자인 Radiology Department 애플리케이션을 위한 유닛 하나와 서비스 이용자인 Prescription 애플리케이션을 위한 유닛)을 구성했다. 이제는 이러한 서비스 유닛을 JBI 서비스 어셈블리로 어셈블한다.

서비스 어셈블리를 작성하려면 Listing 6과 같이 JBI XML 구성을 작성하기만 하면 된다.


Listing 6. Radiology Department 애플리케이션 서비스 어셈블리를 위한 JBI의 XML 구성

<?xml version="1.0" encoding="UTF-8"?>
<jbi xmlns="http://java.sun.com/xml/ns/jbi" version="1.0">
  <service-assembly>
    <identification>
      <name>radiology-service-assembly</name>
      <description>Radiology Department Service Assembly</description>
    </identification>
    <service-unit>
      <identification>
        <name>radiology-service</name>
        <description>Radiology Department Service Provider</description>
      </identification>
      <target>
        <artifacts-zip>RadiologyService.zip</artifacts-zip>
        <component-name>servicemix-cxf-se</component-name>
      </target>
    </service-unit>
    <service-unit>
      <identification>
        <name>prescription-service</name>
        <description> Prescription Service Consumer</description>
      </identification>
      <target>
        <artifacts-zip>PrescriptionService.zip</artifacts-zip>
        <component-name>servicemix-cxf-bc</component-name>
      </target>
    </service-unit>
  </service-assembly>
</jbi>

Listing 6에 있는 <jbi>라는 루트 태그는 JBI 네임스페이스(http://java.sun.com/xml/ns/jbi)에 속한다. <jbi> 태그에는 <service-assembly>라는 하나의 하위가 있으며 이 하위는 서비스 어셈블리에서 다양한 서비스 유닛과 전개 중인 JBI 서비스의 이름 및 설명을 둘러싼다.

<service-assembly> 태그에는 두 개의 <service-unit> 하위 태그가 있다. 각각의 <service-unit> 하위는 서비스의 개별 유닛을 표시한다. 여기서는 Radiology Department 애플리케이션과 Prescription 애플리케이션만 구성하므로 서비스 어셈블리에는 두 개의 <service-unit> 태그(각 애플리케이션에 대해 하나씩)만 포함되어 있다.

각각의 <service-unit> 태그는 유닛의 이름, 설명 및 서비스 유닛의 ZIP 파일을 둘러싼다. 각각의 <service-unit> 태그 안에 있는 <artifacts-zip> 태그에는 ZIP 파일의 이름이 포함되어 있다는 것을 알 수 있다. 이러한 이름은 Radiology Department 애플리케이션 패키징서비스 이용자 구성 및 패키징 섹션의 끝에서 작성한 .zip 파일 두 개의 파일 이름과 일치한다. RadiologyService.zip 파일은 Radiology Department 애플리케이션을 위한 것이고 PrescriptionService.zip 파일은 Prescription 애플리케이션을 위한 것이다.

Listing 6에 있는 구성을 jbi.xml이라는 XML 파일로 저장해야 한다. 이 작업은 이미 완료되어 있기 때문에 다운로드의 META-INF\ 폴더에서 해당 파일을 찾을 수 있다. 마지막으로 META-INF\ 폴더와 두 개의 .zip 파일을 RadiologyAssembly.zip으로 패키지화한다. RadiologyAssembly.zip은 다운로드의 sample1\ 폴더에 준비되어 있다.

RadiologyAssembly.zip은 지금까지 수행한 모든 내용이 포함되어 있는 최종 ZIP 파일이다.

ServiceMix 애플리케이션 개발을 위한 팁

이 기사의 다운로드에는 다음 사항에 대한 유용한 정보를 제공하는 Tips.txt 파일이 포함되어 있다.

  • ServiceMix의 디버깅 추적 설정하기
  • ServiceMix 캐시 지우기
  • ServiceMix 구성 요소 다시 전개하기

이 기사의 샘플 애플리케이션을 실행하기 위해서는 이러한 팁이 필요하지 않지만 자체 ServiceMix 애플리케이션을 개발하는 경우에는 유용하다.

Radiology Department 서비스 테스트하기

다음과 같은 단계를 수행하여 Radiology Department 애플리케이션을 테스트한다.

  1. Apache ServiceMix 3.3.1을 다운로드하여 컴퓨터에 설치한다(참고자료 참조).
  2. ServiceMix 설치의 ..\apache-servicemix-3.3.1\bin 폴더에 있는 servicemix.bat 파일을 두 번 클릭하여 ServiceMix를 시작한다. 서버가 서비스를 시작하는 동안 잠시 기다린다.
  3. RadiologyAssembly.zip을 sample1\ 폴더에서 ServiceMix 설치의 ..\apache-servicemix-3.3.1\hotdeploy 폴더로 복사한다. .zip 파일을 복사하는 즉시 ServiceMix는 새 애플리케이션이 전개 중임을 감지한다. ServiceMix는 전개 프로세스를 시작하며 이 프로세스는 ServiceMix의 출력 콘솔에 표시된다. 전개가 완료될 때까지 기다린다.

ServiceMix는 ServiceMix 애플리케이션을 테스트하는 데 사용할 수 있는 단순 브라우저 기반 SOAP 클라이언트를 제공한다. 이 클라이언트에는 ServiceMix와 번들로 제공되는 여러 샘플 애플리케이션이 함께 제공된다. ServiceMix 설치의 ..\apache-servicemix-3.3.1\examples\cxf-wsdl-first 폴더에서 client.html 파일 형식의 해당 클라이언트를 찾을 수 있다.

브라우저에서 client.html 파일을 열고 http://localhost:8092/RadiologyService를 HTML 페이지의 Target 필드에 입력한다. 그런 다음 Listing 7에 표시된 SOAP 요청을 Target 필드 바로 아래의 텍스트 상자에 입력한다.


Listing 7. Radiology 애플리케이션을 테스트하기 위한 요청 SOAP 메시지

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
   xmlns:hsb="http://hsb.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <hsb:performTest>
         <arg0>Test1</arg0>
         <arg1>Test2</arg1>
      </hsb:performTest>
   </soapenv:Body>
</soapenv:Envelope>

필자는 다운로드에 이 SOAP 요청 메시지를 SOAPRequest.txt 파일로 제공했다. SOAP 요청을 SOAPRequest.txt 파일에서 복사하여 Target 필드 아래의 텍스트 상자에 붙여넣을 수 있다. 주소와 SOAP 요청을 입력하고 나면 client.html 페이지는 그림 1과 같은 모양이 된다.


그림 1. client.html 페이지
client.html 페이지

이제 페이지 맨 아래에 있는 Send 단추를 클릭한 후 잠시 기다린다. Radiology Department 애플리케이션의 서비스 이용자는 요청을 수신하여 NMR로 경로 지정한 후 CXFSE 엔진을 통해 RadiologyDepartment 클래스로 보낸다. 그런 다음 RadiologyDepartment 클래스가 응답한다. 응답은 다시 SOAP 클라이언트로 전송된다. 그림 2와 같이 요청 텍스트 상자 맞은 편의 텍스트 상자에서 응답을 볼 수 있다.


그림 2. SOAP 클라이언트에 표시된 응답
SOAP 클라이언트에 표시된 응답

JBI 서버 상호 연결하기

Radiology Department 애플리케이션을 내부 서비스 공급자로 구성한 후 외부 서비스 이용자로부터 호출하는 방법에 대해 살펴봤다. 이제는 하나의 JBI 서버에 연결된 서비스 이용자가 다른 JBI 서버에 연결된 서비스 공급자가 제공하는 서비스를 호출할 수 있도록 두 개의 JBI 서버를 구성하는 방법에 대해 설명한다. 이 상황은 JBI 서버의 상호 연결에 대해 설명한 Part 1의 그림 7과 비슷하다.

Part 1의 그림 4와 그림 7을 비교한다. 그림 4에서는 하나의 JBI 서버에 연결된 서비스 이용자와 외부 서비스 공급자를 보여 준다. 그림 7에서는 하나의 JBI 서버에 연결된 서비스 이용자와 다른 JBI 서버에 연결된 공급자를 보여 준다(두 JBI 서버는 서로 연결되어 있음).

JBI의 관점에서 두 상황은 동일하다. 서비스가 JBI 환경 외부에 있는 경우에는 외부 서비스가 JBI 서버에 직접적으로 연결되어 있는지 아니면 다른 JBI 서버를 통해 간접적으로 연결되어 있는지는 중요하지 않다. 이는 Part 1의 그림 7에 따라 수행하는 JBI 구성은 Part 1의 그림 4에 따라 의료 서비스 공급자를 연결하려는 경우에도 제대로 작동한다는 것을 의미한다. 따라서 필자는 이 기사에 있는 그림 7의 시나리오만 표시하고 그림 4의 시나리오는 사용자에게 맡긴다.

이 섹션에서는 두 개의 JBI 서버가 필요하다. 첫 번째 서버에는 서비스 이용자와 외부 서비스 공급자가 있다. 두 번째 JBI 서버에는 내부 서비스 공급자가 있다. 이 사항은 그림 3에 표시되어 있다.


그림 3. 두 개의 JBI 서버(하나는 외부 서비스 이용자가 포함되어 있고 다른 하나는 내부 서비스 공급자가 포함되어 있음)
두 개의 JBI 서버(하나는 외부 서비스 이용자가 포함되어 있고 다른 하나는 내부 서비스 공급자가 포함되어 있음)

첫 번째 JBI 서버는 두 번째 JBI 서버가 외부 서비스라고 생각한다. 두 번째 JBI 서버는 첫 번째 JBI 서버가 서비스 이용자라고 생각한다.

이는 간단하게 Radiology Department 애플리케이션의 구성을 두 번째 JBI 서버로 사용할 수 있음을 의미한다. 첫 번째 JBI 서버에서 외부 서비스 공급자와 이용자를 구성하기만 하면 된다.

외부 서비스 공급자를 구성하는 것은 단순히 첫 번째 JBI 서버에 두 번째 JBI 서버가 웹 서비스라는 것을 알리는 것을 의미한다. 두 가지만 하면 된다. Listing 25와 비슷한 Spring XML 구성 파일을 작성하고 Listing 34와 비슷한 WSDL 파일을 작성하기만 하면 된다.

첫 번째 JBI 서버의 외부 서비스 공급자 구성하기

Listing 8에는 외부 서비스 공급자에 대한 Spring 구성이 포함되어 있다.


Listing 8. 외부 서비스 공급자에 대한 Spring 구성

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
     xmlns:radiology="http://hsb.org/radiology-department">
        <cxfbc:provider
            service="radiology:RadiologyService"
            endpoint="RadiologyService"
            locationURI="http://192.168.10.33:8092/RadiologyService/"
            wsdl="classpath:RadiologyService.wsdl" />
</beans>

Listing 8에 있는 <beans> 태그에는 Listing 5에서 본 것과 동일한 cxfbc 네임스페이스 선언이 포함되어 있다는 것을 알 수 있다. 그 이유는 Listing 8에서는 외부 서비스 공급자를 구성하는 반면 Listing 5에서는 외부 서비스 이용자를 구성했기 때문이다. 외부 애플리케이션(공급자든 이용자든 상관 없음)을 구성할 때마다 cxfbc 네임스페이스를 사용한다.

또한 Listing 8에는 cxfbc 네임스페이스의 <provider> 태그(Listing 5<consumer>와 같음)가 포함되어 있다는 것에 유의한다. <provider> 태그에는 외부 서비스의 세부사항을 지정하는 다양한 속성이 포함되어 있다.

  • service: 두 번째 JBI 서버에서 호스트되는 Radiology 서비스 공급자의 이름이다.
  • endpoint: 서비스 요청을 청취하는 Radiology Department 애플리케이션의 WSDL 포트이다.
  • locationURI: Radiology Department 서비스의 네트워크 주소이다. 이 네트워크 주소는 두 번째 JBI 서버에 있다. 이 애플리케이션 사용을 시도했을 때 두 번째 JBI 서버가 네트워크 주소가 192.168.10.33인 시스템에서 실행 중이었고 두 번째 JBI 서버의 포트는 8092였다.
  • wsdl: WSDL 파일의 이름과 위치이다. ServiceMix는 클래스 경로를 서비스를 위한 ZIP 파일의 루트로 분석한다. 이 기사의 다운로드에서 WSDL이 sampl2\JBI1\RemoteRadiologyService 폴더에 있다는 것을 알 수 있다. RemoteRadiologyService 폴더의 컨텐츠는 이 애플리케이션의 ZIP 파일의 루트를 형성한다. 따라서 필자는 단순히 classpath:RadiologyService.wsdlwsdl 속성의 값으로 작성했다.

이 공급자 서비스의 WSDL 파일은 Listing 34에 표시된 WSDL 파일과 동일하다. Listing 8은 xbean.xml로 되어 있고 함께 제공되는 WSDL은 다운로드의 sample2\JBI1\RemoteRadiologyService 폴더에 있는 RadiologyService.wsdl로 되어 있다. 이름이 RemoteRadiologyService.zip인 .zip 파일에 RemoteRadiologyService 폴더의 모든 컨텐츠를 패키지화해야 한다. 필자는 sample2\JBI1 폴더에 해당 .zip 파일을 이미 준비해 두었다.

첫 번째 JBI 서버의 서비스 이용자 구성하기

첫 번째 JBI 서버의 서비스 이용자에 대한 구성은 Listing 5에서 수행한 구성과 정확하게 동일하기 때문에 여기서 해당 Listing을 반복하지 않는다. 이 이용자 구성은 sample2\JBI1\PrescriptionService 폴더에 있는 xbean.xml 파일이 된다.

이용자 구성과 함께 제공되는 WSDL 파일도 필요하다. 이 파일은 Listing 3에 있는 WSDL 파일과 매우 비슷하다. WSDL 파일은 sample2\JBI1\PrescriptionService 폴더에 있다. 또한 PrescriptionService 폴더의 컨텐츠를 PrescriptionService.zip으로 패키지화했다.

첫 번째 JBI 서버의 공급자와 이용자 어셈블링

첫 번째 JBI 서버를 위한 두 개의 .zip 파일이 준비되어 있다. 마지막 단계는 .zip 파일을 서비스 어셈블리에 어셈블하는 것이다. 완전한 어셈블리에 필요한 JBI 구성 파일은 Listing 9에 표시되어 있다.


Listing 9. 첫 번째 JBI 서버의 완전한 어셈블리를 위한 JBI 구성

<?xml version="1.0" encoding="UTF-8"?>
<jbi xmlns="http://java.sun.com/xml/ns/jbi" version="1.0">
  <service-assembly>
    <identification>
      <name>remote-radiology-service-assembly</name>
      <description>Radiology Department Service Assembly</description>
    </identification>
    <service-unit>
      <identification>

        <name>remote-radiology-service</name>
        <description>Radiology Department Service Provider</description>
      </identification>
      <target>
        <artifacts-zip>RemoteRadiologyService.zip</artifacts-zip>
        <component-name>servicemix-cxf-bc</component-name>
      </target>
    </service-unit>
    <service-unit>
      <identification>
        <name>remote-prescription-service</name>
        <description>Prescription Service Consumer</description>
      </identification>
      <target>
        <artifacts-zip>PrescriptionService.zip</artifacts-zip>
        <component-name>servicemix-cxf-bc</component-name>
      </target>
    </service-unit>
  </service-assembly>
</jbi>

Listing 9의 JBI 어셈블리 파일은 Listing 6과 매우 비슷하다는 것을 알 수 있다. Listing 9에 있는 JBI 구성은 다운로드의 sample2\JBI1\META-INF 폴더에 jbi.xml로 존재한다.

마지막으로 jbi.xml을 RemoteRadiologyService.zip 및 PrescriptionService.zip 파일과 함께 RemoteRadiologyAssembly.zip이라는 다른 .zip 파일로 패키지화해야 한다. 필자는 sample2\JBI1 폴더에 해당 파일을 이미 준비해 두었다.

JBI 서버의 상호 연결 테스트하기

JBI 서버의 상호 연결을 테스트하기 위해 Radiology Department 서비스 테스트하기 섹션에서 본 것과 동일한 RadiologyAssembly 애플리케이션을 실행한다. 이 애플리케이션은 두 번째 JBI 서버 역할을 한다.

이 JBI 상호 연결 사용을 시도했을 때 두 번째 JBI 서버가 로컬 네트워크 주소가 192.168.10.33인 시스템에서 실행 중이었다. 짐작했듯이 첫 번째 JBI 서버의 공급자는 두 번째 JBI 서버의 네트워크 주소를 알고 있어야 한다. 따라서 이 네트워크 주소는 첫 번째 JBI 서버의 공급자를 위한 구성 파일의 두 위치에서 발생한다.

  • xbean.xml 파일에 있는 locationURI 속성
  • RadiologyService.wsdl 파일에 있는 <soap> 태그의 address 속성

다른 주소에서 두 번째 JBI 서버를 실행하는 경우에는 이러한 두 위치에서 적절한 변경사항을 작성해야 한다.

첫 번째 JBI 서버를 실행하려면 다음과 같은 단계를 수행한다.

  1. 별도의 시스템에 Apache ServiceMix 3.3.1을 설치한다. 필자는 두 개의 시스템(첫 번째 JBI 서버용으로 하나와 두 번째 JBI 서버용으로 다른 하나)을 사용하여 JBI 서버의 상호 연결을 시도했다.
  2. ServiceMix 설치의 ..\apache-servicemix-3.3.1\bin 폴더에서 servicemix.bat 파일을 두 번 클릭하여 ServiceMix를 시작한다. 서버가 서비스를 시작하는 동안 잠시 기다린다.
  3. RemoteRadiologyAssembly.zip을 sample2\JBI1 폴더에서 ServiceMix 설치의 ..\apache-servicemix-3.3.1\hotdeploy 폴더로 복사한다. 해당 파일을 복사하는 즉시 ServiceMix는 새 애플리케이션이 전개 중임을 감지하고 전개 프로세스를 시작하며 이는 ServiceMix의 출력 콘솔에 표시된다. 전개가 완료될 때까지 기다린다.
  4. 앞서 브라우저에서 Radiology Department 애플리케이션을 테스트하는 동안 사용한 것과 동일한 client.html 파일을 연다. http://localhost:8092/RadiologyService를 HTML 페이지의 Target 필드에 입력한다. 그런 다음 Listing 7의 동일한 SOAP 요청을 Target 필드 아래의 텍스트 상자에 입력한다.
  5. Send 단추를 클릭한 후 잠시 기다린다. 요청이 첫 번째 JBI 서버로 이동하고 이용자 BC, NMR, 공급자 BC를 통해 이동한 후 두 번째 JBI 서버로 이동한다. 두 번째 JBI 서버에 있는 이용자 BC는 요청을 수신하여 NMR을 통해 이동한 다음 CXFSE로 이동한 후 결과적으로 RadiologyDepartment 클래스로 이동하며 이 클래스가 응답한다. 응답은 두 JBI 서버를 통해 다시 브라우저로 이동하며 요청 텍스트 상자 맞은편에 있는 텍스트 상자에 응답이 표시된다.

산업별 표준을 ServiceMix에 통합하기

다양한 서비스를 ServiceMix에 통합하는 방법에 대해 살펴봤다. 이 기사에서 예제로 사용한 서비스(Radiology Department 애플리케이션 서비스)는 WSDL을 기반으로 한다. 하지만 Part 1의 상호 운용 가능한 의료 서비스를 위한 XML 섹션에서 설명한 대로 일부 서비스는 WSDL을 기반으로 하지 않는다. 이러한 서비스는 HL7과 같은 산업별 표준을 기반으로 할 수도 있다. 서비스가 WSDL을 기반으로 하는지 아니면 산업별 표준을 기반으로 하는지에 관계없이 서비스를 JBI에 통합하려고 할 때마다 JBI 구성 요소가 필요하다.

서비스 인터페이스를 정의하는 데 일반적으로 사용되는 일반적인 표준으로서 WSDL은 모든 산업에서 사용될 수 있다. 이것이 ServiceMix에 통합될 수 있는 WSDL을 기반으로 한 다수의 구현을 찾고 ServiceMix가 Apache CXF와 번들로 제공되는 이유이다. 이 내용은 HL7의 경우에는 적용되지 않는다. 이 기사 작성 당시에는 ServiceMix에서 HL7을 지원하지 않았지만 ServiceMix 웹 사이트에서는 향후에 프로젝트에서 HL7 지원을 ServiceMix에 통합할 것이라고 발표했다.

산업별 표준을 ServiceMix에 통합하는 문제가 발생할 수 있다. 따라서 여기서는 ServiceMix에서 작동할 수 있는 자체 구성 요소를 빌드하기 위한 상위 레벨 계획에 대해 간략하게 설명한다.

구성 요소를 ServiceMix에 통합할 때마다 구성 요소가 이용자의 서비스 요청에 응답하는 방법을 제어해야 한다. ServiceMix에서는 정확하게 사용자가 원하는 방식으로 산업별 JBI 구성 요소의 동작을 제어할 수 있도록 하는 인터페이스를 정의했다.

ServiceMix 유연성

ServiceMix는 자체 구성 요소의 기능을 구현하는 데 사용할 수 있는 여러 인터페이스를 제공한다.

  • 구성 요소
  • ComponentContext
  • ComponentLifeCycle
  • ServiceUnitManager
  • InstallationContext
  • 부트스트랩

이러한 인터페이스의 세부사항이 들어 있는 공식적인 ServiceMix 문서의 링크는 참고자료를 참조한다.

  • 구성 요소가 설치될 때 구성 요소가 수행할 작업을 제어할 수 있다. 예를 들어, 구성 요소가 애플리케이션 데이터를 저장할 수 있도록 설치 중에 데이터베이스 테이블을 작성할 수 있다.
  • 마찬가지로 ServiceMix를 사용하면 설치 중에 구성 요소가 수행한 작업을 실행 취소하거나 정리하는 설치 제거 코드를 작성할 수 있다.
  • 구성 요소의 시작과 중지를 제어하는 ServiceMix 인터페이스의 메소드를 구현할 수 있다. 구성 요소를 시작한다는 것은 구성 요소가 메시지를 수신할 준비가 된다는 의미이다. 구성 요소 중지는 그 반대의 의미이다.
  • ServiceMix 인터페이스를 사용하면 구성 요소가 환경(즉, JBI 환경)에 대해 학습하고 이러한 환경과 상호작용할 수 있다. 예를 들어, NMR을 통해 구성 요소와 메시지를 교환하는 데 사용될 통신 오브젝트를 알려 주는 코드를 작성할 수 있다.

HL7 지원을 ServiceMix에 통합하는 가장 효율적인 전략은 오픈 소스 HL7 구현을 시작점으로 사용하는 것이 될 것이다. 이미 HAPI(HL7 Application Programming Interface)라는 제품을 사용할 수 있다(참고자료 참조). HAPI에 대한 경량 랩퍼를 설계하고 ServiceMix 인터페이스를 랩퍼에 구현할 수 있다.



다운로드 하십시오

설명이름크기다운로드 방식
Sample code for this articlej-hsb2.zip232KBHTTP

다운로드 방식에 대한 정보


참고자료

교육

  • JBI: Java 커뮤니티 프로세스 사이트에서 JBI(Java Business Integration) 스펙을 얻자.

  • Apache ServiceMix 문서: 애자일 오픈 소스 ESB인 ServiceMix에 대해 자세히 살펴보자.

  • Apache CXF: CXF 서비스 프레임워크에 대해 살펴보자.

  • Spring Framework: Apache ServiceMix는 엔터프라이즈 Java 애플리케이션을 빌드하고 실행하기 위한 유명한 플랫폼인 Spring과 함께 제공된다. Spring은 ServiceMix를 설치할 때 자동으로 설치된다.

  • HL7: 의료 정보를 상호 운용하는 데 필요한 표준에 관해 배워보자.

  • "WSDL로 웹 서비스 전개하기, Part 2: Simple Object Access Protocol (SOAP)"(Bilal Siddiqui, developerWorks, 2002년 3월): SOAP 프로토콜과 해당 구문에 관한 자세한 내용을 읽을 수 있다.

  • "Describe REST Web services with WSDL 2.0"(Lawrence Mandel, developerWorks, 2008년 5월): WSDL 2.0을 사용하여 웹 서비스에 대해 설명하는 방법을 살펴보자.

  • JAX-WS(Java API for XML-Based Web Services): JAX-WS 프로젝트 페이지를 방문하여 JAS-WS를 사용한 SOAP 기반 Java 웹 서비스 개발에 대해 살펴보자.

  • wsgen: wsgen 도구에 대해 자세히 살펴보자.

  • "JAX-WS 2.0 웹 서비스 설계와 개발 (한글)"(Naveen Balani 및 Rajeev Hathi, developerWorks, 2007년 9월): JAX-WS를 사용한 웹 서비스 개발 및 전개에 대한 이 튜토리얼을 살펴보자.

  • 기술 서점에서 다양한 기술 주제와 관련된 서적을 살펴보자.

  • developerWorks Java 기술 영역: Java 프로그래밍과 관련된 모든 주제를 다루는 여러 편의 기사를 찾아보자.

제품 및 기술 얻기

  • Apache ServiceMix: ServiceMix를 다운로드하자.

  • HAPI: 이 오픈 소스 HL7 구현을 다운로드하여 사용해 보자.

토론

필자소개

Bilal Siddiqui photo

Bilal Siddiqui is an electronics engineer, an XML consultant, and the founder of XML4Java.com, a company focused on simplifying e-business. After graduating in 1995 with a degree in electronics engineering from the University of Engineering and Technology, Lahore, he began to design software solutions for industrial control systems. Later, he turned to XML and used his experience of programming in C++ to build Web- and Wap-based XML processing tools, server-side parsing solutions, and service applications. He is a technology evangelist and a frequently published technical author.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=자바,
ArticleID=502199
ArticleTitle=의료 서비스 통합하기, Part 2: Apache ServiceMix를 의료 서비스 버스로 사용하기
publish-date=06082010
author1-email=bsiddiqui@xml4java.com
author1-email-cc=

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.