IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
메인 컨텐츠로 가기

한국 developerWorks  >  Lotus  >

IBM Lotus Sametime V7.5.1의 플러그인으로 작업하기: BuddyNote 플러그인 개발하기 (한글)

developerWorks
문서 옵션

JavaScript가 필요한 문서 옵션은 디스플레이되지 않습니다.

토론

샘플 코드

영어원문

영어원문


제안 및 의견
피드백

난이도 : 중급

Dan Kehn, Senior Software Engineer, IBM 
Lawrence Wright, Co-Op student, IBM

2007 년 12 월 18 일

Lotus Expeditor에 IBM Lotus Sametime을 구현하면 Eclipse를 Plug-in Development Environment (PDE)로 사용하여 Lotus Sametime의 기능을 여러 가지 방식으로 확장할 수 있습니다. Part 2에서는, BuddyNote 플러그인을 개발하는 방법을 설명합니다.

이 글은 IBM Lotus Sametime V7.5.1의 플러그인 작동 방법을 다룬 시리즈의 두 번째 시리즈이다. Part 1 "IBM Lotus Sametime V7.5.1의 플러그인으로 작업하기: Eclipse 환경 설정하기 (한글)"에서는 Lotus Sametime V7.5.1이 리치 클라이언트 플랫폼인 IBM Lotus Expeditor를 기반으로 하고 있고, 이것은 Eclipse의 오픈 소스, 플러그인 모델에 기반하고 있는데, 이것은 Lotus Sametime용 Plug-in Development Environment (PDE)로서 설정될 수 있다. Part 1에서는 설정 단계를 설명했다. Part 2에서는, Part 1에서 설정했던 Eclipse 워크스페이스를 사용하여 커스텀 플러그인인 BuddyNote를 개발하는 방법을 설명한다. Part 1을 읽지 않았다면, "다운로드" 섹션에서 BuddyNote를 다운로드 하여 사용할 수 있다.

주: BuddyNote 워크스페이스를 사용하려면, 본 시리즈 Part 1의 "J9 플러그인 설치하기" 섹션을 참조해야 한다. 기본 위치에 IBM Lotus Sametime Connect V7.5.1과 IBM Lotus Sametime V7.5.1 SDK를 설치해야 한다.

본 기술자료 시리즈는 플러그인을 개발하여 Lotus Sametime의 기능을 확장하는 것에 관심이 있는 사람들을 위한 것이다. Lotus Sametime과 사용법에 익숙해야 한다.

시리즈 소개

네 개의 파트로 구성된 시리즈에서는 Eclipse 플랫폼을 사용한 Lotus Sametime V7.5.1 플러그인 개발을 설명한다:

  • Part 1은 Lotus Sametime V7.5.1 플러그인 개발을 위해 Eclipse를 설정하는 과정을 설명한다.
  • Part 2는 Lotus Sametime 사용자 인터페이스를 확장하는 커스텀 플러그인의 생성 과정을 설명한다.
  • Part 3은 Eclipse가 제공하는 툴을 사용하여 플러그인을 디버깅 하는 방법을 설명한다.
  • Part 4는 커스텀 플러그인을 전개하면서, Feature and Update Site 프로젝트를 설정함으로써 생성한 것을 공유하는 방법을 설명한다.



위로


기술자료 소개

본 기술자료에서는 BuddyNote 플러그인 개발 과정을 단계별로 설명함으로써, Eclipse 플랫폼을 사용한 Lotus Sametime V7.5.1 플러그인 개발 방법을 설명하고자 한다. BuddyNote 플러그인은 Lotus Sametime 사용자 인터페이스를 확장하여 view part라고 하는 영역을 추가하여, Contacts 리스트에 다른 사람의 비즈니스 카드 정보를 디스플레이 하고, 사용자가 텍스트 노트를 추가할 수 있게 한다. 이러한 노트들은 로컬에서 저장되고, 사용자가 그 연락처를 선택할 때마다 호출된다. Lotus Sametime이 처음 연결되면, 사용자가 그 연락처를 선택할 때까지 BuddyNote view part가 사용자와 관련한 정보를 디스플레이 한다. (그림 1)

소셜 북마크

mar.gar.in mar.gar.in
digg Digg
del.icio.us del.icio.us
Slashdot Slashdot


그림 1. 완성된 BuddyNote 플러그인
완성된 BuddyNote 플러그인

이 글에서는 BuddyNote 플러그인을 생성하고, 이것이 Lotus Sametime 사용자 인터페이스를 확장할 수 있도록 하는 방법을 설명한다:

  • 필요한 종속물들을 선언한다.
  • 원하는 기능에 필요한 확장 포인트를 확장한다.
  • 모든 것을 작동하게 하는 자바 클래스를 생성한다.

클래스에 모든 것을 한번에 채우고 싶다면 "다운로드" 섹션에 포함된 코드를 확인하라. 본 시리즈 Part 3과 Part 4에서는 커스텀 플러그인의 문제 해결과 전개 방법을 설명한다.




위로


사전 조건

이 글은 자바 개발에 관한 것이지만 Eclipse나 플러그인 개발에 대한 경험이 필수적인 것은 아니다. Lotus Sametime V7.5.1을 설치하고 이것의 사용법을 익혀야 한다. 또한, Lotus Sametime V7.5.1 플러그인 개발을 위해 설정된 Eclipse와 깨끗한 워크스페이스를 설치해야 한다. 본 시리즈 Part 1 "Eclipse 환경 설정하기"에서 설정 및 시스템 요구 사항을 참조하거나, 본 기술자료의 "다운로드" 섹션에 제공된 BuddyNote 워크스페이스를 다운로드 및 사용하라.




위로


머리말

이 글을 시작하기 전에 Lotus Sametime의 모든 실행 인스턴스들을 종료하는 것이 좋다.

Lotus Sametime V7.5.1은 Eclipse 플랫폼 기반이기 때문에, 애플리케이션은 기본적으로 많은 플러그인 컴포넌트들이 서로 연결되어 있다. 각 컴포넌트를 특정 기능을 제어하는 자바 클래스들의 패키지로서 생각할 수 있다. 이들 패키지들중 일부는 확장성 있으며, 기본 기능을 확장하는 추가 플러그인들의 개발을 가능케 한다. 하나의 플러그인이 확장하는 기능을 결정해야 하고, 올바른 플러그인들을 종속으로 선언해야 한다. 이것은 확장 포인트와 구현 기반으로의 액세스를 제공한다.

필요한 종속물들을 위한 확장 포인트를 마련해 놓고, 플러그인을 사용자 인터페이스와 통합시킬 장소를 결정해야 한다. 각 종속물들은 이들이 제어하는 기능에 기반하여 여러 확장 포인트를 가질 수 있다. 예를 들어, ChatWindow 종속물(com.ibm.collaboration.realtime.chatwindow)은 채팅 창에 추가하기 위한 확장 포인트에, 팝업 애드온을 생성하기 위한 또 다른 확장 포인트에 액세스를 제공한다. 올바른 확장 포인트가 구분되어야 하며, 확장이 정의되어야 한다. Eclipse는 이를 템플릿으로 단순화 한다.

확장 포인트가 구분되고 확장이 정의된 후에, 새로운 기능을 수행하는데 필요한 자바 클래스를 코딩한다. Eclipse는 일부 확장에 필요한 수퍼 클래스와 인터페이스를 권장하고 있다.

BuddyNote 플러그인은 Lotus Sametime 사용자 인터페이스를 확장할 때 다음과 같은 액션을 수행하는 것 같은 필수적인 핵심 기능을 제시한다.

  • 애플리케이션을 view part로서 추가하는 확장을 선언하는데, 이것은 Lotus Sametime과 상호 작동하는 애플리케이션이 프레임을 사용하여 디스플레이 될 수 있는 사용자 인터페이스 영역이다.
  • 사람의 선택을 트래킹 한다.
  • 데이터를 로컬에서 보존한다.

Lotus Sametime은 또한 액션 바, 팝업 메뉴, 툴바 메뉴에 대한 버튼의 형태로 기능을 추가하는 것으로 확장될 수 있다. 이 글에서는 이러한 옵션을 다루지 않겠다. 하지만 여러분이 관심이 있다면 "참고자료" 섹션에서 Lotus Sametime의 확장과 관련한 부분을 참조하기 바란다.




위로


플러그인 생성하기

여러분이 플러그인을 개발하고 있다는 것을 Eclipse가 알도록 하려면, 플러그인 프로젝트를 만들어야 한다. 이것은 Eclipse PDE로 액세스를 제공하고, 플러그인이 필요로 하는 모든 리소스를 포함하고 있는 패키지를 생성한다.

  1. File - New - Project를 선택한다. Expand Plug-in Development를 확장하고, Plug-in Project를 선택하고, Next를 클릭한다.
  2. Project name 필드에 sample.buddynote를 입력한다. 나머지 기본 선택들을 수락한다.
  3. Next를 클릭한다.
  4. Plug-in Name 필드에 이름을 타이핑 하거나, 기본 이름은 Buddynote Plug-in으로 한다. 나머지 기본 값을 수락한다.
  5. Finish를 클릭한다.

주: Plug-In Development Perspective를 열어야 할 경우 메시지를 받을 것이다. 그럴 경우, Yes를 클릭한다.

다음 단계를 따라가면, sample.buddynote 프로젝트가 Package Explorer에 생기고, Plug-In Overview가 중앙 프레임에 열린다. (그림 2) Overview 윈도우의 아래에 있는 탭을 주목하라. 특히 Dependencies와 Extensions 레이블이 달린 탭을 주목하라.


그림 2. BuddyNote Plug-in - Overview
BuddyNote Plug-in - Overview




위로


플러그인 종속물 추가하기

sample.buddynote 프로젝트를 생성했으니, 필요한 종속물들을 선언해야 한다. 디스크립션에 따라서, BuddyNote 플러그인은 애플리케이션 프레임을 사용자 인터페이스에 추가하고, 연락처 선택을 탐지해야 한다. 표 1은 이러한 기능을 위한 확장 포인트로의 액세스를 제공하는 플러그인 종속물들을 리스팅 한다. (표 1에서 공간 절약 차원에서, *는 com.ibm.realtime.collaboration을 의미한다.)


표 1. BuddyNote 플러그인 종속물
플러그인설명
org.eclipse.core.runtime
org.eclipse.core.ui
Eclipse 핵심 플러그인. ui는 시각적 애플리케이션을 생성하는 뷰 확장 포인트를 제공한다.
com.ibm.rcp.uishelfViews 확장 포인트를 제공하여 view part를 Lotus Sametime 애플리케이션에 놓는다.
*.community공통 API를 사용하여 다른 IM 커뮤니티들을 관리한다.
*.coreServiceHub 같은 코어 클래스를 정의한다.
*.messages 메시지 핸들러 이벤트를 관리한다.
*.people사람들의 온라인 상태를 리스닝 한다.
*.magiccarpet구현 전용 클래스와 인터페이스를 제공한다.

다음 단계는 필수 플러그인들을 BuddyNote 플러그인용 종속물로서 추가하는 단계이다.

  1. 중앙 프레임의 아래에 있는 sample.buddynote의 Dependencies 탭을 클릭한다.

    org.eclipse.ui와 org.eclipse.core.runtime 플러그인은 Required Plug-ins 아래에 이미 리스팅 되어 있어야 한다.
  2. Add를 클릭하고, 다음을 추가한다:
    • com.ibm.collaboration.realtime.community
    • com.ibm.collaboration.realtime.core
    • com.ibm.collaboration.realtime.magiccarpet
    • com.ibm.collaboration.realtime.messages
    • com.ibm.collaboration.realtime.people
    • com.ibm.rcp.realtime.livenames
    • com.ibm.rcp.ui
    스크린은 그림 3과 같이 보여진다. (플러그인 순서는 중요하지 않다.)

그림 3. BuddyNote 필수 플러그인
BuddyNote 필수 플러그인

주: PDE 마법사를 사용하여 이러한 플러그인 종속물들을 추가하는 것은 다음을 MANIFEST.MF 파일에 추가하는 것이고, 이것이 플러그인을 정의하는 것이다. Listing 1에서 MANIFEST.MF 탭을 선택하면 이러한 파일의 내용을 볼 수 있다.

Listing 1. BuddyNote 플러그인 - MANIFEST.MF

Require-Bundle: org.eclipse.ui,
 org.eclipse.core.runtime,
 com.ibm.collaboration.realtime.community,
 com.ibm.collaboration.realtime.core,
 com.ibm.collaboration.realtime.magiccarpet,
 com.ibm.collaboration.realtime.messages,
 com.ibm.collaboration.realtime.people,
 com.ibm.rcp.realtime.livenames,
 com.ibm.rcp.ui

주: 앞선 플러그인에 정의된 클래스와 인터페이스를 Eclipse가 읽을 수 있도록 진행하기 전에 파일을 선택하고 모든 것을 저장한다.




위로


확장 정의하기

Lotus Sametime을 구성하는 플러그인은 개발자들이 확립된 클래스와 인터페이스에 액세스 하여 개발 시 사용할 수 있는 곳에 확장 포인트를 선언한다. 확장 포인트는 Lotus Sametime의 기능을 확장할 수 있는 수단이 된다.

다음 세 개의 확장 포인트에 기여하여 BuddyNote 플러그인을 생성한다:

  • views. Lotus Sametime에 디스플레이 할 시각적 애플리케이션을 정의할 수 있다.
  • shelfViews. 뷰를 프레임으로서 Lotus Sametime 사용자 인터페이스에 추가할 수 있다.
  • MessageHandlerListener. 연결 해제, 메시지 받기, BuddyNote의 경우 Contacts 리스트에서 사람 선택하기 같은 Lotus Sametime 이벤트를 공지한다.

여러분이 생성한 고유 플러그인에 확장 포인트를 정의하여 다른 개발자들이 여러분이 제공한 기능을 기반으로 구현할 수 있도록 할 수 있지만, 이 글에서는 다루지 않겠다.

views 확장

언급한 대로, views 확장 포인트는 Lotus Sametime 사용자 인터페이스에 디스플레이 하는 애플리케이션을 정의할 수 있다. 이것은 BuddyNote 애플리케이션을 위해 여러분이 정의한 최초의 확장 포인트이다.

  1. Extensions 탭을 클릭한다. 왼쪽에는 All Extensions 있고, 그 아래에는 아무것도 없다.
  2. Add를 클릭하고, 리스트에서 org.eclipse.ui.views 확장을 선택한다.
  3. Finish를 클릭한다. 결과 패널에서, ID, Name, Point 같은 데이터 필드를 가진 "Extension Details"를 보게 된다. 이 필드에서 값을 변경할 필요가 없다.
  4. 추가된 확장을 오른쪽 클릭하고, New - view를 선택한다.
  5. 새롭게 추가된 <view> 엘리먼트를 선택하고, Extension Element Details가 업데이트 되어 가능한 애트리뷰트를 보여준다. 필드를 다음과 같이 수정한다:

    id*: sample.buddynote.buddynoteview
    name*: BuddyNote
    class*: sample.buddynote.BuddyNoteView

    나머지 필드는 빈 공간으로 둔다.

    별표(*)는 필수 애트리뷰트를 나타낸다. 클래스 애트리뷰트가 가장 중요한데, 이것은 뷰의 작동을 구현하는 자바 클래스를 가리킨다. (이 클래스는 view part 영역에 무엇이 포함되는지, 이것이 사용자 이벤트에 어떻게 반응하는지를 정의한다.)

    id 필드는 shelfViews 확장 포인트를 설정할 때 이 뷰를 구분하고, name 필드는 뷰의 타이틀 바에 디스플레이 되는 것이다.
  6. class*: 애트리뷰트 링크를 클릭하여 New Java Class 다이얼로그 박스를 연다.
  7. 다음 엔트리들을 확인한다:

    Source folder: sample.buddynote/src
    Package: sample.buddynote
    Name: BuddyNoteView
    Superclass: org.eclipse.ui.part.ViewPart.

    주: org.eclipse.ui.part.ViewPart가 수퍼클래스로서 리스팅 되지 않았다면, Browse를 클릭하고 Choose a type에 대한 텍스트 박스에 ViewPart를 타이핑 한다. ViewPart - org.eclipse.ui.part는 Matching Types 아래 나타난다. 이것을 선택하고 OK를 클릭한다.
  8. New Java Class 다이얼로그 박스가 그림 4에 보이는 것과 매치되는지 확인한다.

그림 4. New Java Class 다이얼로그 박스 - BuddyNoteView
New Java Class dialog box - BuddyNoteView

  1. Finish를 클릭하여 BuddyNoteView 클래스를 만든다. 자바 클래스 에디터가 중앙 프레임에 열리면서 BuddyNoteView.java를 디스플레이 한다. Listing 2를 보자.

Listing 2. BuddyNoteView 클래스

package sample.buddynote;

import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;

public class BuddyNoteView extends ViewPart {

	public BuddyNoteView() {
		// TODO Auto-generated constructor stub
	}

	public void createPartControl(Composite arg0) {
		// TODO Auto-generated method stub

	}

	public void setFocus() {
		// TODO Auto-generated method stub

	}
}

  1. 프레임의 상단에 sample.buddynote 탭을 선택하여 플러그인 매니페스트 에디터의 Extensions 탭을 디스플레이 한다. 프레임 하단에 plugin.xml 탭을 선택하고, 이것의 내용이 Listing 3과 같은지를 확인한다.

Listing 3. BuddyNote 플러그인 - plugin.xml


<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.2"?>
<plugin>
   <extension
         point="org.eclipse.ui.views">
      <view
            class="sample.buddynote.BuddyNoteView"
            id="sample.buddynote.buddynoteview"
            name="BuddyNote"/>
   </extension>

</plugin>

여러분도 보듯, 플러그인 에디터는 플러그인 정의와 플러그인 확장 정의를 만들고, plugin.xml 파일을 업데이트 하는 과정을 보여준다. 스팩을 직접 plugin.xml 파일에 입력할 수도 있다.

BuddyNote 뷰를 정의했으니, shelfView를 정의하여 이를 저장 및 디스플레이 하자.

shelfView 확장

다음 단계를 따라서 shelfView 확장을 정의한다:

  1. Extensions 탭으로 돌아가서 Add 버튼을 클릭한다.
  2. 리스트에서 com.ibm.rcp.ui.shelfViews 확장을 선택한다.
  3. Finish를 클릭하면, 확장이 All Extensions 밑에 뷰 확장 밑에 나타난다. 오른쪽에서, ID, Name, Point 데이터 필드를 가진 Extension Details를 볼 수 있다. 이 값을 수정할 필요가 없다.
  4. shelfView 확장을 오른쪽 클릭하고, New - shelfView를 선택하여 shelfView 엘리먼트를 만든다.
  5. Extension Element Details 다이얼로그 박스가 나타난다. 필드에 대한 엔트리를 다음과 같이 수정한다:

    id*: sample.buddynote.shelfView
    view*: sample.buddynote.buddynoteview
    region: BOTTOM
    page: leave blank
    showTitle: true

    이 뷰 필드는 이전에 정의했던 뷰 확장의 ID를 포함하고 있고, 새롭게 정의된 선반에 디스플레이 할 뷰를 가리킨다. 이들이 동일하지 않다면, BuddyNote 뷰는 Lotus Sametime에 디스플레이 되지 않는다.

    또한, 지역이 BOTTOM으로서 선택되어, Contacts 리스트 아래 애플리케이션을 배치한다. 원한다면 이 애트리뷰트로 작동할 수 있고, BuddyNote 뷰가 아래에서 위로 위치를 변경하는 것을 볼 수 있다.
  6. shelfView를 정의하여 view part를 디스플레이 했다. plugin.xml 탭을 선택하고 Listing 4에 보이는 내용을 확인한다.

Listing 4. BuddyNote 플러그인 - plugin.xml

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.2"?>
<plugin>
   <extension
         point="org.eclipse.ui.views">
      <view
            class="sample.buddynote.BuddyNoteView"
            id="sample.buddynote.buddynoteview"
            name="BuddyNote"/>
   </extension>
   <extension
         point="com.ibm.rcp.ui.shelfViews">
      <shelfView
            id="sample.buddynote.shelfView"
            region="BOTTOM"
            showTitle="true"
            view="sample.buddynote.buddynoteview"/>
   </extension>

</plugin>

이전 단계에서는 views와 shelfView의 확장을 정의했는데, 이것은 BuddyNote의 시각적인 부분이다. 다음 확장인 *messages.MessageHandlerListener는, 이를 테면 Contacts 리스트에서 사람이 선택될 때 Lotus Sametime에서 이벤트 공지를 받고자 하는 클래스를 정의한다.

MessageHandlerListener 확장

MessageHandlerListener 확장을 정의하려면, 다음 단계를 따른다:

  1. Extensions 탭으로 돌아가서 Add 버튼을 클릭한다.
  2. 다음과 같은 확장을 리스트에서 선택한다: com.ibm.collaboration.realtime.messages.MessageHandlerListener.
  3. Finish를 클릭하면, 이 확장이 All Extensions 아래에 있는 shelfView 확장 아래에 나타난다. 오른쪽에, ID, Name, Point 데이터 필드가 있는 Extension Details를 볼 수 있다. 이 값을 수정할 필요가 없다.
  4. MessageHandlerListener 확장을 오른쪽 클릭하고, New - messageHandler를 선택하여 messageHandler 엘리먼트를 만든다.
  5. Extension Element Details가 창의 오른쪽에 나타나고, class, id, destinedMessagesOnly 필드가 있다. 여러분은 클래스 필드와만 관련이 있다. 텍스트 박스에 sample.buddynote.BuddyNoteMessageHandlerAdapter를 타이핑 하고 class* 링크를 클릭한다.
  6. New Java Class 다이얼로그 박스가 열린다. 새로운 클래스 이름은 BuddyNoteMessageHandlerAdapter이다. 다음 엔트리들을 확인한다:

    Source Folder: sample.buddynote/src
    Package: sample.buddynote
    Name: BuddyNoteMessageHandlerAdapter
    Superclass: com.ibm.collaboration.realtime.messages.MessageHandlerAdapter

    주: com.ibm.collaboration.realtime.messages.MessageHandlerAdapter가 수퍼클래스로서 리스팅 되지 않았다면, Browse를 클릭하고 Choose a type 텍스트 박스에 MessageHandlerAdapter를 타이핑 한다. MessageHandlerAdapter - com.ibm.collaboration.realtime.messages가 Matching Types 아래에 나타난다. 이것을 선택하고 OK를 클릭한다.
  7. New Java Class 다이얼로그 박스가 그림 5에 보이는 것과 매치되는지 확인한다.

그림 5. New Java Class 다이얼로그 박스 - BuddyNoteMessageHandlerAdapter
New Java Class 다이얼로그 박스 - BuddyNoteMessageHandlerAdapter

  1. 편집 준비가 된 BuddyNoteMessageHandlerAdapter 클래스가 나타난다. 플러그인 매니페스트 에디터로 돌아가서, 아래에 있는 plugin.xml 탭을 선택한다. Listing 5의 내용을 확인하고 File - Save All을 선택한다.

Listing 5. BuddyNote 플러그인 - plugin.xml


<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.2"?>
<plugin>
   <extension
         point="org.eclipse.ui.views">
      <view
            class="sample.buddynote.BuddyNoteView"
            id="sample.buddynote.buddynoteview"
            name="BuddyNote"/>
   </extension>
   <extension
         point="com.ibm.rcp.ui.shelfViews">
      <shelfView
            id="sample.buddynote.shelfView"
            region="BOTTOM"
            showTitle="true"
            view="sample.buddynote.buddynoteview"/>
   </extension>
   <extension
         point="com.ibm.collaboration.realtime.messages.MessageHandlerListener">
      <messageHandler class="sample.buddynote.BuddyNoteMessageHandlerAdapter"/>
   </extension>

</plugin>




위로


프로그레스 체크

BuddyNote 플러그인의 기본 프레임웍을 설정했다. Lotus Sametime 애플리케이션 사용자 인터페이스를 확장할 포인트와 이것이 나타날 위치를 선언했다. BuddyNote 프레임웍을 확인하기 위해, Lotus Sametime을 실행하고, 플러그인이 기대한 대로 작동하는지를 확인한다. 우선, 머신에서 실행 중인 다른 모든 Lotus Sametime 인스턴스들을 종료한다.

Eclipse 툴바에서, 드롭-다운 화살표를 Run 버튼의 오른쪽으로 클릭한다. 테스팅을 위한 런타임 설정 리스트가 보인다. 이 경우, 단 한 개의 선택인 ST 751 밖에 없다. (그림 6)


그림 6. Run 드롭-다운 메뉴
Run 드롭-다운 메뉴

주: 이것은 이 글 전체에서 참조되는 애플리케이션 실행의 수단이다. 메뉴 바를 사용하여 Run - Run을 선택하고, 결과 다이얼로그 박스에서 ST 751을 실행할 수 있다. (그림 7)


그림 7. Run 다이얼로그 박스
Run 다이얼로그 박스

주: ST 751을 선택한 후에 저장하라는 프롬프트가 나오면 OK를 클릭한다.

Lotus Sametime에 로그인 하라는 프롬프트가 생긴다. Lotus Sametime에 사용하는 것과 같은 정보를 사용한다.

스크린 모습은 그림 8과 유사하다.


그림 8. BuddyNote 프레임
BuddyNote 프레임

BuddyNote 프레임은 사용자 인터페이스 하단에 축소될 수 있다. 그럴 경우, 타이틀 바를 클릭하여 최대화 한다.

축하한다! Lotus Sametime Contacts 리스트에 BuddyNote 애플리케이션용 공간이 확보되었다. 다음에는, 현재 선택된 연락처용 비즈니스 카드 보기 같은 원하는 기능을 제공하는 자바 코드와, 노트를 추가할 수 있는 텍스트 필드를 추가한다. 코드는 여러분을 위해 제공된다. 방법을 읽고 Lotus Sametime 객체들이 어떻게 서로 맞춰지는지에 대한 이해를 하기 바란다. Lotus Sametime SDK (st751sdk\client\connect\javadoc\connect)에서 제공하는 JavaDoc도 좋은 참고 자료이다.




위로


코드 채우기

올바른 확장 포인트를 정의함으로써 BuddyNote 프레임웍을 설정했다. 이제, 이것을 작동시키려면 자바 코드가 필요하다. 여러분이 정의하는 첫 번째 클래스는 BuddyNoteView로서, views 확장 포인트를 정의했을 때 생성되었다.

인스턴스 Lotus Sametime 전용이 아닌 인스턴스 변수, 컨스트럭터, 헬퍼 메소드를 채우는 것으로 시작한다. 이것이 다 끝나면, Lotus Sametime 확장을 위한 코드로 간다. 제공된 코드를 복사하여 Eclipse의 중앙 프레임에 있는 해당 클래스로 붙인다. Listing 6은 BuddyNoteView의 인스턴스와 클래스 변수이다.


Listing 6. BuddyNoteView - 인스턴스와 클래스 변수

	static public BuddyNoteView INSTANCE;
	private final String DEFAULT_NOTE = "<Click to enter notes>";
	private Person person = null;
	MyBusinessCard bizCard;
	StyledText textControl;
	String currentNote = null;

BuddyNoteView 컨스트럭터는 클래스가 생성될 때 자동으로 생성된다. 클래스 변수에 view part 인스턴스에 대한 레퍼런스를 저장한다. BuddyNote view part의 단 한 개의 인스턴스만 있는 것으로 가정한다. 기존 컨스트럭터를 대체 또는 수정하여 아래와 같은 것으로 매치시킨다:

public BuddyNoteView () {
INSTANCE = this;
}

주: Eclipse에서, 메뉴 선택 Source - Organize Imports를 사용하여 코드 스니펫을 붙인 후에 필요한 import 문을 추가한다. 이것을 제공된 코드를 붙인 후에 매번 사용할 것을 권한다.

Organize Imports가 사용될 때, 어떤 Person 클래스를 사용할 것인지를 묻는다. com.ibm.collaboration.realtime.imhub.SametimeConnectListParser.Person이 아닌 com.ibm.collaboration.realtime.people.Person을 선택하도록 한다.

클래스에 있는 일부 지원 메소드에 대한 간략한 설명도 있다. 이것을 createPartControl 메소드 아래에 붙인다.

Listing 7의 getLocalFilespec 메소드는 Lotus Sametime 사용자의 로그인 ID와 이와 관련된 노트를 저장하는데 사용되는 파일 이름 사이를 매핑한다. 좀더 고급 구현은 백엔드 데이터베이스 어디에나 노트를 저장한다.


Listing 7. BuddyNoteView - getLocalFilespec

private String getLocalFilespec(Person p) {
	// Store the BuddyNote in the plug-in metadata area
	// named by person ID. Replace invalid filespec characters like
	// the colon.
	StringBuffer sb = new StringBuffer();
	String id = p.getId();
	sb.append(Activator.getDefault().getStateLocation());
	sb.append(File.separator);
	for (int i=0; i < id.length(); i++) {
		if (Character.isLetterOrDigit(id.charAt(i))) 
			sb.append(id.charAt(i));
		else
			sb.append('_');
	}
	sb.append(".txt");
	return sb.toString();
}

Listing 8의 storeBuddyNote 메소드는 Person 객체와 관련된 노트(String s)를 저장한다. 이 구현을 단순화 하려면, 저장된 텍스트용 파일 이름은 무효한 파일 이름 문자들이 제거된 사용자의 Lotus Sametime 로그인 ID와 같다. 이 파일은 플러그인 데이터 영역이라고 하는 플러그인을 위해 보유된 장소에 저장된다. (특히, Eclipse 런타임의 .metadata/.plugins/sample.buddynote 디렉토리)


Listing 8. BuddyNoteView - storeBuddyNote
private void storeBuddyNote(Person p, String s) {
	try {
		String spec = getLocalFilespec(p);
		File f = new File(spec);
		// Delete the file if the new note is empty
		if (s == null || s.trim().length() == 0) {
			f.delete();
			return;				
		}
		if (!f.exists())
			f.createNewFile();
		BufferedWriter out = new BufferedWriter(new FileWriter(f));
		out.write(s);
		out.close();
	} catch (IOException e) {
		e.printStackTrace();
	}
}

Listing 9의 retrieveBuddyNote 메소드는 제공된 사람과 관련된 텍스트 파일을 읽는다. storeBuddyNote와 마찬가지로, 사용자의 Lotus Sametime 로그인 ID를 사용하여 필드의 이름을 구현하고, 이것을 플러그인 데이터 영역에서 읽는다. (특히, Eclipse 런타임의.metadata/.plugins/sample.buddynote 디렉토리)


Listing 9. BuddyNoteView - retrieveBuddyNote

private String retrieveBuddyNote(Person p) {
	String s = null;
	if (person != null) {
		StringWriter sw = new StringWriter();
		PrintWriter pw = new PrintWriter(sw);
		String spec = getLocalFilespec(p);
		File f = new File(spec);
		if (f.exists()) {
			try {
				BufferedReader in = new BufferedReader
					(new FileReader(f));
				String str;
				while ((str = in.readLine()) != null) {
					pw.println(str);
				}
				in.close();
				s = sw.toString();					
			} catch (IOException e) {
			}
		}
	}
		
	return s;
}





위로


createPartControl 메소드 완성하기

이것은 Sametime 외 다른 코드도 관리한다. Lotus Sametime을 확장하여 사용자 인터페이스에 BuddyNote 영역을 만들고, 이것이 프로그램과 상호 작동하도록 하는 코드를 보자.

BuddyNote는 view part이다. view part는 보일 수 있는 영역들을 Lotus Sametime에 기여한다. 이 영역은 Eclipse의 표준 위젯인 SWT (Standard Widget Toolkit)를 사용하여 createPartControl 메소드에 정의된다.

SWT API는 자바 AWT (Abstract Window Toolkit) API와 많은 부분 비슷하다. SWT 위젯은 이식성 있고, 툴킷에는 모든 플랫폼에 정의된 커스텀 위젯들이 포함된다. (예를 들어, SWT의 테이블 위젯은 자바로 구현되며, 모든 Eclipse 지원 플랫폼에서 실행된다.)

createPartControl 메소드 서명은 Eclipse에 의해 자동으로 BuddyNoteView 클래스에 추가되어야 한다. 여러분의 코드에 있는 createPartControl 메소드 서명이 다음과 일치하는지를 확인하라:

public void createPartControl (Composite parent) {

이 메소드 코드는 비즈니스 카드와 텍스트 영역을 포함하고 있는 폼을 만드는 것으로 시작한다:

Composite comp = new Composite(parent, SWT.BORDER);
comp.setLayout(new FormLayout());

다음에, 이 코드는 비즈니스 카드를 추가한다. (Listing 10). 이것은 Contacts 리스트에 있는 사람들에 대한 정보를 디스플레이 하기 위해 사용되는 Lotus Sametime Connect 위젯이다. Lotus Sametime의 채팅 윈도우에서 비즈니스 카드를 인식할 수 있다.


Listing 10. BuddyNoteView – createPartControl Business Card

	// Business card is "person aware", i.e., will update 
	// as the person's status updates.
	bizCard = new MyBusinessCard(comp, SWT.NONE);
	FormData fd = new FormData();		
	fd.top = new FormAttachment(0, 0);
	fd.left = new FormAttachment(0, 0);
	fd.right = new FormAttachment(100, 0);
	bizCard.setLayoutData(fd);


경계선을 정의하여 비즈니스 카드와 텍스트 영역을 분리하고, 텍스트 영역을 Listing 11과 같이 초기화 한다.


Listing 11. BuddyNoteView ? createPartControl 텍스트 영역


	// Dark line separator between business card and text area.
	Label divider = new Label(comp, SWT.NONE);
	divider.setBackground(divider.getDisplay().getSystemColor(
			SWT.COLOR_DARK_GRAY));
	fd = new FormData();
	fd.top = new FormAttachment(bizCard, 0);
	fd.left = new FormAttachment(0, 0);
	fd.right = new FormAttachment(100, 0);
	fd.height = 1;
	divider.setLayoutData(fd);

	// Text input area; it displays an indication that it's empty
	// as defined by DEFAULT_NOTE
	textControl = new StyledText(comp, SWT.MULTI | 
		SWT.V_SCROLL | SWT.WRAP);
	fd = new FormData();
	fd.top = new FormAttachment(divider, 0);
	fd.bottom = new FormAttachment(100, 0);
	fd.left = new FormAttachment(0, 0);
	fd.right = new FormAttachment(100, 0);
	textControl.setLayoutData(fd);
	textControl.setText(DEFAULT_NOTE);

이 메소드를 완성하기 위해서는, 현재 연락처와 관련된 입력된 텍스트를, 연락처의 Lotus Sametime 로그인 ID로 구분되거나, BuddyNote 프레임이 포커스를 얻거나 잃었는지 여부에 따라 파일에서 텍스트를 가져오는 파일에 자동 저장하는 텍스트 영역을 위한 포커스 리스너를 listing 12와 같이 추가해야 한다.


Listing 12. BuddyNoteView ? createPartControl 포커스 리스너


	// Save and restore the BuddyNote on gain/lose focus.
	// (remember not to store the "default" note!)
	textControl.addFocusListener(new FocusAdapter() {
		public void focusLost(FocusEvent e) {
			if (person != null && !textControl.getText().
					equals(currentNote)) {
				currentNote = textControl.getText();					
				storeBuddyNote(person, currentNote);
			}
		}

		public void focusGained(FocusEvent arg0) {
			if (person != null && textControl.getText().
					equals(DEFAULT_NOTE)) 
				textControl.setText("");
			}
		});

이 코드의 마지막 부분은 여러분이 생성했던 위젯을 배치할 것을 폼에 요청하는 것이다.

comp.layout();

파일을 선택하고 모든 것을 저장한 다음, 샘플을 실행하여 createPartControl 메소드가 기대한 대로 실행되는지를 확인한다. 비즈니스 카드는 코드가 "person"을 디스플레이 하는 것으로 설정하지 않으므로 비워둔다. 이것이 다음 단계이다. 텍스트 필드 "<Click to enter notes>"는 기본 텍스트를 사용자에게 보여준다. (그림 9)


그림 9. Progress Check ? BuddyNote Frame Layout
Progress Check – BuddyNote Frame Layout




위로


메시지 이벤트 핸들링 정의하기

Lotus Sametime 컴포넌트는 공통의 메시징 버스를 통해 키 이벤트와 통신한다. 메시징 프레임웍을 사용하는 컴포넌트를 참여자(participant)라고 한다. 송신자(sender)는 메시징 버스와만 인터랙팅하고, 메시지를 처리하는 컴포넌트에 대해 알 필요가 없다.

메시지 클래스는 메시지의 생성과 프로세싱을 단순하고, 빠르고 안전하게 하기 위해 정의된다. 각 메시지 유형에 따른 기본 Message 클래스의 하위 클래스가 있다. 예를 들어, ImTextReceivedMessage는 사용자가 인커밍 텍스트 메시지를 받을 때 방송되는 메시지이다.

MessageHandler 인터페이스와 DefaultMessageHandler 클래스는 각 유형의 Message 하위 클래스에 대한 개별 메소드를 제공한다. DefaultMessageHandler를 하위 클래스로 나누고, 처리하고자 하는 메시지를 위해 handleMessage (Message 하위 클래스) 메소드를 오버라이드 할 수 있다. 명확하게 오버라이드 되지 않은 메소드는 하위 클래스의 handleDefaultMessage 메소드로 전달된다. 이 DefaultMessageHandler 하위 클래스는 일반적으로 MessageHandlerAdapter와 결합하여 사용된다.

다음은 메시지 버스에서 인터셉트 되고 실행될 수 있는 메시지 이벤트이다:

  • handleMessage(ImChatWindowAdditionMessage)
  • handleMessage(ImChatWindowCloseWarningMessage)
  • handleMessage(ImChatWindowFlashWindowMessage)
  • handleMessage(ImChatWindowForceFocusMessage)
  • handleMessage(ImChatWindowToolbarRedrawMessage)
  • handleMessage(ImConnectedMessage)
  • handleMessage(ImConnectionStatusChangeMessage)
  • handleMessage(ImDisconnectedMessage)
  • handleMessage(ImTextConnectionClosedMessage)
  • handleMessage(ImTextConnectionOpenMessage)
  • handleMessage(ImTextReceivedMessage)
  • handleMessage(ImTextSendMessage)

MessageHandlerListener 확장을 설정할 때 BuddyNoteMessageHandlerAdapter라고 하는 MessageHandlerAdapter 클래스를 생성했다. 다음에는 여러분이 생성한 BuddyNoteMessageHandler라고 하는 MessageHandler 클래스에 대한 호출을 포함함으로써 이 클래스를 완성한다.

BuddyNoteMessageHandler는 handleMessage(BuddySelectedMessage)와 handleMessage(ImConnectedMessage) 메소드를 오버라이드 한다. 이 메소드는 BuddyNote 애플리케이션이 기본적으로 정보를 사용하고, 여러분이 자주 선택하는 연락처를 기반으로 업데이트 하도록 한다.

BuddyNoteMessageHandlerAdapter

메시지 핸들러 어댑터는 *messages.MessageHandlerListener 확장 포인트와 관련된 클래스로서 확장 메니페스트에 지정된다. 이러한 확장 포인트를 이 글의 초반부에 BuddyNote 플러그인의 종속물로서 추가했고, 제휴 클래스를 BuddyNoteMessageHandlerAdapter로서 정의했다.

중앙 Eclipse 프레임의 sample.buddynote 탭을 클릭하고 아래에 plugin.xml 탭을 선택하면 Listing 13과 같은 코드를 보게 된다.


Listing 13. MessageHandlerListener 확장 포인트

<extension
         point="com.ibm.collaboration.realtime.messages.MessageHandlerListener">
      <messageHandler class="sample.buddynote.BuddyNoteMessageHandlerAdapter"/>
   </extension>

Listing 14는 BuddyNoteMessageHandlerAdapter 코드에 대한 것이다. 두 개의 컨스트럭터 서명이 이미 Eclipse에 의해 구현되었고, 여러분은 어떤 메소드도 추가하지 않는다.


Listing 14. BuddyNoteMessageHandlerAdapter 클래스

public class BuddyNoteMessageHandlerAdapter extends MessageHandlerAdapter {

	public BuddyNoteMessageHandlerAdapter(MessageHandler handler) {
		super(handler);
	}

	public BuddyNoteMessageHandlerAdapter() {
		super (new BuddyNoteMessageHandler());
	}
}

어댑터 코드는 사용될 적절한 메시지 핸들러를 결정한다. 보다 복잡한 경우, 어댑터는 핸들러가 필요로 하는 초기화 코드를 위한 좋은 장소이다.

여러분도 보듯, 기본 컨스트럭터는 BuddyNoteMessageHandler 객체를 사용한다. 이것은, 인커밍 이벤트를 처리하는 실제 작업을 수행하는 클래스이다. 이것은 DefaultMessageHandler의 하위 클래스이다. 이 클래스를 생성하고 정의한다.

BuddyNoteMessageHandler

BuddyNoteMessageHandler에는 사용자의 연락처 선택을 탐지하고, 메소드를 호출하여 비즈니스 카드에 선택된 연락처 정보를 채우고, 사용자의 연결 상태를 탐지하고, 메소드를 호출하여 비즈니스 카드에 사용자의 정보를 시작 시 채우는 코드가 포함되어 있다.

이 클래스를 생성하려면, 다음 단계를 수행한다:

  1. Package Explorer에서 sample.buddynote 패키지를 선택한다.
  2. New - Class를 선택하고 필드에 다음 정보를 입력한다:

    Source Folder: sample.buddynote/src
    Package: sample.buddynote
    Name: BuddyNoteMessageHandler
    Superclass: com.ibm.collaboration.realtime.messages.DefaultMessageHandler

    주: Browse를 선택하고 Choose a type 텍스트 박스에 DefaultMessageHandler를 타이핑 한다. DefaultMessageHandler - com.ibm.collaboration.realtime.messages가 Matching Types 아래에 나타난다. 이것을 선택하고 OK를 클릭한다.
  3. New Java Class 다이얼로그 박스가 그림 10에 보이는 것과 매치하는지를 확인한다.

그림 10. New Java Class 다이얼로그 박스 - BuddyNoteMessageHandler
New Java Class 다이얼로그 박스 ? BuddyNoteMessageHandler

  1. Finish를 클릭하여 클래스를 생성한다.

BuddyNoteMessageHandler는 한 개의 오버라이드 메소드인 handleMessage를 갖고 있다. 이것은 BuddyNoteView class, handleBuddySelected, handleConnected에서 메소드를 사용한다. 따라서, Eclipse에서 정의되지 않은 메소드에 대한 컴파일러 에러는 무시한다. 다음 섹션에서 확실히 설명할 것이다.

handleMessage(BuddySelectedMessage 메시지) 이벤트는 handleBuddySelected 메소드를 사용하여 싱글톤 BuddyNote에 공지한다. 선택된 사용자 정보를 BuddyNoteView의 createPartControl 메소드에서 초기화 했던 비즈니스 카드로 설정함으로써 대응한다.

Listing 15의 코드는 Lotus Sametime의 ServiceHub을 사용하여 등록된 서비스를 가져온다. 이 서비스는 사람 인스턴스와 ID(사용자의 로그인과 커뮤니티 ID로 구성된 스트링)의 매핑을 핸들한다.


Listing 15. BuddyNoteMessageHandler - handleMessage(BuddySelectedMessage 메시지)

public void handleMessage(BuddySelectedMessage message) {
	try {
		PeopleService peopleSvc = (PeopleService) ServiceHub.
			getService(PeopleService.SERVICE_TYPE);
		Person person = peopleSvc.getPersonById(
			message.getPersonId());
		BuddyNoteView.INSTANCE.handleBuddySelected(person);		} 
	catch (ServiceException e) {
		e.printStackTrace();
	}		
}

handleMessage(ImConnectedMessage) 이벤트는 handleConnected 메소드를 사용하여 BuddyNote view part를 공지한다. 시작 시 비즈니스 카드에 로그인 된 사용자의 정보를 설정함으로써 반응한다. 다시 말해서, BuddyNote 프레임의 비즈니스 카드는 Contacts 리스트에서 하나를 선택할 때까지 비즈니스 카드를 디스플레이 한다.

public void handleMessage(ImConnectedMessage message) {
BuddyNoteView.INSTANCE.handleConnected();
}

리마인더: Source - Organize Imports 메뉴를 사용하여 코드 스니펫을 붙인 후에 필요한 import 문장을 추가한다. com.ibm.collaboration.realtime.imhub.SametimeConnectListParser.Person이 아닌 com.ibm.collaboration.realtime.people.Person을 선택하라.

정의되지 않은 메소드와 관련한 에러는 무시하라. 이러한 에러는 나머지 코드가 추가되면 없어진다.




위로


BuddyNoteView 끝내기

메시지 핸들러와 어댑터가 완료되었으니, view part에서 이러한 이벤트에 대응하는 BuddyNoteView에 메소드를 추가한다. 이러한 메소드는 두 개의 다른 메소드인 getLocalPerson과 refreshPersonInfo의 의존한다.

handleConnected 메소드는 Lotus Sametime이 연결되었다는 것을 탐지하면 BuddyNoteMessageHandler에서 호출된다. 그럴 경우, 사용자가 연락처를 선택할 때까지 비즈니스 카드를 로그인 된 사용자 정보에 설정한다. Listing 16을 참조하라.


Listing 16. BuddyNoteView - handleConnected

void handleConnected() {
	// initialize to current user if none already selected
	if (person == null) {
		person = getLocalPerson();
		refreshPersonInfo(person);				
	}
}

handleBuddySelected 메소드는 Contacts 리스트에서 누군가를 선택했다는 것을 탐지하면 BuddyNoteMessageHandler에서 호출된다. 비즈니스 카드는 현재 선택된 연락처로 업데이트 된다. (Listing 17)


Listing 17. BuddyNoteView - handleBuddySelected

void handleBuddySelected(Person person) {
	this.person = person;
	refreshPersonInfo(person);
}
 

refreshPersonInfo 메소드는 비즈니스 카드를 현재 선택된 연락처 또는 Lotus Sametime이 연결되었을 경우 고유의 정보로 업데이트 한다. 노트 섹션은 연락처를 위해 저장된 노트로 업데이트 되고, 연락처가 선택되지 않으면, 기본 노트로 업데이트 된다. ("<Click to enter notes>"). Listing 18을 참조하라.


Listing 18. BuddyNoteView - refreshPersonInfo

private void refreshPersonInfo(final Person person) {
	// Notifications in Sametime Connect often come from
	// non-UI threads. Queue a request to the UI thread.
		
	bizCard.getDisplay().asyncExec(new Runnable() {
		public void run() {
			if (textControl.isDisposed())
				return;
				
			bizCard.setPerson(person);				
			currentNote = retrieveBuddyNote(person);
			if (currentNote != null)
				textControl.setText(currentNote);
			else
				textControl.setText(DEFAULT_NOTE);			
		}
	});		
}
 

getLocalPerson 메소드는 BuddyNoteView 플러그인이 기대한 대로 작동하게 하는데 필요한 마지막 메소드이다. Lotus Sametime이 Community와 PeopleService를 연결할 때 고유의 정보가 비즈니스 카드 섹션으로 간다. Community는 알려진 커뮤니티의 리스트(Lotus Sametime, 외부 IM 네트워크)를 관리하고, PeopleService는 런타임 시 ID와 인스턴스간 매핑을 핸들한다. Listing 19를 참조하라.


Listing 19. BuddyNoteView - getLocalPerson

private Person getLocalPerson() {
	// Return the local person (for the initial display)
	Person p = null;
	try {
		CommunityService communityMgr = (CommunityService)
			ServiceHub.getService
			(CommunityService.SERVICE_TYPE);
		Community community = communityMgr.getDefaultCommunity();
		if (null != community) {
			String localUserId = community.getUserId();
			if (localUserId != null) {
				PeopleService peopleSvc = (PeopleService)
					ServiceHub.
					getService(PeopleService.SERVICE_TYPE);
				p = peopleSvc.getPerson(
					localUserId, community.getId());
			}
		}
	} catch (ServiceException e) {
		e.printStackTrace();
	}
	
	return p;
}




위로


BuddyNote 플러그인 실행하기

필요한 모든 코드를 추가했으니, 이제 남은 일은 플러그인을 테스트 하고 디버그 하는 일이다. 먼저, 파일을 선택하고 모든 것을 저장한 다음, Problems 뷰를 보고 어떤 에러도 없는지를 확인한다. (그림 11)


그림 11. Console View - Problems 탭
Console View - Problems 탭

문제가 리스팅 되면, 이를 더블 클릭한다. Eclipse에서는 코드의 해당 위치로 갈 수 있다. 빨간색 x가 문제 라인의 왼쪽에 나타난다. 빨간색 x를 클릭하면 문제 수정을 위한 권고가 보인다. (그림 12)


그림 12. 문제 예제
문제 예제

문제를 해결하기 전에, Source - Organize Imports를 사용해 보라. 소실된 import 문이 에러의 원인일 경우가 대부분이다. 문제가 지속된다면, 권장 액션을 시도해 보라.

어떤 에러도 없다면, Run 드롭-다운 메뉴에서 ST 751을 사용하는 애플리케이션을 실행하라. Lotus Sametime이 시작될 때까지 기다린다. ID와 패스워드를 사용하여 로그인 하면, 그림 1과 같은 모습을 볼 수 있다.

축하한다. 드디어, 여러분의 첫 번째 Lotus Sametime 플러그인을 완성했다!




위로


결론

관련 자료 다운로드
IBM Lotus Sametime
다운로드 하기

이 글에서는 Lotus Sametime view part 확장의 생성 과정을 설명했다. 플러그인, 플러그인 확장, 새로운 확장의 작동을 정의하는 클래스를 생성하는 방법을 배웠다. 마지막으로, 새로운 코드를 Eclipse의 PDE에서 테스트 했다.

본 시리즈 Part 3에서는 Eclipse에 구현된 디버그 툴을 사용하여 플러그인을 개발할 때 생긴 에러들을 해결하는 방법을 설명한다. Part 4에서는 업데이트 사이트를 사용하여 플러그인을 전개하는 방법을 설명하겠다.





위로


다운로드 하십시오

이름크기다운로드 방식
BuddyNote_Workspace.zip1428KBHTTP
BuddyNoteCode.txt8KBHTTP
다운로드 방식에 대한 정보


참고자료

교육

제품 및 기술 얻기

토론


필자소개

Dan Kehn은 IBM의 소프트웨어 엔지니어이다. 소프트웨어 영역에 많은 경험을 쌓았으며 Rational Application Developer 같은 개발 툴, 운영 체계 퍼포먼스, 메모리 분석, 사용자 인터페이스 디자인 분야에서 일했다. The Java Developer's Guide to Eclipse의 공동 저자이기도 하다. 현재 그는 Technical Enablement Specialist로서 IBM Lotus Sametime Connect로의 제품 통합에 관한 일을 하고 있다.


Lawrence Wright는 노스캐롤라이나주립대학교의 전자 공학 학사 학위를 받고, 현재는 컴퓨터 공학을 전공하고 있다.




기사에 대한 평가


보다 나은 서비스를 제공하기 위함이오니 잠시 짬을 내어 이 양식을 제출하여 주십시오.



아니오잘 모르겠음
 


 


12345
 



위로


developerWorks 콘텐트를 다른 사이트에 전재하기:
developerWorks 콘텐트에 대한 저작권은 IBM에 있습니다. IBM의 서면 허가나 원본 저자의 허락이 없이는 전재를 금합니다. 저희 콘텐트를 전재하시려면 IBM developerWorks 담당자 에게 문의하십시오.
    IBM 소개 개인정보 보호정책 문의