 |
|
난이도 : 중급 Bob Balfe, Senior Software Engineer,
IBM
2007 년 6 월 12 일 Eclipse에서 자바 코드를 작성하여 IBM Lotus Notes V8 클라이언트를 확장해 봅시다. 개인용 메일에 Lotus Notes를 사용하고, 새로운 Mail Rule Runner를 포함시켜서 사용자들이 클라이언트상에서 수동으로 규칙을 실행할 수 있도록 합니다.
이 글에서는 Eclipse PDE(프로그래밍 개발 환경)에서 자바 코드를 작성하여 IBM Lotus Notes V8 클라이언트를 확장하는 방법을 설명합니다. 특히, 개인용 이메일에 Lotus Notes를 사용하는 방법을 설명합니다.
필자는 확장, 액티비티 세트, 플러그인, 기능, 업데이트 사이트 같은 핵심 Eclipse 기술을 사용하는 방법을 중점적으로 설명하도록 하겠다. 이러한 기술들을 활용하여 Eclipse 기반 제품에 기능을 추가할 수 있다. 이 글에서는 Lotus Notes 클라이언트에 초점을 맞추고, 사용자가 클라이언트에서 직접 규칙을 실행할 수 있도록 새로운 Mail Rule Runner를 포함시킬 것이다.
주: 필자는 집에서 POP3와 SMTP 메일용 기본 클라이언트로서 Lotus Notes 메일을 사용하는데, 한 가지 빠진 기능은 메일 규칙이다. 여러분도 알다시피, Lotus Notes의 메일 규칙은 SMTP 서버에서 실행되고, Domino SMTP 서버 없이 메일 정렬을 할 수 없다. 이 툴이 완벽한 것은 아니지만, Eclipse를 사용하여 Lotus Notes를 확장하고, Lotus Notes 데이터에 액세스하여 이를 조작하기 위해 Lotus Notes 자바 백엔드 클래스를 사용하는 방법을 보여주기에는 충분하다.
Eclipse에서 플러그인을 생성하는 것부터 시작한다. 다운로드 섹션에서 제공하는 코드와 샘플들은 Eclipse 버전 3.2.1에서 생성되었다.
메일 규칙을 로컬에서 실행하는 액션(아이콘)으로서 Lotus Notes 메일 뷰에 나타날 새로운 메뉴 옵션을 만들 것이다. 사용자가 Run Mail Rules 버튼을 클릭하면, 실행되는 모든 메일 규칙들이 선택된 상태로 되어있는 다이얼로그 박스가 나타나고, 뷰 또는 폴더를 선택할 수 있는 콤보 박스가 나타난다. 그림 1은 Run Mail Rules 다이얼로그 박스 모습이다. 흐릿하게 처리한 부분은 개인 정보를 보호하기 위함이다.
그림 1. Run Mail Rules 다이얼로그 박스
다이얼로그 박스는 기본적인 Eclipse SWT 기반 다이얼로그 박스로서 SWT GridLayout을 사용하여 다른 UI 엘리먼트들이 스크린 상에 배치되는 방법을 정의한다.
Run 버튼을 클릭하면, 정상적인 Eclipse 프로그레스 다이얼로그 박스가 나타난다. (그림 2) Run in Background 버튼을 클릭하여 백그라운드에서 다이얼로그 박스를 실행할 수 있다. 작동이 끝난 후에도 여러분이 규칙을 실행했던 뷰가 열린다면 F9을 눌러 뷰를 리프레시 한다. 이 툴을 확장하여, 메일 규칙 작동이 끝날 때 현재 스크린을 리프레시 할 수 있다.
그림 2. Run Mail Rules Job 프로그레스
플러그인 만들기
모든 플러그인과 마찬가지로, Eclipse 플러그인 마법사를 사용하여 플러그인을 만들기는 쉽다. Eclipse가 많은 일을 해주는 것은 아니지만, 소프트웨어 개발과 비슷하다. 그저 시작하면 된다. 필자는 Eclipse 3.2.2를 사용했고, 설치되어 있었던 Lotus Notes V8 Beta 클라이언트를 대상 플랫폼으로 지정했다. 여러분은 언제라도 여러분 머신의 같은 장소에 Lotus Notes(c:\notes)를 설치할 수 있다. Window - Preferences를 선택하여 Eclipse에서 대상 플랫폼을 설정한다. Plug-in Development -Target Platform을 선택하여 대상 플랫폼을 지정한다. 그림 3은 대상 플랫폼으로서 Lotus Notes가 선택된 모습이다. f\ramework\eclipse 디렉토리를 선택하는 것이 중요하다. 이것은 Eclipse 런타임용 루트 디렉토리이다. 이 경우, 디렉토리는 c:\notes\framework\eclipse 이다.
그림 3. 대상 플랫폼 지정하기
Lotus Notes 런타임을 플랫폼으로서 선택했으니, 새로운 플러그인을 생성하고, 종속 관계를 설정하고, 코드를 작성하면 된다. Lotus Notes를 대상 플랫폼으로 설정하면 Eclipse, Lotus Expeditor, Lotus Notes API와 확장을 사용할 수 있다. Package Explorer에서 오른쪽 클릭하여 New - Project를 선택한다. 여기에서 Eclipse 플러그인 프로젝트를 선택한다. 그림 4는 New Project 마법사에서 여러분이 보게 될 스크린이다.
그림 4. New Project 마법사
Next를 클릭하고 프로젝트 이름을 com.ibm.notes.mail.utils로 한다. 이는 여러분이 나중에 생성할 메일 유틸리티를 위한 기본 장소가 된다. 이 마법사의 나머지 부분들에서는 기본 값들을 선택할 수 있다. 이 플러그인을 기존 템플릿에 설치하는지를 묻는 스크린이 나타나면 템플릿 옵션을 선택 해제하고 어떤 것도 사용하지 않는다.
Package Explorer에서 새롭게 생성된 프로젝트를 확장하고 META-INF 폴더 밑에 MANIFEST.MF를 더블 클릭한다.
Dependencies 탭을 검색하고(그림 5) com.ibm.notes.java.java.api 번들을 종속 관계에 추가한다. 이렇게 하면 모든 Lotus Domino Java 백엔드 클래스에 액세스 할 수 있다.
그림 5. Dependencies 탭
일반적으로, Imported Packages 메소드를 사용하여 종속 관계를 정의한다. import를 사용한다는 것은 OSGI 프레임웍이 패키지 반입과 요청된 클래스들을 처리한다는 의미이다. 여러분이 특정 번들을 지정할 필요가 없다. 하나의 지정된 번들의 이름이 바뀌거나 제거되면, 종속 관계가 깨어지고 클래스들은 런타임 시 처리되지 못한다. 또는, 여러분이 사용하기로 한 모든 패키지들을 반입한다면 플러그인으로서 노출될 수 있다. 플러그인을 코딩한 후에 이러한 종속 관계를 제거하고 같은 스크린상에 필요한 패키지들만 반입할 수 있다. 이제 종속 관계가 지정되었으니 코딩을 시작할 수 있다.
CSI View 확장하기
새로운 액션을 뷰 툴바에 추가함으로써 CSI View를 확장할 수 있다. Lotus Notes V8 Beta에서, 이 액션은 Run Mail Rule이라는 텍스트와 함께 버튼을 보여주지만, 본 제품에서는 정확한 아이콘이 나타난다. 메일 아웃라인에서 Mail Rules 아이콘의 스크린샷을 가져와서 그 심볼을 사용할 수 있다. Alt + PrtSc 키스트로크도 이 같은 일을 수행한다. 아이콘을 아이콘 폴더에 저장하고 이름을 mailrules.gif로 짓는다. 마지막으로, 액션 모습은 그림 6처럼 보인다.
그림 6. Mail Rules 아이콘
이 아이콘이 나타나도록 하려면 Eclipse 액션 세트에 대한 확장을 정의한다. 마법사를 사용하고 액션 세트를 추가하거나, Listing 1의 코드를 plugin.xml에 복사할 수 있다. plugin.xml은 이 부분에서는 생성되지 않기 때문에 마법사를 사용하여 이것을 생성해야 한다. (또는 다운로드 섹션의 ZIP 파일에서 plugin.xml을 사용한다.) 첫 번째 확장은 새롭게 생성된 액션 세트로서, 메뉴, 툴바 경로, 툴 팁, 아이콘, 선택되었을 때 호출하는 액션 등을 정의한다. 다음 확장은 새로운 액션 세트를 CSIViews 툴바로 연결한다. CSI View는 퍼블릭 API가 될 필요는 없지만, 이들은 Eclipse 확장으로서 노출된다. 이것은 actionSetPartAssociations 확장이다. 액션 세트 아이디(com.ibm.notes.mail.utils.actionSets)와 여러분이 보여주고자 하는 파트 아이디(com.ibm.rcp.csiviews.CSIViewPart)를 지정함으로써 이들을 하나로 묶을 수 있다. CSIViewPart와 연결되고 뷰 파트에 기여를 디스플레이 하는 액션 세트를 Eclipse 프레임웍에 알려주는 것이다.
Listing 1. CSI 확장
<extension
point="org.eclipse.ui.actionSets">
<actionSet
id="com.ibm.notes.mail.utils.actionSet"
label="Mail Tools">
<menu
id="RunMailRules"
label="Run Mail Rules">
</menu>
<action
class="com.ibm.notes.mail.utils.actions.RunMailRules"
icon="icons/mailrules.gif"
id="com.ibm.notes.mail.utils.actions.RunMailRules"
label="&Run Mail Rules"
toolbarPath="actions/additions"
tooltip="Run Mail Rules"/>
</actionSet>
</extension>
<extension point="org.eclipse.ui.actionSetPartAssociations">
<actionSetPartAssociation
targetID="com.ibm.notes.mail.utils.actionSet">
<part id="com.ibm.rcp.csiviews.CSIViewPart" />
</actionSetPartAssociation>
</extension>
|
자바 백엔드 클래스에 작성하기
여러분이 생성했던 새로운 액션 클래스로 로직에 대한 엔트리 포인트가 생겼으니, 이것이 작업을 수행하는 코드를 개발할 수 있다. RunMailRules 클래스에는 run() 메소드가 포함되어 있다. 이곳은 버튼이 클릭될 때 코드가 호출되는 곳이다. 데이터베이스, 문서, 뷰 같은 백엔드 Lotus Notes 객체들에 액세스 하고, UI 쓰레드에 호출하기 때문에 이 메소드에 새로운 쓰레드를 만들어 낸다. Lotus Domino 객체들에 액세스하는 것과 마찬가지로, NotesThread.sinitThread()에 대한 호출로 쓰레드를 초기화 해야 한다. 마지막 블록에서 NotesThread.stermThread()를 호출해야 한다.
메일 데이터베이스와 이 데이터베이스의 모든 폴더와 뷰들의 리스트를 얻는 것으로 코드가 시작된다. 이 리스트를 사용하여 메일 규칙이 실행될 뷰에 드롭다운 콤보 박스를 설치한다. 이러한 세션을 만드는 것이 가장 중요한 부분이다. Listing 2의 코드는 세션, 데이터베이스 핸들, 뷰와 폴더의 리스트를 얻는 방법을 보여준다.
Listing 2. Lotus Notes 세션 획득하기
Session session = null;
try{
NotesThread.sinitThread();
session = NotesFactory.createSessionWithFullAccess();
DbDirectory dbdir = session.getDbDirectory(null);
Database mail = dbdir.openMailDatabase();
Vector views = mail.getViews();
Enumeration vEnum = views.elements();
…
View rules = mail.getView("(Rules)");
…
}finally{
NotesThread.stermThread();
|
템플릿 디자인과 저장된 데이터를 보면서 Mail Rule 문서들을 리버스-엔지니어링(reverse-engineer) 해야 하므로, 문서를 사용하고 자바 객체와 같은 다양한 규칙 엘리먼트들을 만드는 클래스가 필요하다고 생각했다. 이 클래스는 필드 구현의 상세를 제거하여 플러그인의 다른 부분들에서 보다 잘 읽히도록 한다. MailRule 객체에는 Mail Rule 문서에 포함된 액션, 조건, 예외에 대한 리스트가 포함되어 있다. 이 모든 것들(액션, 조건, 예외)이 Mail Rule 문서에서 온 것이므로, 객체들은 Document 객체로 초기화 된다.
코드는 쉽게 확장될 수 있는 방식으로 구축된다. 이 코드는 확장성을 염두해 두고 여러 번 리팩토링 되었다. 새로운 액션, 예외, Boolean 로직을 추가하는 것은 쉽다. 그림 7은 전체 프로젝트의 스크린샷이다.
그림 7. Mail Utility 프로젝트
main utils 패키지에는 플러그인 Activator, 메인 Eclipse Job (규칙이 처리될 때 표준 Eclipse 프로그레스 다이얼로그 박스에 나타남), Mail Rule 연산 (대부분의 규칙 로직을 포함하고 있음), 특정 조건 하에서 규칙을 처리하는 것을 중지하는 예외 클래스가 포함된다.
models 패키지 밑에 있는 모델과 dialogs 패키지 밑에 있는 다이얼로그 관련 클래스들과 관련된 모든 것을 유지하기로 했다. 많은 Eclipse 샘플들은 콘텐트를 보여주고 다이얼로그 클래스에서 공급자 클래스들을 하위 클래스로서 레이블링 하지만, 여기에서는 고유 파일들로 추출되도록 할 것이다.
플러그인을 Lotus Notes V8 클라이언트에 전개하기
다음 단계는 새롭게 생성된 플러그인에 기능과 업데이트 사이트를 추가하여 이것을 클라이언트에 전개하는 단계이다. Eclipse는 플러그인들(또는 번들)을 Eclipse 기능들로 패키징 한다. 사용하기 쉬운 Eclipse 마법사 덕택에 이 작업을 쉽게 할 수 있다. 우선, 새로운 플러그인을 참조하는 기능을 만든다. 전에 했던 것처럼 새로운 프로젝트를 만든다. 단, 이번에는 그림 8처럼 Feature Project를 선택한다.
그림 8. New Feature 마법사
간단히 하기 위해, 새로운 기능의 이름을 플러그인 이름과 똑같이 하겠지만, 끝에는 feature 라는 단어를 붙인다. (com.ibm.notes.mail.utils.feature) 다음 윈도우에서는 그 리스트에서 플러그인을 선택하면 모든 것이 설정된 것이다. 여러 플러그인들을 만들었다면 이 기능에 포함될 플러그인들을 선택한다. 나중에도 이러한 방식으로 더 많은 것을 추가할 수 있다.
이제는 클라이언트가 새로운 기능을 설치할 수 있는 Eclipse 업데이트 사이트가 필요하다. 같은 New Project 마법사 다이얼로그 박스에서(그림 8), Update Site Project를 선택한다. 사이트가 생성된 후에 기능을 사이트에 추가한다. site.xml은 기본 사이트이다. (Listing 3)
Listing 3. site.xml 업데이트
<?xml version="1.0" encoding="UTF-8"?>
<site>
<feature url="features/com.ibm.notes.mail.utils.feature_1.0.0.jar"
id="com.ibm.notes.mail.utils.feature" version="1.0.0"/>
</site>
|
Build All 버튼을 클릭하기 전에, 모든 프로젝트들을 비우고 바이너리들을 재구현 하는 것이 좋다. File 메뉴에서 Project - Clean을 선택한다. Build All 버튼을 클릭한 후에, 사이트는 전개될 준비가 된다. 이 사이트에 대한 빌드 연산을 통해 컴파일 된 기능과 플러그인이 있게 될 features 및 plug-ins 디렉토리가 생성된다. 여러분에게는 plug-in, feature, Eclipse update site가 생겼다. 이제 해야 할 일은 Lotus Notes V8 사용자 인터페이스에 기능들을 설치하는 것이다.
새로운 기능들 실행하기
이러한 preference를 실행 불가로 만들지 않는 한 <notes directory>/framework/rcp 디렉토리에서 plugin_customization.ini 편집함으로써 이 옵션을 실행시킬 수 있다.
다음 라인을 <notes directory>/framework/rcp/plugin_customization.ini 파일에 추가한다.
com.ibm.notes.branding/enable.update.ui=true
Notes 클라이언트를 재시작 하면 새로운 메뉴 옵션(File - Application - Install)이 나타난다. 이것은 기능들을 설치하는 표준 Eclipse 인터페이스이다. 마법사의 첫 번째 윈도우에서, 두 번째 옵션("Search for new features to install")을 선택한다. Next를 클릭하면 여러분이 만들었던 Eclipse 업데이트 사이트의 위치를 지정할 수 있는 윈도우를 볼 수 있다. Add Folder Location 버튼을 클릭하면 앞서 만들었던 site.xml 파일을 포함하고 있는 디렉토리를 검색할 수 있다. 윈도우는 그림 9처럼 보인다.
그림 9. Feature 설치하기
Finish를 클릭하고 나머지 프롬프트를 수락한다. 플러그인이 서명되지 않았음에도 플러그인을 설치할 것인지를 물을 것이다. Lotus Notes에는 외래 플러그인을 설치하기 전에 검사하는 서명 확인 기능이 있다. 여러분은 플러그인에 서명하지 않았기 때문에 여기에는 서명이 없다. 새로운 기능이 설치되면 Lotus Notes를 재시작 해야 한다는 것을 알려준다. 재시작 한 후에 모든 메일 뷰에 새로운 버튼이 나타난다.
Lotus Notes V8 사용자를 위해 NSF 기반 업데이트 사이트를 제공한다. 다운로드 섹션의 NSF 파일을 Lotus Notes 데이터 디렉토리에 복사한다. 데이터베이스가 열리면 표준 Eclipse 프로그레스 다이얼로그 박스에 설치될 Mail Tools 기능들을 볼 수 있다. 설치가 완료된 후에 Lotus Notes를 재시작 하고 액션을 사용할 수 있다.
결론
Eclipse를 사용하여 Lotus Notes 클라이언트를 확장하는 방법을 설명했다. 기본적인 Eclipse SWT 사용자 인터페이스 위젯을 사용하여 완전한 크로스 플랫폼 솔루션을 만들었다. 이러한 방식을 사용하면 여러분이 만들어서 기여한 것은 Lotus Notes NSF와 NTF와는 개별적인 것이 된다. 다시 말해서, 여러분의 코드는 Lotus Notes V8로 업그레이드 될 대 위험에 빠지지 않을 것이다. 마지막으로, 새로운 플러그인 모델에서 기존 Domino Java API 기술들을 활용하는 방법을 설명했다. 자바 백엔드 API를 사용함으로써 Lotus Notes/Domino 아키텍처에 쉽게 연결할 수 있다. Eclipse 프레임웍의 유연성과 입증된 Lotus Notes 애플리케이션을 통해 이 글에서는 커스텀 코드와 플러그인들로 쉽게 확장될 수 있는 방법을 설명했다.
다운로드 하십시오 | 이름 | 크기 | 다운로드 방식 |
|---|
| mail_utils.nsf | 2816KB | HTTP | | NotesMailUtils.zip | 54KB | HTTP |
참고자료 교육
제품 및 기술 얻기
토론
필자소개  | |  | Bob Balfe는 IBM Lotus Expeditor 팀의 Portal Managed Client의 기술 리더이다. Bob은 Lotus와 Domino 기술 분야에서 15년 이상 소프트웨어 개발 경력을 쌓았다. 현재 Lotus Expeditor의 차기 릴리스 작업 중이다. |
기사에 대한 평가
|