lotusphere 2011 jmp103 - jumpstart your "jedi plug-in development skills" with the masters

Download Lotusphere 2011  Jmp103 - Jumpstart Your "Jedi Plug-in Development Skills" with the Masters

If you can't read please download the document

Upload: ryan-baxter

Post on 16-Apr-2017

3.121 views

Category:

Technology


1 download

TRANSCRIPT


JMP103 Jumpstart Your "Jedi Plug-in Development Skills" with the Masters

Ryan Baxter | Staff Software Engineer | IBMMikkel Flindt Heisterberg | Developer | IntraVision

About us

Mikkel Flindt Heisterberg - @lekkim

With IntraVision, Premier Business Partner from Denmark

Been working with Notes/Domino since version 3.x

Design Partner Program for Notes NEXT and Lotus Connections, writer for THE VIEW, speaker at Lotusphere

Recently had a baby daughter (explains why he looks so tired)

Ryan Baxter - @ryanjbaxterStaff Software Engineer, IBM

Developer for Lotus Notes

Lead developer for Notes Client Java UI APIs

OpenSocial Foundation Member

Novice blogger

Getting married in June (not so tired yet)

Let's pay attribution where it's due...

IBM Lotus Notes

IBM Lotus Sametime

IBM Lotus Expeditor

IBM Lotus Symphony

Microsoft Windows

Java

Linux

All Star Wars stuff is the property

of LucasArts!

All other trademarks are a property of their respective owner

Imageshttp://mistavybeworld.com/wp-content/uploads/2009/08/star-wars-episode3-darth-vader.jpg

http://2.bp.blogspot.com/_HigwL7YghlM/TB5in0r2sTI/AAAAAAAAA6g/axDh5qtbYAM/s1600/yoda.jpg

What we're going to build

Sidebar panelA list box

Three buttons at the bottomOne button reads from a web service

One button reads contacts from names.nsf

One button creates a new emailReads recipient from list

Create document

Set subject

Add data from web service call to body

Create a feature for the plugin

Create an update site with the feature

Create a widget for the feature from the update site

Agenda

About Eclipse and Lotus Expeditor Toolkit

Installing Lotus Expeditor Toolkit

Plugin Development Basics

Building UI's (SWT / JFace)

API's

Debugging Your Plugins

Building and Deploying

Resources, Examples, and Questions

Do or do not... there is no try. - Yoda

About Eclipse

100% open source project

Development Environment

Extensible platform

Eclipse Sitehttp://eclipse.org

Eclipse Wikihttp://wiki.eclipse.org

Planet Eclipsehttp://www.planeteclipse.org

Open Sources Project

One of the best IDEsIntegration for almost any kind of language you can images

ExtensibleSCM plugins, SQL DB plugins, UML plugins, Web Dev plugins

Expeditor and therefore Notes, Sametime, and Syphomy are build ontop of it

Other companies also build applications ontop of Eclipse, other IDEs like Aptana, and MyEclipse

Resources are endless with Eclipse

Eclipse Architecture

Workbench

JFace

SWT

Core ExtensionPoint Framework

Service FrameworkRich Client Platform

Plug-inPlug-inExtension Pt.

Plug-in

ExtensionPointExtensionPointExtensionPoint

A software component in EclipseExtension Point declares contract
to extend plug-in functionalityExtension code extends this functionalityRCP allows you to build GUI apps on multiple OSSWT provides
uniform UI API across multiple OS that calls
OS UI API for native look and feelJFace provides components to make it easier to write a GUI e.g. wizards, preference pages, actions, dialogs Workbench is desktop UI and customizableService Framework supports registration and lifecycle management of
plug-ins

IBM Lotus Clients Built on Eclipse

Notes

Sametime

Expeditor

SymphonyIndustry knowledge
and experienceecosystem of partners open and
extensible

Apps and Plug-ins (ISV + Customer)

collaborative servicesIntegratedapplications

Portal

BrowserDesktopMobileMultiplatformsupportScalabilitySecurity

Eclipse Workbench

Give a quick overview of the workbench, this will be useful for later on so they can see how it related to the Notes workbench and when we talk about things like views they know what they are

All of the pieces of the workbench correlate to Notes as well

Notes Workbench

sPoint out that some of the most recognizable parts of the Notes workbench are just Eclipse concepts. We achieve this via plugins

Why Plugin Development?

Plugin development is often about integrationYou often build extensions to existing applications to add functionality

Eclipse and therefore Expeditor, Notes, Symphony, and Sametime, are built to allow for extensibility

Plugin development has several advantagesJavaMature

Well Adopted

Multi-platform

Libraries

Eclipse CommunityWeb Services

Web Applications

Database Integrations

etc....

Why should they care about plugins?Its all about extensibility and integration

Plugin development is a great way to integrate into Lotus products. Once you have the knowledge you know how to integrate into 4 Lotus products

Java Java JavaJava is a 1st class language, its mature and has a ton of libraries

You can do a ton of things with plugins like work with web services, integrate with web applications, integrate with Database applications

Lotus Expeditor Toolkit A Plugin Developer's Lightsaber

An integrated set of tools to develop, test, and deploy applications built on top of ExpeditorSupports Expeditor, Sametime, Notes and Symphony

FREE! No charge to use the Expeditor toolkit

Supported on Windows and Linux operating systems

Benefits Of Using The ToolkitEasily configure your development environment to develop for the platforms aboveTakes ~ 1 minute to configure your environmentSet your target environment

Point to the target locations on your machine

Provides a new launcher to launch products built on top of ExpeditorCreate a new launch configuration to launch the application from Eclipse

Provides numerous samples to get your started developing for Expeditor based products

The Expeditor toolkit provides tools for developers to get started building plugins for Lotus products

Makes your life easy, easy configuration and easy launching to test your plugins

Free not charge to download it

Lotus Expeditor Toolkit Architecture

Integrated Development Environment (IDE)

RationalApplication
Developer7.5Eclipse 3.4WTP* 3.0

Rational
Software
Architect
7.5LotusExpeditorToolkit 6.2Microsoft WindowsRedHat LinuxSuSE LinuxIntegrated Development Environment (IDE)

optionaloptionaloptionalEclipse Feature

You can use any number of eclipse configurations with the expeditor toolkit

Agenda

About Eclipse and Lotus Expeditor Toolkit

Installing Lotus Expeditor Toolkit

Plugin Development Basics

Building UI's (SWT / JFace)

API's

Debugging Your Plugins

Building and Deploying

Resources, Examples, and Questions

Do or do not... there is no try. - Yoda

Installing the Expeditor Toolkit

Download the Expeditor Toolkithttp://bit.ly/fKMF5o

Unzip

In EclipseHelp Software Updates...

Download from IBM

Unzip

In Eclipse go to Help Software Updates

This is where you install features into eclipse, we will talk more about features later

Adding The Update Site

Click New Local Site...

Browse to unziped update site

Select OK

Select Local Site

Go to where you unziped the download

Click OK

Selecting The Expeditor Toolkit Feature

Select The Expeditor Toolkit Feature

Click Install...

Select the top level expeditor toolkit feature

Click Install

Accepting The License Agreement

Agree to the license agreement

Install all features

Restart

Accept the license agreement and install the features

After the install finished restart eclipse

Demo: Configuring the Expeditor Toolkit

Start IDE

Select Test EnvironmentSymphony

Sametime

Notes

Expeditor

Specify Target LocationPoint to target runtime

/framework/rcp/eclipse

Click OK

Run Run Configuration

Double Click Client Services

Give The Configuration A Name

Select Run

Walk them through setting up the expeditor toolkit

Create a new workspace in eclipse

Configure the toolkit

Create a new run configuration

Launch Notes

Agenda

About Eclipse and Lotus Expeditor Toolkit

Installing Lotus Expeditor Toolkit

Plugin Development Basics

Building UI's (SWT / JFace)

API's

Debugging Your Plugins

Building and Deploying

Resources, Examples, and Questions

Do or do not... there is no try. - Yoda

What Are Plugins?

Plugins are the building blocks of Eclipse based applicationsAt their core a plugin is some code plus some declarations (extension points)

By themselves plugins may not do anything, but when you start combining plugins you can build very powerful applications

Examples: Eclipse, Sametime, Symphony, Notes

Application

Plugin

From Pierre:automatic manifest management, migration of secondary dependencies, other migration capabilities (mostly on other CS project types), common UI category (requested via UI team).

Anatomy Of A Plugin

Whats inside a plugin?Java code

Manifest.mf Basic properties of a plugin

Specifies dependencies this plugin has

Plugin.xmlExtension points the plugin uses

Extension points the plugin defines (covered in the advanced session)

Build.propertiesManages the build configuration of the plugin (covered in the advanced session)

Resources (Optional)Jars the plugin may need

Files used for translation

Images

etc....

Java goes in the src folder

Manifest.mf basic properties, and dependencies

Plugin.xml extention points

Build.properties for when you build your plugin

Resources other resources your plugin uses

Anatomy Of A Plugin compiled code

Expeditor platform plugins installed in:\framework\rcp\eclipse

Lotus Notes platform plugins installed in:\framework\shared\eclipse\plugins

Third party plugins installed in Notes Data directory\workspace\applications\eclipse\plugins

Compiled as a .jar file or as directory

Plugins live in the Notes install directory

Most are compiled as jars

Demo: Creating A Plugin Project

File New Project Plugin Development

Select Plug-in Project

Walk through creating a new plugin project

Explain the different pieces just covered in the slides

Extension Points

Extension points make plugins pluggablePlugins define extension points for other plugins to useExamples: sidebar, toolbar buttons, right click menus...

Extension points allow the platform to be more performant

Eclipse has a nice editor for adding and defining extension points

How do I know what extension points are available?Eclipse.org and the Expeditor wiki are your friends

Plugin

Using Extension Point

Extension Point Definition

Extension points provide you with integration points

Plugins define extension points for other plugins to useEclipse, and Expeditor both define extension points

The reason for extension points is to allow the platform to me performant, eclipse only loads the code when it has to

Eclipse provides an editor for you to leverage and define extension points, also provides wizards

Extension points are documented

Key Extension Points

org.eclipse.ui.viewsRegisters a view part with the platform

View parts can be used inside perspectives or in the sidebar

com.ibm.rcp.ui.shelfViewAn Expeditor extension point

Used to add a view part to the sidebar

org.eclipse.ui.actionSetsUsed to add top level toolbars and menus

org.eclipse.ui.menusUsed to add context menus

org.eclipse.ui.preferencePagesUsed to add preference pages to the preferences

Agenda

About Eclipse and Lotus Expeditor Toolkit

Installing Lotus Expeditor Toolkit

Plugin Development Basics

Building UI's (SWT / JFace)

API's

Debugging Your Plugins

Building and Deploying

Resources, Examples, and Questions

Do or do not... there is no try. - Yoda

Platform native look and feel

Drag and Drop

Keyboard integration

2D and Vector Graphics

Better responsiveness

Hardware Device Integration

Protection from OS Level Changes

Building User Interfaces With SWT

JFace

UI toolkit built on top of SWT without hiding it

Provides coarser grained components than SWTDialogs

Image / Font Registries

Wizards

Viewers

JFace (cont.)

Viewers are very usable not that the others are not but you have to grok how to use them

Consists of 3 core componentsThe viewer (e.g. TreeViewer, TableViewer)

The content provider (provides the objects we show in the viewer)

The label provider (provides the labels for the viewer usually obtained from the objects)

http://www.eclipse.org/articles/Article-TreeViewer/TreeViewerArticle.htm

SWT WindowBuilder Pro FREE!! from Google

For More Info Visit http://bit.ly/9ZxwNA

Demo: Create A Sidebar And Try It Out

Add org.eclipse.ui.views extension point

Create view part class

Add com.ibm.rcp.ui.shelfView extension point

Use WindowBuilder to create UI

Try It Out!

Demo adding a view and a sidebar

Agenda

About Eclipse and Lotus Expeditor Toolkit

Installing Lotus Expeditor Toolkit

Plugin Development Basics

Building UI's (SWT / JFace)

API's

Debugging Your Plugins

Building and Deploying

Resources, Examples, and Questions

Do or do not... there is no try. - Yoda

All The APIs You Need

Do not reinvent the wheel!

Java and Eclipse contains a rich set of API's that you can use when developing plugins for Lotus clients

Knowing the API's available to you is crucial

We'll coverJobs (threading)

Logging

Notes backend

Notes frontend

Threading lightly!

A thread is an abstraction in computers to allow programs to perform multiple operations simultaneouslyAvoid tying up the program with background operations

Two ways to call other codeSynchronously == blockingBlocks current code until call is done and then
returns to continue processing

Like you're used to from LotusScript

Asynchronously == non-blockingThe calling code continues to run you now
have two pieces of code running

To tell the caller we're done we use callbacks
or listeners

Harder to grasp

Used in AJAX you request data in the
background and once the data has been
fetched you are told

Jobs, jobs, jobs lets vote for jobs!

Eclipse Job Frameworkjava.lang.Thread is way too low-level and error prone

Allows for easy background processing

Very simple to use

Allows scheduling of jobs (run this code in 2 minutes)

Allows weaving of jobs

Allows for listening to job status etc.

Standard UI for manipulating jobs

Two types of JobJob for background processing

UIJob for user interface updates

Both are abstract classes and normally used as anonymous inner classes

HIGHLY recommended article: http://www.eclipse.org/articles/Article-Concurrency/jobs-api.html

There can be only one!

Any Eclipse application only has ONE thread that may update the user interface

It's surprise, surprise called the UI thread

This means thatTying up the UI thread will render the entire client unresponsive

Attempts to access the UI (i.e. set the text of a label) outside the UI thread will fail with an exception

You need a way to do stuff in the UI thread

To do stuff in the UI thread you use an UIJob from the Job API

Using Job in code

public void fireOnTheEmpire(int initDelay, final String jediName) { // create recurring job to poll web service new Job("Poll the Force!") { protected IStatus run(IProgressMonitor monitor) { // invoke endpoint using input String srvc = http://moon5.tatooine.com/JediFinder; WSFacade facade = new WSFacade(srvc); String result = facade.fire(jediName); // do something with the result ...

// reschedule this job (in 5 mintues) this.schedule(5 * 60 * 1000); // return return Status.OK_STATUS; } }.schedule(initialDelay * 60 * 1000);}

Using UIJob in code

final List lstJedis = new List(parent, SWT.NONE);...

public void psssst(final String[] jedis) { // since we're called in a background process // use that UIJob we learned about to update the UI new UIJob("Load Jedis") { public IStatus runInUIThread(IProgressMonitor monitor) { // update UI for (String jedi : jedis) { lstJedis.add(jedi); }

// return status return Status.OK_STATUS; } }.schedule();}

Don't Go To The Dark Side!

public void createPartControl(Composite parent) { final Label txt = new Label(parent, SWT.NONE); new UIJob("Indicate job starting") { public IStatus runInUIThread(IProgressMonitor monitor) { // update label txt.setText("Turning star cruiser (" + new Date() + ")..."); // do long running task try { Thread.sleep(5000); } catch (Exception e) {} // update label txt.setText("Done turning star cruiser (" + new Date() + ")..."); // schedule this.schedule(5000); // return return Status.OK_STATUS; } }.schedule(5000);}

Weaving jobs

Most operations usually include a UI and a background component so you need to weave jobs

A typical operation from the user consists of 3 steps:

Usually you start of with a UI call (button click i.e. button selection)

You perform some background operation (e.g. load data from a web service or similar)

You need to call back into the UI and update or inform

We call this to weave job

We do it by nesting Job instances

A nice example of how a Jedi does it!

public void widgetSelected(SelectionEvent event) { // update label to tell user we're starting off list.add("Starting to run code (" + new Date() + ")...", 0); // create job for background operation and schedule it new Job("Long running job") { protected IStatus run(IProgressMonitor monitor) { // do operation that possibly takes a while downloadEntireGalacticLibrary(); // call back into UI to tell user we're done new UIJob("Update UI") { public IStatus runInUIThread(IProgressMonitor monitor) { list.add("Done running code (" + new Date() + ")...", 0); return Status.OK_STATUS; } }.schedule(); // return return Status.OK_STATUS; } }.schedule();}

Demo: Using Jobs in your code

Adding a button for background operation

Add selection listener

Load data from the web

Once call is done update the UI

Logging

System.out.println is NEVER the solution!Seems easy at first but 99% of the time it's easier to just use logging from the beginning

Lotus Expeditor / Notes comes with many supported logging mechanismsThe one to use is java.util.logging as it's built-in and easy to use and configure

Logging is done through the Logger class and at a specified LevelLevel (SEVERE, WARNING, INFO, FINE, FINER, FINEST, CONFIG)

Expensive logging may be guarded using isLoggable(Level)

Loggers are hierarchically named and level is set hierarchically as wellcomls11jmp103

ad201

## ## ######## ## ## ####### ## ## ####### ######## ## ######## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ######### ###### ## ## ## ## ## ## ## ## ## ######## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ######## ######## ######## ####### ### ### ####### ## ## ######## ######## ####

Logging example

package com.ls11.demo1;

public class MainViewPart extends ViewPart { private static final Logger logger = Logger.getLogger(MainViewPart.class .getPackage().getName());

public MainViewPart() { try { logger.info("Main view part instantiated"); String senateCount = this.countSenators(); if (logger.isLoggable(Level.FINEST)) { logger.finest("Found + senateCount + senators (" + this + )); } } catch (Throwable t) { logger.severe(There was a disturbance in the Force!, t); } }}

Logging output goes to client logHelp > Support > View Log/Trace

Configured using OSGi console (come to AD201 for more info)

Edit /workspace/.config/rcpinstall.properties and add .level= at the endcom.lekkimworld.twitnotes2.level=FINEST

Logger name will be com.ls11.demo1

Demo: Add logging to the code

Add a logger to our view part

Log the current sunrise and sunset

Enable logging

Notes backend API

You have access to the Notes Java API you know and love!

Basic usage is almost the same as you know and love

To get access to the classes youDO NOT import notes.jar as you normally do

DO depend on the com.ibm.notes.java.api plugin

To access Notes data youDO NOT use NotesThread.sinitThread

DO use the Job API and the supplied NotesSessionJob

new NotesSessionJob("Access Notes data") { public IStatus runInNotesThread(Session session, IProgressMonitor monitor) throws NotesException { // print username System.out.println(session.getDatabase(null, names.nsf).getTitle()); // return return Status.OK_STATUS; } }.schedule();

Notes frontend API

Modeled pretty much like the LotusScript UI APINotesUIWorkspace

NotesUIView

NotesUIDocument

Should run in the UI thread

Ryan (and team) wrote it and bridges a MAJOR gap in the Notes product as it gives us access to the Notes UI from Java

Been with us for a whileAdded in Notes 8.5 as beta

Supported from Notes 8.5.1

More functionality added in Notes 8.5.2

To use it add a dependency on com.ibm.notes.java.ui

Example project available from OpenNTF.org (Java UI API Exerciser)

Notes frontend API (cont.)

NotesUIWorkspaceEntry point

Access to run an agent with context (access to LotusScript!)

NotesUIViewMost functionality added in Notes 8.5.2

Listen for selection events and view entries

Works for Java and traditional views

NotesUIDocumentYou can work in the document on the glass

Access to backend document

Edit / Field / Modify listeners

Access to copy/paste, refresh, reload

Data classes for easy access (i.e. NotesViewData)

Demo: Use the Notes API's

Use NotesSessionJob to access the user's name.nsf file

Place the email addresses of the user's contacts in the list box

Use the composeDocument API to compose an email to a selected contact with the current sunrise and sunset

Notes frontend API (cont.)

The API is a real treasure chest we invite
you to explore it!

There is also a lot of property testers for
controlling visibility of commands and actionsRead the RedWiki for more info on property
testers

For more on the Notes Java UI API you should mark your schedule forAD201 (How the Jedis do plugin development) on Monday @ 3:45pm in SW 7-10

BP203 (Leveraging the New Java APIs in IBM Lotus Notes 8.5.1 and 8.5.2) on Thursday @ 11.15am in Dolphin S. Hemisphere III

Taking a Sametime Symphony into Account

Plug-in development is much more than Lotus Notes

Remember that Lotus Sametime and Lotus Symphony are built on the same Eclipse technology and your skills can be reused thereDifferent API's but the core stuff is the same - a sidebar view is still a sidebar view

Lotus Expeditor contains a plethora of API's look into those before you reinvent the wheel or say it cannot be doneAsk us if you have specific questions we love showing off! :-)

Other Lotus APIs

AccountsSecure storage for credentials

Automatic authentication for HTTP requests

Lotus SametimeAwareness / realtime collaboration

SearchSearch other applications from the search center

Domino DesignerExtend Domino Designer with custom actions

Composite ApplicationsCreate components for CompApps using Eclipse technology and listen for properties and expose actions

XPages Extensibility LibraryAdd custom widgets for XPages

LiveText / Toolbox (LiveText / Widgets API's is targeted to be publicly supported from 8.5.3)Inject recognizers based on business rules

Eclipse API's

Like with Lotus Notes there a multitude of API's available to you for Selection

Jobs

Actions / menus

Drag'n'drop

Custom drawing

Charting

Explore Eclipse.org and remember to search for Eclipse and not Lotus Notes as it will yield far more results

Agenda

About Eclipse and Lotus Expeditor Toolkit

Installing Lotus Expeditor Toolkit

Plugin Development Basics

Building UI's (SWT / JFace)

API's

Debugging Your Plugins

Building and Deploying

Resources, Examples, and Questions

Do or do not... there is no try. - Yoda

Launching Notes from Eclipse

Set breakpoints

Inspecting variables

The console, logging levels

Demo: Debugging Basics

Show this page but just jump right to a demo

This is probably a good 5 minutes of demo

Probably just show the attachment viewerPreference page or selection

Show the Debug configuration screen

Set a breakpoint line 73, Viewer.java(selectionChanged)

Launch Notes and open an email with an attachment

Explain the variables panel, show the selection object

Then show what the osgi console is all aboutSetting logging levels

Agenda

About Eclipse and Lotus Expeditor Toolkit

Installing Lotus Expeditor Toolkit

Plugin Development Basics

Building UI's (SWT / JFace)

API's

Debugging Your Plugins

Building and Deploying

Resources, Examples, and Questions

Do or do not... there is no try. - Yoda

Sharing Your Plugins

Now that you have coded your plugin you want to share it

Features and Update Sites

Features contain one or more pluginsThe plugins in a feature should be related

Features can be created in Eclipse by creating a feature projectContains a feature.xml and build.properties file

Dependencies can be specified in the feature.xml

Update sites contain one or more featuresUpdate sites typically contain all the features needed for your extension

Can be created and built in Eclipse using an update site project

Feature

Plug-in

Plug-in

. . .Feature

Plug-in

Plug-in

. . .Update Site. . .

Deployment

When deploying features to Lotus products we suggest you use the Update Site template (updatesite.ntf) and a Widget CatalogBetter integration this way, especially via policies

Simpler for the end user

The Update Site template is designed to host your Eclipse features in an update site running on the Domino serverAccess it via HTTP or NRPC

Did you know widgets can be used to deploy Eclipse features?It's true!

All you have to do is create a widget which points to an Eclipse update site

You can use these types of widgets the same way you use other widgets

Demonstration: Features, Update Sites, and Deployment

Create a feature project

Create an update site

Create an update site NSF

Add our feature to the update site NSF

Create a widget for our feature

Add it to the catalog

Watch a video at: http://bit.ly/h4pjMb

Policies

The Widgets feature can be managed via Domino policies

The Domino administrator has control over several aspects of the Widgets feature includingEnablement/disablement of the My Widgets sidebar panel

Installation of widgets and push the installation of widgets to clients

Restrict the installation of widgets based on Provider

Eclipse extension point used

Restrict the installation of widgets to specific typesGoogle Gadget

Plugin

Notes View

etc.

Agenda

About Eclipse and Lotus Expeditor Toolkit

Installing Lotus Expeditor Toolkit

Plugin Development Basics

Building UI's (SWT / JFace)

API's

Debugging Your Plugins

Building and Deploying

Resources, Examples, and Questions

Do or do not... there is no try. - Yoda

Examples

Tunglehttp://bit.ly/f5h2hK

Gist.comhttp://bit.ly/fL37Zr

TwitNoteshttp://bit.ly/e5ZtIi

File Explorerhttp://bit.ly/hlGc5Y

Attachment Viewerhttp://bit.ly/eB8spk

External Resources

Eclipse Community Siteshttp://eclipse.org

http://wiki.eclipse.org

http://planeteclipse.org

Plugin Development articleshttp://www.eclipse.org/resources/?sort=date&category=Plug-ins

Lotus Community SitesNotes Client Java UI Javadochttp://www-10.lotus.com/ldd/ddwiki.nsf/dx/Notes_Client_Java_UI_APIs-v8.5.2

Expeditor JavaDoc http://www-10.lotus.com/ldd/lewiki.nsf/dx/JavaDoc_6.2.2

Planet Lotus http://planetlotus.org/

Great blogs to visit regularlyMikkels - http://lekkimworld.com/

Ryans - http://ryanjbaxter.wordpress.com/

Bob Balfes - http://blog.balfes.net/

Please fill in your evaluations!!

Only positive comments please... :-)

Q&A

Why?!

But?!

How?!

Join the community on lsonline.infohttp://bit.ly/JMP103

Or come talk to us after the mean room staff throws us out! :-) Remember that we're here for you and there's nothing we'll rather do than answer your questions!

May the force be with you.

Legal Disclaimer

IBM Corporation 2011. All Rights Reserved.The information contained in this publication is provided for informational purposes only. While efforts were made to verify the completeness and accuracy of the information contained in this publication, it is provided AS IS without warranty of any kind, express or implied. In addition, this information is based on IBMs current product plans and strategy, which are subject to change by IBM without notice. IBM shall not be responsible for any damages arising out of the use of, or otherwise related to, this publication or any other materials. Nothing contained in this publication is intended to, nor shall have the effect of, creating any warranties or representations from IBM or its suppliers or licensors, or altering the terms and conditions of the applicable license agreement governing the use of IBM software.References in this presentation to IBM products, programs, or services do not imply that they will be available in all countries in which IBM operates. Product release dates and/or capabilities referenced in this presentation may change at any time at IBMs sole discretion based on market opportunities or other factors, and are not intended to be a commitment to future product or feature availability in any way. Nothing contained in these materials is intended to, nor shall have the effect of, stating or implying that any activities undertaken by you will result in any specific sales, revenue growth or other results. IBM, the IBM logo, Lotus, Lotus Notes, Notes, Domino, Quickr, Sametime, WebSphere, UC2, PartnerWorld and Lotusphere are trademarks of International Business Machines Corporation in the United States, other countries, or both. Unyte is a trademark of WebDialogs, Inc., in the United States, other countries, or both.Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both.Linux is a registered trademark of Linus Torvalds in the United States, other countries, or both.
Other company, product, or service names may be trademarks or service marks of others.

Click to add text

2011 IBM Corporation

2011 IBM Corporation

2011 IBM Corporation

2011 IBM Corporation

2011 IBM Corporation