The power of DOTS

jazzydoeSoftware and s/w Development

Oct 30, 2013 (3 years and 8 months ago)

98 views

The power of DOTS

Frank van der
Linden,
e
-
office

Frank van der Linden & e
-
office

nl.linkedin.com/in/flinden68

http://www.domino
-
weblog.nl

fli@e
-
office.com

@flinden68

Roadmap


Introduction


Setup your environment


My first DOTS tasklet


Debug
the DOTS
tasklet



Deploy
the DOTS
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 of 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
of
DOTS


Introduction
of
DOTS


DOTS
Tasklets

outperforms over Java Agents!


Java Agent:

DOTS tasklet:

AMGR
launches a
Thread

JVM
Initializes

Prepare Java
and JNI
interfaces

Load 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
of
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
a local 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


T
he 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 Prefences,if Domino Debug Plugin is installed

Setup the
target platform

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

[Domino Program Files]
\
osgi
-
dots
\
shared
\
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.In

this

case a log statement,
which

will

printed

to

the console.

My First DOTS tasklet


Modify the plugin.xml

tasklet id

n
ame 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 the DOTS
T
asklet

Debug the DOTS
T
asklet


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
the DOTS
T
asklet


Server needs to know what to debug


Debug the DOTS Tasklet


Adding breakpoint to debug the code

Deploy the DOTS
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
the DOTS Tasklet


Create a jar file from the plugin

̶
Right Click


Export


Deployable plug
-
ins and fragments...


Deploy
the DOTS 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 the DOTS 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 the DOTS Tasklet


Creating
Profile Repository as
NSF


Create an empty Notes database, set ACL as required


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 the DOTS Tasklet


Create a Feature project in Eclipse

Deploy the DOTS Tasklet


Create the update site project in Eclipse

Deploy the DOTS Tasklet


Build the update site project

Deploy
the DOTS
Tasklet


Create an Update Site Database

Deploy the DOTS Tasklet


Open OSGi profile db


Add update site database into Sites
section


Restart DOTS task

Tips and tricks

Tips and tricks


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







Tips and tricks


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");

}

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