1. Java Message Service(JMS) 소개

Java Message Service(JMS) API는 두개 또는 그 이상의 클라이언트 간에 메세지를 주고 받을 수 있도록 하는 Java Message Oriented Middleware(MOM) API 이다. 


JMS는 Java Platform, Enterprise Edition의 한 부분이며, Java Enterprise Edition(JEE) 기반의 애플리캐이션 컴퍼넌트들 간의 메세지를 생성하고, 전송하고, 전송받고, 읽는 기능을 사용할 수 있게 한다. 분산 처리 시스템에서 다른 컴포넌트 간의 느슨한 결합(Loosely coupled)과 신뢰성있으며, 그리고 비동기적으로 통신할 수 있게 해준다.


메세지 서비스를 제공하는 MOM 시스템에 JMS API를 이용해 접근할 수 있으며, 이를 통해 컴퍼넌트간에 통신을 할 수 있게 만들 수 있는 것이다. 즉, 소프트웨어 애플리케이션 또는 소프트웨어 컴포넌트들 간의 통신 방법을 정의해 놓은 것이다.


Component <-> JMS <-> Component


JMS는 서로 연결된 다양한 컴포넌트 사이에서 다른 컴포넌트가 갖고 있는 자원을 사용할 수도 있고, 네트워크가 연결되지 않은 상태에서도 메세지를 이용하여 필요한 업무를 요청할 수 있다.

2. JMS 사용시 고려 사항

어떤 상황에서 JMS를 사용할 수 있을까? 다음 상황을 고려해 보자.


- 다른 컴포넌트의 인터페이스 정보에 의존하지 않고 컴포넌트가 쉽게 변경되는 서비스를 원할 때

-> RMI와 같은 서비스를 이용해 컴포넌트끼리 통신하려면 인터페이스 정보를 알아야 한다. 또한 인터페이스가 변경 되면 모두 재컴파일 해야 하는 문제가 있다.

- 동시에 모든 애플리케이션이 작동하고 있는 상황에서 특정 애플리케이션이 작동하기를 원할 때

-> 특정 애플리케이션에게만 통신을 하려고 할때이다.

- 애플리케이션 비즈니스 모델을 사용하는 컴포넌트가 다른 곳으로 정보를 전달하고, 바로 응답을 받지 않은 상태에서도 계속 작동하는 것을 원할 때

-> 메소드를 이용해 다른 컴포넌트를 호출하면 반환값을 확인할 때까지 멈춰 있어야만 하는데, 다른 컴포넌트에 메세지만 보내고, 처리 상황에 대해 알지 않아도 될때를 말한다.


3. 구성 요소

- JMS provider

Message Oriented Middleware(MOM)을 위한 JMS 인터페이스 구현체이다. JAVS JMS 구현체 또는 non-java MOM을 구현하고 있다.

- JMS client

- JMS producer/publisher

- JMS consumer/subscriber

- JMS message

- JMS queue

- JMS topic

여러 구독자들(subscribers)에게 메세지를 전달할 수 있는 분산 메카니즘

4. Models

- Point-to-point model

메세지를 지정된 큐(Queue)로 전달하고 큐로부터 메세지를 전달받는 형식이다. 각각의 메세지는 오직 하나의 소비자(consumer)에게 전달된다. 


- Publish/subscribe model

메세지를 지정된 토픽(Topic)으로 전달하고 해당 토픽을 구독하고 있는 독자들에게 메세지가 전달받는 형식이다. 토픽인 큐처럼 클라이언트 에게서 메세지를 전달받으면 가지고 있다가 다른 여러 클라이언트에게 메세지를 전달할 수 있다. 


이 모델은 여러 게시판이 있고, 그 게시판에 글을 쓰면 다양한 사람이 글을 읽을 수 있는 게시판 구조랑 비슷하다. 각각의 게시판은 토픽(Topic)이 되고 게시글들은 메세지(message)가 된다.

-> JMS api는 각 모델에 상관없이 메시지를 보낸 쪽과 받는 쪽에서 모두 같은 코드를 사용할 수 있도록 공통 인터페이스를 가지고 있다.


5. JMS Object

- Administered Object

1) Connection Factory

클라이언트가 JMS 서비스에 연결하기 위한 커넥션을 생성할 때 사용하는 객체

2) Destination

생성된 메세지가 저장되는 저장소로 그리고 메세지가 소비되는 곳으로 사용되는 객체


- Connection

JMS Provider를 이용한 가상의 커넥션을 캡슐화한 객체. 사용하고 나면 close 메소드를 호출해 닫아야 한다. 커넥션은 클라이언트와 Provider 사이에 통신을 하며, 개발자는 커낵션을 이용해 세션(Session)을 생성할 수 있다.

- Session

메세지를 생성하고 소비하는 단일 스레드 단위이며, 트랜젝션 기능을 제공한다.


- Message Producer

목적지에 메시지를 전달하는 역할을 하는 객체로, 세션 객체를 통해 생성한다.

- Message Consumer

목적지에 전달된 메시지를 전달받는 역할을 하는 객체로, 메세지 생산자(Message producer)와 같이 세션 객체를 통해 생성한다.

1) Message Listener

이벤트 핸들러로 비동기식으로 메시지를 전달 받을 때 사용하는 객체로, 메세지 소비자(Message Consumer)에 등록해서 메세지가 전송됐을 때만 처리할 수 있게 해준다.

2) Message Selector

전달 받은 메세지를 필터링 할 필요가 있을때 사용하는 객체로, 메세지 소비자를 생성할때 매개 변수로 메세지 셀렉터를 지정하여 사용한다. 셀렉터를 사용하면 메세지의 헤더(Header)와 프로퍼티(Property)가 일치하는 메세지만 전달 받을 수 있다.


- Message

다른 클라이언트에서 메세지를 보내고, 받아 사용할 수 있도록 사용하는 객체로, non-java MOM에서도 사용할 수 있는 구조를 가지고 있다. 메세지는 헤더, 프로퍼티, 보디로 구성되며, 헤더는 필수로 지정되어야 한다.

1) Message Header

JMS클라이언트와 JMS 제공자(Provider)가 메세지를 확인하고 전달하기 위해 사용하는 값을 가지고 있다.

2) Message Property

헤더에서 제공하는 정보 외에 추가로 필요한 정보가 있을때 사용한다.

3) Message Body

다양한 데이터 타입을 지정해 보낼 때 사용한다. 메시지는 다음 종류가 있다.

-> Text message

-> Map Message

-> Bytes Message

-> Stream Message

-> Object Message


-Exception Handling


6. 예제

-> 추후 작성 


7. 글쓴이 요약

JMS API는 MOM 서비스(Message를 저장하고 보내주는 서비스)에 연결하는 도구이며, 실제 JMS를 쓰기 위해서는 MOM이 시스템 JDNI에 등록되어 있어야 하고, 이를 검색해서 JMS API를 이용해 컴포넌트 간에 메세지를 보내고, 받을 수 있는 식이다.

현재 프로젝트에서 쓰고 있는 예를 보니 이메일 알림 기능을 JMS를 이용해 구현해 사용하고 있다. MOM의 경우 Active MQ를 사용하고, MOM을 스프링 프레임웍에 접근이 가능하도록 등록 한후 내부적으로 JMS API를 메세지를 처리하는 방식으로 사용하고 있다.


8. Reference

Java Message Service
http://en.wikipedia.org/wiki/Java_Message_Service

Java Message Service Tutorial
http://docs.oracle.com/javaee/1.3/jms/tutorial/index.html


9. 별첨

Message-oriented middleware(MOM)은 분산 시스템 사이에 메시지를 보내거나 받을 수 있는 소프트웨어 또는 하드웨어이다.

예를 들어 특정 서비스를 제공하는 소프트웨어가 여러 플랫폼을 개발되었다고 하자. 하나는 안드로이드 어플리케이션(Java), 또 하나는 iOS(Object C) 어플리케이션이다. 그리고 서버는 C언어를 이용해 개발 되었다면, 각각의 어플리케이션은 서버와 통신을 해야만 한다. 이때 서로 통신하기 위해 사용하는 것중에 하나가 MOM인 것이다. 

MOM 프로그램에는 다음과 같은 종류가 있다. 

- SAP Process Integration ESB

- Apache ActiveMQ

- BEA Weblogic (part of the Fusion Middleware suite) and Oracle AQ from Oracle

- EMS from TIBCO

- FFMQ, GNU LGPL licensed

- JBoss Messaging and HornetQ from JBoss

- JORAM, from the OW2 Consortium

- Open Message Queue, from Oracle

- OpenJMS, from The OpenJMS Group

- Solace JMS from Solace Systems

- SonicMQ from Progress Software

- StormMQ, using AMQP

- SwiftMQ

- Tervela

- Ultra Messaging from 29 West (acquired by Informatica)

- webMethods from Software AG

- WebSphere Application Server from IBM, which provides an inbuilt default messaging provider known as the Service Integration Bus (SIBus), or which can connect to WebSphere MQ as a JMS provider[5]

- WebSphere MQ (formerly MQSeries) from IBM


'개발자 > Java Enterprise' 카테고리의 다른 글

Plain Old Java Object(POJO)  (0) 2013.05.30
Posted by 빌리 :

Git란

분산형 버전 관리 시스템이다. 기존 중앙 관리형 버전 관리 시스템에서는 서버에서 Snapshot을 Checkout 해 로컬에서 사용하는 방식과 달리, 저장소(repository)를 전부 복제해서 전체 시스템을 하나의 Client처럼 사용한다. 그래서 서버에 문제가 생겼을때, 소스 변경 작업이나 복구가 용이하다는 장점을 가지고 있다.

여담으로 Git가 생긴 이유는 Linux 커널 소스 버전 툴인 BitKeeper가 무료로 사용할 수 없다고 함에 따라 리누스 토발즈가 만든 툴이다.


Git의 지향점

  • 빠른 속도
  • 단순한 구조
  • 비선형적 개발(수 천개의 동시 다발적 브랜치)
  • 완벽한 분산
  • 리눅스 커널과 같은 대형 프로젝트에서도 유용한 구조(속도, 데이터 안전성)

Git의 기초 이론

1. Commit 단위

기존 중앙 관리형 버전 관리 도구에서는 시간의 흐름에 따른 각각 파일들의 변화를 버전으로 만들어 관리했다. 

이에 반해 Git에서는 저장(Commit)시점에 변경된 파일의 집합을 하나의 버전으로 관리한다.

-> 파일의 집합을 하나의 버전으로 관리하는 모습은 Perforce의 Changelist나 또는 ClearCase의 UCM에서 Activity를 사용하는 모습과 흡사하다.


2. 속도

Git는 저장소 전체를 복사해 사용하기 때문에 서버 성능이나 장애 상황에 따라 영향을 받는 중앙 관리형 버전 관리 도구에 비해 속도가 현저히 빠르다. 로컬에 모든 정보를 가지고 직접 실행하다 보니 네트워크를 통해 정보를 교환하는 방식에 비해 빠를 수 밖에 없다. 

물론 Offline시에서도 소스와 관련된 작업 수행이 가능하다.


3. 무결성

모든 데이터를 다루기 전에 해당 파일에 대한 체크섬[각주:1]을 구하고, 그 값을 이용해 데이터를 관리한다. Git에서는 SHA-1 Hash를 이용히 체크섬을 만든다.


4. Repository에 대해 삭제 수정이 없는 데이터 추가

데이터가 Commit 된 이후에는 기존 Repository에 대한 데이터를 삭제/수정이 불가능하다.

-> 아직 이 특징을 어떻게 활용해야 할지 의구심이 든다. 정말 정말 없나? 그건 뒤에 공부하면서 알아가야 겠다.


5. 파일의 세가지 상태

Git 상에서 파일은 Committed, Modified, Staged 상태로 관리된다.

- Committed : 로컬 GIT 데이터 베이스에 안전하게 저장된 상태

- Modified : 현재 수정되어 지고 있는 파일

- Staged : 수정 된 파일을 곧 Commit할 것이라는 표시

이 세가지 상태는 Git 프로젝트 세가지 단계의 연결되어 사용한다. Git 프로젝트 단계는

- Working Directory : 프로젝트의 특정 버전을 Checkout 한 곳 -> 실제 개발 작업이 이루어지는 공간

- Staging Area : Git Directory에 존재 하며 곧  Commit 할 파일으 대한 정보를 저장하는 곳

- Git Directory(Repository) : Git 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳

으로 나뉜다.

그럼 실제 Git를 사용아는 작업과 상태과 맵핑되는 단계를 보면 다음과 같다.

1) Working Directory에서 파일을 수정한다. (Modified  상태)

2) Staging Area에서 파일을 Stage해서 Commit할 Snapshot을 만든다. (Staged 상태)

3) Staging Area에 있는 파일을 Commit해서 Git Directory에 영구적인 Snapshot으로 저장한다. (Committed 상태)

중간에 Staging Area를 사용해서 중간에 거치는 단계를 Git에서 사용하는데, 이를 생략하여 사용할 수도 있다고 한다.


  1. (각주) 체크섬 : 중복 검사의 한 형태로, 오류 정정을 통해 송신된 자료의 무결성을 보호하는 단순한 방법이다. 단순한 체크섬 동작의 예를 들면 다음 단계를 따른다. 0. 4바이트의 데이터가 있다. 0x25, 0x62, 0x3F, 0x52 1. 모든 바이트를 더해 값을 구한다. 0x118 2. 캐리 니블을 버린다. 0x18 3. 0x18의 2의 보수를 구해 체크섬 바이트를 얻는다. 0xE8 4. 원래 데이터에 체크섬 바이트를 추가한다. 모든 합이 0x200이 된다. 5. 캐리니블을 버린다. 0x00 -> 오류가 없다는 의미 [본문으로]

'소프트웨어 공학 > 형상관리' 카테고리의 다른 글

형상관리에 들어 보셨나요?  (0) 2013.10.19
Posted by 빌리 :

자바 용어 정리

2013. 5. 7. 17:29 from 용어


마샬링(Marshalling)

전송하려는 데이터나 객체를 바이트 스트림으로 변환시키는 과정

언마샬링(Unmarshalling)

마샬링과 반대로 바이트 스트림을 전송된 객체나 데이터로 변환시키는 과정


- 추가적인 사설 : 객체의 직렬화(Serialization) 과정에서 마샬링과 언마샬링 동작이 이루어진다.

'용어' 카테고리의 다른 글

manifest는 무슨 뜻일까?  (8) 2013.04.15
Posted by 빌리 :

자바 프로그램으로 엑셀이나 워드 문서를 만들기 위해서 보통 POI 라이브러리를 사용한다. 그런데 특정 메소드를 쓰는데 버그가 있길래 이렇게 남겨 둔다. 


환경

poi 3.7 버전


버그 증상

Sheet.shiftRows() 메소드 사용시 Row에 Hyperlink가 포함되어 있어도 해당 정보가 복사되지 않는 문제


임시 해결책

shiftRows 메소드를 사용하기 전에 Hyperlink를 긁어와서 저장한 후 Shift된 위치로 넣어주기


여담

현재 홈페이지에 가보니 3.9버전까지 나오긴 했는데, 라이브러리 버전을 올려주면 다른 곳도 수정할 필요가 생길 수도 있기때문에 그냥 복사 코드만 추가 했다. 

다른 쪽 코드를 보면 라이브러리를 수정하라는데.. 사실 그게 깔끔하긴 한데, 내가 그것까지 손 볼 필요는 없네.


코드

// Copy hyperlink, because it do not support link copy.
Map<Integer, Hyperlink> linkmap = new HashMap<Integer, Hyperlink>();
for (int rr=START_ROW; rr<=sheet.getLastRowNum(); rr++) {
	Row row = sheet.getRow(rr);
	Cell cell = row.getCell(HYPERLINK_COLUMN_INDEX);
	Hyperlink link = cell.getHyperlink();
	if (null != link) {
		linkmap.put(rr, link);
	}
}

// shift row code
sheet.shiftRows(START_ROW, sheet.getLastRowNum(), defectSize);

// Set hyperlink, because it do not support link copy.
for (Integer key : linkmap.keySet()) {
	int rowindex = key + defectSize;
	Row row = sheet.getRow(rowindex);
	Cell cell = row.getCell(HYPERLINK_COLUMN_INDEX);
	Hyperlink link = linkmap.get(key);
	if (null != link) {
		cell.setHyperlink(link);
	}
}

'개발자' 카테고리의 다른 글

SK Planet CodeSprint 2013 대회  (0) 2013.06.30
SQL Query의 기본  (0) 2013.06.21
모델-뷰-컨트롤러(Model-View-Controller MVC)  (2) 2013.05.22
Posted by 빌리 :

manifest는 무슨 뜻일까?

2013. 4. 15. 17:18 from 용어

10년이 넘는 시간동안 학부 수업부터 업무에서 까지 많인 코드와 씨름하고 살아왔다. 그 수 많은 시간들을 호기심이라는 욕구를 누르고, 단순히 지식쌓기에만 몰두 하며 살아왔던것 같다. 무덤덤하게 배우고, 무덤덤하고 사용했던 컴퓨터 용어들이나 기술들.

그런데 요즘 나도모르게 눌려져있던 호기심이 조금씩 움투고 있다. 하나씩 궁금한걸 향해서 들어가다보면 수많은 인터넷 창들이 떠있는 걸 보고 깜짝 놀라기도 한다. 지식의 연결이 이렇게 다양하기도 하구나 하는 생각이 들기도 하면서 말이다. 

서론은 여기서 정리하고, 이번에 정리할 것은 manifest라는 단어이다. 간단히 보자면 jar 파일을 생성하면 파일 내부에 manifest.mf 라는 이름을 가진 파일이 생성되고, 안드로이드에서는 apk 패키지를 보면 AndroidManifest.xml 파일을 포함하고 있다. 

우선 각각의 용도를 간단히 정리해 보면 다음과 같다.

  • manifest.mf(jar) : jar 압축시 패키지 관련 정보 및 파일 확장 관련 정보를 저장
  • AndroidManifest.xml : 안드로이드 어플리케이션에 대한 기본적인 정보를 저장

용도를 보면 패키지의 구성 정보나 추가 정보들을 가지고 있다. 아~ 추가 정보들, 또는 기본 정보들을 저장하는 파일이구나 하고 생각하면 되겠다. 그런데 왜 이름이 manifest라고 지어졌을까? 하는 의문이 생겼다. 

사전적 의미를 보면 다음과 같다. 

[ 동사 ]

[타동사][VN] ~ sth (in sth) (특히 감정・태도・특질을 분명히) 나타내다[드러내 보이다][타동사][VN] ~ itself (in sth) 나타나다, 분명해지다
[ 형용사 ]~ (to sb) (in sth) | ~ (in sth) (격식) (보거나 이해하기에) 분명한
[ 명사 ](전문 용어) (배・비행기의) 화물 목록[승객 명단]

여기서 마지막 명사의 의미를 보면 화물 목록 또는 승객 명단을 지칭하는 의미로 사용한다고 한다. 위에서 둘러본 패키지내에 파일들의 용도와 일맥상통 하는 뜻이 나왔다. 아~ 저 단어가 저렇게 쓰이는구나? 라는 생각이 머리속에 '뿅~'하고 정리가 됐다. 

실제로 미국에서 전문 용어로 쓰인다고 한다. 대부분 무슨 뜻인지 모를 수도 있고, 자주 쓰지 않는다고 하는데, 프로그래머이다 보니 무의식적으로 자주 부딪혀 왔던 단어, 파일 이름이 왜 저렇게 지정되었는지 이해가 조금 간다. 의미를 알고 쓰는 것과 의미를 모르고 쓰는 것은 천지 차이가 있는 것 같다. 따라하기와 이해하기의 차이라고나 할까??

프로그래밍 언어들이 영어를 기반으로 하다 보니 대부분의 메뉴얼도 영어가 기본으로 되어있다. 그곳엔 수많은 단어들이 키워드로 사용되어지고, 그 의미를 이해없이 암기식으로 사용하곤 한다. 그런데 이렇게 하나씩 찾아가다보면, 언어적 특성들의 철학적 의미를 이해하는데 도움이 되지 않을까 하는 생각에 두서 없이 글을 쓴다. 

글을 장황한데 정리 되지 않는 느낌이 들긴 하지만, 글도 쓰면 는다고 하지 않았나?? 앞으로 계속 쓰다 보면 글도 잘써지겠지 하는 마음으로 이 글을 마무리 한다.


참고 사이트

http://ask.nate.com/qna/view.html?n=4568400

http://blog.daum.net/haha25/5387590

http://hifive42.blogspot.kr/2010/11/android-manifestxml.html

http://en.wikipedia.org/wiki/Manifest_file

http://bumworld.dayindayout.co.kr/?p=116

'용어' 카테고리의 다른 글

자바 용어 정리  (0) 2013.05.07
Posted by 빌리 :

FTP Server 사용을 위해 다음 단계를 거쳐 설정을 수행한다.

1. apt-get 명령을 이용해 vsftpd를 설치한다.

- 명령어 : sudo apt-get install vsftpd


2. FTP 설정 파일을 수정해 환경 구성한다..

('#'으로 주석 처리 되어 있으면 제거해 준다.)

- 명령어 : sudo vi /etc/vsftpd.conf

- 변경 내용

anonymous_enable=NO  #익명접근 차단

local_enable=YES         #로컬 접근 허용

write_enable=YES         #쓰기 권한 허용

local_mask=022             #파일 권한 지정


3. FTP 서비스 재시작

- 명령어 : sudo /etc/init.d/vsftpd restart


* 주의 사항

이대로 설정을 마치면 root(/)까지 조회가 가능하다. 이 경로를 제한 하기 위해서 FTP 설정 파일을 수정한 후 서비스를 재시작 한다.

- 명령어 : sudo vi /etc/vsftpd.conf

- 변경 내용

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd.chroot_list


참고 사이트

Posted by 빌리 :

- 인터넷에서 파일 받기 

wget [file address]


- tar 압축하기/압축풀기

+ 압축 하기

tar zcvf [파일이름][압축할 파일 이름들 ...]

+ 압축 풀기

tar zxvf [파일이름]

+ 옵션 설명

    • -z gzip과 관련하여 압축 또는 해제를 한번에 처리함
    • -c tar 파일 생성
    • -x 압축 파일 풀기
    • -v tar 작업 진행 상황 출력
    • -f tar 파일 확인

- Path 잡아주기
+ 수정할 파일
    • 리눅스 : /etc/bashrc or /etc/bash.bashrc
    • 우분투 : /etc/environment

+ 수정 방법 
수정 파일을 수정한다. 내부에 Path 경로가 지정되어 있는데 그 문자열 뒤에 추가하고 싶은 경로를 Full Path로 적어준다. 각각의 경로는 ':'로 구분자를 넣어서 다른 경로와 분리하여 지정해 준다.

- Tomcat 설치 및 서비스로 만들기(컴퓨터 실행시 자동 실행)

http://osskorea.tistory.com/31

Posted by 빌리 :

문제 1

common-net에 포함된 ftp 라이브러리를 이용해 파일명이 영어가 아닌 문자가 포함된 파일을 전송시 에러 발생


> 문제 1 해결책

common-net에 포함된 FTP 기능에 encoding 설정을 하는 기능이 존재 한다. FTP 접속 동작 전에 해당 Encoding을 설정 하면 된다. 한글만 사용한다면 EUC-KR로 설정해도 잘 동작한다.


public class MyFtpUtil {
	private FTPClient getFtpConnection() throws IOException {
		FTPClient ftp = new FTPClient();
		ftp.setControlEncoding("UTF-8");     // Set encoding
            ....
    }
}



문제 2

Filezilla sever를 이용해 ftp 구축시 영어가 아닌 문자가 깨지는 문제. FTP Client로 FTP Server에 접속을 하게 되면 영어 이외의 문자는 깨져서 나온다.


> 문제 2 해결책

[여기]에서 최신 패치 버전을 다운로드 받은 다음, 서비스 관리자에서 Filezilla Server를 중지 시킨 다음, 다운로드 받은 파일 압축을 풀어 설치 디렉토리에 해당 파일을 덮어씌워주면 된다. 그리고 재시작해서 조회해 보면 수정된 것을 확인할 수 있다.


참고 사이트

https://wiki.filezilla-project.org/Character_Set

https://forum.filezilla-project.org/viewtopic.php?t=16599&f=6

http://sourceforge.net/projects/filezillapv/files/Patched%20FileZilla%20Server/

Posted by 빌리 :

Eclipse RCP 제품을 개발하면서 기존의 Eclipse관련 프로젝트 기능을 가져다 쓸때가 있다. P2 프로젝트 기능을 이용한 Update 기능 활용이 한 예이다.

Eclipse IDE를 이용해 RCP 개발을 하는데 P2 기존 기능을 사용할때 다음 실행 옵션을 활성화 해야 한다. 그렇지 않으면 Update 관련 기능 테스트 할 때 실제 빌드된 제품을 가지고 로그를 하나씩 하나씩 System.out.println()을 이용해 추적해야만 한다. 간단한 설정인데도 놓치기 쉽다.

변경을 해하는 곳은 다음과 같다.



메뉴 Run > Run Configuration > [빌드명] > Configuration > Software Installation 

                   > Support software installation in the launched application



  • 참고 사이트

- P2 Api 설명 자료
http://www.slideshare.net/PascalRapicault/discovering-the-p2-api

'개발자 > Eclipse SWT' 카테고리의 다른 글

Eclipse RCP에서 Quick Access 없애기  (0) 2013.08.25
Eclipse RCP - Command를 코드로 불러오기  (0) 2013.03.22
Posted by 빌리 :

Eclipse 플랫폼을 이용하여 Eclipse Plug-in 개발시 Command를 직접 호출할 경우가 생기는데 코드 상에서 어떻게 호출 할 수 있는지 설명한다. 

코드는 간단하다. 단순히 Workbench 객체에서 관련 Service 참조 객체를 얻어온 다음 메소드로 실행 시키면 된다.


private void sampleCode() {
	IHandlerService handlerService = 
                   (IHandlerService) getSite.getService(IHandlerService.class);
	try {
		handlerService.executeCommand("Command ID", null);
	} catch (ExecutionException e) {
		e.printStackTrace();
	} catch (NotDefinedException e) {
		e.printStackTrace();
	} catch (NotEnabledException e) {
		e.printStackTrace();
	} catch (NotHandledException e) {
		e.printStackTrace();
	}
}


  • 참고 사이트

http://wiki.eclipse.org/Platform_Command_Framework


Posted by 빌리 :