2014-01-07 3 views
0

,서비스 구성 요소 아키텍처 및 선언적 서비스 구성 요소 모델

서비스 구성 요소 아키텍처 (SCA)는는 서비스 지향 아키텍처 (SOA) 원칙에 따라 응용 프로그램을 구성하는 데 사용되는 소프트웨어 기술이다. 그 서비스 구현의 세부 사항에서 비즈니스 로직의

  • 분리 : 그것은 많은 장점이 포함되어 개발 모델이다.

  • 은 C++을 포함하여 언어의 다양한 자바, COBOL 및 PHP뿐만 아니라 XML, BPEL 및 XSLT

  • 편도 포함 원활하게 다양한 통신 작업을 할 수있는 능력 구축을 서비스 지원 , 비동기, 콜 리턴 및 알림.

  • 능력 레거시 구성 요소 또는 서비스에 "결합"으로는 웹 서비스, EJB, JMS, JCA, RMI, RPC, CORBA 등과 같은 기술에 의해 일반적으로 액세스.

  • (비즈니스 로직의 외부)를 선언 할 수있는 기능 등의 보안, 거래 및 신뢰성있는 메시징의 사용 로 서비스에 대한 요구 사항의 품질

  • 데이터 서비스 데이터에서 표현 될 수

  • 개체

내가 추가 할, 다른 모듈과의

  • 느슨한 커플 링 s (성분).

나는 SCA 기술을 사용하여 간단한 소프트웨어를 구현했으며, Tuscany Tutorial의 도움을 받아 SCA 이질성과 플랫폼 독립성을 확인할 수있었습니다.

오늘 저는 좀 관련이있는 다른 모델을보고 있습니다. Declarative Services Component Model (DS)은 OSGi 서비스를 게시 및/또는 참조하는 구성 요소 생성을 단순화하는 구성 요소 모델입니다. DS에서 OSGI 번들은 XML 구성 요소 선언 파일을 번들 리소스에 추가하여 구성 요소로 래핑 된 것처럼 보입니다. 일반적으로 XML 파일에는 번들 서비스 및 참조에 대한 선언이 포함되어 있습니다. ~ SIMA G ~ SCA 복합 파일입니다. 다음은 그러한 파일의 예입니다.

<?xml version="1.0" encoding="UTF-8"?> 
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="it.eng.test.ds.consumer"> 
    <implementation class="it.eng.test.ds.consumer.Consumer"/> 
    <reference bind="bindHappy" cardinality="0..1" interface="it.eng.test.ds.happy.IHappy" name="IHappy" policy="dynamic" unbind="unbindHappy"/> 
    <reference bind="bindSad" cardinality="0..1" interface="it.eng.test.ds.sad.ISad" name="ISad" policy="dynamic" unbind="unbindSad"/> 
</scr:component> 

내 질문 : SCA와 DS 사이에 어떤 종류의 관계가 있습니까? DS가 SCA 이질성 및 구성 요소 격리를 달성 할 수 있습니까? 예를 들어, DS는 SCA 구성 요소와 같은 다른 플랫폼에 서비스 또는 참조를 제공 할 수 있습니까? SC 구성 요소가 분리 된 것과 동일한 의미로 DS 구성 요소가 독립적 (격리) 될 수 있습니까?

답변

2

DS 및 SCA는 무료입니다. 하나는 다른 하나를 대신 할 수 없습니다. DS를 사용하여 OSGi 서비스를 빌드 할 수 있습니다. 이러한 서비스는 OSGi 프레임 워크에서 사용할 수 있습니다. SCA는 여러 노드에서 더 큰 SOA 설계를 설명하는 데 사용될 수 있습니다. OSGi는 SCA 구성 요소의 구현 유형이 될 수 있습니다.따라서 OSGi를 SCA의 구현 유형으로 사용할 때 OSGi 서비스에 DS를 사용하십시오.

+0

OSGI 번들을 SCA 구성 요소의 구현으로 사용한다면 역동 성을 유지할 수 있습니까? 즉, 런타임에 SCA 구성 요소 (OSGI 번들로 구현 됨)를로드 및 언로드 할 수 있습니까? –

1

둘 다 서비스 기반이지만 두 모델 모두 다른 목적으로 사용한다고 생각합니다. DS는 OSGi 프레임 워크의 일부이며 원격 서비스를 사용하는 것이 가능하지만 주로 ds는 java/OSGi로 제한됩니다. 웹 환경에서 선언적 서비스를위한 일종의 통합을 제공하는 Apache Wicket과 같은 프레임 워크가 있습니다.

DS는 java/OSGi를위한 강력한 프레임 워크입니다. 내가 아는 대부분의 다른 프레임 워크의 주요 차이점 중 하나는 OSGi의 동적 측면입니다. 서비스는 언제든지오고 갈 수 있습니다. OSGi에서 OSGi 번들 (주로 메타 정보가있는 자바 프로젝트)은 0 ... n 서비스를 제공 할 수있다. (예를 들어, 링크 된 예제에서) 동시성 변환기 서비스 관련 : OSGi에서 런타임시 구현을 실행하고 테스트 목적으로 조롱 할 수있다. 구성 요소). 대부분의 모범 사례는 구현 된 서비스 정의를 서로 다른 번들로 분리하는 것입니다 (연결된 예와 달리). 짧게 자르기 : ds로 격리가 더 좋을 것이며, 이질성 (다른 기술 플랫폼에 대한 지원)은 ds가 목표로하지 않습니다 (당연히 어떤 방법 으로든 다른 방법으로 달성 될 수 있습니다). 희망이 도움이됩니다.

0

답변에 언급 된대로 B. DS는 SCA 구성 요소 구현 유형으로 사용할 수 있습니다. 비슷하게 스프링 빈, POJO 또는 BPEL 프로세스는 SCA 컴포넌트 구현 유형으로 사용될 수있다.

OSGi 번들은 구현 유형이 아니라 SCA가 지원하는 패키징 메커니즘입니다. 특히, SCA Java POJO 스펙은 Java artifact 모듈성을 위해 OSGi를 사용합니다. SCA는 복합체와 같은 추가 모듈화 메커니즘을 제공합니다 (http://java.dzone.com/articles/service-composition-modularity 참조).

또한 SCA Java 스펙은 서비스의 동적 연결이 작동하는 방법을 개괄하지만 해당 기능을 지원하기 위해 SCA 런 타임이 필요하지 않습니다. 토스카나가 다이나믹 배선을 지원하지만 Fabric3 (www.fabric3.org)이 지원하는지는 알 수 없습니다. 예를 들어, Fabric3은 동적 서비스 참조 삽입 (추가, 제거, 업데이트)을 지원합니다. 이는 다중성 참조 (즉, 유선 서비스의 콜렉션 인 참조)와 함께 특히 유용합니다. 동적 배선은 지역 및 분산 서비스 모두에서 작동합니다.

+0

현재 패브릭 3을 확인 중이지만 답변과 관련된 질문이 있습니다. SCA의 구현 유형으로 OSGI를 사용하는 능력은 무엇입니까? 왜 JAVA 구현이 아닌가? –

+0

제 개인적인 선택은 SCA Java 구현 유형을 사용하는 것입니다. OSGi 유형을 사용하면 서비스 레지스트리 및 기타 OSGi 관련 API에 대한 액세스가 잠재적으로 제공 될 수 있지만, 동적 인 것들을 포함한 대부분의 사용 사례는 SCA Java (또는 SCA 구성 요소로 Spring Bean을 사용하여 얻을 수 있습니다. 뼈대). IMO, OSGi Service Registry API는 약간 날짜가 있기 때문에 대부분의 애플리케이션 사용 사례에서 요구되지 않는 복잡성을 도입합니다. –