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]