Transcript BLUG_DOTS

The power of DOTS

Frank van der Linden, e-office

Frank van der Linden & e-office

@flinden68 http://www.domino-weblog.nl

nl.linkedin.com/in/flinden68 [email protected]

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.3

8.5.2

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:

AMGR launches a Thread JVM Initializes Prepare Java and JNI interfaces

DOTS tasklet: 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 Agent Bytecode > 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...

Run!

Run !

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

 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 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

name of the class tasklet id

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 Tasklet

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

 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(...) logException(...)

and Progress Monitoring – IProgressMonitor monitor methods.

argument passed on tasklet – 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

@flinden68 http://www.domino-weblog.nl

nl.linkedin.com/in/flinden68 [email protected]