let me introduce you: dots

Post on 14-May-2015

999 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

Entwicklercamp 2013

TRANSCRIPT

Let me introduce you: DOTS

Frank van der Linden

Frank van der Linden & e-office

nl.linkedin.com/in/flinden68

http://www.domino-weblog.nl

fli@e-office.com

@flinden68

Roadmap

• Introduction• What is DOTS• Setup your environment • My first DOTS tasklet• Debug my first DOTS tasklet • Deploy your tasklet• Tips and tricks

Introduction

Introduction of OSGi

• Open Services Gateway initiative– Started in 1999– Still improved– module system and service platform

• OSGi bundles– Can be installed remotely.– No reboot required– Lifecycle

Introduction of OSGi

• OSGi and IBM Notes/Domino– Since 8.5.2– Extension points– Extension Library– DOTS (Domino OSGi Tasklet Service)– OpenSocial Container

8.5.2

8.5.3

9+

Introduction to DOTS

• Domino OSGi Tasklet Service– Easy development– Outside in Eclipse IDE– Tasklets can run: scheduled, manual

• Next generation agents for Domino• OpenNTF project by IBM since April, 2011

(replaced JAVADDIN project)

• Included in IBM Domino 9 Social Edition

Introduction to DOTS

Introduction to DOTS

• DOTS Tasklets outperforms over Java Agents!

Java Agent:

DOTS tasklet:

AMGR launches a

ThreadJVM Initializes

Prepare Java and JNI

interfacesLoad Agent Bytecode Run!

Run!Everything is ready to run

> tell amgr run "test\XPagescrash.nsf" 'LongJobAgent'

09.11.2012 19:38:39 JVM: Java Virtual Machine initialized.

09.11.2012 19:38:39 AMgr: Start executing agent 'LongJobAgent' in 'test\XPagescrash.nsf'

09.11.2012 19:38:39 Agent Manager: Agent printing: 181349

09.11.2012 19:41:02 Agent Manager: Agent printing: 2227

09.11.2012 19:41:02 Agent Manager: Agent printing: Finished in 143 secs... -

09.11.2012 19:41:02 AMgr: Agent 'LongJobAgent' in 'test\XPagescrash.nsf' completed execution

> load dots

> Listening for transport dt_socket at address: 8001

09.11.2012 19:42:40 Domino OSGi Tasklet Container started ( profile DOTS )

> 181349

> 2227

09.11.2012 19:43:22 [DOTS] (annotated) Finished in 41 secs...

Introduction to DOTS

• DOTS versus Agents– AMGR is old and complicated– Range

• Agents are database depended• DOTS run server wide

– DOTS are more flexible• Precise timing

Setup your environment

Setup your environment

• DOTS should be installed into IBM Domino server– For IBM Domino 9 Social Edition Public Beta, you

don’t need to do anything.– For versions 8.5.2 and 8.5.3,

• Download DOTS package from OpenNTF• You will also need some Eclipse plugins from Eclipse

3.6.2+

Setup your environment

• Create some folders inside your Domino folder– [Domino Program Files]\osgi-dots\rcp\eclipse\plugins– [Domino Program Files]\osgi-dots\shared\eclipse\plugins

• Copy files from Eclipse install directory

These plugins will be copied

from Eclipse installation

[Eclipse]\plugins

Setup your environment

• The DOTS package contains the executables– The jar files in the newly created directories– The executables in the Domino program directory

Copy to

[Domino]\osgi-dots\shared\eclipse\plugins

Copy to

[Domino]\osgi-dots

Setup your environment

• The DOTS package contains the executables– The jar files in the newly created directories– The executables in the Domino program directory

Copy to

[Domino]\osgi-dots\shared\eclipse\plugins

Copy to

[Domino]\osgi-dots

Setup your environment

• Download Eclipse– http://www.eclipse.org/downloads– Eclipse >3.6.2(Eclipse IDE for Java EE Developers)

• Download projects from OpenNTF– Domino Debug Plug-in from XPages SDK for Eclipse RCP: http://

tiny.cc/XPagesSDK

Setup the Domino Debug Plugin

• Accept all next steps

• Restart Eclipse

Setup the Domino Debug Plugin

• Check Preferences,if Domino Debug Plugin is installed

Setup the target platform

[Domino Program Files]\osgi-dots\rcp\eclipse

[Domino Program Files]\osgi-dots\rcp\eclipse

Setup the Notes Java Api reference

My first DOTS tasklet

My First DOTS tasklet

• Create a new Plug-in Project– File New Plug-in Project

My First DOTS tasklet

• Prepare the DOTS extensions

My First DOTS tasklet

• Import DOTS extensions– Deselect «Show only extension points from the required

plug-ins»– Find & pick «com.ibm.dots.task» extension from the list– Correct the warning in the Manifest.mf tab, then Save &

Close Manifest view.

My First DOTS tasklet

• Import Domino package

My First DOTS tasklet

• Create the Java class

My First DOTS tasklet

• Add some code

My First DOTS tasklet

• Modify the plugin.xml

tasklet id

name of the class

My First DOTS tasklet

• Now we can run our tasklet• DOTS will run on the Domino server• There are two ways to run from Eclipse IDE

– Run– Run and debug

My First DOTS tasklet

• Create a “run configuration”

My First DOTS tasklet

• PDE Configuration file should be created, the first time

• PDE file is created in the dots workspace

My First DOTS tasklet

• Now, lets run the tasklet

Debug a DOTS tasklet

• Stop DOTS task– Tell dots quit

• Adding debug parameters to notes.ini– DOTS_DEBUGADDRESS=8001– DOTS_DEBUGSUSPEND=y

• Reload DOTS task– Load dots– Dots task will start only when debugger connects

Debug my first DOTS tasklet

• Server needs to know what to debug

Debug my first DOTS tasklet

• Adding breakpoint to debug the code

Debug my first DOTS tasklet

• Some tips– Schedule tasks

– OSGi allows you to refresh bundles without restart, here is how:• Find out the «bundle-id» for the plug-in• Refresh the bundle

Debug my first DOTS tasklet

• More tips...Annotations– Annotations is supported in DOTS.– Powerfull way of specify for each method, what to do

@RunOnStart

public void runOnStart( IProgressMonitor monitor ){

logMessage("Annotated onStart method");

}

@Run( id="manual")

public void runManual( String[] args, IProgressMonitor monitor ){

logMessage("Annotated run method with id=manual");

}

@RunOnStart

@RunEvery( every=60, unit=RunUnit.second )

@HungPossibleAfter( timeInMinutes=1 )

public void runEvery60seconds( IProgressMonitor monitor ){

logMessage( "Called from annotated method every 60 seconds");

}

Deploy your tasklet

Deploy your tasklet

• DOTS plugins can be deployed as OSGi bundle– As jar file in OSGi plugins folder– As update site

• Disable debug parameters– Delete PDE runtime configuration (pde.launch.ini)– Disable suspend feature in debugging (DOTS_DEBUGSUSPEND)

Deploy your tasklet

• Create a jar file from the plugin• Right Click Export Deployable plug-ins and fragments...

Deploy your tasklet

• Select the plugin and destination• Place exported JAR file into plugins folder, then

restart DOTS task[Domino Program Files]\osgi-dots\shared\eclipse\plugins

Deploy your Tasklet

• Another deploy method, DOTS profiles– It can stored inside a Notes database– Can run in is own profile container– With his own security settings– Can started seperatly “tell profilename run abc”

Deploy your Tasklet

• Creating Profile Repository as NSF– Create an empty nsf, set ACL– Configure DOTS to use profiles database

• tell dots quit• set config OSGI_CONFIGURATION_DB=dotsprofiles.nsf• load dots• tell dots profileCreate dots

– DOTS profile is created

– You can import an updatesite in the profile

Deploy your Tasklet

• Create a Feature project in Eclipse

Deploy your Tasklet

• Create the update site project in Eclipse

Deploy your Tasklet

• Build the update site project

Deploy your Tasklet

• Create an Update Site Database

Deploy your Tasklet

• Open OSGi profile db– Add update site database into Sites section

• Restart DOTS task

Tips and tricks

Multiple profiles

• You may create more than one profiles.– For testing– Tasklets that you use occasionally– Tasklets with different security needs– Heavily loaded Tasklets

Life-cycle for a scheduled Tasklet

• When a tasklet runs on schedule, DOTS class loader will create an instance from your tasklet class. This instance will not be disposed until DOTS process stops.

Multiple purpose Tasklet

• Same Tasklet, different Java instances• In multiple scheduled runs

– persistent objects, stays in memory

• In multiple manual runs– unloaded from memory afterwards

Tips and tricks

• Logging– Try not to use System.out.println. (No output to log.nsf)

– Instead, use logMessage(...) and logException(...)

• Progress Monitoring– IProgressMonitor monitor

argument passed on tasklet methods.

– Very useful for tasklets running long time.

Vector<?> views = db.getViews();

monitor.beginTask( "List the views", views.size() );

Init with # of steps

for ( Object view : views ){

if ( monitor.isCanceled() ){

break;

Break if canceled.

}

logMessage("\t" +

((View)view).getName() );

try {

Thread.sleep( 1000 );

} catch (InterruptedException e) {

e.printStackTrace();

}

monitor.worked( 1 );

One step completed

}

Questions

Contact details

nl.linkedin.com/in/flinden68

http://www.domino-weblog.nl

fli@e-office.com

@flinden68

top related