Domino R5 on iSeries Version 2.0 © Logicalis Group Introduction Domino on the iSeries Work Management and performance Security considerations Save/restore considerations Automating and monitoring Domino backups Handling new versions and fixes Differences to look out for compared with Domino on NT platform Options for integration with DB2 Hints and tips Questions and AOB Domino on the iSeries iSeries as a Domino server platform Libraries and IFS locations Subsystems and jobs Working with, starting and stopping Domino servers Configuration of Domino servers TCP/IP considerations, SMTP and HTTP servers Java considerations Domino on iSeries: strengths Scalability Up to 150,000 NotesBench mail users Easy addition of disk space Flexible use of resources Domino partitioning Multiple workloads Resilience and manageability Automatic restart following errors Notes Admin client, green screen and iNav interfaces Full CL command set for scripted configuration and management Availability Save-while-active (if BRMS installed) Security Domino security + OS/400 security DB2 integration without ODBC Probably the perfect Domino mail server Domino on iSeries: challenges Domino applications Calls to DLLs Lack of platform awareness among vendors Not always the perfect Domino application server (or Web server) Potential for performance problems Applications that write a lot to the file system ASCII<->EBCDIC translation Integrated Filing System not as fast as NTFS Issues with code pages – see later Use of capped partial processors (e.g. on ‘slugged’ entry level system without Accelerator) Integrated Filing System One integrated structure QSYS.LIB = libraries, objects and members QDLS = traditional 8.3 folder/document tree QNTC = Windows Network client – sees contents of your NT servers QFILESVR.400 = Remote IFS – sees contents of other iSeriess QOPT = your iSeries’ CD drive Qxxx used by other IBM products Other root folders use Unix naming conventions, e.g. case-sensitive used by Domino on iSeries Save with SAV command Restore with RST command Libraries and IFS locations QNOTES library IBM-supplied licensed program objects QUSRNOTES library Configuration objects Subsystem descriptions, classes Created for you by CFGDOMSVR IFS One tree per server Typically /<myserver>/notes/data Specified on CFGDOMSVR Names are case sensitive notes.ini will be in the data directory WRKLNK, iSeries Navigator or mapped drive But be careful … see later Recommendation You’ll need it one day in an emergency … so make sure you configure, and know how to start and use, NetServer to map network drives to the IFS Configure through iNav Set it to use ‘normal’ iSeries host name to avoid DNS problems – this is not the default, for some unknown reason Set up share for each Domino server (or root share if security policies allow it) Start NetServer with STRTCPSVR *NETSVR or through iNav Map drives from Windows in the normal way Use normal iSeries user profile/password Subsystems and jobs One subsystem per Domino server Typically DOMINOnn Name can be specified on CFGDOMSVR One job per Domino task SERVER, HTTP, SMTP, AMGR, … May be started, and should be stopped, only from Domino Resist the temptation to end Domino tasks from WRKACTJOB End Domino using ENDDOMSVR (unless you enjoy waiting for consistency checks) QNNINSTS is the autostart and controlling job Working with, starting and stopping Domino servers WRKDOMSVR STRDOMSVR <myserver> Automatically starts the relevant Domino subsystem ENDDOMSVR <myserver> N.B. this does not usually end the relevant Domino subsystem Configuration of Domino servers Create CFGDOMSVR Change CHGDOMSVR Remove CFGDOMSVR OPTION(*REMOVE) N.B. deletes the data directory!! Some CFGDOMSVR hints and tips If you don’t specify ADVSRV(*PARTITION) you will never be able to create a second server Specify MAIL(*NONE) (even if you want to use SMTP) if the iSeries native SMTP server is running, otherwise CFGDOMSVR will fail You can configure and run Domino SMTP in the normal way later – all the code will be present – and each can be bound to a specific IP address to avoid conflicts Never use SMTP(*MSF), as this option will be withdrawn in a later Domino release More CFGDOMSVR hints and tips If you don’t want synchronisation with the iSeries system directory, specify DIRSRV(*NONE) Otherwise you will have additional, pointless, work to do whenever you upgrade Domino If *SYSVAL QTIME is routinely changed when the clocks change, and if *SYSVAL QUTCOFFSET is kept set to +00:00, then, if you use TIMEZONE(GMT) and DAYSAVTIME(*YES), you should be OK Make sure all country-specific system values are set how you want them before you run the first CFGDOMSVR Changing them later will result in code page problems Code pages All iSeries jobs have a CCSID attribute DSPJOB to see it All iSeries *FILE objects and IFS files have a CCSID attribute DSPFD for *FILE objects, WRKLNK option 8 for IFS files If they match, or *FILE CCSID is 65535, no translation occurs If they do not match, automatic translation occurs Automatic translation = unnecessary processing US EBCDIC (37) and UK EBCDIC (285) count as a mismatch just as EBCDIC and ASCII do Domino’s rich text handling is particularly badly affected by translation related performance problems So … get it right for all Domino databases you deploy If you want to get optimum performance, also check and fix notes.ini and all IBM-supplied databases and templates If Domino jobs have the wrong CCSID Check the LOCALE on the QNOTES user profile Check the CCSID of the user profile used to start Domino Editing notes.ini Recommended: Option 13 from WRKDOMSVR Alternatively (harder): iSeries Navigator, or map drive and use WordPad Populating the data directory FTP or restore from another iSeries If from non-iSeries platform, should use replication, to avoid code page problems Remember that this means none of your indexes will have been built! Alternatively, FTP or use mapped drive and then run special program (e.g. as shipped with IFSTOOL freeware tools) to change code pages TCP/IP considerations Recommendation: Use of separate IP address for each Domino server Should also be different from that/those used for other applications Configuration: Allocate IP address and add to DNS Use CFGTCP to add and start new IP interface Add line like this to notes.ini: TCPIP_TCPIPADDRESS=0,172.17.1.9 Restart server DNS iSeries systems are frequently configured without DNS If routing and replication don’t work, check your hosts table (CFGTCP option 10) and try a ping Domino+physically remote DNS+*REMOTE lookups before *LOCAL=appalling performance SMTP listener Watch out for clashes with iSeries SMTP server (outward SMTP Domino mail routing not affected) Can run both listeners simultaneously: Via iSeries Navigator, bind iSeries SMTP listener to single IP address Domino SMTP listener automatically picks up its parent Domino server’s binding to a specific IP address HTTP Watch out for clashes with other iSeries-based HTTP servers (e.g. Apache server within licensed program 5722DG1) Existing non-Domino HTTP server will need to be bound to a specific IP address Method depends on the type of server Domino HTTP server will need to be bound to the IP address of its parent Domino server This is done in Domino Java considerations Take advantage of the iSeries’s high performance Java Virtual Machine: As far as possible, install all jars in the iSeries IFS Pull only those Java classes into the Domino Java agent that are essential for it to compile Add the jars to this line in notes.ini (note colon separators): JavaUserClasses=/<path1>/<myjar>.jar:/<path2>/<myjar2>.jar Optimise the jars to level 40 with CRTJVAPGM Together these steps will make a gigantic difference to the performance of Domino Java agents Work Management and performance Domino likes memory and disk Unless running HTTP, Java or a very complex app, CPW is not normally a big issue, because the majority of the processing usually happens in the client Typically, if Domino goes slowly, it is lacking main storage However … There is no alternative to careful sizing using the Workload Estimator Domino does not run well on a capped partial processor (e.g. ‘slugged’ entry level system without Accelerator) Note that the ‘percentage consecutive users’ in the Workload Estimator will almost certainly be 100, because this is the percentage of users concurrently connected to the server, whether they are doing anything or not iSeries work management is in charge Do not fear - run as many AMGR’s as your application will let you Recommendation Run each Domino server in a pool of its own Don’t let the pool start too small Only the memory available at startup will be used optimally Private pool can be a good option, or (better) use WRKSHRPOOL to set shared pool minimum size appropriately (Domino should not be a reason to switch off QPFRADJ) Also… Check code pages are correct The only symptom of incorrect code pages is bad performance Usual Domino performance rules apply, e.g. Limit number and size of full text indexes Don’t run unnecessary Domino tasks There is an excellent and essential IBM Lotus Domino for iSeries Performance and Tuning document http://www.redbooks.ibm.com/redpapers/pdfs/redp3843.pdf Security considerations All Domino IFS objects must be owned by QNOTES Public *RWX access will not do If you copy Notes databases around using FTP or NetServer, ownership will be wrong unless you use QNOTES user profile to do it (not really recommended) If ownership wrong, use CHGOWN command, or WRKLNK option 9 then F19 QNOTES user profile password expiry should be switched off Otherwise one day Domino will not start … and it will be very hard to work out why Set INLPGM(*NONE) INLMNU(*SIGNOFF) to prevent misuse Backing up Domino QNOTES is licensed program code – doesn’t need regular save QUSRNOTES requires saving only if Domino configuration changes Domino IFS trees require regular backup via SAV command Save considerations Unless BRMS is installed, must end Domino server to back up Name and Address Book and log database (possibly others) will not save cleanly otherwise Always safest, and recommended, to end server even if just saving selected mail or application database(s) BRMS does allow save-while-active Restore considerations RST command When restoring over existing directories/files, you will get cleaner results if you delete the existing ones first It is recommended that you restore to original location (rather than restore elsewhere and then move/copy across) Otherwise you are in danger of upsetting the file’s ownership and/or authorities, and therefore preventing Domino from accessing the file properly IFS save/restore examples Save/restore (IFS directory, restored to different place, using savefile): SAV DEV('/qsys.lib/shawm.lib/testifssav.file') OBJ(('/intranet')) OUTPUT(*print) RST DEV('/qsys.lib/shawm.lib/testifssav.file') OBJ(('/intranet' *INCLUDE '/shawm4')) To save to tape, example DEV parameter is DEV('/QSYS.LIB/TAP02.DEVD') Automating and monitoring Domino backups - example /* End LEAD DOMINO server */ ENDDOMSVR LEAD MONMSG CPF0000 DLYJOB DLY(900) /* In case not closed down properly-wait and zap.*/ ENDDOMSVR LEAD *IMMED MONMSG CPF0000 DLYJOB DLY(300) /* GIVE IT TIME TO CLOSE FULLY.*/ /* IFS save - replace tap02 by appropriate device */ SAV DEV('/qsys.lib/tap02.devd') + OBJ(('/lead')) CLEAR(*AFTER) /* + Lead */ MONMSG CPF0000 EXEC(CHGVAR &NOTESERROR '1') /* Start LEAD DOMINO SERVER */ STRDOMSVR LEAD Handling new versions and fixes Check the prerequisites If it says Java 1.1.8, it means it – if only 1.3 is installed, it will not work New Domino versions do not require an IPL, but their prerequisites may need one Follow the installation instructions explicitly If running directory synchronisation, switch it off before the upgrade, and remember to switch it on again afterwards Differences to look out for File system syntax Forward slashes No drive letter ODBC and LC LSX considerations Notes client ODBC applications use ODBC as usual But server-based ODBC uses DRDA Web applications Server-based agents WRKRDBDIRE to configure Server-based code can only talk to non-DB2 databases if either a DRDA gateway is available, or you use Java instead of LotusScript Direct modem attach to Notes server Only supported via PPP using iSeries comms cable Not recommended Miscellaneous useful information iSeries DB2 integration options Dedicated Server for Domino iSeries DB2 integration options Lotus Enterprise Integrator (LEI) Domino Enterprise Connection Services (DECS) ODBC and LC LSX JDBC and iSeries Toolbox for Java Lotus Enterprise Integration (LEI) – What is it? Previously called NotesPump. Allows synchronisation of data between Domino databases and a relational database (either may be the master copy). Synchronisation may work on a schedule or may be real-time. Configured via a point-and-click interface from a Notes client. RDBMS access uses an SQL Interface, allowing joins, row and column selection, etc. Data may be processed automatically during synchronisation, using a Notes agent at the Domino side or a stored procedure at the RDBMS side. LEI – Where is it useful? Presentation of iSeries data to the user via a Notes application. Download of iSeries data into Notes applications (e.g. sales force automation). Upload of Domino data into an iSeries application, with appropriate iSeries processing of information transferred (e.g. order posting). LEI - Example Population of Logicalis’ DB2/400-based data warehouse from our Dominobased CRM system, on a schedule and with some transformation of data. Business intelligence from Domino data Lotus Enterprise Integrator Domino applications LEI Slice-and-dice analysis DB2 UDB Point-and-click administration Billing Year 2002 Billing Month 09 Employee Type Permanent 1.00 0.00 0.00 1.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Grand Total 0.00 0.13 0.00 0.00 2.27 0.00 Team Management Sickness 0.00 17.53 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 6.00 Quality & Audits 0.00 0.00 0.00 0.00 0.00 0.00 Notability IPR 1.00 0.00 3.00 10.00 2.00 2.00 IT Support (Notability) 0.00 0.00 0.00 0.00 0.00 0.00 Management reporting Internal Projects (Notability) 0.00 0.33 0.27 0.00 0.00 0.40 Holidays (paid) 0.00 0.00 0.00 0.00 0.00 0.00 Education and R&D 0.00 0.00 6.33 0.00 4.13 0.87 Downtime 0.00 0.00 0.00 0.00 0.00 0.00 Departmental Infrastructure Support (Notability) 0.00 0.00 0.00 0.00 0.00 0.00 Customer Support Contracts 0.00 11.77 8.67 9.60 3.60 4.13 Customer Presales 0.00 0.00 0.00 2.40 0.00 0.00 Customer Fixed Price 0.00 3.20 1.80 0.00 1.67 1.67 Customer Chargeable Consultant Consultant 1 Consultant 2 Consultant 3 Consultant 4 Consultant 5 Consultant 6 Customer Agreed Free of Charge Cost Centre BPCS Services Type Administration Number of Days 19.53 15.43 20.07 23.00 14.67 15.07 LEI – Comments Separately chargeable product Suitable for many applications Very easy to configure Requires no special Domino coding techniques Connectivity from Domino server to iSeries works as for LC LSX, below Domino Enterprise Connection Services (DECS) – What is it? Allows a Domino application to access a relational database transparently to the Notes programmer and to the user (rows fetched from the database simply look like Domino documents). Documents may be ‘virtual’ only, or may be copied at run time into the Domino database so that the latest version is available even when the connection is inactive (i.e. allows offline use). DECS is configured using a point-and-click interface from a Notes client. Key limitation is need for ‘stub documents’ – making it considerably less useful than LEI in practice. DECS – Where is it useful? Applications where the number of documents, and the values to be taken by unique key field(s), are always known, so that ‘stub documents’ with only the key field(s) populated can be created in advance Applications where Domino simply needs to write new records into an iSeries database table DECS - Example Used by Logicalis in an customer application that reformats an iSeries spool file and presents the values to users via a Domino application – values are predictable enough to allow pre-creation of the stub documents by a Domino agent. DECS - Comments Not chargeable, shipped with base Domino Suitable in a limited range of applications Very easy to configure Requires no special Domino coding techniques Connectivity from Domino server to iSeries works as for LC LSX, below ODBC (formula language, LC LSX) – What is it? ODBC calls programmed into the Domino application ODBC from formula language, or LC LSX from LotusScript ODBC – Where is it useful? Transactions and/or enquiries into legacy applications from Web browser client or Domino server-based agent. NOT recommended for use from Notes client application, for desktop maintenance and security reasons related to necessary presence of ODBC driver on desktop. ODBC - Comments Not chargeable, shipped with base Domino Use of formula language ODBC calls not recommended – complex to code and very difficult to debug LC LSX is used from LotusScript, very similar to Visual Basic SQL CLI coding Performs very well Functionality limited compared with JDBC (see below), so ODBC is not recommended for new implementations ODBC and LC LSX - Connectivity If using Windows-based Domino server, Web browser clients and serverbased agents use ODBC running on the Domino server If using iSeries-based Domino server, ‘ODBC’ connectivity in fact uses DRDA and can thus run over either SNA or TCP/IP (connections local to this iSeries are of course also supported). Use of DRDA support does impose some design limitations JDBC – What is it? From Java agent or servlet. JDBC calls programmed into the Domino application. JDBC – Where is it useful? Transactions and/or enquiries into legacy applications from Web browser client or Domino server-based agent. JDBC – Example 1 B2B Domino Web application developed by Logicalis for online ordering, interfaced with the customer’s existing iSeries back end application using stored procedures written in RPG JDBC – Example 2 Used within Logicalis’ CRM system to extract management information from audit history field and write it to an iSeries database table: /* JDBC import */ import java.sql.*; /* Variables for DB2/400 connection */ Connection conn = null; PreparedStatement out = null; /* Connect to DB2/400 (DRDA JDBC driver for performance) */ Class.forName("com.ibm.db2.jdbc.app.DB2Driver"); conn = DriverManager.getConnection("jdbc:db2:cat32", “<user>“,“<password>"); /* Prepare INSERT statement (executed once only) */ out = conn.prepareStatement("INSERT INTO MAXDW.ONECALLADJ (LEIUNID, NARRATIVEDATE, NARRATIVETIME, NARRATIVE) VALUES(?, ?, ?, ?)"); /* Use INSERT statement (executed once per record) */ out.setString(1,leiUnid); out.setString(2,narrativeDate); out.setString(3,narrativeTime); out.setString(4,narrative); out.execute(); /* Disconnect from DB2/400 */ conn.close(); JDBC – Comments Not chargeable, shipped with base Domino Open standards solution Acquired skills would be compatible with any future WebSphere deployment Allows use of any available JDBC driver Performs very well (for iSeries Domino server, it does require careful Java optimisation) Greater flexibility than LC LSX option iSeries database JDBC drivers Native DRDA iSeries Toolbox for Java JDBC driver Native DRDA JDBC driver Runs over SNA or TCP/IP Very fast, resilient and secure Really only useful where the Domino server is running on iSeries Does have some JDBC support limitations No need to add to classpath Some optimisation required for optimal performance Can only test on server iSeries Toolbox for Java JDBC driver 100% pure Java, allowing it to run on any platform Fewer design limitations than the DRDA driver Not quite so fast or resilient as the DRDA driver (longer code path) although improving all the time Will only run over TCP/IP Needs adding to classpath Needs a lot more careful optimisation than DRDA driver or use /QIBM/ProdData/Java400/jt400ntv.jar, which is shipped preoptimised Client-based testing feasible iSeries Toolbox also provides classes for direct access to iSeries functionality, e.g. Remote Command. Here is an example: /* Java import for Toolbox */ import com.ibm.as400.access.*; /* AS400 connection and command invoker */ private AS400 dominoServer = null; dominoServer = new AS400(“<system>", “<user>", “<password>"); CommandCall cc = new CommandCall(dominoServer); /* Set up command */ cmd = "RMVLNK OBJLNK('/QFileSvr.400/MYAS400/QDLS/MYFOLDER/" + this.folderName + File.separator + files[i] + "')"; /* Run command - this will generate a Java exception if OS/400 returns an exception */ cc.run(cmd); /* Get messages returned and put in Notes log */ AS400Message[] msgList = cc.getMessageList(); for (int i=0; i < msgList.length; i++) { System.out.println(msgList[i].getText()); }