Livelink WCM 9.5 SystemIntegration - en
Livelink WCM 9.5 SystemIntegration - en
Livelink WCM 9.5 SystemIntegration - en
Type 1 System
Release 9.5.0
Version 3.3
Copyright 2004 by Open Text Corporation. The copyright to these materials and any
accompanying software is owned, without reservation, by Open Text. These materials and any
accompanying software may not be copied in whole or part without the express, written permission of
Open Text.
Open Text Corporation is the owner of the trademarks Open Text, ‘Great Minds Working Together’,
Livelink, and MeetingZone among others. This list is not exhaustive. All other products or company
names are used for identification purposes only, and are trademarks of their respective owners. All rights
reserved.
Open Text Corporation provides certain warranties and limitations in connection with the software that
this document describes. For information about these warranties and limitations, refer to the license
agreement entered into between the licensee and Open Text Corporation.
Contacting Us
Corporate Headquarters
Open Text Corporation
185 Columbia Street West,
Waterloo, Ontario
N2L 5Z5
Canada
(519) 888-7111
If you subscribe to our Software Maintenance Program or would like more information about additional
support programs, visit Open Text Customer Support at http://www.opentext.com/services/support.html.
If you have suggestions for this publication, send an e-mail message to [email protected] to contact the
Open Text Publications Group.
Visit our home page at http://www.opentext.com for more information about Open Text products and
services.
© 2004 IXOS SOFTWARE AG
Bretonischer Ring 12
85630 Grasbrunn, Germany
Tel.: +49 (89) 4629-0
Fax: +49 (89) 4629-1199
eMail: [email protected]
Internet: http://www.ixos.de
All rights reserved, including those regarding reproduction, copying or other use or communication of the
contents of this document or parts thereof. No part of this publication may be reproduced, transmitted to
third parties, processed using electronic retrieval systems, copied, distributed or used for public
demonstration in any form without the written consent of IXOS SOFTWARE AG. We reserve the right to
update or modify the contents. Any and all information that appears within illustrations of screenshots is
provided coincidentally to better demonstrate the functioning of the software. IXOS SOFTWARE AG
hereby declares that this information reflects no statistics of nor has any validity for any existing
company.
Portions of the license material were created using open source codes of third parties. These source codes
are free for use subject to the terms of the corresponding licenses. All of these licenses are available at
www.obtree.com/opensource-info.
Contacting Us
IXOS Engineering (Switzerland) AG
Peter Merian-Strasse 80
Postfach
CH-4002 Basel
Tel.: +41 (61) 278 96 96
Document Info
English (Original)
Based on Livelink Web Content Management Server, Type 1 System, Release 9.5.0
© IXOS Software AG, May 2005
Author:
Axel Hanikel & al.
If you have feedback or suggestions for this publication, please send an e-mail message to
[email protected] to contact the Documentation Group responsible for this product.
I’ll show you how to
ALANIS MORISSETTE
Livelink WCM Server Table of Contents
Table of Contents
1. General Information............................................................................................................. 11
1.1 Welcome!......................................................................................................................................... 11
1.1.1 How To Read This Book............................................................................................................11
1.2 The Knowledge Center.................................................................................................................... 12
1.3 What’s New?.................................................................................................................................... 12
1.3.1 Only One Engine....................................................................................................................... 13
1.3.2 New Database Model................................................................................................................ 13
2. System Overview and Concepts......................................................................................... 15
2.1 The Components of a Livelink WCM Server Installation..................................................................15
2.2 The Staging/Live Concept................................................................................................................16
2.2.1 The Live Server......................................................................................................................... 16
2.2.2 The Staging Server....................................................................................................................17
2.2.3 Bringing Stage and Live Together............................................................................................. 17
2.2.4 Size considerations................................................................................................................... 18
2.3 Example of a larger installation........................................................................................................ 18
2.4 Configuration Files........................................................................................................................... 20
2.4.1 Configuration File Format.......................................................................................................... 20
2.4.2 URLMAGIC and HOSTMAGIC: Matching An Incoming Request To A Site.............................. 20
2.4.3 Internationalized Domain Names (IDN).....................................................................................22
2.5 Common Pitfalls............................................................................................................................... 22
2.5.1 Library Search Paths................................................................................................................. 22
2.5.2 Environment variables and cron (Linux/Solaris only)................................................................ 22
2.5.3 Time Synchronization................................................................................................................ 23
3. Basic Installation.................................................................................................................. 25
3.1 Automatic Demo Setup (Windows Platform)....................................................................................25
3.2 Quick Start Setup (Windows Platform).............................................................................................25
3.2.1 Create the Installation Directory................................................................................................ 25
3.2.2 Prepare the Database: Microsoft SQL Server........................................................................... 27
3.2.3 Load WCM Server Web Site Data.............................................................................................29
3.2.4 Configure the Web Server: Microsoft Internet Information Service 6.0..................................... 30
3.2.5 Customize the configuration file................................................................................................ 33
3.3 Manual Setup (Windows Platform)...................................................................................................34
3.3.1 Create the Installation Directory................................................................................................ 34
3.3.2 Prepare the Database: Microsoft SQL Server........................................................................... 36
3.3.3 Prepare the Database: Oracle...................................................................................................38
3.3.4 Load WCM Server Web Site Data.............................................................................................40
3.3.5 A word about web server processes......................................................................................... 41
3.3.6 Configure the Web Server: Microsoft Internet Information Service 5.0 (Windows 2000).......... 42
3.3.7 Configure the Web Server: Microsoft Internet Information Service 6.0 (Windows 2003).......... 45
3.3.8 Configure the Web Server: Apache HTTP Server 2.0...............................................................50
3.3.9 Configure the Web Server: Sun Java System Web Server 6.1 (aka iPlanet)............................51
3.4 Quick Start Setup (Solaris and Linux Platforms)..............................................................................52
3.4.1 Create the Installation Directory (from packages)..................................................................... 52
8. Appendix............................................................................................................................. 207
8.1 Installing Oracle 9i Version 9.0.1.1 under Windows.......................................................................207
8.2 Installing Oracle 9i Version 9.2.0 under Solaris............................................................................. 208
8.3 Installing Oracle 9i Version 9.2.0 under Linux................................................................................210
8.3.1 Configuring Oracle 9.2.0 under Solaris and Linux...................................................................212
1 General Information
1.1 Welcome!
Welcome to Livelink WCM Server! You are reading the System Integration
Manual, which is about how to install and administrate Livelink WCM Server
Type 1 System. Installation and maintenance of Livelink WCM Server is not a
difficult task, but there are a few conceptual things you should know before you
start with the actual installation. You will find the details right here in this
chapter.
Livelink WCM Server supports different operating systems, web servers and
databases, which is why this manual might seem rather big at first sight. But don’t
let the number of pages scare you off, you won’t have to read all of them. Let the
next section be your guide.
• a system overview
• a description of concepts
• best practice guides
• installation procedures
• tool manuals
• a description of maintenance tasks
• additional information about 3rd party products
If you are new to Livelink WCM Server, it is probably best if you start with the
overview and concepts chapters. After that, you could go to the Quick Start
section of your operating system / platform in order to quickly get a small
installation running and see “what it looks like”.
If you’re an old hand, read the “What’s New?” section, the release notes (which
you can find on the Knowledge Center) and “Updating your Installation”.
Audience The intended audience of this manual are system administrators and system
integrators. They should have a good knowledge about the operating system they
use, about web servers, database servers, TCP/IP, HTTP and SQL, and they
should have an idea about which layer these belong to (if you have ever heard
about the OSI model, you know what I mean ;-)). But this is not about the model
itself, it is about knowing which component depends on which other component,
in order to find the right spot to look at, if something does not work as it should.
And it is about interpreting error messages correctly.
Auxiliary verbs When reading this manual, many people are unsure about what they must (not),
should (not), or may do. Throughout this manual, things which you must or must
not do are explicitely stated as such, e.g. “you must not rename the
cmengine.dll for IIS”. Everything else in the “Basic Installation” chapter is to
be understood as what you should do, e.g. “you should follow the file system
layout” used in that chapter (because it will be easier for you and for somebody
else to find himself “at home”) - but you don’t have to. The “Best Practice”
guides, then, should give you an idea of how to deal with certain situations, but
are entirely optional.
Give the Knowledge Center a try — you will wonder how you could ever live without it!
We do not make a difference between the WebEngine and the CMEngine any more. There is only one
rendering engine, the CMEngine. It is entirely a matter of configuration whether the CMEngine behaves
as a staging or as a live server.
Our database model has been extended by a couple of tables and some of the existing tables have got
additional fields. This has been necessary to support some of the new features like e.g. “auditing”.
The repository part consists of a database server. The database server holds all the data belonging to a
particular web site. When an HTTP request is to be delivered, the CMEngine connects to the database
server and fetches the necessary data to assemble the requested page. For performance reasons, the
CMEngine features a sophisticated caching mechanism, which minimizes the number of database
accesses (I/O) as well as the CPU cycles necessary to assemble (or render) the page.
The web server with a loaded CMEngine module together with a database form the minimum of what
needs to be installed to get a working WCM Server installation.
External systems are accessed either directly by means of interfaces which are built into the CMEngine
itself, or indirectly via plugins. Examples of protocols that the CMEngine has built in include HTTP,
FTP, POP3, SMTP and others, and, of course, SQL databases. Systems that are accessed via plugins
include e.g. LDAP, SAP, Microsoft COM etc. A plugin runs independently from the web server in a
separate process. The CMEngine communicates with the plugins via TCP, while the plugin
communicates with the external system in whatever its “native language” is.
The client part can be divided according to the two types of users that access the system, administrators
and content authors. Administrators work with a tool called Site Administrator. The Site Administrator
has all the functionality to create and administrate the web site. It communicates directly with the
database and therefore needs the corresponding database vendor’s client software installed. The content
author, on the other hand, does not need any additional client software installed. The only thing a content
author needs is a browser and a Java Virtual Machine (JVM). He/she works with a tool called Site
Manager, which is completely browser-based. Texts are edited using the TextWizard, a program
implemented as a Java applet and started directly from the browser. Optionally, it is possible to use
Microsoft Word for editing text objects. However, this functionality (which we call the WordWizard)
implies the installation of a small executable and some additional files on the client computer.
The live server is responsible for delivering web pages to the outside world. Web site content is made
available for browsing/reading, but cannot be changed. Therefore the emphasis in the live environment
lies on maximizing performance by caching as much as the dynamics of the pages and available RAM
allow. As a minimum, a live server consists of
• One database (or database schema) for the web site data
• The CMEngine
• The cmengine.cfg configuration file, based on the cmengine_live.cfg template (see the
installation chapters for information on where the various files are located), and containing a
[common] section and one section for the site.
The staging server delivers web pages to the content authors and runs the Site Manager. Of course,
performance is also an issue here. However, it is important that any changes to the content are
immediately visible to the authors, so that they are able to see what their pages look like before making
them active. For this reason, the data may not be as heavily cached as in a live environment, which leads
to higher CPU and disk I/O usage. As a minimum, a staging server consists of
• One web server instance (usually running on a different machine than the live server)
• One database (or database schema) for the web site data (different from the one for the live server).
• One database (or database schema) for the Site Manager
• The CMEngine
• The cmengine.cfg configuration file, based on the cmengine_stage.cfg template(see the
installation chapters for information on where the various files are located), and containing a
[common] section (where the CM_* parameters point to the database connection where the Site
Manager resides) and one section for the site. (Note: If there is more than one site, each site has its
own configuration section, but they all share the same Site Manager database defined in the
[common] section.)
The changes made on the staging server have to be transferred to the live server by one of the following
means:
• With SQLTransfer, which transfers the complete site. SQLTransfer is available as a GUI version
and as a commandline version suitable for being executed by an operating system scheduler like
cron.
• With database replication, which transfers only the rows that have been changed since the last
synchronization.
• With the WCM Server replication, which transfers only the rows of active WCM Server objects that
have been changed since the last replication.
Please refer to the appropriate chapters later on in this manual for information on database and
WCM Server replication.
Under Oracle, when using a newly created tablespace with a blocksize of 8K, our default SQL script
with 128K extents and the example web site (demosite.zip), the tablespace will occupy about 100 MB
on disk. This can be reduced to about 55 MB by using smaller extent sizes, e.g. 16K instead of 128K,
but doing so might have a negative impact on performance, especially in larger installations.
A full installation with all the program files uses about 60 MB on Linux, 80 MB on Solaris and 125 MB
on Windows.
Of course, these are the minimum figures, just to give you an idea. In practice, more space will be used,
e.g. by log files, or depending on the amount of data (large PDFs, videos, etc.) that you put into your
database.
Both staging and live have a load balancer in front of them, which equally distributes the incoming
requests to two trails. Each trail consists of a reverse proxy, followed by the web server with the
CMEngine, and the database below. The SessionManagement plugins are used to store session data.
They are needed as soon as more than one web server process is running the same site, because session
data must be available to all running processes simultaneously. Only the primary session plugin is active
for both web servers, the other one is just a fallback, should the primary become unavailable. The LDAP
servers provide the user data and are accessed via plugins as well.
The development server has not been introduced so far: It is thought mainly for script/web application
developers, so that they are able to do their testing without disrupting the stage environment where the
content authors work. Data from the development server is transferred to the staging environment by
exporting and reimporting objects as .oxp packages, an XML format. This can be done with the
deployment utility or the Site Administrator. The replication utility is used in order to transfer the
data from the staging to the live environment.
WCM Server configuration files (or config files for short) have a .cfg suffix and there is usually one
configuration file for each component. They are in .ini format, containing one or more sections, and
each section consists of parameter/value pairs, one per line. A section starts with the section identifier,
which is a name enclosed in square brackets, and it ends either at the beginning of a new section or at
the end of the file. Some section names are mandatory, while others can be chosen to be whatever you
like, depending on the component you are configuring. In any case a section name must be unique
within the containing configuration file. A parameter is assigned a value using the “equals” sign ([=]).
Parameter names are case-insensitive. Comments start with a hash sign ([#]) at the beginning of the line
and extend to its end.
One of the most important configuration files is the one of the CMEngine, cmengine.cfg. This is not
the place to discuss every parameter in detail here. If it comes to creating an appropriate config file for
your intended setup, there are samples in the release set for you to start with, and the parameters are
documented in SiteAdmin_Reference.chm, which you can find in the release set, as well. Instead,
we will only be looking at one important question: How is an incoming request matched to a particular
section in the configuration file?
We said earlier that there is one database schema for every site. In the cmengine.cfg, there is one
corresponding section for each site, which basically contains two important pieces of information: The
database connection parameters, and the parameters that determine whether or not an incoming request
belongs to this particular site. For the matching mechanism, the URL of an incoming request is split into
two parts: the host (including the port, if any) and the path to the requested resource. For example, if the
requested URL is http://www.myserver.com:8555/some/path/index.html, then
www.myserver.com:8555 is the host part, and /some/path/index.html is the path.
Correspondingly, there are two parameters in the config file that are used for the matching: HOSTMAGIC
and URLMAGIC.
The HOSTMAGIC matches the Host: header of the incoming HTTP request either if it is exactly the
same, or if HOSTMAGIC is not defined. In other words: an undefined HOSTMAGIC matches any host. To
stick with our example: If the HOSTMAGIC is set to www.myserver.com, it does not match; if it is set to
www.myserver.com:8555 or if it is undefined, it matches.
The URLMAGIC matches the path of a request if it is exactly the same as the first characters of the path.
For example URLMAGIC=/some/path would match our request from above, URLMAGIC=/some and
URLMAGIC=/ would match, too (URLMAGIC=/ matches any request). Instead,
URLMAGIC=/another/path and URLMAGIC=/another do not match.
Now what about the following situation: We have two site sections in our config file, like this:
[mysite]
SERVERURL=http://www.myserver.com:8555
HOSTMAGIC=www.myserver.com:8555
URLMAGIC=/some
DBTYPE=ORACLE
DBNAME=mydb
DBUSER=mysite
DBPWD=secret
[anothersite]
SERVERURL=http://www.myserver.com:8555
#HOSTMAGIC=www.myserver.com:8555
URLMAGIC=/some/path
DBTYPE=ORACLE
DBNAME=mydb
DBUSER=anothersite
DBPWD=secret
Here, our example request would match the first section and not the second. Why? Because the
matching is always done sequentially from the top to the bottom of the config file. When the first section
is considered, the condition is fulfilled (/some/path/index.html starts with /some) and therefore,
the request will be served by this section. The other section, which would be more specific, is not taken
into consideration anymore. This is probably not what you intended, therefore keep in mind the
following rule of thumb: Always put more specific sections first, and the more general ones afterwards,
i.e. first /some/path, then /some, and then /, not the other way round.
Did you notice the SERVERURL parameter above? Contrarily to what you might have expected, this one
does not have anything to do with the matching mechanism!
The SERVERURL is needed for generating the <base href=”...” /> tag in the generated web page,
or for creating absolute addresses in IMG and A tags, if base tag generation is suppressed via
CREATEBASETAG. Therefore it is important to define this parameter as well. If it is undefined, the value
of the SERVER_URL web server environment variable is used. This is very useful if you run a site under a
lot of different names, e.g. if www.mysite.com, www.mysite.net, and www.mysite.org all point to
the same WCM site. Instead of creating three different sections with the respective SERVERURLs and
HOSTMAGICs, just use a single section without SERVERURL and HOSTMAGIC unset, and have your web
server set the SERVER_URL variable to the correct value. For example in Apache, you can put a SetEnv
directive into each virtual host section. You can even use a RewriteRule with a
[E=SERVER_URL:%{HTTP_HOST}] flag to make your web server generate a page for every host name
that manages to get through to it (if that is what you want ;-)).
If you run a site with non-ASCII characters in its host name, i.e. www.ténéré.ne, then use the
punycode-encoded name for SERVERURL (and HOSTMAGIC, if required), e.g.
SERVERURL=http://www.xn--tnr-bmabb.ne
You are not expected to learn all this by heart. Just remember that this section exists, and come back here
if any problems arise.
A very common problem is that database, LDAP, or other connections to external resources fail because
the necessary libraries cannot be loaded successfully. Having the correct path / filename in the config
file is not the only prerequisite for the library to be loaded successfully. Very often, the library itself
loads other libraries in turn. In order to find them, the dynamic loader follows a search path which is
defined in the LD_LIBRARY_PATH variable (Linux, Solaris), or in the PATH variable (Windows). It is
therefore important that these variables are set as described in the installation chapter further below. If
you would like to know, which libraries a particular library depends on, you can use the ldd command
under Linux and Solaris. For Windows users, there is a nice utility available at
http://www.dependencywalker.com/.
In this respect, special care must be taken when using cron to automate tasks under Linux or Solaris.
See below.
While at jobs inherit the environment from the shell they are created from, cron jobs do not. You
therefore have to set all the necessary environment variables when the job executes. The easiest way to
do this is to set everything in a shell script which then executes the actual command. If you have several
jobs that need the same environment, you could also set the variables directly in the crontab. See the
It is very important that all your servers agree on the current time. If there is a difference between web
server time and database server time, strange things will happen (such as newly created objects that can
be seen in one place, but can't be accessed in another). Time synchronization can be achieved by using
NTP (Network Time Protocol) under Linux/Solaris, or by placing your servers into the same domain
under Windows.
3 Basic Installation
The demo setup is documented in its own separate manual, which is part of the
demo setup distribution.
Comments First of all, create the basic directory structure and all the required files in it. You
can do this by unpacking the ready-to-install ZIP archives which you can
download from the Knowledge Center.
C:\>cd Livelink\wcm\type1
C:\Livelink\wcm\type1>for %f in (c:\temp\livelink*.zip) do unzip –o %f
If you are prompted whether you want to overwrite an already existing sample
configuration file in sampleconf, respond [A] (always) or [N] (never) (it does not
matter).You can also try and use the -o switch in order to avoid these prompts
and overwrite any existing files.
Create new Create an owner (SQL server login) and three new databases: wcmstarter,
databases wcmdemo, wcmsitemanager.
To execute a SQL Server command, click the green Play button in the
toolbar, select Execute from the Query menu or press the [F5] key.
Repeat the steps starting with step 5 for the remaining two databases (wcmdemo
and wcmsitemanager).
Create the table The script SiteDatabase-Create-R95-mssql.sql will be used to create the
structure table structure for the new database.
Create ODBC 1. Open the Data Sources (ODBC) control panel (for Windows or later it will be
connections to found under Administrative Tools).
the databases
2. Add a new ODBC connection under the System DSN tab.
3. Select the driver to be used for the connection. In this case, select SQL
Server. Click Finish.
4. Enter a unique name for the ODBC connection in the Name field. This name
must be specified in the configuration files. We recommend using the same
name as for the database to avoid too many different names.
5. A description may be entered in the corresponding field.
6. Select (local) for the server connection. Click Next.
7. Choose With SQL Server authentication… and enter the database
owner and password.
8. Click the Client Configuration... and select TCP/IP for the network
connection protocol. Click Next.
9. Activate Change the default database to and select your database.
Click Next.
10. Use the default settings here. Click Finish.
11. The Test Data Source... button may be used to test the ODBC
connection. Click OK.
12. Now the new system data source name (DSN) for the ODBC connection will
appear in the list.
13. Create ODBC DSNs for the other databases in the same way, then close the
ODBC Data Source Administrator dialog by confirming with OK.
Transfer web site Loading web site data to the database is performed with the SQLTransfer tool
data to the (after the WCM Server table structure has been created). The release set includes
database using files for an example database (SiteExample.zip for database/user wcmdemo),
SQLTransfer the Site Manager (formerly known as Content Manager, in file
SiteManager.zip for database/user wcmsitemanager) and a starter database
(SiteStarter.zip for database/user wcmstarter). These files are normal ZIP
archives, containing one single file of the same name as the archive, but with a
.dat extension. The SQLTransfer tool is able to process such archives directly,
you do not need to unpack them first. Analogously, when exporting data, you may
enter a file name with a .zip extension and SQLTransfer directly creates a
compressed archive. Therefore, as a generalization, such ZIP files are referred to
as “DAT files” as well.
SQLTransfer reads the data from these DAT files and SQL-inserts them into the
tables that have been created in the last step.
3.2.4 Configure the Web Server: Microsoft Internet Information Service 6.0
Verify file system Start an Explorer window and display the properties of
permissions C:\Livelink\wcm\type1\bin. Go to Security → Advanced → Effective
Rights and select IIS_WPG. Make sure that this group has read permissions in
this directory. Then do the same for the C:\Livelink\wcm\type1\cache and
C:\Livelink\wcm\type1\logs directories. Here, IIS_WPG should have read
and write rights.
Create virtual 1. Set up a new virtual directory named iisengine, which references the
directory directory with the DLLs and related configuration files, using the Internet
Service Manager. It is mandatory that the new application use this name.
• LICENSEKEY, LICENSEHOLDER
• CM_DBTYPE=MSSQL
• CM_DBNAME=wcmsitemanager
• CM_DBUSER=wcmowner
• CM_DBPWD=(whatever you chose before)
• LOGBASE=C:\Livelink\wcm\type1\logs\
• MAILSERVER= 127.0.0.1
• SERVERURL=http://localhost
• URLMAGIC=/
• DBTYPE=MSSQL
• DBNAME=wcmstarter
• DBUSER=wcmowner
• DBPWD=(whatever you chose before)
• and the [<Section Name>] by [starter].
Now the web server must be restarted to make the configuration changes active.
Try it! Now you are ready to start a browser on the server and hit http://localhost/.
You should now see a nice welcome page. If you do: Congratulations!
If not, it is probably best if you read the explanations in the “Manual Setup”
chapters and the “General Information” at the beginning of this manual. Also,
have a look at “Testing your installation” on page 84 and at the log files located in
C:\Livelink\wcm\type1\logs.
Comments First of all, create the basic directory structure and copy all the required files into
it. You can do this either manually, using the files on the distribution CD, or by
unpacking the ready-to-install ZIP archives which you can download from the
Knowledge Center.
Unpack (If you don’t have the ZIP archives, go straight to the next step, “Copy files
ready-to-install manually”). Create a directory C:\Livelink\wcm\type1 and extract the
ZIP archives contents of livelink-wcm-type1-base-9.5.0.nnn.zip into it. E.g. if you
use WinZIP, right-click the archive and select Extract to… from the context
menu. Then select C:\Livelink\wcm\type1 as the path to extract to and make
sure that Use folder names is checked. If you use the archiver wizard which is
integrated into the Windows XP Explorer, you will never reach the final screen
when extracting an older version (pre 9.5.0) of the base package. This is because
this archive contains only folders and no files. Nevertheless, after having clicked
Next, the folders should have been created and you can click the Cancel button.
Starting with 9.5.0, the base package contains a dummy text file, and the archive
should unpack normally. After the base package, unpack the other zip files you
need. For a minimal installation, you need at least: client,
datfiles+scripts, one of the engines packages, depending on the web
server you use, and plugins+tools. If you are unsure, or if you want to try out
everything, you can also unpack all the packages together; they do not conflict
with each other (well, actually the engine packages do, because they all contain
sample configuration files of the same name, but these are in fact identical). If
you have unzip.exe in your path and you want to unpack all the packages, do
the following:
C:\>cd Livelink\wcm\type1
C:\Livelink\wcm\type1>for %f in (c:\temp\livelink*.zip) do unzip %f
If you are prompted whether you want to overwrite an already existing sample
configuration file in sampleconf, respond [A] (always) or [N] (never) (it does not
matter).You can also try and use the -o switch in order to avoid these prompts
and overwrite any existing files.
Then skip the next step and go straight to “Prepare the Database”.
Copy files (If you have already unpacked the ZIP archives in the last step, just skip this one.)
manually Log in as Administrator, start a command line, and enter the following (we
assume the WCM Server distribution CD is placed in the CDROM drive on drive
D:):
bin\replication.exe
C:\Livelink\wcm\type1>copy “D:\Windows\Presentation Serv
er\SessionManagement\SessionManagement.exe” bin\sessionmanagement.exe
C:\Livelink\wcm\type1>copy “D:\Windows\Presentation Serv
er\SessionManagement\SessionManagement3.pdb” bin\SessionManagement3.pdb
C:\Livelink\wcm\type1>copy “D:\Windows\Tools\SQLTransfer\*.*” bin
C:\Livelink\wcm\type1>copy
“D:\Documentation\Manuals\SiteAdmin_Reference.chm bin
C:\Livelink\wcm\type1>copy D:\Windows\Tools\TaskAgent\TaskAgent.exe
bin\taskagent.exe
C:\Livelink\wcm\type1>copy “D:\Databases\Examples\*.*” dat
C:\Livelink\wcm\type1>copy “D:\Databases\Site Manager\*.*” dat
C:\Livelink\wcm\type1>copy D:\Configuration\*.cfg sampleconf
C:\Livelink\wcm\type1>copy D:\Databases\Scripts\*.* scripts
C:\Livelink\wcm\type1>copy D:\Configuration\UnicodeMaps\*.* maps
C:\Livelink\wcm\type1>copy D:\Solutions\Word Authoring\*.* word
Comments The creation and administration of a new database for Microsoft SQL Server is
done using the SQL Enterprise Manager.
MS SQL Server must not be installed with case-sensitive settings! Also, SQL
Server and Windows authentication in the server properties’ Security
tab must be enabled.
Important
2. Choose your server and open the Security folder by double-clicking, then
right-click Login and select New Login… from the context menu. The SQL
Server Login Properties dialog will open.
3. Enter the login ID for the user in the Name field, e.g. wcmowner.
4. Then select SQL Server Authentication and enter a password for the
user. SQL Server will present a dialog for password confirmation.
5. Right-click on Databases and select New Database… from the context
menu. The Database Properties dialog will open.
6. Enter the database name (wcmstarter) in the Name field.
7. Right-click on the created database and select Properties from the context
menu. The Properties dialog will open.
8. Select Simple for the recovery model within Options. The “Simple”
recovery model is usually sufficient for the WCM Server.
9. Then change the database owner for the WCM Server databases. To do this,
open the SQL Server Query Analyzer from the program group in the
Start menu or from the Tools menu in the Enterprise Manager. If the
SQL Server Query Analyzer is launched from the Enterprise
Manager, it will usually show the last selected database.
10. Use the SQL Server command sp_changedbowner to change the database
owner.
11. Command input: sp_changedbowner %owner%, true
12. For example, if you used the name wcm_owner for the new user, type:
To execute a SQL Server command, click the green Play button in the
toolbar, select Execute from the Query menu or press the [F5] key.
Repeat the steps starting with step 5 for the remaining two databases (wcmdemo
and wcmsitemanager).
Create the table The script SiteDatabase-Create-R95-mssql.sql will be used to create the
structure table structure for the new database.
Create ODBC 1. Open the Data Sources (ODBC) control panel (for Windows 2000 or later it
connections to will be found under Administrative Tools).
the databases
2. Add a new ODBC connection under the System DSN tab.
3. Select the driver to be used for the connection. In this case, select SQL
Server. Click Finish.
4. Enter a unique name for the ODBC connection in the Name field. This name
must be specified in the configuration files. We recommend using the same
name as for the database to avoid too many different names.
5. A description may be entered in the corresponding field.
6. Select (local) for the server connection. Click Next.
7. Choose With SQL Server authentication…and enter the database
owner and password.
8. Click the Client Configuration... and select TCP/IP for the network
connection protocol. Click Next.
9. Activate Change the default database to and select your
database. Click Next.
10. Use the default settings here. Click Finish.
11. The Test Data Source... button may be used to test the ODBC
connection. Click OK.
12. Now the new system data source name (DSN) for the ODBC connection will
appear in the list.
Create ODBC DSNs for the other databases in the same way, then close the
ODBC Data Source Administrator dialog by confirming with OK.
Comments For each new web site you have to create a new database user. We are going to
create three different sites, and therefore we need three database users. These
users are: wcmdemo (for the example/demo site), wcmstarter (an almost empty
site for you to play with, starting from scratch), and wcmsitemanager (the
WCM Server Site Manager aka Content Manager). In our example we suppose
that there exists a tablespace USERS where we store our tables and indexes.
Create new DB 1. Open a new command window: On the Start menu, click Run.
schemata
2. Enter cmd and click OK.
3. Log into the Oracle SQL Server by typing sqlplus on the command prompt
and pressing the [Enter] key.
4. Log in using sys or system. By default, Oracle installs the users system
and sys with the passwords manager and change_on_install
respectively.
5. Create three new users with the connect and resource roles. You can find
the necessary statements below and on top of the
SiteDatabase-Create-R95-oracle.sql script, which we will use to
create the table structure.
This is shown in the following example:
C:\>sqlplus system/manager@mydb
SQL*Plus: Release 9.2.0.5.0 - Production on Tue Sep 9 14:54:17 2003
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production
JServer Release 9.2.0.5.0 - Production
SQL>create user wcmstarter identified by secret default tablespace
users temporary
tablespace temp;
User created.
SQL>create user wcmdemo identified by secret default tablespace users
temporary tablespace
temp;
User created.
SQL>create user wcmsitemanager identified by secret default tablespace
users temporary tablespace
temp;
User created.
SQL>grant connect, resource to wcmstarter, wcmdemo, wcmsitemanager;
Grant succeeded.
SQL>exit
6. Exit sqlplus with “exit”, so that the user system is no longer logged in.
Create the table The script SiteDatabase-Create-R95-oracle.sql will be used to create the
structure table structure for the new databases. This is also done using the command
prompt.
Log into the Oracle SQL Server as the schema owner by typing
C:\>sqlplus wcmstarter/secret@mydb
SQL>@C:\Livelink\wcm\type1\scripts\SiteDatabase-Create-R95-oracle.sql
Log out of the Oracle server with exit after the tables have been created. Repeat
the above two steps for the remaining two users wcmdemo and wcmsitemanager.
Transfer web site Loading web site data to the database is performed with the SQLTransfer tool
data to the (after the WCM Server table structure has been created). The release set includes
database using files for an example database (SiteExample.zip for database/user wcmdemo),
SQLTransfer the Site Manager (formerly known as Content Manager, in file
SiteManager.zip for database/user wcmsitemanager) and a starter database
(SiteStarter.zip for database/user wcmstarter). These files are normal ZIP
archives, containing one single file of the same name as the archive, but with a
.dat extension. The SQLTransfer tool is able to process such archives directly,
you do not need to unpack them first. Analogously, when exporting data, you may
enter a file name with a ZIP extension and SQLTransfer directly creates a
compressed archive. Therefore, as a generalization, such ZIP files are referred to
as “DAT files” as well.
SQLTransfer reads the data from these DAT files and SQL-inserts them into the
tables that have been created in the last step.
9. A warning will be displayed that all data in the tables will be overwritten.
Confirm with Yes to begin loading.
10. When the data transfer is complete, repeat these steps for the remaining two
DAT files and their respective databases/users. Then close the SQLTransfer
tool.
11. You probably don’t want to save the transfer script and protocol, therefore
say No when asked whether you want to save changes.
Intro The CMEngine cache has a per-process cache and a per-process database
connection pool. When the web server more than one process, it takes several
requests to fill the cache of all of them. If the load on the web server decreases
(i.e. there are less simultaneous requests), and the web server drops superfluous
processes, then all their cache contents are lost. When, upon increasing load, the
web server starts creating new server processes, they are recreated with an empty
cache. Such behaviour is very bad for performance. IIS and Sun Web Server both
only use one process in their default configuration, and therefore you will not
encounter this problem if you don’t change it. Apache, on the other hand, must
explicitely be configured to use a constant number of processes. Please see the
respective paragraph below for configuration details.
Reasons for If your server has more than one CPU (especially if it has more than two), you
using more than might want to use an equal number of web server processes and (especially under
one process Solaris) bind each of them to a CPU. Binding a process to a CPU is done with the
pbind command under Solaris, and by setting the process's affinity under
Windows. Linux does not currently support processor binding.
If you decide to run more than one process, please make sure that the number of
processes remains the same, no matter if the load is high or not, for the reasons
outlined above.
If you have a machine with only two processors, or if you have more but your
web site does not have many requests to serve concurrently, then you should
probably do it the easy way and use only one web server process.
3.3.6 Configure the Web Server: Microsoft Internet Information Service 5.0
(Windows 2000)
17. Edit the configuration files for the corresponding databases (see Modifying
the CFG Files).
18. To activate changes in the configuration file, it is not enough to stop and
restart the web server using the Internet Service Manager, because the
DLL’s will not be reloaded. Restart the World Wide Web Publishing
service. Restarting the service flushes the DLL’s from memory and reloads
everything anew, including the new configuration.
Multiple web sites can also be operated under the default web site of the web
server with the same configuration file, using customized section entries.
Tip If the default web site is not being used but rather several virtual servers, loading
the DLL’s is not done in the web site properties but instead one level higher in the
properties of the web server: Right-click the Default Web Site and select the
server properties. Then in the Master Properties section, click Edit… for the
WWW Service. (Configuring the filter is done as in step 12.)
To replace the engines with a new version, the web server must be stopped before
the DLLs may be overwritten! The web server must also be restarted if the
configuration file has been changed.
Tip
The user running the web server (usually a user called “IUSR_…”) must have at
least “read and execute” permissions on the files. Although the ISAPI filters show
up green, the IIS web server will hang immediately after the first request if the
Tip
NTFS permissions are not set correctly.
In contrast to other web servers, the engine for IIS must be called cmengine.dll
and must not be renamed!
Important
3.3.7 Configure the Web Server: Microsoft Internet Information Service 6.0
(Windows 2003)
Note In contrast to earlier versions of Windows, the Windows Server 2003 has a
restrictive permission set by default. This means that you have to explicitly allow
a user file system access, or an ISAPI filter to run inside the web server
application pools.
Verify file system Start an Explorer window and display the properties of
permissions C:\Livelink\wcm\type1\bin. Go to Security → Advanced → Effective
Rights and select IIS_WPG. Make sure that this group has read permissions in
this directory. Then do the same for the C:\Livelink\wcm\type1\cache and
C:\Livelink\wcm\type1\logs directories. Here, IIS_WPG should have read
and write rights. If you are using Oracle, give the IIS_WPG group read and
execute access to C:\Oracle, C:\Oracle\Ora92 and C:\Oracle\ora92\bin
(or whereever your ORACLE_BASE and ORACLE_HOME are located).
Create virtual 1. Set up a new virtual directory named iisengine, which references the
directory directory with the DLLs and related configuration files, using the Internet
Service Manager. It is mandatory that the new application use this name.
2. Right-click Default Web Site, point to New and click Virtual
Directory.
3. When the Virtual Directory Creation Wizard appears, click Next. It is
mandatory that the virtual directory be named iisengine and point to the
directory with the DLLs and related configuration files. Confirm with Next.
4. Click Browse... and select the directory with the DLLs and related
configuration files (C:\Livelink\wcm\type1\bin). Confirm with Next.
5. In the permissions dialog, select Execute (such as ISAPI
applications or CGI) and deselect Read.
6. Click Finish to exit the wizard and complete configuration. The virtual
directory has been created. The WCM Server files can be seen in the right
window frame.
7. Right-click the virtual directory iisengine and select Properties.
The next step is to adapt the configuration files to your environment, see page 83
Provided that you have already edited your cmengine.cfg, open a browser and
do a first hit on your WCM Server web site. Then reopen the properties dialog
and select the ISAPI Filters tab. The DLL should now be loaded and marked
green as shown below. If a DLL is not loaded (red arrow pointing down), it could
be that the associated configuration file has an incorrect name and could not be
found. (Please note that, in contrast to older versions of IIS, the green arrow is
only shown after the first hit to your web site!).
In contrast to other web servers, the engine for IIS must be called cmengine.dll
and must not be renamed!
Important
Procedure Open the httpd.conf file for the Apache web server. This may be done using an
ordinary text editor. The file is usually located under C:\Program
Files\Apache Group\Apache2\conf\httpd.conf.
The following line must be appended to the bottom of httpd.conf for the
CMEngine:
LoadModule CMEngine_Module
"C:/Livelink/wcm/type1/server/bin/cmengine-ap2.dll"
Important The order of the lines defines the order of loading and initializing and it is
important to set the engine as the last module to be initialized.
Important Please remove (or comment out) the following lines from your httpd.conf in
order to avoid ‘Page not found’ problems when using the CMEngine:
This module tries to convert accesses to a directory /foo/ into a localized index
page like /foo/index.html.en, and as this module can be called before the
CMEngine handles the request, you will get a 404 error message, because a WCM
database usually doesn’t contain page names like index.html.en.
3.3.9 Configure the Web Server: Sun Java System Web Server 6.1 (aka iPlanet)
Procedure 1. Open the magnus.conf file. This may be done using an ordinary text editor.
The file is usually located under
C:\iPlanet\Servers\https-yourserver\config\magnus.conf.
Add the following lines to magnus.conf (Note that there must not be a line
break on the Init… line, and no spaces in the argument to funcs):
2. Open the obj.conf file. The file is located in the same directory as
magnus.conf.
Add the following lines to obj.conf:
To replace the engines with a new version, the web server must be stopped before
the DLL’s can be overwritten! The web server must also be restarted if the
configuration file has been changed.
Tip
Important 1. Read first: We advise you to read through this document before you start
with the installation.
2. In this text, the character $ is representative for the prompt in any desired
shell (bash, ksh, and so on). This character doesn’t need to be entered. The
prompt # stands for any desired shell if you are logged in as root. A bold
monospaced font distinguishes text that you have to type in from system
messages, which are set in plain monospaced font.
3. This chapter is meant to be a “Quick Start” chapter, which should provide
you with a standard installation in a minimal amount of time. If you are
looking for more detailed explanations, or if you would like to use a web
server other than Apache 2, please have a look at the “Manual Setup”
chapters.
4. When installing under Red Hat Enterprise Linux 4, you have to install the
compat-libstdc++-33 package.
Oracle installation, see the appendix of this manual and the relevant Oracle
documentation.
Create a runtime In order to run the web server and the various daemons, create a user (and group)
user and unpack that has the minimal permissions necessary for these tasks:
archives
# groupadd livelink
# useradd –c “Livelink Runtime User” –d /opt/livelink –g livelink livelink
# passwd livelink
New Password:
Re-enter new Password:
passwd: password successfully changed for livelink
# chown root:root /opt/livelink
# chmod 755 /opt/livelink
# cd /opt/livelink
# mkdir -p wcm/type1
# chown root:other .profile
# chmod 755 .profile
# vi .profile
:$
o
EDITOR=vi
WCM1_HOME=/opt/livelink/wcm/type1
OBTREE_HOME=/opt/livelink/wcm/type1/conf
ORACLE_HOME=/opt/oracle/product/10.1.0
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15
JAVA_HOME=/usr/java/j2sdk
# i386 or sparc
arch=i386
PATH=${PATH}:${ORACLE_HOME}/bin:${WCM1_HOME}/bin
LD_LIBRARY_PATH=${WCM1_HOME}/lib:${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${JAVA_HOME}/jre/lib/${arch}
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${JAVA_HOME}/jre/lib/${arch}/server
export EDITOR WCM1_HOME OBTREE_HOME ORACLE_HOME NLS_LANG
export JAVA_HOME PATH LD_LIBRARY_PATH WCM1_HOME
:wq
# cd /opt/livelink/wcm/type1
# for file in /tmp/livelink-*.tar.gz
> do
> gzip –cd $file | tar xvf –
> done
# cd bin
# cp ../sampleconf/livelink-wcm-type1-9.5.0.nnn livelink-wcm-type1
# chmod +x livelink-wcm-type1
Create database For each new web site you have to create a new database user. We are going to
schemata create three different sites, and therefore we need three database users. These
users are: wcmdemo (for the obtree.com example), wcmstarter (an almost
empty site for you to play with, starting from scratch), and wcmsitemanager
(the new WCM Server Site Manager, formerly known as Content Manager). In
our example we suppose that there exists a tablespace USERS where we store our
tables and indexes. You can find the statements to create a database user below
and on top of the SiteDatabase-Create-R95-oracle.sql script, which we
will use soon after this to create the table structure.
# su - oracle
$ sqlplus ”/ as sysdba”
Connected to:
Oracle Database 10g Release 10.1.0.2.0 - Production
SQL> create user wcmdemo identified by secret default tablespace users tem
porary tablespace temp;
User created.
SQL> create user wcmstarter identified by secret default tablespace users
temporary tablespace temp;
User created.
SQL> create user wcmsitemanager identified by secret default tablespace
users temporary tablespace temp;
User created.
Import web site In order to create the table and index structure and import the web site data in our
data freshly created schemas, a couple of scripts
(/opt/livelink/wcm/type1/scripts/import-{sitemanager,
siteexample,sitestarter}.sqx) are provided. You have to edit them and
change the default database login parameters on line 12 to the ones that apply to
your installation. If you have followed the above instructions exactly, you only
have to change the database name:
# cd /opt/livelink/wcm/type1/scripts
# vi import-sitemanager.sqx
:12s/wcm/mydatabasename/
:wq
# vi import-siteexample.sqx
:12s/wcm/mydatabasename/
:wq
# vi import-sitestarter.sqx
:12s/wcm/mydatabasename/
:wq
Now run the scripts. We do this as user “livelink” in order to make sure that we
have the correct environment variables set for Oracle:
# su – livelink
$ cd scripts
$ ./import-sitemanager.sqx
************************************************
Processing script
‘./import-sitemanager.sqx’.
Transfer time is 13.05.2004 19:37:13.
[…]
Transferred totally 10579 of 10579 rows (0 skipped, 0 errors).
Transfer ended.
[…]
Make sure that both numbers in the “Transferred totally” line are equal. If they
are, go on with the other two scripts.
$ ./import-siteexample.sqx
$ ./import-sitestarter.sqx
$ exit
# cd /opt/livelink/wcm/type1/conf
# cp ../sampleconf/cmengine-9.5.0.nnn.cfg cmengine.cfg
LICENSEKEY=
LICENSEHOLDER=
CM_DBNAME=
CM_DBUSER=wcmsitemanager
CM_DBPWD=secret
Then delete the section called [help] (if any) and edit section [mysite]. First
rename the section to [demo], then:
Now copy section [demo] and rename the copy to [starter]. Then change:
URLMAGIC=/starter
DBUSER=wcmstarter
Set up and You can either use a precompiled version of Apache, (e.g. from
configure http://www.sunfreeware.com/ for Solaris, or the one which is part of your Linux
Apache 2 distribution) or compile one yourself. If you choose to use a precompiled Apache,
it is very important that you make sure it has been compiled with the “worker”
MPM.
Using an Apache which has not been compiled with the “worker” MPM has a
major (negative) impact on performance and is neither recommended nor
supported.
Important
You can verify whether your Apache has been compiled with the “worker” MPM
by using the -l switch:
$ ./httpd -l
Compiled in modules:
core.c
mod_access.c
mod_auth.c
mod_include.c
mod_log_config.c
mod_env.c
mod_setenvif.c
worker.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_cgid.c
mod_negotiation.c
mod_dir.c
mod_imap.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_so.c
If you cannot find worker.c in this list, it means that Apache has not been
compiled with the “worker” MPM, and you should compile one yourself.
In order to compile Apache yourself, you need a compiler and a linker installed
on your machine. Then get the source from http://httpd.apache.org/ or one of its
mirrors and enter the following commands:
# cd /usr/local/src
# gzip -cd /tmp/httpd-2.0.54.tar.gz | tar xvf -
# cd httpd-2.0.54
# ./configure --with-mpm=worker --prefix=/opt/apache2
[...]
# make
# make install
# cd /opt/apache2/conf
# vi httpd.conf
:134 [change these lines to ensure that only one process is running]
StartServers 1
MaxClients 64
MinSpareThreads 1
MaxSpareThreads 64
ThreadsPerChild 64
ServerLimit 1
:267 [change these lines to make Apache run under our runtime user]
User livelink
Group livelink
:291 [change this line to set the server name that is visible from outside]
ServerName www.myserver.com:80
:394 [comment out this line to avoid “CMEngine Page Not Found” errors]
#DirectoryIndex index.html index.html.var
:$ [add this line at the end to load the CMEngine]
LoadModule CMEngine_Module /opt/livelink/wcm/type1/lib/cmengine-ap2.so
. /opt/livelink/.profile
so that all environment variables are set correctly. Now you can start Apache:
# /opt/apache2/bin/apachectl start
Livelink WCM Server – Presentation Server 9.5.0 SP1 (CMEngine Build nnn)
compiled May 5 2004 - 13:39:59 for SunOS - APACHE 2 API - DB2/UDB ORACLE SYBASE
includes
Livelink WCM Server – Presentation Server 9.5.0 SP1 (WebEngine Build nnn)
-
(c) 1997-2005 by Open Text Corporation
If you don’t get a screen like this, there is probably something wrong with the
configuration:
/opt/livelink/wcm/type1/logs?
• Is the URLMAGIC in cmengine.cfg set correctly (URLMAGIC=/demo)?
http://www.myserver.com/demo?about=connect
Livelink WCM Server – Presentation Server 9.5.0 SP1 (CMEngine Build nnn)
compiled May 5 2004 - 15:17:02 for SunOS - APACHE 2 API - DB2/UDB ORACLE SYBASE
includes
Livelink WCM Server – Presentation Server 9.5.0 SP1 (WebEngine Build nnn)
-
(c) 1997-2005 by Open Text Corporation
Database Connection OK
If you don’t get a “Database Connection OK”, there must be something wrong
with the Oracle configuration:
• Are the database name, user name and password (DBNAME, DBUSER, DBPWD)
correct? You can verify this like this:
# su – livelink
$ tnsping mydatabasename
$ sqlplus wcmdemo/secret@mydatabasename
• Does the user which Apache runs as have read access to everything below
/opt/oracle, especially
/opt/oracle/product/10.1.0/lib/libclntsh.so?
• Are the environment variables in /opt/livelink/.profile set correctly?
http://www.myserver.com/demo and
http://www.myserver.com/starter
and enjoy!
Important 1. We advise you to read through this document before you start with the
installation.
2. In this text, the character $ is representative for the prompt in any desired
shell (bash, ksh, and so on). This character doesn’t need to be entered. The
prompt # stands for any desired shell if you are logged in as root. A bold
monospaced font distinguishes text that you have to type in from system
messages, which are set in plain monospaced font.
Note The authorization of all files or directories that were created, copied or changed
with FTP have to be checked. If the web server’s file permissions for the WCM
Server component (CMEngine) are not sufficient, the modules/files cannot be
used. Unfortunately the web server does not always send an error message in that
case, so that the search for the cause of the problem can be very time-consuming.
Create a runtime In order to run the web server and the various daemons, create a user (and group)
user and unpack that has the minimal permissions necessary for these tasks:
archives
# groupadd livelink
# useradd –c “Livelink Runtime User” –d /opt/livelink –g livelink livelink
# passwd livelink
New Password:
Re-enter new Password:
passwd: password successfully changed for livelink
PATH=${PATH}:${ORACLE_HOME}/bin:${WCM1_HOME}/bin
LD_LIBRARY_PATH=${WCM1_HOME}/lib:${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib:${JA
VA_HOME}/jre/lib/${arch}:${JAVA_HOME}/jre/lib/${arch}/server
export EDITOR WCM1_HOME OBTREE_HOME ORACLE_HOME NLS_LANG
export JAVA_HOME PATH LD_LIBRARY_PATH WCM1_HOME
:wq
#
# cd /opt/livelink/wcm/type1
# for file in /tmp/livelink-*.tar.gz
> do
> gzip –cd $file | tar xvf –
> done
# cd bin
# cp ../sampleconf/livelink-wcm-type1-9.5.0.nnn livelink-wcm-type1
# chmod +x livelink-wcm-type1
# for dir in rc0.d rc1.d rc2.d rcS.d; do
> (cd /etc/$dir && ln –s /opt/livelink/wcm/type1/bin/livelink-wcm-type1
K02livelink-wcm-type1)
> done
# (cd rc3.d && ln –s /opt/livelink/wcm/type1/bin/livelink-wcm-type1
S98livelink-wcm-type1)
Create Livelink In order to run the web server and the various daemons, create a user (and group)
user and group that has the minimal permissions necessary for these tasks:
# groupadd livelink
# useradd –c “Livelink Runtime User” –d /opt/livelink –g livelink livelink
# passwd livelink
New Password:
Re-enter new Password:
passwd: password successfully changed for livelink
PATH=${PATH}:${ORACLE_HOME}/bin:${WCM1_HOME}/bin
LD_LIBRARY_PATH=${WCM1_HOME}/lib:${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib:${JA
VA_HOME}/jre/lib/${arch}:${JAVA_HOME}/jre/lib/${arch}/server
export EDITOR WCM1_HOME OBTREE_HOME ORACLE_HOME NLS_LANG
export JAVA_HOME PATH LD_LIBRARY_PATH WCM1_HOME
:wq
#
Create directories The cache and logs directories are assigned to the group the web server runs as,
in order to give the cmengine.so write access to them:
# mkdir backup bin cache conf dat lib logs maps sampleconf scripts
Copy files Mount the WCM Server distribution CD and copy the necessary files, still as user
root (you don’t have to copy all of the files mentioned here, just the ones you
need; if you are unsure, copy them all). In our example, the CD is mounted on
/cdrom/cdrom0:
cd /opt/livelink/wcm/type1
cp /cdrom/cdrom0/Solaris/Presentation\ Server/LDAP/ldapplugin bin/
ldapplugin-9.5.0.nnn
cp /cdrom/cdrom0/Solaris/Tools/Replication/replication bin/replica
tion-9.5.0.nnn
cp /cdrom/cdrom0/Solaris/Presentation\ Server/SessionManage
ment/sessionmanagement bin/sessionmanagement-9.5.0.nnn
cp /cdrom/cdrom0/Solaris/Tools/SQLTransfer/sqltransfer bin/sql
transfer-9.5.0.nnn
cp /cdrom/cdrom0/Solaris/Tools/Deployment/deployment bin/deploy
ment-9.5.0.nnn
cp /cdrom/cdrom0/Solaris/Tools/TaskAgent/taskagent bin/taskagent-9.5.0.nnn
for file in /cdrom/cdrom0/Configuration/*.cfg
do
dos2unix $file sampleconf/`basename $file .cfg`-9.5.0.nnn.cfg
done
mv sampleconf/ldap-9.5.0.nnn.cfg sampleconf/ldapplugin-9.5.0.nnn.cfg
dos2unix /cdrom/cdrom0/Databases/Examples/_engine-demosite.cfg sampleconf/
_engine-demosite-9.5.0.nnn.cfg
for file in `find /cdrom/cdrom0/Databases -name '*.zip'`
do
cp $file dat/`basename $file .zip`-9.5.0.nnn.zip
done
cp /cdrom/cdrom0/Solaris/Presentation\ Server/Apache\ 2.0/cmengine.so lib/
cmengine-ap2-9.5.0.nnn.so
cp /cdrom/cdrom0/Solaris/Presentation\ Server/SunONE/cmengine.so lib/
cmengine-ns-9.5.0.nnn.so
cp /cdrom/cdrom0/Solutions/Java\ Connectivity/LiveConnect/liveconnect.jar
lib/
cp /cdrom/cdrom0/Solaris/Presentation\ Server/LDAP/LibrariesV5/* lib/
cp /cdrom/cdrom0/Solaris/Presentation\ Server/LDAP/libldapsslsc.so lib/
cp /cdrom/cdrom0/Solaris/Presentation\ Server/Livelink\ Enterprise/
liblapi.so.1.0 lib/
cp /cdrom/cdrom0/Solaris/Presentation\ Server/Livelink\ Enterprise/
liblladapter.so lib/
cp /cdrom/cdrom0/Solaris/Presentation\ Server/Livelink\ Enterprise/
libllkernel.so lib/
for file in /cdrom/cdrom0/Databases/Scripts/*-oracle.sql
do
dos2unix $file scripts/`basename $file`
done
cp /cdrom/cdrom0/Configuration/UnicodeMaps/* maps/
chmod +x bin/*
chmod -x dat/*
chmod -x lib/*
chmod +x lib/*.so
chmod -x maps/*
Create links
cd /opt/livelink/wcm/type1/bin
for file in ldapplugin replication sessionmanagement sqltransfer deployment
taskagent
do
ln -s $file-9.5.0.nnn $file
done
cd ../lib
ln -s cmengine-ap2-9.5.0.nnn.so cmengine-ap2.so
ln -s cmengine-ns-9.5.0.nnn.so cmengine-ns.so
ln –s liblapi.so.1.0 liblapi.so
cd ../dat
ln –s sitemanager-9.5.0.nnn.zip sitemanager.zip
ln –s sitestarter-9.5.0.nnn.zip sitestarter.zip
ln –s demosite-9.5.0.nnn.zip demosite.zip
cd ../scripts
ln –s SiteDatabase-Create-R95-oracle.sql sitedb95.sql
ln –s SiteReplControlDB-Create-R95-oracle.sql siterepl95.sql
Create a startup In order to have the standalone WCM Server components started on system boot,
script create the startup script as follows (the relevant parts are commented out, so the
script does nothing at this time; the comments will eventually be removed later as
needed, depending on your setup):
# vi /opt/livelink/wcm/type1/bin/livelink-wcm-type1
#!/bin/sh
. /opt/livelink/.profile
PATH=/usr/bin:/bin; export PATH
WCM1_USER=livelink
######################################
# usage
######################################
usage()
{
echo "Usage: $0 [start|stop]"
echo
}
######################################
# killall processname_pattern
######################################
killall()
{
ps –e | \
grep –v "<defunct>" | \
grep "$1" | \
awk '{ print $1 }' | \
xargs kill
}
######################################
# main
######################################
case "$1" in
start)
cd ${WCM1_HOME}/logs
ulimit –c unlimited
# su ${WCM1_USER} –c "${WCM1_HOME}/bin/cmengine renderer1
20333" > /dev/null 2>&1 &
# su ${WCM1_USER} –c "${WCM1_HOME}\ /bin/sessionmanagement
–CfgFile: ${WCM1_HOME}/conf/sessionmanagement.cfg –Service –ChildProc"
>/dev/null 2>&1 &
# su ${WCM1_USER} –c "${WCM1_HOME}/bin/ldapplugin –CfgFile:
${WCM1_HOME}/conf/ldapplugin.cfg –Service –ChildProc" >/dev/null 2>&1 &
# su ${WCM1_USER} –c "${WCM1_HOME}/bin/taskagent –daemon
–conf ${WCM1_HOME}/conf/taskagent.cfg workflowManager \
–macro workflowManager \$user0=admin \
–macro workflowManager \$password0=admin \
–macro workflowManager \$user1=admin \
–macro workflowManager \$password1=admin" >/dev/null 2>&1
echo "Livelink WCM services started."
;;
stop)
# if [ -f /var/tmp/taskagent.pid ]; then kill `cat /
var/tmp/taskagent.pid`; fi
# su ${WCM1_USER} –c "${WCM1_HOME}/bin/ldapplugin –CfgFile:
${WCM1_HOME}/conf/ldapplugin.cfg –Stop" >/dev/null 2>&1
# su ${WCM1_USER} –c "${WCM1_HOME}/bin/sessionmanagement
–CfgFile: ${WCM1_HOME}/conf/sessionmanagement.cfg –Stop" >/dev/null 2>&1
# killall cmengine
echo "Livelink WCM services stopped."
;;
*)
usage
;;
esac
######
# Note: If one of the daemons does not start as it should,
# comment out the redirects to /dev/null at the end of
# the line and try again, so you can see the error
# message, if any.
######
:wq
# chmod +x /opt/livelink/wcm/type1/bin/livelink-wcm-type1
# for dir in rc0.d rc1.d rc2.d rcS.d; do
> (cd /etc/$dir && ln –s /opt/livelink/wcm/type1/bin/livelink-wcm-type1
K02livelink-wcm-type1)
> done
# (cd rc3.d && ln –s /opt/livelink/wcm/type1/bin/livelink-wcm-type1
S98livelink-wcm-type1)
Comments For each new web site, you have to create a new database user. We are going to
create three different sites, and therefore we need three database users. These
users are: wcmdemo (for the obtree.com example), wcmstarter (an almost empty
site for you to play with, starting from scratch), and wcmsitemanager (the
WCM Server Site Manager, aka Content Manager). In our example we suppose
that there exists a tablespace USERS where we store our tables and indexes. You
can find the statements to create a database user below and on top of the
SiteDatabase-Create-R95-oracle.sql script, which we will use to create
the table structure.
Connected to:
Oracle Database 10g Release 10.1.0.2.0 - Production
SQL> create user wcmdemo identified by secret default tablespace users tem
porary tablespace temp;
User created.
SQL> create user wcmstarter identified by secret default tablespace users
temporary tablespace temp;
User created.
SQL> create user wcmsitemanager identified by secret default tablespace
users temporary tablespace temp;
User created.
SQL> grant connect, resource to wcmdemo, wcmstarter, wcmsitemanager;
Grant succeeded.
SQL> exit
Create the table The table structure is created with the help of the script
structure /opt/livelink/wcm/type1/scripts/SiteDatabase-Create-R95-oracle.sql
(sitedb95.sql), which can also be found on the release CD (in the directory
Databases/Scripts). The script uses two different tablespaces (USERS and
INDX) whose names may have to be modified, depending on your setup (e.g. in a
default database created with Oracle 10g, there is no tablespace INDX anymore) .
Do not replace the string USERS if your tablespace is named differently, but
TABLESPACE USERS because there is also a table named USERS. With sed, the
tablespace names can be substituted as follows:
$ cd /opt/livelink/wcm/type1/scripts
$ sed -e 's/TABLESPACE USERS/TABLESPACE DATA/g' -e 's/TABLESPACE INDX/
TABLESPACE INDEX/g' SiteDatabase-Create-R95-oracle.sql >weo950.sql
$ sqlplus wcmdemo/livelink
Connected to:
Oracle Database 10g Release 10.1.0.2.0 - Production
SQL> @weo950
Load the web site With the SQLTransfer script below, you can load a DAT file into a database
data using schema:
SQLTransfer
# vi /opt/livelink/wcm/type1/scripts/import-siteexample.sqx
#!/opt/livelink/wcm/type1/bin/sqltransfer
begin transfer
load from file=/opt/livelink/wcm/type1/dat/siteexample-9.5.0.nnn.zip
usedbversion=Oracle 10.1.0
usedblibrary=/opt/oracle/product/10.1.0/lib/libclntsh.so
env=ORACLE_HOME=/opt/oracle/product/10.1.0
target database type=ORACLE
target database connect=DSN=mydb.mydomain.com;UID=wcmdemo;PWD=secret
usedbrowprefetch=100
set max field size=20000000
end transfer
:wq
# chmod +x /opt/livelink/wcm/type1/scripts/import-siteexample.sqx
# su - livelink
$ /opt/livelink/wcm/type1/scripts/import-siteexample.sqx
As an alternative, you can also generate a script in the Windows GUI version with
Extras and ScriptWizard. The transfer is then started with Start
SQL-Transfer!.
The transfer of the sample database is now executed. Please check after the
termination of the script that the number of transferred rows corresponds with the
number of records in the DAT file.
Again, repeat this step for the remaining users. Instead of siteexample-
9.5.0.nnn.zip, use sitestarter-9.5.0.nnn.zip (wcmstarter), and
sitemanager-9.5.0.nnn.zip (wcmsitemanager).
The databases are now ready for editing with the Site Administrator.
The default login for the system is “admin” with password “admin”.
Tip
Multiprocessing The CMEngine cache has a per-process cache and a per-process database
connection pool. When the web server runs with more than one process, it takes
several requests to fill the cache of all of them. If the load on the web server
decreases (i.e. there are less simultaneous requests), and the web server drops
superfluous processes, then all their cache contents are lost. When, upon
increasing load, the web server starts creating new server processes, they are
recreated with an empty cache. Such behaviour is very bad for performance. IIS
and Sun Web Server both only use one process in their default configuration, and
therefore you will not encounter this problem if you don’t change it. Apache, on
the other hand, must explicitely be configured to use a constant number of
processes. Please see the respective paragraph below for configuration details.
Reasons for If your server has more than one CPU (especially if it has more than two), you
using more than might want to use an equal number of web server processes and (especially under
one process Solaris) bind each of them to a CPU. Binding a process to a CPU is done with the
pbind command under Solaris, and by setting the process’s affinity under
Windows. Linux does not currently support processor binding.
If you decide to run more than one process, please make sure that the number of
processes remains the same, no matter if the load is high or not, for the reasons
outlined above.
You could bind the apache processes with a script like this:
#!/bin/bash
i=0
for pid in $pids
do
proc=$(($i % $noProcs))
pbind -b ${procList[$proc]} $pid
((++i))
done
But this is just an example and you may have to adapt it to your needs. E.g. if you
use Sun ONE Web Server, replace httpd with webservd. If the script works for
you, you could add it to the web server startup script in order to have it executed
each time the server is started.
If you have a machine with only two processors, or if you have more but your
web site does not have many requests to serve concurrently, then you should
probably do it the easy way and use only one web server process.
Setup You can either use a precompiled version of Apache, (e.g. from
http://www.sunfreeware.com/ for Solaris or compile one yourself. If you choose
to use a precompiled Apache, it is very important that you make sure it has been
compiled with the “worker” MPM.
Using an Apache which has not been compiled with the “worker” MPM has a
major (negative) impact on performance and is neither recommended nor
supported.
Important
You can verify whether your Apache has been compiled with the “worker” MPM
by using the -l switch:
$ ./httpd -l
Compiled in modules:
core.c
mod_access.c
mod_auth.c
mod_include.c
mod_log_config.c
mod_env.c
mod_setenvif.c
worker.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_cgid.c
mod_negotiation.c
mod_dir.c
mod_imap.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_so.c
If you cannot find worker.c in this list, it means that Apache has not been
compiled with the “worker” MPM, and you should compile one yourself.
In order to compile Apache yourself, you need a compiler and a linker installed
on your machine. Then get the source from http://httpd.apache.org/ or one of its
mirrors and enter the following commands:
# cd /usr/local/src
# gzcat /tmp/httpd-2.0.xx.tar.gz | tar xvf -
[...]
# cd httpd-2.0.xx
# ./configure --with-mpm=worker --prefix=/opt/apache2
[...]
# make
[...]
# make install
[...]
That way, the Apache web server is installed into the directory /opt/apache2.
User livelink
Group livelink
ServerName www.myserver.com
If you have a single processor machine, set the parameters enclosed by the
<IfModule worker.c> tag as follows:
<IfModule worker.c>
ServerLimit 1
StartServers 1
MaxClients 64
MinSpareThreads 1
MaxSpareThreads 64
ThreadsPerChild 64
MaxRequestsPerChild 0
</IfModule>
Make sure you add the ServerLimit parameter, which is not there in the
original httpd.conf.
If you have more than one processor, these values could be set according to the
following schema:
<IfModule worker.c>
ServerLimit [ number of processors ]
StartServers [ number of processors ]
MaxClients [ number of processors * 64 ]
MinSpareThreads [ (number of processors - 1) * 64 + 1 ]
MaxSpareThreads [ number of processors * 64 ]
ThreadsPerChild 64
MaxRequestsPerChild 0
</IfModule>
Important Please comment out the following lines from your httpd.conf in order to avoid
‘Page not found’ problems when using the CMEngine:
This module tries to convert accesses to a directory /foo/ into a localized index
page like /foo/index.html.en, and as this module can be called before the
CMEngine handles the request, you will get a 404 error message, because a WCM
Server database usually doesn’t contain a page named index.html.en.
. /opt/livelink/.profile
# /opt/apache2/bin/apachectl start
3.5.6 Configure the Web Server: Sun Java System Web Server 6.1 (aka iPlanet)
Configuration As a default, Sun Web Server is installed in the directory /opt/SUNWwbsvr (and
iPlanet in /usr/iplanet/servers). There exists a directory for each web
server instance below that, in our case https-livelink. In this directory, you
will find among others the directories config (configuration files) and logs (log
files).
magnus.conf In the directory config, the file magnus.conf has to be edited. (Line breaks are
marked with an [↵] at the end.)
…
<end of the initialization entries>
…
<Object name=default>
…
<end of the object type entries>
ObjectType fn=CMEngine_ObjectType↵
…
<end of the service method entries>
Service method=(GET|HEAD|POST) type=magnus-internal/cmengine
fn=CMEngine_Service↵
…
</Object>
…
. /opt/livelink/.profile
Important 1. We advise you to read through this document before you start with the
installation.
2. In this text, the character $ is representative for the prompt in any desired
shell (bash, ksh, and so on). This character doesn’t need to be entered. The
prompt # stands for any desired shell if you are logged in as root. A bold
monospaced font distinguishes text that you have to type in from system
messages, which are set in plain monospaced font.
3. When installing under Red Hat Enterprise Linux 4, you have to install the
compat-libstdc++-33 package.
Note The authorization of all files or directories that were created, copied or changed
with FTP have to be checked. If the web server’s file permissions for the WCM
Server component (CMEngine) are not sufficient, the modules/files cannot be
used. Unfortunately the web server does not always send an error message in that
case, so that the search for the cause of the problem can be very time-consuming.
Create a runtime In order to run the web server and the various daemons, create a user (and group)
user and unpack that has the minimal permissions necessary for these tasks:
archives
# groupadd livelink
# useradd –c "Livelink Runtime User" –d /opt/livelink –g livelink livelink
# passwd livelink
New Password:
Re-enter new Password:
passwd: password successfully changed for livelink
PATH=${PATH}:${ORACLE_HOME}/bin:${WCM1_HOME}/bin
LD_LIBRARY_PATH=${WCM1_HOME}/lib:${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib:${JA
VA_HOME}/jre/lib/${arch}:${JAVA_HOME}/jre/lib/${arch}/server
export EDITOR WCM1_HOME OBTREE_HOME ORACLE_HOME NLS_LANG
export JAVA_HOME PATH LD_LIBRARY_PATH WCM1_HOME
:wq
# cd /opt/livelink/wcm/type1
# for file in /tmp/livelink-*.tar.gz
> do
> gzip –cd $file | tar xvf –
> done
# cd bin
# cp ../sampleconf/livelink-wcm-type1-9.5.0.nnn livelink-wcm-type1
# chmod +x livelink-wcm-type1
# (cd /etc/init.d && ln -s /opt/livelink/wcm/type1/bin/livelink-wcm-type1
.)
# chkconfig --add livelink-wcm-type1
Create Livelink In order to run the web server and the various daemons, create a user (and group)
user and group that has the minimal permissions necessary for these tasks:
# groupadd livelink
# useradd –c "Livelink Runtime User" –d /opt/livelink –g livelink livelink
# passwd livelink
PATH=${PATH}:${ORACLE_HOME}/bin:${WCM1_HOME}/bin
LD_LIBRARY_PATH=${WCM1_HOME}/lib:${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib:${JA
VA_HOME}/jre/lib/${arch}:${JAVA_HOME}/jre/lib/${arch}/server
export EDITOR WCM1_HOME OBTREE_HOME ORACLE_HOME NLS_LANG
export JAVA_HOME PATH LD_LIBRARY_PATH WCM1_HOME
:wq
Create directories The cache and logs directories are assigned to the group the web server runs as,
in order to give the cmengine.so write access to it:
# mkdir backup bin cache conf dat lib logs maps sampleconf scripts
# mkdir cache/cmengine cache/session cache/vo
# chmod -R 775 cache logs
# chgrp -R livelink cache logs
Copy files Mount the WCM Server distribution CD and copy the necessary files, still as user
root (you don’t have to copy all of the files mentioned here, just the ones you
need; if you are unsure, copy them all). In our example, the CD is mounted on
/mnt/cdrom.
cd /opt/livelink/wcm/type1
cp /mnt/cdrom/Linux/Presentation\ Server/LDAP/ldapplugin bin/ldap
plugin-9.5.0.nnn
cp /mnt/cdrom/Linux/Tools/Replication/replication bin/replication-9.5.0.nnn
cp /mnt/cdrom/Linux/Presentation\ Server/SessionManage
ment/sessionmanagement bin/sessionmanagement-9.5.0.nnn
cp /mnt/cdrom/Linux/Tools/SQLTransfer/sqltransfer bin/sqltransfer-9.5.0.nnn
cp /mnt/cdrom/Linux/Tools/Deployment/deployment bin/deployment-9.5.0.nnn
cp /mnt/cdrom/Linux/Tools/TaskAgent/taskagent bin/taskagent-9.5.0.nnn
for file in /mnt/cdrom/Configuration/*.cfg
do
sed -e 's/^M//' $file > sampleconf/`basename $file
.cfg`-9.5.0.nnn.cfg
done
mv sampleconf/ldap-9.5.0.nnn.cfg sampleconf/ldapplugin-9.5.0.nnn.cfg
sed -e 's/^M//' /mnt/cdrom/Databases/Examples/_engine-demosite.cfg >
sampleconf/_engine-demosite-9.5.0.nnn.cfg
for file in `find /mnt/cdrom/Databases -name '*.zip'`
do
cp $file dat/`basename $file .zip`-9.5.0.nnn.zip
done
cp /mnt/cdrom/Linux/Presentation\ Server/Apache\ 2.0/cmengine.so lib/
cmengine-ap2-9.5.0.nnn.so
cp /mnt/cdrom/Solutions/Java\ Connectivity/LiveConnect/liveconnect.jar lib/
cp /mnt/cdrom/Linux/Presentation\ Server/LDAP/LibrariesV5/* lib/
cp /mnt/cdrom/Linux/Presentation\ Server/LDAP/libldapsslsc.so lib/
for file in /mnt/cdrom/Databases/Scripts/*-oracle.sql
do
sed -e 's/^M//' $file > scripts/`basename $file`
done
chmod +x bin/*
chmod -x dat/*
chmod -x lib/*
chmod +x lib/*.so
chmod -x maps/*
Create links
cd /opt/livelink/wcm/type1/bin
for file in ldapplugin replication sessionmanagement sqltransfer deployment
taskagent
do
ln -s $file-9.5.0.nnn $file
done
cd ../lib
ln -s cmengine-ap2-9.5.0.nnn.so cmengine-ap2.so
cd ../dat
ln –s sitemanager-9.5.0.nnn.zip sitemanager.zip
ln –s sitestarter-9.5.0.nnn.zip sitestarter.zip
ln –s demosite-9.5.0.nnn.zip demosite.zip
cd ../scripts
ln –s SiteDatabase-Create-R95-oracle.sql sitedb95.sql
ln –s SiteReplControlDB-Create-R95-oracle.sql siterepl95.sql
Create a startup In order to have the standalone WCM Server components started on system boot,
script create the startup script as follows (the relevant parts are commented out, so the
script does nothing at this time; the comments will eventually be removed later as
needed, depending on your setup):
# vi /opt/livelink/wcm/type1/bin/livelink-wcm-type1
#!/bin/sh
# chkconfig: 35 99 01
# description: Start and stop WCM Server components
. /opt/livelink/.profile
PATH=/usr/bin:/bin; export PATH
WCM1_USER=livelink
######################################
# usage
######################################
usage()
{
echo "Usage: $0 [start|stop]"
echo
}
######################################
# main
######################################
case “$1” in
start)
cd ${WCM1_HOME}/logs
ulimit –c unlimited
# su ${WCM1_USER} –c “${WCM1_HOME}/bin/cmengine renderer1
20333” > /dev/null 2>&1 &
# su ${WCM1_USER} –c “${WCM1_HOME}/bin/sessionmanagement
–CfgFile: ${WCM1_HOME}/conf/sessionmanagement.cfg –Service –ChildProc”
>/dev/null 2>&1 &
# su ${WCM1_USER} –c “${WCM1_HOME}/bin/ldapplugin –CfgFile:
${WCM1_HOME}/conf/ldapplugin.cfg –Service –ChildProc” >/dev/null 2>&1 &
# su ${WCM1_USER} –c “${WCM1_HOME}/bin/taskagent –daemon
–conf ${WCM1_HOME}/conf/taskagent.cfg workflowManager
–macro workflowManager \$user0=admin \
–macro workflowManager \$password0=admin \
–macro workflowManager \$user1=admin \
–macro workflowManager \$password1=admin” >/dev/null 2>&1
echo “Livelink WCM services started.”
;;
stop)
# if [ -f /var/tmp/taskagent.pid ]; then kill `cat /
var/tmp/taskagent.pid`; fi
# su ${WCM1_USER} –c “${WCM1_HOME}/bin/ldapplugin –CfgFile:
${WCM1_HOME}/conf/ldapplugin.cfg –Stop” >/dev/null 2>&1
# su ${WCM1_USER} –c “${WCM1_HOME}/bin/sessionmanagement
–CfgFile: ${WCM1_HOME}/conf/sessionmanagement.cfg –Stop” >/dev/null 2>&1
# killall cmengine
echo “Livelink WCM services stopped.”
;;
*)
usage
;;
esac
######
# Note: If one of the daemons does not start as it should,
# comment out the redirects to /dev/null at the end of
# the line and try again, so you can see the error
# message, if any.
######
:wq
# chmod +x /opt/livelink/wcm/type1/bin/livelink-wcm-type1
Comments For each new web site, you have to create a new database user. We are going to
create three different sites, and therefore we need three database users. These
users are: wcmdemo (for the obtree.com example), wcmstarter (an almost empty
site for you to play with, starting from scratch), and wcmsitemanager (the
WCM Server Site Manager, aka Content Manager). In our example we suppose
that there exists a tablespace USERS where we store our tables and indexes. You
can find the statements to create a database user below and on top of the
SiteDatabase-Create-R95-oracle.sql script, which we will use to create
the table structure.
Connected to:
Oracle Database 10g Release 10.1.0.2.0 - Production
SQL> create user wcmdemo identified by secret default tablespace users tem
porary tablespace temp;
User created.
SQL> create user wcmstarter identified by secret default tablespace users
temporary tablespace temp;
User created.
SQL> create user wcmsitemanager identified by secret default tablespace
users temporary tablespace temp;
User created.
SQL> grant connect, resource to wcmdemo, wcmstarter, wcmsitemanager;
Grant succeeded.
SQL> exit
Create a table The table structure is created with the help of the script
structure /opt/livelink/wcm/type1/scripts/SiteDatabase-Create-R95-oracle.sql
(sitedb95.sql), which can also be found on the release CD (in the directory
Databases/Scripts). The script uses two different tablespaces (USERS and
INDX) whose names may have to be modified, depending on your setup (e.g. in a
default database created with Oracle 10g, there is no tablespace INDX anymore) .
Do not replace the string USERS if your tablespace is named differently, but
TABLESPACE USERS because there is also a table named USERS. With sed, the
tablespace names can be substituted as follows:
$ cd /opt/livelink/wcm/type1/scripts
$ sed -e 's/TABLESPACE USERS/TABLESPACE DATA/g' -e 's/TABLESPACE INDX/
TABLESPACE INDEX/g' WebEngineR40UX-Oracle.sql >weo950.sql
$ sqlplus wcmdemo/livelink
Connected to:
Oracle Database 10g Release 10.1.0.2.0 - Production
SQL> @weo950
Load the web site With the SQLTransfer script below, you can load a DAT file into the database
data using schema:
SQLTransfer
# vi /opt/livelink/wcm/type1/scripts/import-siteexample.sqx
#!/opt/livelink/wcm/type1/bin/sqltransfer
begin transfer
load from file=/opt/livelink/wcm/type1/dat/siteexample-9.5.0.nnn.zip
usedbversion=Oracle 10.1.0
usedblibrary=/opt/oracle/product/10.1.0/lib/libclntsh.so
env=ORACLE_HOME=/opt/oracle/product/10.1.0
target database type=ORACLE
target database connect=DSN=mydb.mydomain.com;UID=wcmdemo;PWD=livelink
usedbrowprefetch=100
set max field size=20000000
end transfer
:wq
# chmod +x /opt/livelink/wcm/type1/scripts/import-siteexample.sqx
# su - livelink
$ /opt/livelink/wcm/type1/scripts/import-siteexample.sqx
As an alternative, you can also generate a script in the Windows GUI version with
Extras and ScriptWizard. The transfer is then started with Start
SQL-Transfer!.
The transfer of the sample database is now executed. Please check after the
termination of the script that the number of transferred rows corresponds with the
number of records in the DAT file.
The databases are now ready for editing with the Site Administrator.
The default login for the system is “admin” with password “admin”.
Tip
Intro The CMEngine cache has a per-process cache and a per-process database
connection pool. When the web server more than one process, it takes several
requests to fill the cache of all of them. If the load on the web server decreases
(i.e. there are less simultaneous requests), and the web server drops superfluous
processes, then all their cache contents are lost. When, upon increasing load, the
web server starts creating new server processes, they are recreated with an empty
cache. Such behaviour is very bad for performance. IIS and Sun Web Server both
only use one process in their default configuration, and therefore you will not
encounter this problem if you don’t change it. Apache, on the other hand, must
explicitely be configured to use a constant number of processes. Please see the
respective paragraph below for configuration details.
Reasons for If your server has more than one CPU (especially if it has more than two), you
using more than might want to use an equal number of web server processes and (especially under
one process Solaris) bind each of them to a CPU. Binding a process to a CPU is done with the
pbind command under Solaris, and by setting the process’s affinity under
Windows. Linux does not currently support processor binding.
If you decide to run more than one process, please make sure that the number of
processes remains the same, no matter if the load is high or not, for the reasons
outlined above.
If you have a machine with only two processors, or if you have more but your
web site does not have many requests to serve concurrently, then you should
probably do it the easy way and use only one web server process.
Setup You can either use a precompiled version of Apache, (e.g. the one that comes
with your Linux distribution) or compile one yourself. If you choose to use a
precompiled Apache, it is very important that you make sure it has been compiled
with the “worker” MPM.
Using an Apache which has not been compiled with the “worker” MPM has a
major (negative) impact on performance and is neither recommended nor
supported.
Important
You can verify whether your Apache has been compiled with the “worker” MPM
by using the -l switch:
$ ./httpd -l
Compiled in modules:
core.c
mod_access.c
mod_auth.c
mod_include.c
mod_log_config.c
mod_env.c
mod_setenvif.c
worker.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_cgid.c
mod_negotiation.c
mod_dir.c
mod_imap.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_so.c
If you cannot find worker.c in this list, it means that Apache has not been
compiled with the “worker” MPM, and you should compile one yourself.
In order to compile Apache yourself, you need a compiler and a linker installed
on your machine. Then get the source from http://httpd.apache.org/ or one of its
mirrors and enter the following commands:
That way, the Apache web server is installed into the directory /opt/apache2.
User livelink
Group livelink
ServerName www.myserver.com
If you have a single processor machine, set the parameters enclosed by the
<IfModule worker.c> tag as follows:
<IfModule worker.c>
ServerLimit 1
StartServers 1
MaxClients 64
MinSpareThreads 1
MaxSpareThreads 64
ThreadsPerChild 64
MaxRequestsPerChild 0
</IfModule>
Make sure you add the ServerLimit parameter, which is not there in the
original httpd.conf.
If you have more than one processor, these values should be set according to the
following schema:
<IfModule worker.c>
ServerLimit [ number of processors ]
StartServers [ number of processors ]
MaxClients [ number of processors * 64 ]
MinSpareThreads [ (number of processors - 1) * 64 + 1 ]
Important Please comment out the following lines from your httpd.conf in order to avoid
‘Page not found’ problems when using the CMEngine:
This module tries to convert accesses to a directory /foo/ into a localized index
page like /foo/index.html.en, and as this module can be called before the
CMEngine handles the request, there will be a 404 error message, because a
WCM Server database usually doesn’t contain a page named index.html.en.
. /opt/livelink/.profile
# /opt/apache2/bin/apachectl start
Under Windows, copy the required configuration file to the web server directory
(C:\Livelink\wcm\type1\bin) and rename it to cmengine.cfg. Under
Unix, the cfg files are located under /opt/livelink/wcm/type1/conf.
Then the placeholder entries (between angle brackets, e.g. <hostname>) should
be replaced with appropriate values for the local setup. Comment lines start with a
[#] character.
The web server must be restarted to make the configuration changes active.
• LICENSEKEY, LICENSEHOLDER
• CM_DBTYPE, CM_DBNAME, CM_DBUSER, CM_DBPWD (staging server only)
• LOGBASE
• MAILSERVER (use 127.0.0.1 if you are unsure)
• SERVERURL
• URLMAGIC
• DBTYPE, DBNAME, DBUSER, DBPWD
• and the [<Section Name>] by e.g. [mysite] (the section name can be
whatever you like, but it must be unique throughout the config file. The first
section [common] is mandatory under this name and must not be renamed).
• If you use Oracle: USEDBVERSION (which refers to the version of the Oracle
client library, for the (rare) cases where it is different from the Oracle server
version)
• If you use Oracle under Solaris/Linux: USEDBORACLELIBRARY,
ENV=ORACLE_HOME= …
Adding another If you would like to configure another site, just add another section to the bottom
site of the cmengine.cfg file. The easiest way to do this is to copy the last site
section (as created above) and adapt the parameters, i.e.:
Livelink WCM Server – Presentation Server 9.5.0 SP1 (CMEngine Build nnn)
compiled May 5 2004 - 13:39:59 for SunOS - APACHE 2 API - DB2/UDB ORACLE SYBASE
includes
Livelink WCM Server Presentation Server 9.5.0 SP1 (WebEngine Build nnn)
-
(c) 1997-2005 by Open Text Corporation
If you don’t get a screen like this, there is probably something wrong with the
configuration:
http://www.myserver.com/demo?about=connect
Livelink WCM Server – Presentation Server 9.5.0 SP1 (CMEngine Build nnn)
compiled May 5 2004 - 15:17:02 for SunOS - APACHE 2 API - DB2/UDB ORACLE SYBASE
includes
Livelink WCM Server – Presentation Server 9.5.0 SP1 (WebEngine Build nnn)
-
(c) 1997-2005 by Open Text Corporation
Database Connection OK
If you don’t get a “Database Connection OK”, there must be something wrong
with the database configuration:
1. Are the database name, user name and password (DBNAME, DBUSER, DBPWD)
correct? You can verify this under Unix/Oracle like this:
# su – livelink
$ tnsping mydatabasename
$ sqlplus wcmdemo/secret@mydatabasename
http://www.myserver.com/demo and
http://www.myserver.com/starter
and enjoy!
Do a dry run first It is important that you perform the update in a test environment before making
any changes to your productive environment. This helps you get familiar with the
changes and new functionality and gives you the time to solve in advance any
problems that may arise. Ask your content authors and web developers to have a
look at the updated site and let them check if everything works as before.
Copy the new If you use the installation packages, do the following:
files to your
installation • Unpack the required packages into your installation directory (e.g.
directory C:\Livelink\wcm\type1 or /opt/livelink/wcm/type1)
If you install the files “manually” (i.e. without the packages), do the following:
1. Copy the required files from the release set to your installation directory. If
you are running a Solaris or Linux server, incorporate the web server type (
ap for Apache 1.x, ap2 for Apache 2.x, ns for Sun Web Server) and release
and build number into the destination file name, e.g. copy cmengine.so to
cmengine-ap2-9.5.0.1386.so
2. If you are running a Solaris or Linux server, create a link from the versioned
file name to the unversioned file name, e.g. ln –s
cmengine-ap2-9.5.0.1386.so cmengine-ap2.so
Review Have a look at the new sample configuration files for any changes with respect to
configuration files their older version and decide whether you want to incorporate them in your
configuration (usually you want to do so, except for those parameters, that you
have set to a value different from the old standard configuration file).
Under Linux and Solaris, you can do this using the diff3 utility (there are also
diff3 versions for Windows around, just google for “diff3 windows”). The
diff3 utility compares three files (called “mine”, “older” and “yours”) and
produces a new one out of them. “Mine” is your current version of the
configuration file. “Older” is the sample configuration file from the release set
that your config file is based upon. “Yours” is the sample configuration file from
the new release set. The file that is produced by diff3 incorporates all changes in
your current configuration file as well as those from the config file of the new
release, as long as they do not conflict. If there is a conflict, both changes are
incorporated in the new config file with line markers before and after them, like
this:
PARAMETER=value2
>>>>>>>>>> File name of new config file.cfg (“yours”)
(see also the diff3 man page for a probably better explanation). Now you can
edit this file and decide which of the parameters you want to keep, deleting the
unwanted value and the line markers. Here is an example under Linux for
cmengine.cfg:
[root@localhost:root]# cd /opt/livelink/wcm/type1/conf
[root@localhost:conf]# now=`date +%Y%m%d-%H%M`
[root@localhost:conf]# mv cmengine.cfg cmengine-$now.cfg
[root@localhost:conf]# diff3 –m cmengine-$now.cfg
../sampleconf/cmengine-4.2.0.833.cfg ../sampleconf/cmengine-9.5.0.1386.cfg
> cmengine.cfg
Now edit cmengine.cfg and resolve any conflicts. Under Solaris, you can do
the same with a little different syntax:
[root@localhost:root]# cd /opt/livelink/wcm/type1/conf
[root@localhost:conf]# now=`date +%Y%m%d-%H%M`
[root@localhost:conf]# mv cmengine.cfg cmengine-$now.cfg
[root@localhost:conf]# cp cmengine-$now.cfg cmengine.cfg
[root@localhost:conf]# diff3 –E cmengine-$now.cfg
../sampleconf/cmengine-4.2.0.833.cfg ../sampleconf/cmengine-9.5.0.1386.cfg
| ed - cmengine.cfg
4 Additional Components
4.1 SOAP
Configuration The staging server must be configured to accept and handle SOAP requests,
because the Site Administrator, the TextWizard, the WordWizard, and the
WebDAV service use SOAP to communicate with the CMEngine.
SOAPENABLED=yes
SOAPMODULE=ObjectManager,ObjectManager,yes,no,no
SOAPMODULE=ViewtreeManager,ViewtreeManager,yes,no,no
SOAPMODULE=UserManager,UserManager,yes,no,no
SOAPMODULE=SearchManager,SearchManager,yes,no,no
SOAPMODULE=ConfigManager,ConfigManager,yes,no,no
SOAPMODULE=RepositoryManager,RepositoryManager,yes,no,no
SOAPMODULE=GUIManager,GUIManager,yes,no,no
SOAPMODULE=WorkflowManager,WorkflowManager,yes,no,no
SOAPMODULE=WebScripts,*,yes,no,no
SOAPMODULE=PolicyManager,PolicyManager,yes,no,no
The first parameter is the name of the SOAP module, the second one is the URL
by which the module can be accessed, the third one indicates whether
authentication is necessary to access the module, the fourth one is reserved for
future use, and the last one indicates whether any accesses should be logged.
Logging is quite verbose and should be enabled only for debugging purposes. The
log file can be configured using the SOAPLOGFILE parameter.
3. After the services list is refreshed, the Livelink WCM Session Management
will also be listed as a service. If it is not set to Automatic, change this in the
properties for the service. This will cause the service to start automatically
when the computer is restarted.
4. The following entries must be altered in the corresponding cmengine.cfg
file:
#======================================================#
[COMMON]
BUCKETSTORAGE=PLUGIN
[SessionManagement]
TransportType=TCP
ServerPort=20124
ServerName=127.0.0.1
RxTimeout=0
Session
#==========================================================#
Management.cfg [COMMON]
example file
PluginLog=C:\Livelink\wcm\type1\logs\SessionManagement_pl.log
SupervisionLog=C:\Livelink\wcm\type1\logs\SessionManagement_su.log
UserLog=C:\Livelink\wcm\type1\logs\SessionManagement_user.log
#UserLogLevel=99
#==========================================================#
[TRANSPORT]
TransportType=TCP
ServerTcpPort=20124
RxTimeout=0
#=EOF======================================================#
Enable persistent By default the session plug-in holds its data in the system memory. The drawback
session of this is that after a restart of the plug-in process, all session data is lost.
BUCKETSTORAGE=FILE
BUCKETSTORAGEFOLDER=C:\Livelink\wcm\type1\cache\session
The session plug-in will now store all session data into the local file system. After
a restart of the service the plug-in can recover the session data, and the visitors on
the web servers will not be affected.
Session
#==========================================================#
Management.cfg [COMMON]
example file PluginLog=/opt/livelink/wcm/type1/logs/SessionManagement_pl.log
SupervisionLog=/opt/livelink/wcm/type1/logs/SessionManagement_su.log
UserLog=/opt/livelink/wcm/type1/logs/SessionManagement_user.log
#UserLogLevel=99
#==========================================================#
[TRANSPORT]
TransportType=TCP
ServerTcpPort=20124
RxTimeout=0
#=EOF======================================================#
Tell the The following entries must be altered in the corresponding cmengine.cfg file:
CMEngine to use
the session
#======================================================#
plugin. [common]
BUCKETSTORAGE=PLUGIN
[SessionManagement]
TransportType=TCP
ServerPort=20124
ServerName=127.0.0.1
RxTimeout=0
Starting and You can start the plug-in manually as user livelink with:
stopping the
plug-in, automatic
$ /opt/livelink/wcm/type1/bin/sessionmanagement
startup at boot –CfgFile:/opt/livelink/wcm/type1/conf/sessionmanagement.cfg –Service
time –ChildProc
$ /opt/livelink/wcm/type1/bin/sessionmanagement –Stop
Enable persistent Per default the session plug-in holds its data in the system memory. The drawback
session storage of this is that after a restart of the plug-in process, all session data is lost.
BUCKETSTORAGE=FILE
SESSIONFOLDER=/opt/livelink/wcm/type1/cache/session
The session plug-in will now store all session data into the local file system. After
a restart of the service, the plug-in can recover the session data, and the visitors on
the web servers will not be affected.
Failover You can run more than one session plug-in instance on separate servers and have
the CMEngine fall back to it if the first instance should fail to respond for some
reason. In order to achieve this, the cmengine.cfg must list the server names
and the corresponding ports in the ServerName/ServerPort directives,
separated with comma, and in the same order, as in this example:
[SessionManagement]
…
ServerName=sessionhost1.mydomain.com,sessionhost2.mydomain.com
ServerPort=20124,20124
Because the session data of the currently active sessions is still stored in the
session plug-in’s RAM, it is lost if the engine switches over to the failover
plug-in. In order to avoid this, you can configure a backup folder that is accessible
and used by both plug-ins.
Persistent The session plug-ins can be configured to use a backup folder for storing the
session data session data in the file system. The plug-ins write to the backup folder
asynchronously, which avoids a performance impact when there are many
changes to the session data. Also, if, for some reason, the backup folder is not
available over the network, sessions can still be created and modified. A backup
folder can be configured as follows:
BUCKETSTORAGEBACKUP=YES
BSBACKUPFOLDER=\\filer\session\backup
#BSBACKUPFOLDER=/mnt/filer/session/backup
Further reading Please refer to the Site Administrator Reference Manual for a detailed description
of additional configuration options for the session management.
Comments Three additional databases are required for WCM Server replication. These are:
Tip
Procedure 1. Create a database on the staging server using the Enterprise Manager.
Open Text recommend the following name: wcm_replication. Load the
SQL script SiteReplControlDB-Create-R95-mssql.sql for setting up
the WCM Server table structure. It is found in the
<CDROM>:\Databases\Scripts subdirectory.
2. Create two new databases on the production server using the Enterprise
Manager. Open Text recommend the following names: Live_A and Live_B.
Load the SQL script SiteDatabase-Create-R95-mssql.sql for setting
up the WCM Server table structure. It is found in the
<CDROM>:\Databases\Scripts subdirectory.
3. Set up the necessary ODBC DSNs or Net-8 connections for the three
databases.
4. Open the Site Administrator
5. On the Extras menu, point to Administration, then point to Advanced
and click Replication Tool.
6. Click Configure Connect to set up replication.
7. Name: Enter a unique name of your choice. DB type: Select the database
type. DSN: Enter the name of the connection (for example the ODBC
connection for MS SQL or Net-8 connection for Oracle). User: Enter the
database owner and password (for example wcm_owner).
8. Click Add to set up a new replication entry.
9. Enter the following information: Device type: Database Name: A unique
name for the source database DB type: Select the database type. DSN: Enter
the ODBC DSN or the Oracle Net-8 connection User: Enter the database
user. Password: Enter the password of the database user. Log path: Enter
the path to which the log file is to be written.
10. Create a replication definition under Destinations. To do this, click the icon
just below the word Destinations.
11. Specify which two databases are your production databases. Device type:
Database. Name: A unique name for the replication destination. Live DB
12. Create a new job definition. To do this, click the icon just below the word
Jobs.
13. Name: A unique name for the job. Move the replication definition from
Available destinations to the Select destinations list. In the
Replication options section, indicate whether a full or differential
replication is to be performed. Indicate whether it is the default job.
Since release 4.1 the replication process runs twice in full replication mode (once
for every live DB connect).
Note
14.
15. To tell the live server to switch between the Live_A and Live_B databases,
add the following parameters to the cmengine.cfg on the live server:
SERVERMODE=LIVE
DBTYPEALT=
DBNAMEALT=
DBUSERALT=
DBPWDALT=
and set them to point to the Live_B database. Let the "normal" DBNAME etc.
parameters point to the Live_A database.
16. In order to make sure that WCM Server sessions are not lost when the
database is switched on the live server, add the following parameters to the
cmengine.cfg:
SESSIONDBTYPE=
SESSIONDBNAME=
SESSIONDBUSER=
SESSIONDBPWD=
and set them to the corresponding values you have set for DBTYPE, DBNAME,
etc.
These parameters are used to separate the session-relevant data from the
site-specific data and involve the USERS, BUCKETDATA and ACCESSLOG
tables.
Caution
Comments Replication can also be initiated from the command prompt. This presumes that
everything has been pre-defined in the Site Administrator.
[COMMON]
# Oracle Settings
#USEDBVERSION = Oracle 10.1.0
#USEDBORACLELIBRARY = C:\Oracle\Ora920\bin\oci.dll
#ENV=ORACLE_HOME=/opt/oracle/product/10.1.0
DBTYPE=MSSQL
DBNAME=wcm_replication
DBUSER=<database user>
DBPWD=<user password>
General Offline replication can be used if there is no server in the network that has
Information database access to the stage as well as the live database at the same time. In this
case, the data are saved to a file by the replication executable, which is then
transferred to the live system via scp, ftp or some other means. On the live
system, the replication executable uses an .odd file (object deployment
descriptor) to get the configuration data of the target database.
Configuration in The configuration is done using the Site Administrator, more or less the
the Site same way as in an online replication. However, two destinations have to be
Administrator created, one for the file that is to be exported, and one for the live database, where
the file is to be applied to.
Create the “file” The destination for the file to be exported might look as follows:
destination
Create the “live The destination for the live database looks like a destination for an online
database” replication:
destination
This destination configuration is then exported to an .odd file using the Export
ODD button.
Run the We are now ready to export the replication data from the staging site by running
replication the replication executable in the usual way:
executable at the
stage site
replication.exe –profile=Production –job=diff
This produces the .zip file containing the replicated data, and we are going to
transfer it along with the .odd file to the live site.
Run the Applying the replication data to the live site is done like in this example:
replication
executable at the
replication.exe –offline –odd=Production.odd –dat=rep-20041212.zip
live site
4.4 LDAP
What is auth...? Basically, we are talking about the process of granting or denying access to a
network resource. Most computer security systems are based on a two-step
process.
• The first stage is authentication, which ensures that a user is who he or she
claims to be.
• The second stage is authorization, which allows the user access to various
resources based on the user’s identity.
The WCM Server has this two-step process and opens various options to integrate
into your existing authentication and authorization infrastructure. This chapter
gives an overview and steps through two scenarios.
Overview
Scenario 1: WCM This is the default behavior. Users are managed with the Site Administrator
Server-internal and the access rights are assigned with freely definable roles, object groups and
authentication permission patterns. The user information (login name, full name, email…) and
access rights are stored inside the WCM Server repository.
This scenario is mostly used for Internet sites, because only a limited amount of
users has to be managed.
The username and password are input in an HTML form, which is sent back to
the engine with an HTTP POST request. The engine checks whether username
and password are correct and loads the user and his/her permissions.
Scenario 2: In case the installed environment is equipped with an LDAP directory server
Authentication via containing user, group and company information, the engine can use this as user
LDAP directory database. Users do not have to be managed in several places - the engine accesses
the directory at each login and is therefore always up-to-date.
The username and password check is done with an “LDAP bind” request (login
attempt to a LDAP directory). The LDAP bind can either be done by the web
server equipped with an LDAP module («External User») or with the WCM
Server LDAP Authentication Plug-in («Plug-in User»). Depending the way
chosen, the user gets an HTML form or a browser popup dialog to supply his
credentials.
Browser login A browser login dialog is triggered by HTTP headers (HTTP/401 – Unauthorized)
dialog that the web server sends to the browser when authentication is necessary. The
format of these headers depends on the authentication scheme.
The most simple one is “Basic” - username and password are sent in clear text to
the server. Single-sign-on systems like the Microsoft NTLM use special
authentication schemes where the browser automatically answers the
username/password request. Due to the generic way the web server authentication
modules can be integrated in the WCM Server, it is possible to use all kinds of
authentication schemes.
So, as soon as a user wants to access a page that is part of a group with the “Deny
Web User” flag set, the web server returns an HTTP/401 ("Authorization
Required”) to the client, and the browser displays a pop-up asking for credentials.
The web server authenticates the user and, if successful, writes the user’s id in an
environment variable (REMOTE_USER in case of Apache and Netscape/iPlanet,
AUTH_USER in case of IIS). The CMEngine starts an LDAP query in
LDAPUSERBASE with LDAPUSERFILTER and expects to get zero or one result
back. Because we want to get the attributes of the user that has just logged in, we
have to set LDAPUSERFILTER to uid=<!WEM ENV.REMOTE_USER>.
Now the CMEngine checks whether the user exists already in its own user
database. If it does not, the user is created and flagged as a so-called “LDAP
user”. The reason for this is e.g. that we want to keep track of which user created
a certain page. You can get a list of all “LDAP users” by choosing Extras →
Administration → LDAP Users in Site Administrator.
Then, the user’s attributes are matched against the conditions in “LDAP Roles”.
Optionally you can define a different directory folder LDAPROLEBASE,
LDAPROLEFILTER to search for the role matching attributes. If matching is
successful, the template user’s rights are added dynamically to the current user’s
rights. This mechanism is cumulative, i.e. there may be more than one match and
the rights just add up.
HTML login form Here, the username and password are simply entered in an HTML form which is
sent back to the engine with an HTTP POST request, as described above. The
engine authenticates the user with the aid of the LDAP authentication plug-in
instead of performing this task itself. The meaning of the above parameters
(LDAPUSERBASE, LDAPUSERFILTER etc.) are the same, only that they are
configured in the configuration file of the plug-in instead of that one of the
engine.
Defining rules in In Site Administrator, you can configure the roles that authenticated users
Site Administrator can assume:
The role(s) that the user has are established by checking the role’s condition. If
the condition is true (matches against the user’s current LDAP attributes), the user
gets the role. If the user has a certain role, it means for him/her that (s)he has the
rights associated with that role. In order to associate rights with a role, a template
user must be created and assigned the necessary rights. This template user (which
exists in the WCM Server only) is then associated with the LDAP role. Let’s have
a look at an example: In our web site is a closed area, represented by objects in
the “Internal” group. Now, we create a user “Tpl_internal” that has read access to
this group. Then we go to Extras → Administration → Configure → LDAP
Roles and select New.... You can choose whatever name you like; it is not
relevant for the WCM Server except that you have to enter one. The description is
optional. In the User field, you select which user you want to have as a template
user for this LDAP role ("Tpl_internal” in our case). The Condition you enter
must stick to the following rules:
1. Allowed operators are “&” (AND), “|” (OR) and “=” (boolean equals). Note
that “¦” instead of “|” does not work.
2. Strings are delimited by double quotes.
3. An expression consists of a [term or expression] plus an [operator]
plus a [term or expression] and must be enclosed in parentheses,
except if it is the outermost expression where parentheses are optional.
4. A term is either a valid LDAP attribute or a string.
From the above follows that expressions may not be chained without parentheses,
i.e.
and
are.
It is still possible to configure users in the WCM Server's user management which
are not in the LDAP directory. In this case, authorization is done with the
assigned rights in the WCM Server repository. We call this “fallback” login.
Note
Scripting hooks The two-step login process can be completely customized with scripting. The
WCM Server provides hooks to all stages of the login process, which allow you to
implement script handler functions (onPasswordCheck, onGetRoles...) that
change the default behavior. E.g. it is possible to map the whole login process
with SAP (if this happens to be your primary user repository).
Read more about the subject in the Scripting Reference, “User Callback
Functions”.
Purpose Many companies use a directory service for managing their employee’s login
accounts. The LDAP plug-in enables the WCM Server to authenticate users
against this directory service, thereby eliminating the need to create user accounts
for each employee inside the WCM Server. The rights of a user in the LDAP
directory are determined by matching his/her attributes against the condition of a
set of roles. As an example we could create a role “Administrators” inside the
WCM Server that gets all the rights to all object groups. This role is created in the
Site Administrator under User Manager → Roles. We could define the
condition to be organizationalRole=”Manager”. This way, every current
and future user in the directory who has his/her organizationalRole attribute
set to “Manager” will automatically get administrative rights inside the WCM
Server. Obviously, you will use much finer-grained structures in a real-life
installation... See chapter “LDAP” for an in-depth explanation.
Plug-in Make sure that you place the configuration file of the LDAP plug-in in
configuration C:\Livelink\wcm\type1\bin\ldap.cfg. Use the following example as a
template and adapt the LDAP-specific entries to your own setup :
[common]
PluginLog=C:\Livelink\wcm\type1\logs\ldapplugin.log
SupervisionLog=C:\Livelink\wcm\type1\logs\ldapplugin.log
UserLog=C:\Livelink\wcm\type1\logs\ldapplugin.log
UserLogLevel=99
[Transport]
TransportType=TCP
ServerPort=20224
ServerTcpPort=20224
ServerName=localhost
RxTimeout=0
Encryption-Algo=1
[PluginSpecific]
USELDAPLIBRARY=C:\Livelink\wcm\type1\bin\ldapsslsc.dll
LDAPHOST=localhost
LDAPUSER=cn=Administrator,cn=Users,dc=obtree,dc=com
LDAPPWD=secret
A note on version You can secure the LDAP connection using SSL. Technically, the WCM Server
5 of the LDAP delegates LDAP related tasks to a library from the “iPlanet LDAP SDK for C”
library that is distributed by Netscape / Sun, the Mozilla project, and the WCM Server.
Using LDAP means – among other things – adding a configuration entry called
USELDAPLIBRARY to your appropriate configuration file. This entry must point to
the LDAP library. When using SSL in conjunction with version 5 of the SDK,
you have to choose ldapsslsc.dll that is manufactured by Open Text.
Otherwise, there will be no SSL support. In addition, you have to tell the dynamic
linker where to look for the files of the LDAP SDK.
Before starting the appropriate WCM Server component, e.g. the web server, that
in turn loads the CMEngine, you must append the directory where the LDAP
libraries are located to the PATH environment variable. If you followed the
standard file system layout described in this manual, this is
C:\Livelink\wcm\type1\bin, which should already be in your system path.
In order to start the plug-in automatically on system startup, start the plug-in with
the –install (-uninstall does the inverse) option:
Now you can start and stop the plug-in like any other service in the Control
Panel → Services dialog. The entry is called “Obtree LDAP Plugin”. (If you
don’t like that name, use the ServiceName and ServiceDisplay directives in
the plugin config file ldap.cfg to change it, see the os-specific sections below).
Activating the These entries must be altered/added in the cmengine.cfg file in order to tell the
plug-in engines to use the LDAP plug-in for authentication.
[common]
LDAPLOGFILE=C:\Livelink\wcm\type1\logs\ldapengine.log
LDAPCREATESESSION=yes
LDAPCREATEUSER=yes
[LDAP]
TransportType=TCP
ServerPort=20224
ServerName=localhost
RxTimeout=0
[site]
AUTH_MODE=PLUGIN
USER_MODE=PLUGIN
USER_PLUGIN=LDAP
Purpose Many companies use a directory service for managing their employee’s login
accounts. The LDAP plug-in enables the WCM Server to authenticate users
against this directory service, thereby eliminating the need to create user accounts
for each employee inside the WCM Server. The rights of a user in the LDAP
directory are determined by matching his/her attributes against the condition of a
set of roles. As an example we could create a role “Administrators” inside the
WCM Server that gets all the rights to all object groups. This role is created in the
Site Administrator under User Manager → Roles. We could define the
condition to be organizationalRole=”Manager”. This way, every current
and future user in the directory who has his/her organizationalRole attribute
set to “Manager” will automatically get administrative rights inside the WCM
Server. Obviously, you will use much finer-grained structures in a real-life
installation... See chapter “LDAP” for an in-depth explanation.
[common]
PluginLog=/opt/livelink/wcm/type1/logs/ldapplugin.log
SupervisionLog=/opt/livelink/wcm/type1/logs/ldapplugin.log
UserLog=/opt/livelink/wcm/type1/logs/ldapplugin.log
UserLogLevel=99
[Transport]
TransportType=TCP
ServerPort=20224
ServerTcpPort=20224
ServerName=localhost
RxTimeout=0
Encryption-Algo=1
[PluginSpecific]
USELDAPLIBRARY=/opt/livelink/wcm/type1/lib/libldapsslsc.so
LDAPHOST=localhost
LDAPUSER=cn=Administrator,cn=Users,dc=obtree,dc=com
LDAPPWD=secret
LDAPUSERBASE=cn=Users,dc=obtree,dc=com
LDAPUSERFILTER=cn
LDAPUSERINFO=FullName=displayName,Mail=mail
A note on version You can secure the LDAP connection using SSL. Technically, the WCM Server
5 of the LDAP delegates LDAP related tasks to a library from the “iPlanet LDAP SDK for C”
library that is distributed by Netscape / Sun, the Mozilla project, and Open Text.
Using LDAP means – among other things – adding a configuration entry called
USELDAPLIBRARY to your appropriate configuration file. This entry must point to
the LDAP library. When using SSL in conjunction with version 5 of the SDK,
you have to choose libldapsslsc.so that is manufactured by Open Text.
Otherwise, there will be no SSL support. In addition, you have to tell the dynamic
linker where to look for the files of the original LDAP SDK.
Before starting the appropriate WCM Server component, e.g. the web server, that
in turn loads the CMEngine, you must set the environment variable
LD_LIBRARY_PATH and let it point to the location of the LDAP libraries, e.g. for
shells compatible to the Bourne shell type:
LD_LIBRARY_PATH=/opt/livelink/wcm/type1/lib:$LD_LIBRARY_PATH; export
LD_LIBRARY_PATH
Starting and You can start the plug-in manually as user livelink with:
stopping the
plug-in
$ /opt/livelink/wcm/type1/bin/ldapplugin
–CfgFile:/opt/livelink/wcm/type1/conf/ldapplugin.cfg –Service –ChildProc
$ /opt/livelink/wcm/type1/bin/ldapplugin –Stop
Activating the These entries must be altered/added in the cmengine.cfg file in order to tell the
plug-in engines to use the LDAP plug-in for authentication.
[common]
LDAPLOGFILE=/opt/livelink/wcm/type1/logs/ldapengine.log
LDAPCREATESESSION=yes
LDAPCREATEUSER=yes
[LDAP]
TransportType=TCP
ServerPort=20224
ServerName=localhost
RxTimeout=0
[site]
AUTH_MODE=PLUGIN
USER_MODE=PLUGIN
USER_PLUGIN=LDAP
Purpose Many companies use a directory service for managing their employee’s login
accounts. The LDAP plug-in enables the WCM Server to authenticate users
against this directory service, thereby eliminating the need to create user accounts
for each employee inside the WCM Server. The rights of a user in the LDAP
directory are determined by matching his/her attributes against the condition of a
set of roles. As an example we could create a role “Administrators” inside the
WCM Server that gets all the rights to all object groups. This role is created in the
Site Administrator under User Manager → Roles. We could define the
condition to be organizationalRole=”Manager”. This way, every current
and future user in the directory who has his/her organizationalRole attribute
set to “Manager” will automatically get administrative rights inside the WCM
Server. Obviously, you will use much finer-grained structures in a real-life
installation... See chapter “LDAP” for an in-depth explanation.
set to the same value; LDAPUSER / LDAPPWD point to a user that has read access to
all the required users in the LDAP directory – comment these out if the directory
server allows anonymous access; LDAPUSERFILTER should be set to the attribute
that determines the user’s login name):
[common]
PluginLog=/opt/livelink/wcm/type1/logs/ldapplugin.log
SupervisionLog=/opt/livelink/wcm/type1/logs/ldapplugin.log
UserLog=/opt/livelink/wcm/type1/logs/ldapplugin.log
UserLogLevel=99
[Transport]
TransportType=TCP
ServerPort=20224
ServerTcpPort=20224
ServerName=localhost
RxTimeout=0
Encryption-Algo=1
[PluginSpecific]
USELDAPLIBRARY=/opt/livelink/wcm/type1/lib/libldapsslsc.so
LDAPHOST=localhost
LDAPUSER=cn=Administrator,cn=Users,dc=obtree,dc=com
LDAPPWD=secret
LDAPUSERBASE=cn=Users,dc=obtree,dc=com
LDAPUSERFILTER=cn
LDAPUSERINFO=FullName=displayName,Mail=mail
A note on version You can secure the LDAP connection using SSL. Technically, the WCM Server
5 of the LDAP delegates LDAP related tasks to a library from the “iPlanet LDAP SDK for C”
library that is distributed by Netscape / Sun, the Mozilla project, and Open Text.
Using LDAP means – among other things – adding a configuration entry called
USELDAPLIBRARY to your appropriate configuration file. This entry must point to
the LDAP library. Using SSL in conjunction with version 5 of the SDK, you have
to choose libldapsslsc.so that is manufactured by Open Text. Otherwise,
there will be no SSL support. In addition, you have to tell the dynamic linker
where to look for the files of the original LDAP SDK.
Before starting the appropriate WCM Server component, e.g. the web server, that
in turn loads the CMEngine, you must set the environment variable
LD_LIBRARY_PATH and let it point to the location of the LDAP libraries, e.g. for
shells compatible to the Bourne shell type:
LD_LIBRARY_PATH=/opt/livelink/wcm/type1/lib:$LD_LIBRARY_PATH; export
LD_LIBRARY_PATH
Starting and You can start the plug-in manually as user livelink with:
stopping the
plug-in
$ /opt/livelink/wcm/type1/bin/ldapplugin
–CfgFile:/opt/livelink/wcm/type1/conf/ldapplugin.cfg –Service –ChildProc
$ /opt/livelink/wcm/type1/bin/ldapplugin –Stop
Activating the These entries must be altered/added in the cmengine.cfg file in order to tell the
plug-in engine to use the LDAP plug-in for authentication.
[common]
LDAPLOGFILE=/opt/livelink/wcm/type1/logs/ldapengine.log
LDAPCREATESESSION=yes
LDAPCREATEUSER=yes
[LDAP]
TransportType=TCP
ServerPort=20224
ServerName=localhost
RxTimeout=0
[site]
AUTH_MODE=PLUGIN
USER_MODE=PLUGIN
USER_PLUGIN=LDAP
After the successful installation of the Livelink Enterprise integration you will be
able to:
• Embed content from the Livelink Enterprise Repository into your WCM
For any information that goes beyond these installation instructions, please refer
to the Livelink Enterprise Integration Manual, which is available as a separate
document in the release set documentation.
4.5.1 Prerequisites
Livelink WCM Livelink WCM Server Type 1 System (9.2.2 or later) installed.
Server
Livelink Open Text Livelink Enterprise 9.5.0, 9.2.0 SP1 or 9.1.0 SP4 installed.
Enterprise
Operating The Livelink Enterprise integration is available for Windows and Solaris
System platforms only. Open Text do not provide libraries for Linux at this time.
4.5.2 Configuration
Extend the database structure of your WCM Server database so that it supports
virtual objects. This is necessary if your database has been created with a “R40”
script instead of a “R95” script. To do so, depending on the database system you
are using, run one of these two scripts:
• SiteDatabase-Update-R40toR95-mssql.sql
• SiteDatabase-Update-R40toR95-oracle.sql
You must use the new SiteManager (a.k.a. “Cloudbreaker”). The Content
Manager Classic edition does not support Livelink Enterprise integration and
virtual objects.
Additional If necessary, copy the additional Livelink API DLL’s of release 9.5.0 into the
software directory indicated below:
Windows
LAPI_ATTRIBUTES.dll
LAPI_BASE.dll
LAPI_DOCUMENTS.dll
LAPI_INBOX.dll
LAPI_NETp.dll
LAPI_SEARCH.dll
LAPI_SSPIp.dll
LAPI_USERS.dll
LAPI_WORKFLOW.dll
LLAdapter.dll
LLKERNEL.dll
llresources.dll
Solaris
liblapi.so.1.0
liblapi.so (a symlink to liblapi.so.1.0)
liblladapter.so
libllkernel.so
This new directory serves as temporary store for the data that will be exchanged
between the Livelink Enterprise repository and the WCM Server database.
Therefore, make sure the user running the process of the web server has full
access to this new directory.
Configuration Add the following lines to the [Common] section in the configuration file of the
files CMEngine.
Windows:
USELAPILIBRARY=C:\Livelink\wcm\type1\bin\LLAdapter.dll
LOCALREPOSITORYFOLDER=C:\Livelink\wcm\type1\cache\vo
SOAPMODULE=RepositoryManager,RepositoryManager,yes,no,no
Solaris:
USELAPILIBRARY=/opt/livelink/wcm/type1/lib/liblldapter.so
LOCALREPOSITORYFOLDER=/opt/livelink/wcm/type1/cache/vo
SOAPMODULE=RepositoryManager,RepositoryManager,yes,no,no
The last entry declares the SOAP service that is used for the connection to the
Livelink Enterprise server.
Configure site in In the Site Administrator, make sure that the Website base URL in the File
Site Administrator → Configure Sites dialog is pointing to the correct URL and the correct
rendering engine (CMEngine). The Site Administrator is using this URL to
connect to the engine via SOAP, and the engine connects to Livelink Enterprise;
in order to do this, the engine reads the connection you defined in the
Configuration dialog of the Site Administrator (see the following paragraph
for details).
After you have defined a connection and changed the Website base URL, restart
the web server and the Site Administrator in order to activate your changes.
Elements To define a new connection to Livelink Enterprise click New and fill in the
properties as described below.
Element Description
Name Enter a name for your new Livelink Enterprise
connection.
Host Enter the host name and optionally the TCP port
numberof the server on which your Livelink
Enterprise server is installed. This is sufficient if the
Livelink server is reachable via native Livelink
protocol.
Element Description
User Mode Select the appropriate user mode for your application.
Possible values are:
Single Sign-on The user name and password of the
currently logged in WCM Server
user will be transmitted to Livelink
Enterprise when connecting.
Local Repository Folder Enter the path of the folder that will be used as
temporary storage for this Livelink Enterprise
connection when documents are exchanged between
Livelink Enterprise and the WCM Server. You have
Element Description
probably defined this folder earlier in the engine’s
configuration file. Example:
C:\Livelink\wcm\type1\cache\vo
4.5.4 Single Sign-On between Livelink WCM Server and Livelink Enterprise
Introduction This chapter describes in detail all the necessary steps for establishing Livelink
Enterprise as the provider of the external user management for WCM Server. In
such a case, we are talking about 'Single sign-on Livelink Enterprise access'. After
the successful completion of all necessary steps
1. Livelink Enterprise users can login to the WCM Server Site Administrator or
the WCM Server Site Manager with their Livelink Enterprise user ID and
password.
2. Users working with the Livelink Enterprise browser within the Site
Administrator or the Site Manager see the same parts of the Livelink
Enterprise repository as if they were working directly within Livelink
Enterprise. This means that all permissions of the Livelink Enterprise system
are as well valid in Livelink WCM Server.
Configuration of Single sign-on only works if you expand the configuration filesof your CMEngine
the engine(s) by the following three lines:
AUTH_MODE=LIVELINK
USER_MODE=LIVELINK
USER_PLUGIN=<Livelink connection name with single sign-on user mode>
LLSSOFALLBACK =YES
Connection You have to define a connection from the WCM Server to your Livelink
definition Enterprise repository. Do this in the Site Administrator as described in the last
chapter, following these special instructions:
2. This user is the default user for all Livelink Enterprise requests if no user
is logged in and you have specified LLSSOFALLBACK=YES in your
configuration file.
Because of the functions described above it is very important to select the default
user of a single sign-on Livelink Enterprise connection carefully. If this user does
not have sufficient access rights, the connection will never work correctly because
Livelink Enterprise will not return the properties and credentials of the requested
user to the WCM Server system.
Matching rule You must define at least one Matching Rule that associates Livelink Enterprise
users with a WCM Server role. You can do this by typing a matching rule
manually into the Matching rule (LDAP) field located in the Roles tab of the
User Manager dialog.
Roles tab of the Open the User Manager of the Site Administrator, click the Roles tab and in
User Manager the role hierarchy select the role which you want to match to Livelink Enterprise
users. Then type the matching rule in the field Matching rule (LDAP) and
click Apply.
Please note that the entered value has to be enclosed by double quotation marks.
The possible values for the matching elements are all the properties of
LivelinkUser class, as documented on the Knowledge Center, as well as the
following:
Possibly bind If you need to assign individual permissions to particular Livelink Enterprise
external users users, you first have to connect the users in question to the WCM Server user
into the WCM directory. After that, you can treat such users like any other WCM Server user.
Server user
directory Open the User Manager in the Site Administrator. In the Users tab click the
External button. This displays the Search & Bind Externally Managed
Users dialog window.
If the External button is disabled, you have to enter a correct Web Site Base
URL in File → Configure Sites, as described before.
Note
After you have bound an external user into the WCM Server user directory you
can grant permissions for this user like for any other user. For more information
about granting permissions to individual users, please refer to chapter “User
Management and Access Rights” in the Site Administrator Reference Guide.
Introduction The WCM Server integrates with the Java world by providing a convenient
feature called LiveConnect: This feature enables you to instantiate and use Java
classes in server-side JavaScript directly via a predefined object Packages. Here
is a short example script that creates a Java String object and writes it to the
output page:
Configuration of Add the following to your cmengine.cfg in order to activate the LiveConnect
cmengine.cfg feature:
JVMENABLED=true
JVMLIBRARY=C:\java\j2sdk1.4.2_05\jre\bin\server\jvm.dll
JVMLOGFILE=C:\Livelink\wcm\type1\logs\jvmengine.log
JVMCLASSPATH=C:\Livelink\wcm\type1\bin\liveconnect.jar
• You may use more than one JVMCLASSPATH parameter. Each occurrence
adds the specified directory to the search path.
Setting the In order to make sure the dynamic loader can find the JVM libraries, make sure to
system PATH set PATH variable accordingly (this is normally done by the JDK’s setup routine).
In order to verify this, start a command prompt and enter
C:\> path
PATH=C:\Windows;C:\Windows\System32;C:\java\j2sdk1.4.2_05\bin
Introduction The WCM Server integrates with the Java world by providing a convenient
feature called LiveConnect: This feature enables you to instantiate and use Java
classes in server-side JavaScript directly via a predefined object Packages. Here
is a short example script that creates a Java String object and writes it to the
output page:
Configuration of Add the following to your cmengine.cfg in order to activate the LiveConnect
cmengine.cfg feature:
JVMENABLED=true
JVMLIBRARY=/usr/java/jre/lib/sparc/server/libjvm.so
JVMLOGFILE=/opt/livelink/wcm/type1/logs/jvmengine.log
JVMCLASSPATH=/opt/livelink/wcm/type1/lib/liveconnect.jar
• You may use more than one JVMCLASSPATH parameter. Each occurrence
adds the specified directory to the search path.
Setting In order to make sure the dynamic loader can find the JVM libraries, make sure to
LD_LIBRARY_PATH set LD_LIBRARY_PATH accordingly in the startup script of your web server. Just
add the following line to /opt/apache2/bin/envvars or
/usr/iplanet/server4/https-myinstance/start:
LD_LIBRARY_PATH=/usr/java/jre/lib/sparc/server:/usr/java/jre/lib/sparc:/usr
/java/jre/lib/sparc/native_threads:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
Introduction The WCM Server integrates with the Java world by providing a convenient
feature called LiveConnect: This feature enables you to instantiate and use Java
classes in server-side JavaScript directly via a predefined object Packages. Here
is a short example script that creates a Java String object and writes it to the
output page:
Configuration of Add the following to your cmengine.cfg in order to activate the LiveConnect
cmengine.cfg feature:
JVMENABLED=true
JVMLIBRARY=/usr/java/j2re1.4.2_05/lib/i386/server/libjvm.so
JVMLOGFILE=/opt/livelink/wcm/type1/logs/jvmengine.log
JVMCLASSPATH=/opt/livelink/wcm/type1/lib/liveconnect.jar
• You may use more than one JVMCLASSPATH parameter. Each occurrence
adds the specified directory to the search path.
Setting In order to make sure the dynamic loader can find the JVM libraries, make sure to
LD_LIBRARY_PATH set LD_LIBRARY_PATH accordingly in the startup script of your web server. Just
add the following line to /opt/apache2/bin/envvars:
LD_LIBRARY_PATH=/usr/java/j2re1.4.2_05/lib/i386/server:/usr/java/j2re1.4.2_
05/lib/i386:/usr/java/j2re1.4.2_05/lib/i386/native_threads:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
Setup The following entries in the configuration file ( cmengine.cfg) are crucial:
SOAPENABLED=YES
SOAPMODULE=ObjectManager,ObjectManager,yes,no,no
SOAPMODULE=UserManager,UserManager,yes,no,no
SOAPMODULE=ConfigManager,ConfigManager,yes,no,no
If you want to create a log file for the SOAP requests, the following additional
entry is necessary:
The last parameter of the corresponding SOAPMODULE entry must be set to yes.
Comments You can test your configuration by typing your base URL (SERVERURL +
URLMAGIC) followed by ObjectManager in the address field of the web
browser. After sending this request, your browser should show the interface
description of the ObjectManager module.
Setup You have to install the Sun Java Virtual Machine. The currently supported JVM
version is 1.4.2, available at http://java.sun.com/downloads/.
Setup You have to install the Apache Tomcat servlet engine. Currently supported
versions are 4.1 and 5.0, available at http://jakarta.apache.org/tomcat.
Setup After installing the JVM and Tomcat, create a directory (e.g. /wcmdav) in the
application directory (/webapps) of Tomcat. Inside this directory, create the
directories WEB-INF and WEB-INF/lib (uppercase/lowercase is crucial). After
that, your directory structure should look as follows: <tomcat
home>/webapps/wcmdav/WEB-INF/lib
Copy the following files from the WCM Server release set into the WEB-INF/lib
directory:
Copy the following file from the WCM Server release set into the WEB_INF
directory:
Copy the following file from the WCM Server release set into the application
directory you created (e.g. ../webapps/wcmdav):
Example: http://server/magic
username The name of the user that will be used to access the
server. The user must have User Management
permissions and Read permissions for all objects that
are to be shown to the WebDAV client. It is
recommended to create a specific user for this
purpose.
cachetime The cache time (in seconds) for objects inside the
WebDAV service. Caution: Cache times that are
chosen smaller than the typical response time of a
WebDAV request can lead to unwanted side-effects.
usercachetime The cache time (in seconds) for user data and access
control information inside the WebDAV service.
hidegroups This list defines the groups that will be excluded. The
entries in the list are the group names as configured in
the Site Database, in double quotes and
comma-delimited. An example: “Shared Objects”.
nameseparator The separator used to join the object name with the
instance specific data. The separator “_” e.g. leads to
name_en.
Copy the following file from the WCM Server release set into the Tomcat
directory shared/lib:
Comments The namespace name in the file Domain.xml must match the namespace used in
the file web.xml. By default it is chosen as webdav. If you want to change it,
make sure it is changed at both locations.
<servlet>
<servlet-name>webdav</servlet-name>
<display-name>Slide DAV Server</display-name>
<servlet-class>
org.apache.slide.webdav.WebdavServlet
</servlet-class>
<init-param>
<param-name>namespace</param-name>
<param-value>livelink</param-value>
</init-param>
</servlet>
If you want to make multiple sites available via WebDAV, you have to configure
one web application per site in Tomcat.
Setup Copy the following files from the WCM Server release set into the Tomcat
directory server/lib:
<Listener
className="org.apache.catalina.mbeans.ServerLifecycleListener" debug="0"
descriptors="/ch/ixos/tomcat/mbean-descriptor.xml"/>
Setup WebDAV clients (e.g. Windows Explorer) can now access the WCM Server
repository by connecting to the URL
http://[tomcatserver]:8080/[applicationname]
The application name is the one you configured above (e.g. /wcm).
http://[tomcatserver]:8080/[applicationname]/systeminfo
4.8 Synchronization
Purpose WCM Server Synchronization serves for editing one logical database on different
servers and to merge all changes on the same logical database. At least one master
and one slave database are necessary; only the number of existing object groups
limits the number of slave databases. Different types of databases (MS SQL,
Oracle, DB2. etc.) can be used on the different slave databases.
Premises The most important premises for using WCM Server Synchronization properly
are
• adequate planning
• knowing well the abilities of WCM Server Synchronization and what cannot
be achieved by WCM Server Synchronization
Attention As of release 4.1, you need a special license for setting up WCM Server
synchronization. Using the Synchronization feature with previous releases is not
advisable, because IXOS Engineering (Switzerland) AG / Open Text guarantees
support only for installations of release 4.1 and higher.
As of release 4.1.1 certain settings have changed, so that you can no longer use an
older definition of synchronization. Older definitions must have to be adapted to
the new settings. Please find a detailed description of that in one of the following
paragraphs.
Setup You have to perform all settings on the master database. Afterwards, you copy
this database to the other servers whereby the database becomes a slave database
on those servers.
Database).
You can choose a name arbitrarily. It serves for identifying the database in
the databases overview.
Database ID is a unique identifier of the database and is detected
automatically.
Number of IDs specifies the range of ID numbers that is allocated to the
database. The database uses the range of 0 to X to create object IDs for new
objects (in the screen capture, X would be 10'000'000).
The description serves only for display in the overview.
After confirming your entries by clicking OK, the database creates the
additional field Sync_DBID with a value of 1 in the following tables:
webobjects, viewtree, macroref, obj*, chartstyle, buttonrefs,
metadatainst, metadatamemb, users and accessref.
3. Now you can define the slave databases (click Define New Slave DB).
Name and description only serve for information purposes.
ID start specifies the first ID number that may be used for new objects on
the slave database; Number of IDs specifies the available range of ID
numbers. Since each database uses its own range of ID numbers, the ranges
must not overlap each other. You can check this by clicking Check. Get ID
Start serves for finding the lowest available range of ID numbers.
The WCM Server can detect automatically the database ID of the master
database. This is not always possible for the slave databases. If you are
allowed to access the according databases you can fetch this information by
using the Get button.
Enter the required data (the dialog fields are the same as in the Configure
Sites dialog). Clicking OK reads the required database ID and writes it into
the corresponding field of the Create Slave Database dialog.
If you are not allowed to access the database directly, a small wizard can help
you. Click the Generate button to start this wizard.:
Just enter the required data (depending on the database type, the number of
the required data may differ slightly). Clicking OK generates a database ID
and writes it into the corresponding field of the Create Slave
Databasedialog.
Finally, you have to specify the object groups that may be edited in the slave
database.
By clicking OK, the values in the fields Sync_DBID of the tables mentioned
above are set to 2 (or higher). After that, you get a message indicating the
number of objects that were assigned to the slave DB.
Every object may be edited on just one database to prevent conflicts during
synchronization. The Site Administrator acts very restrictively in that respect and
prohibits editing of objects that are not members of groups assigned to the own
Caution
database.
The same is true for the SiteManager and the scripting backend (ObjectManager
class etc.). However you have to be careful when using direct SQL statements for
object manipulation. This is considered “bad practice” with today's versions, but
there are sites with legacy code around. We strongly recommend to update such
scripts to use the *Manager scripting classes for these purposes before using the
synchronization feature.
This overview shows all defined databases, the assigned object groups of
each database and data and time of the latest synchronization run.
An asterisk next to the DBID identifies the current database of the Site
Administrator (in the screen capture, this is the master database).
Repeat this step for each desired slave database. However, if all object groups
are assigned to a slave database, you can define no further slave database.
4. The next action is to copy the master database to the individual database
servers. Use the WCM Server SQL Transfer tool to achieve this. You can
start that tool directly from the Synchronization tool, which has the
advantage of creating a suitable template automatically.
5. To check whether the Site Manager will work correctly with your settings,
enter the query option ?about=connect after the URL of your web site in
the address bar of your browser.
Installing the synchronization is now complete; you can work with the different
databases as usual.
Attention If you are working with Oracle under Solaris or Linux, the server name must be
the same as your tns entry in the file tnsnames.ora.
If the 2nd part of the database identifier is “dbname”, then you forgot to set the
ORACLE_HOME environment variable to your Oracle home directory.
Running a From time to time, you have to synchronize the databases in order to achieve the
synchronization same state on all databases. You can use the new deployment command line tool
(see paragraph “Deployment” in chapter “Tools” for a description) to do this
automatically or you can do it manually. In this case, a synchronization run has
four steps:
Changing group In order to reassign groups between the master and slave databases, the following
assignments procedure is recommended:
Clear Delete WCM Server records all deletions that affect the database in the designated table
Table syncdeleterow. With the information of this table, the synchronizing process
can delete the affected objects in the target database.
Updating an old With release 4.1.1, the recognition of the database has been changed. The IP
synchronization address was replaced by a unique database ID. The new components only work
with this new database recognition, older components work only with the former
IP address.
As soon as you access a synchronized database with the new Site Administrator
of release 4.1.1, a message appears notifying you of the necessary update of the
database definition. The Synchronization dialog appears.
All buttons of the dialog are disabled. In addition, the system does not recognize
the current database.
You now first have to change the settings of the master database. After this, you
have to copy the table synctable to the slave databases. Use the SQL Transfer
tool to achieve this. We strongly recommend doing a backup of all involved
Important
databases before beginning with the updating process.
Double-click an entry of the database list to open either the dialog of the master
database or the dialog for the slave database. Enter the database IDs in the same
way as if you made a new installation, and confirm your entries by clicking OK.
Repeat this step for each of the involved databases.
After you have carried out the changes described above, you have to restart the
Site Administrator. From now on you must no longer use components of release
4.1.0 or earlier because the synchronization will no longer recognize such
components.
Present situation:
You are using a template that is used in different pages. Those pages are assigned
to different databases.
Procedure:
The new slot is created in all affected pages of the current database. The other,
synchronized databases do not yet know of the new slot, therefore this new slot is
not created in the pages of those databases.
Synchronization:
During the next synchronization, the new slots are copied from the current
database to the other databases, as well as the template. Pages existing only on
one of the other databases and using the template in question will not yet get the
new slot.
Solution:
Administrators are allowed to use a special function in the Template Editor of the
Site Administrator: Recreate inherited slot. This function re-creates the new slot
again, without affecting already existing slots.
Amendment:
If you, instead of creating a new slot, delete an existing slot, the potentially
affected pages of the other databases do as well not recognize this change.
However, this situation is not that serious because deleted slots have no
importance. The Template Editor and the Page Editor of the Site Administrator
display such slots dimmed. Carrying out the Optimize Database function will
remove such dispensable slots.
Activate SOAP The WordWizard use SOAP WebService to communicate with the WCM Server.
The following entries in the configuration file (cmengine.cfg) are necessary:
SOAPENABLED=YES
SOAPMODULE=ObjectManager,ObjectManager,yes,no,no
SOAPMODULE=UserManager,UserManager,yes,no,no
SOAPMODULE=SearchManager,SearchManager,yes,no,no
SOAPMODULE=WorkflowManager,WorkflowManager,yes,no,no
If you want to create a log file for SOAP requests, the following additional entry
is necessary:
The last parameter of the corresponding SOAPMODULE entry must be set to yes.
Enable Edit Icon Set the following parameter in the configuration file of the CMEngine
(cmengine.cfg):
WIZARDMODE=WORD
or
WIZARDMODE=APPLET,WORD
Comments You can test your configuration by typing your base URL (SERVERURL +
URLMAGIC) followed by ObjectManager in the address field of the web
browser. After sending this request, your browser should show the interface
description of module ObjectManager.
4.10 TaskAgent
With the TaskAgent, the client obtains a simple yet powerful tool to perform three different tasks:
• remotely control SOAP webservices, especially the services published by the CMEngine,
• fetch arbitrary documents located somewhere within the World Wide Web and referenced by a
URL and
• execute arbitrary binaries stored on your local computer, given the user who executes the
TaskAgent has the permission to do so.
The TaskAgent furthermore contains a scheduler. So with the TaskAgent you will fully automate jobs
that should have been done periodically.
The TaskAgent is a self-contained tool. There’s no required dependency on other software. Obviously
there will be dependencies to webservices, web sites or binaries introduced by configuration.
Example: Imagine, your web site contains some charts visualizing some statistics that reside on an
external database. So it is likely that the chart is represented within the WCM Server by a SQL
statement. Because the data does not reside in a WCM Server DataTable object but on an external
source, changes to the data do not trigger updates of the chart. If you can tolerate short delays between
updates of the data and updates of the chart derived, then a good solution was to use the TaskAgent to
update all charts on a, say, daily basis.
The TaskAgent is available for all platforms the WCM Server server components are available for, i.e.
some flavours of the UNIX family of operating systems and MS Windows.
The TaskAgent is a command line application installable as a MS Windows service resp. an UNIX
daemon. There is no graphical user interface, because the TaskAgent will work silently in the
background most of the time.
For each platform there is a single binary called taskagent and a sample configuration file called
taskagent.cfg.
Command line After reading this section you will know how to call the TaskAgent from within
options the shell command prompt. This section contains a complete explanation of all
command line options.
Option Description
[a section name] The name of the section whose commands should be
executed.
Option Description
time. The two next arguments that have to be given,
are: A section name and the time delta in seconds.
Note that this command does not force the appropriate
section to be executed. So it has only an effect if the
section is additionally given via the
[asectionname] command line argument. If you
want to set a delay for more than one section, you
have to use the –delayswitch several times:
Option Description
you have to use the –macro switch several times:
would be equivalent to
If multiple section names are given, then the TaskAgent processes these sections
potentially in parallel. If you want to impose a strictly sequential behaviour, then
chain the appropriate sections by means of goto commands (see section
“Configuration of the TaskAgent”) instead. Note that you can also use both
methods at the same time: Giving sections independent of each other on the same
command line and connecting sections to be processed sequentially relative to
each other with the goto command. The disadvantage of goto commands over a
similar command line is that you hard wire a certain process by means of the
configuration file.
Example Assuming you have a configuration file in c:\ called taskagent.cfg and a
section called [DataTable] within this file. Probably inside of this section the
string $dataTableID is used. Then you could call the TaskAgent by the
following command line:
The TaskAgent is a flexible tool. Because it can perform three distinct jobs, the configuration depends
on whether you want to spawn executables, hit some URLs or call remote SOAP webservices. Each
section in the configuration file contains commands for on of the three different actions only. These
actions are called “calltypes” in the remaining document.
Configuration Like all the WCM Server products the TaskAgent has a facility to specify defaults
parameters within the configuration file. If a section has the reserved name COMMON and the
recognized inside parameter DEFAULTSECTION inside this section is set to on, then the parameters
the [COMMON] found there are taken as defaults, if not specified in a specific section. With the
section TaskAgent only a few parameters make sense to be specified within the COMMON
section.
Parameter Description
CALLTYPE Specifies the default calltype of all sections. Possible
values for the keyword CALLTYPE are:
EXECUTABLE
This section is intended to execute binaries like
the server-side Scripting class Executable does.
For further implications on special configuration
parameters see section “’COMMAND’s for the
‘EXECUTABLE’ calltype”.
HTTP
This section is intended to hit some URLs like the
server-side Scripting class HTTPClient does. For
further implications on special configuration
parameters see section “’COMMAND’s for the
Parameter Description
‘HTTP’ calltype”.
SOAP
This section is intended to call remote SOAP
webservices like the server-side Scripting class
SOAPClient does. For further implications on
special configuration parameters see section
“’COMMAND’s for the ‘SOAP’ calltype”.
Configuration The grammar allowed to be put into a configuration file is context dependent.
parameters There is a simple hierarchical scheme. The following terms are allowed:
common to all
calltypes Parameter Description
CALLTYPE Specifies the calltype of the current section. For all
possible values for the keyword CALLTYPE see above.
If no calltype is specified, the calltype specified in the
[COMMON] section is taken, if any. Specifying no
calltype at all is an error.
COMMAND Specifies a command to be executed. The COMMAND
key is designed similarly to the class SOAPClient of
server-side Java Script. This implies two
consequences: First, inside of a section state
information is maintained. Most easily think as if there
was an instance of SOAPClient residing in the
background. Secondly, the values allowed for the
COMMAND keyword are a superset of the interface, i.e.
the member functions and properties, of the
SOAPClient class. Possible values for the keyword
COMMAND are:
Parameter Description
Keyword Description
detectError Activates some check on return
values of remote procedure calls. If
an error was detected, processing
the appropriate section terminates
immediately and an entry becomes
added to the log file specified by the
LOGFILE setting. Possible
keywords are:
ERRORSTATE
An integer being a special
return value to be considered.
The default value depends on
the calltype. For HTTP it’s 200,
otherwise it defaults to “0”.
MODE
Specifies how the value given
as ERRORSTATE is going to be
interpreted. Possible values are
none – this switches off error
detection –, onFailure – the
return value specified is
interpreted as an error, any
other value indicates success –,
onSuccess – the return value
specified is interpreted to
indicate successful execution of
the call – and always –
regardless of its return value
any command will be
interpreted to have failed, any
other value means an error. The
value defaults to none.
SECONDS
Specify a delay in seconds after
which the execution of the
command affected is tried
again. If not specified, no retry
ever happens. So if you run the
TaskAgent as a daemon resp.
service, then you should always
give this parameter.
Parameter Description
Keyword Description
LOG
The value is echoed into the
logfile.
STDOUT
The value is echoed to the
standard output. On most
platforms this output is likely to
be shown delayed.
STDERR
The value is echoed to the
standard error output. On most
platforms this output is likely to
be shown immediately.
EXITSTATE
An integer that is returned to
the calling shell.
Parameter Description
Keyword Description
prevents errors hard to identify.
goto acts asynchronously, i.e.
commands given following the
goto command will be executed as
if no goto was present, and they
will be executed immediately.
Recognized keywords:
DESTINATION
A section name to be executed.
SECONDS
An integer specifying the delay
in seconds. If this parameter is
missing, the section specified
will be executed immediately.
SECONDS
An integer specifying the delay
in seconds.
“COMMAND”s for The purpose of the EXECUTABLE calltype is to periodically execute arbitrary
the binaries like e.g. Unix cron does. Configuring the TaskAgent as a scheduler that
“EXECUTABLE” just schedules the execution of binaries is quite simple, because in general you
calltype just need the cmdLine, the detectError, the execute and the goto
commands.
Command Description
cmdLine Like the cmdLine property of instances of the
Executable class of server-side Java Script this
command sets the command line arguments for the
binary to be executed. Keywords recognized are:
ARGUMENT
The command line arguments. This keyword is
mandatory.
EXECUTABLE
The binary to be executed. This keyword is
mandatory.
STDIN
Command Description
The data to be passed to the executable.
MILLISECONDS
The timeout in milliseconds.
Note that specifying a timeout is silently ignored
on some platforms due to restrictions of the
underlying operating system.
“COMMAND”s for You can use it to fetch web documents. It can especially be useful to hit WCM
the “HTTP” Server URLs like
calltype http://aMachineName:aPortNumber/aSite?debug=clearcache. This
section contains a complete explanation of each keyword special to the HTTP
calltype.
Command Description
content Like the content property of instances of the
HTTPClient class of server-side Java Script, this
command shows the content of a document fetched
before.
getKeepAlive Like the keepAlive property of instances of the
HTTPClient class of server-side Java Script, this
command shows the current setting of HTTP
KeepAlive.
getMethod Like the method property of instances of the
HTTPClient class of server-side Java Script, this
command shows the current HTTP method.
getPostData Like the postData property of instances of the
Command Description
HTTPClient class of server-side Java Script, this
command shows the current HTTP POST data.
getRequestHeader Like the requestHeader property of instances of the
HTTPClient class of server-side Java Script, this
command shows the current HTTP request headers.
getReuseSessionSSL Like the reuseSessionSSL property of instances of
the HTTPClient class of server-side Java Script, this
command shows whether the SSL session id is going
to be reused with the next request.
getSessionSSL Like the getSession() member function in the
HTTPClient class of server-side Java Script, this
command shows the SSL session id, which might be a
binary value.
getTimeout Like the timeout property of instances of the
HTTPClient class of server-side Java Script, this
command shows the delay before a request is given
up.
getUserAgent Like the userAgent property of instances of the
HTTPClient class of server-side Java Script, this
command shows the user agent string passed along
with the HTTP requests.
responseHeader Like the responseHeader property of instances of
the HTTPClient class of server-side Java Script, this
command shows the HTTP header returned by the
web server.
resultCode Like the resultCode property of instances of the
HTTPClient class of server-side Java Script, this
command shows the HTTP status code returned by the
web server. It indicates whether the HTTP request
succeeded (a number in the range from 200 to 299) or
not (any other number). If not, then the number
returned gives you some hint what went wrong. The
meaning of the value is standardized in Request for
Comment (RFC) #2616 (“Hypertext Transfer
Protocol—HTTP/1.1”).
sendRequest Like the sendRequest() member function in the
HTTPClient class of server-side Java Script, this
command sends a HTTP request to a certain URL.
This command expects the following key / value pair:
URL
The URL indicating protocol, port, server, path
and query string. Protocols supported are “http”
Command Description
and “https”.
STATE
A binary value indicating whether HTTP
KeepAlive is going to be switched on or off.
Possible values are 0 (indicating off) and 1
(indicating on).
METHOD
An arbitrary string indicating the HTTP method
to be set. Note, however, that your web server
will only support a restricted set of methods, most
notably GET, HEAD, POST and maybe PUT.
POSTDATA
An arbitrary string to be taken as the HTTP post
data.
HEADER
An arbitrary string to be taken as the HTTP
request header. Each non-quoted word constitutes
a separate header line.
Command Description
STATE
A binary value indicating whether the SSL
session id is going to be reused with the next
requests or not. Possible values are 0 (indicating
no) and 1 (indicating yes).
MODE
An integer indicating the session cache mode.
SESSIONID
An arbitrary string to be taken as the SSL session
id.
SECONDS
An integer value indicating the timeout in
seconds.
Command Description
pair:
SECONDS
An integer value indicating the timeout in
seconds.
USERAGENT
An arbitrary string to be taken as the user agent
identifier.
USER
The mnemonic user name.
PASSWORD
The password of the user specified. For your own
security please ensure that access to configuration
files containing passwords is restricted to the bare
minimum.
HTTPPROXYSERVER
The name of the proxy server.
HTTPPROXYPORT
The port number identifying the proxy service on
the proxy server. The default is “80”.
like
useProxyAuthentication the useproxyauthentication() member
function in the SOAPClient class of server-side Java
Command Description
Script, this switches on HTTP “Basic” authentication
to identify the TaskAgent at a proxy between the
TaskAgent and the provider of the SOAP web service.
Possible keywords are:
USER
The mnemonic user name.
PASSWORD
The password of the user specified. For your own
security please ensure that access to configuration
files containing passwords is restricted to the bare
minimum.
“COMMAND”s for You can use it to remotely call virtually every SOAP web service out there.
the “SOAP” Because SOAP is a very general concept, the TaskAgent has to be adapted to the
calltype SOAP web services that need to be remotely controlled. This is done by
customizing the configuration file. This section contains a complete explanation
of each keyword special to the SOAP calltype.
Command Description
call Like the call() member function in the
SOAPClient class of server-side Java Script, this
initiates a SOAP remote procedure call. Keywords
recognized are:
FUNCTION
The name of the remote function to call.
ARGUMENT
The arguments transmitted along with the
function call. Their types should match the
declaration of the function specified that is likely
to be published within some Web Services
Description Language (WSDL) file. Multiple
ARGUMENT lines are concatenated. For a detailed
and complete specification of the format for this
keyword see section “Format of ARGUMENT and
HEADER values”.
Command Description
error Similar to the error property of instances of the
SOAPClient class of server-side Java Script this
function prints the return value of the SOAP remote
procedure call just finished.
errorMessage Similar to the errorMessage property of instances of
the SOAPClient class of server-side Java Script this
function prints the error message of the SOAP remote
procedure call just finished.
setSOAPAction Like the setSOAPAction() member function in the
SOAPClient class of server-side Java Script this
function sets a SOAP action header. This command
expects the following key / value pair:
ACTIONHEADER
The action header to be sent along the SOAP call.
HEADER
The contents of the SOAP header. Multiple
HEADER lines are concatenated. For a detailed and
complete specification of the format for this
keyword see section “Format of ARGUMENT and
HEADER values”.
NAMESPACE
The namespace to be set.
NAMESPACEPREFIX
The namespace prefix to be set.
Command Description
URL
The value is the URL.
USER
The mnemonic user name.
PASSWORD
The password of the user specified. For your own
security please ensure that access to configuration
files containing passwords is restricted to the bare
minimum.
HTTPPROXYSERVER
The name of the proxy server.
HTTPPROXYPORT
The port number identifying the proxy service on
the proxy server. The default is 80.
Command Description
Possible keywords are:
USER
The mnemonic user name.
PASSWORD
The password of the user specified. For your own
security please ensure that access to configuration
files containing passwords is restricted to the bare
minimum.
General Because the format of the value associated to both the ARGUMENT key of the call
information command and the HEADER key of the setSOAPHeader command is the same, the
description in this section is valid for both.
SOAP arguments are type safe. As usual with typed programming languages there
are some fundamental types and language constructs to build compound types
from more simple building blocks. Moreover, it is possible to apply comments
within a value definition.
The format of a value of any fundamental data type is designed similarly to the
SOAPClientArguments class of server-side JavaScript.It reads as follows:
value type;
First, the value is given as a string, then its type, and last a semicolon. The type
determines how the value is going to be interpreted by the TaskAgent and how
the value is put into the SOAP XML data to be sent to the web service. The
semicolon acts as a terminator.
Example: String
This example demonstrates the way how to quote strings consisting of
multiple words.
This means that “it’s raining cats and dogs” is to be interpreted as a value of
type “string”.
Compound data The TaskAgent supports two compound types: structures and arrays. The in-depth
types examples should enable users to unleash the whole power of the TaskAgent,
because after they’ve read the following subsections they can build arbitrarily
complex SOAP ARGUMENTs and HEADERs.
The basic ingredient of any compound type is a set of fundamental data types as
described in the above section.
Structures
Members of structures are identified by name. Therefore the first word
expected in a definition of a member value is its name inside the structure.
Note that this name must match SOAP naming conventions to be
successfully processed.
Named strings given as values constitute members of SOAP structures.
Members inside a structure are separated by semicolons.
Example: Basic structure
This example shows two different ways to pass arguments to a SOAP
function. During transmission of the arguments they are implicitly
packed together into a surrounding SOAP structure, so the SOAP call
treats the function as if it had one argument only.
This makes weatherData a structure with the two members prose and
temperature. prose is a string that evaluates to rain. temperature
is an integer number with the value 4.
weatherData is a member of the basic structure each ARGUMENT
consists of as described above.
Example: Nested structure within an array
ARGUMENT=daySeries [ { dow Fri string; dom 13 int; }; ];
Arrays
With SOAP, arrays are quite similar to structures. Each member even of the
same array can be of any type independent of the types of the other members
of the same array. This is different from what is called an array, a field or
a vector in many popular programming languages.
The only difference between SOAP arrays and SOAP structures is that
members of structures are accessed by name, whereas members of arrays are
accessed by position. Therefore members of arrays don’t have names
associated with them.
Arrays can be established using square brackets.
Example: Array
A table cell can be identified by a two dimensional array containing the
appropriate row and column IDs.
Comments inside It is possible to put comments inside a value definition. The TaskAgent supports
of value two kinds of comments: Block comments between and including “/*” and “*/”,
definitions and comments starting with “//” and extending to the end of the respective line.
This is equivalent to
This is equivalent to
How to quote Quoting means to temporarily make the TaskAgent parser ignore special
characters. In the case of strings for example, it is likely that spaces should not be
interpreted as marking the end of the string.
The first one quotes text containing multiple characters by bracketing it into
single quotes.
The second one enables the user to quote a single character by preceding it with a
backslash.
Because both single quotes and backslashes therefore have a special meaning,
they have to be quoted themselves using a backslash.
'\'#\'#and#\\#are#equivalent'
evaluates to
'#'#and#\#are#equivalent
4.10.6 Examples
The main area of application of the TaskAgent is the CMEngine and its SOAP webservices, e.g. the
“UserManager” and the “ObjectManager”. Therefore all examples following deal with the CMEngine
SOAP webservices. However, this means in no way that the TaskAgent was limited to these services
only. In fact, you can call any SOAP webservice out there.
Issue one call This example shows how to design a configuration file that deals with the
only UserManager. It is assumed that the web server does not require HTTP
authentication. Instead, the example shows how to authenticate oneself to get
permission to call functions of the UserManager.
[loadUser]
CALLTYPE=SOAP
COMMAND=setTargetURL
URL=http://aMachineName:aPortNumber/aSite/UserManager
COMMAND=setSOAPHeader
HEADER=user $user string; password $password string;
COMMAND=call
FUNCTION=LoadUser
ARGUMENT=name $user string;
COMMAND=error
COMMAND=errorMessage
Here we intended the password to be hidden from the configuration file by using
the macro facility; note however that the command line can easily be spied out on
many operating systems, so this is less safe than writing the password into a
configuration file with restricted read access. We have also hidden the user ID
from the file, both to force reuse of this configuration file by keeping it general
and to ensure consistency, because we want to authenticate as the same user that
gets loaded.
Assuming that you have named this file c:\taskagent.cfg, you can let the
TaskAgent perform our task by the following command line:
After the TaskAgent has worked itself through the section, it does not perform
anything more. It can be stopped using [Ctrl]-[C] then.
Periodically issue This example demonstrates how you can use the goto command to schedule
a task tasks:
[chartEngine]
CALLTYPE=SOAP
COMMAND=setTargetURL
URL=http://aMachineName:aPortNumber/aSite/ObjectManager
COMMAND=setSOAPHeader
HEADER=user $user string; password $password string;
COMMAND=call
FUNCTION=UpdateCharts
COMMAND=goto
DESTINATION=chartEngine
SECONDS=3600
Here we intended the password to be hidden from the configuration file by using
the macro facility; note however that the command line can easily be spied out on
many operating systems, so this is less safe than writing the password into a
configuration file with restricted read access. We have also hidden the userID
from the file, in order to force its reuse by keeping it general.
Assuming that you have named this file c:\taskagent.cfg, you can let the
TaskAgent perform our task by the following command line:
After the TaskAgent has worked itself through the section specified, it will sleep
for an hour, and then it will perform the tasks specified in the same section again.
It will only exit if it is forced to, e.g. by killing it. It is platform dependent how
this can be done. Killing the TaskAgent has no bad side effects as long as you
choose a clean way to do it, e.g. if you are running the TaskAgent under UNIX,
then a kill will perform a fine job, whereas a kill –9 will immediately stop
the TaskAgent without the chance to clean up.
The main advantage of installing the TaskAgent as a UNIX daemon resp. MS Windows service is that
you can be sure it will be started automatically at system boot.
Because services and daemons run in the background, the TaskAgent is not associated to a terminal
device any more. This means that error messages and warnings concerning syntax errors within the
configuration file get lost. So it is very important that you test a configuration using the TaskAgent as a
command line application before you install it as a service resp. daemon.
MS Windows NT To install the TaskAgent as a service, just type taskagent –install. Now it
will be installed with no fixed command line options. Command line options can
be specified via the “Properties” window then. The TaskAgent needs at least one
section name to be given on the command line, otherwise it will not start. As said
above, you can also install the application e.g. via taskagent –install
chartEngine. If you start this service, then it will always be started at least with
the chartEngine command line option. Other command line options can be
specified via the “Properties” window again.
Error messages Usage errors – they cause the TaskAgent to skip processing the COMMAND that has
caused the error. Messages for this kind of errors are written to the screen.
42 int;
instead of
Missing end of A block comment has not Either the “*/” token has
comment been closed. been completely left or it’s weather /* good
there after a line break – bad string;
the current implementation
does not allow even for the
latter. instead of
weather /* good */
bad string;
Missing closing A quoted string never Either the “’” token has
quotation mark ends. been completely left or it’s ‘A string is a
there after a line break – string string;
the current implementation
does not allow even for the
latter. instead of
‘A string is a
string’ string;
Deadlock detected. The configuration file More than one recursive See the “Applications”
Too many [some exponentially increases GOTO command within the section.
command]s in section load. same section given.
[a section name]?
Just ignoring [the
command] with
DESTINATION set to
[another section
name], that
otherwise would have
caused the deadlock.
0 bool;
Other errors in configuration files – causes the TaskAgent to skip the section of
the configuration file that has caused the error. Messages for this kind of errors
are written to the screen.
4.10.9 Applications
This section summarizes some applications of the TaskAgent in connection with the CMEngine. A
single configuration file is used for all example applications. There is a distinct section in the
configuration file for each application presented.
#==========================================================#
[COMMON]
# This section will be used for fallback purposes...
DEFAULTSECTION=on
# Global log file...
# UNIX...
LOGFILE=/var/tmp/taskagent.log
# MS Windows NT...
# LOGFILE=c:\temp\taskagent.log
# Number of threads: a positive number...
THREADCOUNT=20
# Default calltype...
# One of "EXECUTABLE", "OXI", and "SOAP"...
CALLTYPE=SOAP
#==========================================================#
[workflowManager]
# One of "EXECUTABLE", "HTTP", and "SOAP"...
CALLTYPE=SOAP
# The commands are a superset of the commands in the "SOAPClient" scripting
# class...
URL=http://aMachineName:aPortNumber/aSite/WorkflowManager
# HTTP authentication...
COMMAND=useAuthentication
USER=$user0
PASSWORD=$password0
# SOAP authentication...
COMMAND=setSOAPHeader
HEADER=user $user1 string; password $password1 string;
COMMAND=call
# A function name...
FUNCTION=TriggerWorkflowEngine
# Repeat the execution of the current section every 10 seconds...
COMMAND=goto
DESTINATION=workflowManager
SECONDS=10
#==========================================================#
[chartEngine]
# One of "EXECUTABLE", "HTTP", and "SOAP"...
CALLTYPE=SOAP
# The commands are a superset of the commands in the "SOAPClient" scripting
# class...
# Error detection: Anything else but "0" is to be interpreted to be an
# error.
# If such an error has been detected, the command that has caused the error
# is issued again after half an hour (1800s).
COMMAND=detectError
ERRORSTATE=0
MODE=onSuccess
SECONDS=1800
COMMAND=setTargetURL
URL=http://aMachineName:aPortNumber/ObjectManager
# HTTP authentication...
COMMAND=useAuthentication
USER=$user0
PASSWORD=$password0
# SOAP authentication...
COMMAND=setSOAPHeader
HEADER=user $user1 string; password $password1 string;
COMMAND=call
# A function name...
FUNCTION=UpdateCharts
# Repeat the execution of the current section once an hour...
COMMAND=goto
DESTINATION=chartEngine
SECONDS=3600
#==========================================================#
[DataTable]
# One of "EXECUTABLE", "HTTP", and "SOAP"...
CALLTYPE=SOAP
# The commands are a superset of the commands in the "SOAPClient" scripting
# class...
# Error detection: Anything else but "0" is to be interpreted to be an
# error.
# If such an error has been detected, a message is written to the log file
# only.
COMMAND=detectError
ERRORSTATE=0
MODE=onSuccess
COMMAND=setTargetURL
URL=http://aMachineName:aPortNumber/DataTableTool
# HTTP authentication...
COMMAND=useAuthentication
USER=$user0
PASSWORD=$password0
# SOAP authentication...
COMMAND=setSOAPHeader
HEADER=user $user1 string; password $password1
string;
COMMAND=call
# A function name...
FUNCTION=UpdateLastRow
# Arguments...
ARGUMENT=dataTableID $dataTableID int;
ARGUMENT=newData [ 50 int; 100 int; 50 int; 50 int; 100 int; ];
# Don't repeat...
#==========================================================#
[helloWorld]
# One of "EXECUTABLE", "HTTP", and "SOAP"...
CALLTYPE=EXECUTABLE
# The commands are a superset of the commands in the "Executable" scripting
# class...
# Error detection: Anything else but "0" is to be interpreted to be an
# error.
# If such an error has been detected, a message is written to the log file
# only.
# With "CALLTYPE==EXECUTABLE" this is the default, anyway.
COMMAND=detectError
ERRORSTATE=0
MODE=onSuccess
# UNIX...
COMMAND=cmdLine
ARGUMENT=(Hello %i World %s) 10 fgfgf
COMMAND=execute
EXECUTABLE=/usr/bin/printf
# MS Windows NT...
# COMMAND=cmdLine
# ARGUMENT=/C echo 'this is the TaskAgent'
# COMMAND=execute
# EXECUTABLE=cmd.exe
COMMAND=outData
# Don't repeat...
#==========================================================#
[refresh]
# One of "EXECUTABLE", "HTTP", and "SOAP"...
CALLTYPE=HTTP
# The commands are a superset of the commands in the "Executable" scripting
# class...
# Error detection: Anything else but "200" is to be interpreted to be an
# error.
# If such an error has been detected, the command that has caused the error
# is issued again after half an hour (1800s).
COMMAND=detectError
ERRORSTATE=200
MODE=onSuccess
SECONDS=1800
# HTTP authentication...
COMMAND=useAuthentication
USER=$user
PASSWORD=$password
COMMAND=sendRequest
URL=http://aMachineName:aPortNumber/aSite?debug=refreshstatictables
# Repeat the execution of the current section once an hour...
COMMAND=goto
DESTINATION=refresh
SECONDS=3600
#=EOF======================================================#
Trigger To externally trigger the workflow manager of the CMEngine periodically every
WorkflowManager 10 seconds, you can now type
Update Charts This is the same example as the one in section “Periodically issue a task”.
You can remotely force the CMEngine's ObjectManager to update all charts
once an hour using the following command line:
Schedule The above configuration file contains a trivial example for the EXECUTABLE
execution of calltype, which does the same as the echo command. To try, simply type
arbitrary binaries
Refresh static The CMEngine permanently keeps the contents of some database tables in the
tables of the main memory. These tables are referred to as “static tables”. When changes to
WCM Server these tables are made, the CMEngine must be told to re-read them. This task can
be automated with the TaskAgent by means of its “HTTP” calltype. To schedule
this task in a way that it is repeated once an hour or, if an error occurred, every 30
minutes, just type
Detecting The asynchronous goto command is very powerful. However, users can produce
potential loads which increase exponentially by means of this command. No computer
deadlocks could handle such load. Therefore the TaskAgent guards against such
caused by configuration entries. This can only be done at runtime, often only after a certain
malicious delay. You can easily check this mechanism by typing
configuration files
The section [deadlock] therefore shows you how not to design a configuration
file for the TaskAgent.
Remotely Calling This section demonstrates how to remotely call server-side Java Script functions
server-side Java and passing arbitrarily complex arguments with the call.
Script Functions
This example demonstrates both how to persistently edit the last row in a data
table using server-side Java Script and how to remotely call the appropriate
function using the TaskAgent. The table is assumed to contain a descriptive label
in the first column – the other columns contain the real data.
We are going to use the following script. It is named DataTableTool and has
been published as a SOAP webservice:
/* $ RCSfile: dataTableTool.js,v $
$ Author: bachlipp $, $ Date: 2002/09/26 14:32:53 $
/* $ Log: dataTableTool.js,v $
* Revision 1.1 2002/09/26 14:32:53 bachlipp
* Initial revision
* */
function readDataTable(text)
{
var rowArray = text.split("\r\n");
return dataTable;
}
function dataTable2Text(dataTable)
{
var text = new String();
for(var i=0;i<dataTable.length;++i)
text += dataTable[i].join('\t') + '\r\n';
return text;
}
/*
<webservice function="UpdateLastRow">
<in>
<int name="dataTableID"><description>The id of the data table
</description></int>
<array name="newData" type="int"><description>The new data for the last
row</description></array>
</in>
</webservice>
*/
function UpdateLastRow(dataTableID,newData)
{
// First, get the data table from the db...
var webObject = objectManager.edit(dataTableID);
if(null == webObject)
return;
Further we’ll assume, that there exists a data table within the WCM Server which
has the ID 3104 and has at least 6 columns.
This will put the vector (50,100,50,50,100) according to the configuration file into
the data table with object ID 3104.
MODULETYPE01=Workflow
MODULEKEY01=ABCD-EFGH-IJKL-MNOP-QRST-UVWX-YZ
MODULEHOLDER01=ACME Corporation
Activate the The workflow engine is started and run in the background by the
workflow engine ServiceControl.exe
(Windows)
4.12 Deployment
Purpose deployment is a shell-based tool that you can use for importing and exporting
data from and to the WCM Server repository, for synchronization and other tasks.
Combined with an external scheduler, you can even automate the execution of
these tasks.
4.12.1 Synchronization
deployment –s xxx.cfg
Prerequisite For online synchronizations, you must have access to all involved databases and
you need a reasonably fast network connection.
Configuration file The configuration file is quite simple; it only contains information of the
individual databases. The master database has to be the first one in the
configuration file, the sequence of the slave databases is arbitrary.
[master]
DBTYPE=MSSQL
DBNAME=dbsync_master
DBUSER=sa
DBPWD=
LOGFILE=/opt/livelink/wcm/type1/logs/sync.log
WORKINGPATH=/opt/livelink/wcm/type1/cache/sync
[slave1]
DBTYPE=MSSQL
DBNAME=dbsync_slave
DBUSER=sa
DBPWD=
[slave2]
DBTYPE=MSSQL
DBNAME=dbsync_slave2
DBUSER=sa
DBPWD=
As always when using Oracle, you have to set the version and the path to the
client library. You do this in the [master] section because there is no
[common].
Additionally you have to set the DBIDENTIFIER in each section, which must be
in the following format (and must be the same as seen in the Site Administrator's
Synchronization Tool):
/<mydatabasename>/dbname/defdb/<myusername>/<myusername>,
where <mydatabasename> is the Net Service Name of the Oracle database (the
same as in the DBNAME parameter), while dbname and defdb are literal strings
that must appear as they are. For example if your database name is llwcm and the
user is wcmdemo, the identifier would look like:
/llwcm/dbname/defdb/wcmdemo/wcmdemo.
[master]
USEDBVERSION=Oracle 10.1.0
USEDBLIBRARY=/opt/oracle/product/10.1.0/lib/libclntsh.so
DBIDENTIFIER=/llwcm/dbname/defdb/dbsync_master/dbsync_master
DBTYPE=Oracle
DBNAME=llwcm
DBUSER=dbsync_master
DBPWD=
LOGFILE=/opt/livelink/wcm/type1/logs/sync.log
WORKINGPATH=/opt/livelink/wcm/type1/cache/sync
[slave1]
DBIDENTIFIER=/llwcm/dbname/defdb/dbsync_slave/dbsync_slave
DBTYPE=Oracle
DBNAME=llwcm
DBUSER=dbsync_slave
DBPWD=
[slave2]
DBIDENTIFIER=/llwcm/dbname/defdb/dbsync_slave2/dbsync_slave2
DBTYPE=Oracle
DBNAME=llwcm
DBUSER=dbsync_slave2
DBPWD=
Parameters dbtype, dbname, dbuser and dbpwd correspond to the same parameters of the
CMEngine’s configuration file (cmengine.cfg) .
Prerequisite Offline synchronization does not require direct access to all involved databases
from one place, but you need a reliable third party system for the actual data
exchange. In addition, a proper time scheduling is essential for automated offline
synchronization. Mixing up the individual steps of the synchronization can cause
data loss, in which case you have to perform an extended synchronization run or –
in the worst case – you have to overwrite the slave databases with a copy of the
master database.
Procedure Per slave database, you have to perform 4 individual steps (8 steps if you have
several slave databases) and the sequence of the steps is compulsory. The
individual steps are:
You have to repeat these four steps for each slave database. It is crucial to avoid
overlapping of this sequence with a sequence of another slave database. In other
words, fully synchronize your slave databases one after the other.
Especially in environments with several slave databases, not every database will
know of all changes (for example change of group membership of an object) of
all other databases after having run the four steps once for each database.
Therefore, you have to repeat the entire procedure for a second time. For
example:
Configuration file
[slave]
step 1 (and 5) dbtype=mssql
dbname=dbsync_slave
dbuser=sa
dbpwd=
mode=writefile
destination=1
The first part is equal for all types of data exchange: You have to specify
filename=c:\temp\test.osf
filename=ftp://ftp.intra.openmind.ch/test2.osf
ftpuser=
ftppwd=
ftpport=21
The file name indicates the path and the name of the file. ftpuser, ftppwd
and ftpport are the usual access parameters.
• via e-mail
mailserver=127.0.0.1
[email protected]
The generated file with the extension .osf will be sent as an attachment to
the indicated address, a file name is not possible. This type of data exchange
is the least reliable one, because late delivery of an e-mail will confuse the
sequence of the necessary synchronization steps.
Configuration file
[master]
step 2 (and 6) dbtype=mssql
dbname=dbsync_master
dbuser=sa
dbpwd=
mode=readfile
filename=c:\temp\test.osf
filename=ftp://ftp.intra.openmind.ch/test2.osf
ftpuser=
ftppwd=
ftpdelete=yes
c) via e-mail
mailserver=127.0.0.1
mailport=110
mailuser=einstein
mailpwd=einstein
Most of the parameters correspond to those of step 1. In addition, you can specify
ftpdelete=yes|no to control the deletion of the file on the FTP server after it
has been transferred. Default value is yes.
Configuration file Like step 1, but with the master database as source and the slave database as
step 3 (and 7) destination (destination=2).
Configuration file Like step 2, but with the slave database as destination.
step 4 (and 8)
Important The following parameter is crucial for changing the group membership of objects.
islastsync=yes
You have to specify this parameter with the last synchronization cycle only. If
you have one single slave database, specify the parameter in the steps 1 and 3, if
you have several slave databases specify the parameter in steps 5 and 7.
Specifying this parameter causes the automatic correction of the entries in the
synchronization database, in order to avoid concurrent editing rights on more than
one slave database for objects, of which the group membership has been changed.
If you omit this parameter, the objects with changed group membership can be
edited on different slave databases, which prohibits future synchronization of
these objects! (In such a case, only manual correction of the affected database
rows could produce relief.)
This is a further reason for preferring online synchronization, which uses this
parameter correctly and automatically.
Enhanced Usually, synchronization is always incremental, meaning that only those elements
Synchronization are synchronized that have changed since the last synchronization run. The date
and time of the last synchronization is stored in the database, in table SYNCDATA.
As already mentioned before, it is possible that a synchronization run can not be
executed completely – for example because of the loss of a transfer file – but the
entry in the SYNCDATA table has already been made. In such a case, the system
can no longer recognize the incompleteness of the synchronization, and not all
objects that are subject to synchronization are distributed correctly to the
necessary destinations.
SyncTime=01.01.2003 00:00
This parameter causes the system to synchronize all objects that have been
changed since January 1st of 2003, 00:00.
SyncTimeDelta=7d
or
SyncTimeDelta=168h
This parameter causes the system to synchronize all objects that have been
changed in the last seven days, independently of the last synchronization run.
When using this parameter, it is important to avoid creating synchronization gaps.
If the last synchronization run was ten days ago and you now synchronize for the
last seven days, you create a gap of three days. All objects that have been changed
in these three days will never be synchronized in this case.
The parameters described above must be placed in the first section of the
configuration file.
Usage
deployment transfer -w xxx.ood [yyy.oxp]
deployment transfer -r xxx.ood [yyy.oxp]
deployment transfer -t xxx.ood
deployment transfer -d xxx.ood
transfer
indicates the function group
-w
writes an .oxp file (object export)
-r
reads an .oxp file (object import)
-t
direct object transfer
-d
delete objects
xxx.ood
is the parameter file which has to be created inside the Site Administrator
yyy.oxp
is an optional parameter to overwrite the file which is defined in the .ood file
Features These functions are equivalent to the corresponding functions inside the Site
Administrator:
For more information about .ood files and how to create them consult the Site
Administration Manual.
the web server. Instead, the web server loads only a small stub
(enginestub.dll), which handles communication with the CMEngine. The
engine runs as a separate process.
Using two communication channels in this manner provides for much better
throughput than one bidirectional channel.
Pro's and Con's Disadvantages when using a distributed setup might be:
• Performance: An additional network round-trip is introduced, which makes
things a little slower compared with an in-process rendering engine.
3. Configure enginestub.cfg
enginestub.cfg
#========================================================#
example file [COMMON]
THREADCOUNT=20
IPC_INFO=127.0.0.1:20333
USEPERMANENTCONNECT=YES
LISTENERHOST=127.0.0.1:21333
LOGFILE=C:\Livelink\wcm\type1\logs\enginestub.log
#========================================================#
[WCMStarter]
URLMAGIC=/wcmstarter
#=EOF====================================================#
#========================================================#
[COMMON]
THREADCOUNT=20
IPC_INFO=127.0.0.1:20333
USEPERMANENTCONNECT=YES
LISTENERHOST=127.0.0.1:21333
LOGFILE=/opt/livelink/wcm/type1/logs/enginestub.log
#========================================================#
[wcmstarter]
#HOSTMAGIC=<hostname>
URLMAGIC=/wcmstarter
#=EOF====================================================#
LoadModule EngineStub_Module
/opt/livelink/wcm/type1/lib/enginestub-ap2.so
After this you have to stop and start the Apache web server with the following
two commands:
# /opt/apache2/bin/apachectl stop
# /opt/apache2/bin/apachectl start
Activate the In order to have the CMEngine started, we uncomment the respective entries in
CMEngine /opt/livelink/wcm/type1/bin/livelink-wcm-type1 (there are two
entries for the engine, one for starting and one for stopping it). As you can see
from the example, the CMEngine accepts two parameters: An arbitrary but unique
name and the port number it should listen to. If you change it, you have to adapt
enginestub.cfg as well (see below).
[...]
su ${WCM1_USER} –c “${WCM1_HOME}/bin/cmengine renderer1 20333” > /dev/null
2>&1 &
[...]
killall cmengine
[...]
$ /opt/livelink/wcm/type1/bin/livelink-wcm-type1 stop
$ /opt/livelink/wcm/type1/bin/livelink-wcm-type1 start
“Debugging” If you try to access your web site in the browser and you do not get an answer,
and the only log file written is the enginestub.log, please make sure that all
the necessary environment variables are set correctly and exported.
5 Client Installation
5.1 Introduction
Comments If your server is running under Windows, the client components may also be
installed on the server.
for an Oracle connection). - Database User: Enter the database owner (for
example wcm_owner) - Database Pwd Encrypted: Enter the DBO
password (for example *******). - Website User: Enter the web
site/WCM Server user (default is admin). - Website Base URL:
http://hostname/urlmagic/. - Browser Type: Select the default
browser for external display.
Important For the client-side Word integration to work, the server must be configured
accordingly. See the chapter of the same name in the “Additional Components”
section on page 136.
Office 97 ..\Program
Files\MicrosoftOffice\Office\Startup
Office 2000 ..\Program
Files\MicrosoftOffice\Office\Startup
Office XP ..\Program
Files\MicrosoftOffice\Office10\Startup
Office 2003 ..\Program
Files\MicrosoftOffice\Office11\Startup
5.5 SQLTransfer
Note SQLTransfer is a general data transfer tool that is capable of transferring any data
within an SQL database to another. The data transfer does not include the transfer
of the data model, which means that you always have to create the tables and
indices in advance before you can transfer data into a new database or database
schema. But because SQLTransfer relies on the ODBC (OCI/CLI) standard
connectivity interface, which is supported by many system vendors, it is also
capable of transferring data between different types of database, databases on
different systems and offline via file export/import.
The SQLTransfer tool just needs a transfer script and, if you use an MSSQL
database, the preconfigured ODBC connections. Usually it is recommended to use
the Windows GUI version of SQLTransfer, as it includes a complete script wizard
to generate the transfer script. The following chapters show what such a transfer
script contains and what options you have.
Usage The Windows GUI version comes along with a complete user interface, but if you
use the shell version, you can call SQLTransfer like this:
%errorlevel% / $?
-silent (or just -s) activates the silent mode, which does not write anything to
the console but only to the log. Otherwise you will see warnings and some errors
directly in the console.
Note that the shell version called sqltrans.exe under Windows is called
sqltransfer on the Unix platforms; there is no GUI version of SQLTransfer for
Unix. However, if you installed your Linux/Solaris server using the packages,
there are two sample SQLTransfer import scripts in
/opt/livelink/wcm/type1/scripts, which you can adapt to your needs:
import-sitemanager.sqx and import-sitestarter.sqx.
Note You can also define a source database and a target database together which means
that the data will be transferred directly from database to database without
creating a file. But defining a source and a target file together is not supported.
Structure The default transfer script has the following structure (comments start with #):
#SQL-Transfer Script
begin transfer
source database type=MSSQL
source database connect=DSN=test;UID=user;PWD=xxx
dump to file=test.dat
usedbrowprefetch=100
General info Parameter sections define lists of items mostly needed as information about an
export, import or verify. Each item has to be on a separate line.
begin/end Must mark the beginning and the end of the transfer script parameter section as
transfer the log might be appended during the transfer. Each line between may contain
either a parameter or a comment.
begin/end tables Marks the beginning and the end of the list of tables to be exported. Each table
name has to be on a separate line.
begin/end delete Marks the beginning and the end of the list of tables to be deleted/truncated
tables before importing data into it. Usually the tables are deleted/truncated
automatically before filling in but this also means that the order of tables deleted
is the same as in the table list. If you have some foreign key constraints it might
be that you have to delete the tables in the reverse order than filling the tables.
Here you can define a different order which will be processed before the first
table is filled again. Each table name has to be on a separate line.
begin/end Marks the beginning and the end of the list of tables not to be imported. Each
exclude tables table name has to be on a separate line.
begin/end source Marks the beginning and the end of the list of SQL statements executed on the
sql statements source database before the transfer starts. This can be useful to run an update
script before the export. Each SQL statement can use several lines but must be
terminated with a single “go” on the line or with a semi-colon after the last word.
There can be multiple SQL statements but they will be executed single in order.
begin/end target Marks the beginning and the end of the list of SQL statements executed on the
sql statements target database before the transfer starts. This can be useful to run a data model
creation script before the import.
begin/end Marks the beginning and the end of the list of changes to be made during the
change tables transfer. It is possible to rename table names, rename field names, remap field
types, exclude fields and filter specific data rows. This can be done with
following parameters. Each parameter has to be on a separate line.
Parameters Parameters define all information needed for an export, import or verify. Each
parameter my contain some predefined dynamic tokens that help to make an
automated import/export script. Predefined tokens are:
SYSDATE[.s]
Delivers the system date with format DD.MM.YYYY. s is an optional format
parameter which allows to use DD, MM, MMM, YY and YYYY for day, month,
name of month, year and full year, e.g. SYSDATE.“MM-DD-YYYY“ for the
American date format. Additionally there are the formats WWW for the name of
the day of week (Mon, Tue, etc.) and WY for the number of the week of the
year (0 to 52).
SYSTIME[.s]
Delivers the system time with format HH:MM:SS. s is an optional format
parameter which allows to use HH, MM, SS, SS.S and SS.SSfor hour, minute,
second and fractions of a second, e.g. SYSTIME.“HH:MM” for hours and
minutes.
source database Defines the type of the source database. Supported are MSSQL and Oracle,
type Example: source database type=Oracle
source database Defines the source database connection. The syntax is the same as for ODBC and
connect supports following parameters:
DSN
Connection name
UID
Login name
PWD
Login password (encrypted if generated by the wizard)
Example:
dump to file Defines the path of the export file. If the file has the extension .zip the data will
be directly zipped and will be much smaller. Example:
C:\Livelink\wcm\type1\backup\mysite-<!WEM SYSDATE.YYYYMM
DD>-<!WEM SYSTIME.HHMM>.dat Example with zipping:
C:\Livelink\wcm\type1\backup\mysite-<!WEM
SYSDATE.YYYYMMDD>-<!WEM SYSTIME.HHMM>.zip
target database Defines the type of the target database. Supported are MSSQL and Oracle.
type
set max field size Defines the maximum size of a single field in any table exported, e.g. 2000000 if
the biggest blob in a table is < 2 MB. Usually this size will be automatically
detected if it is in a standard table of the WCM Server data model.
dblogfile Defines the path of the DBEngine log file, which logs only SQL errors.
dbsourcelogfile Defines the path of the DBEngine log file of the source database, which logs only
SQL errors.
dbtargetlogfile Defines the path of the DBEngine log file of the target database, which logs only
SQL errors.
setenv Allows defining any environment variables needed for the transfer. Example:
setenv=ORACLE_HOME=C:\Oracle\ora920
All other Oracle specific parameters that can be used for the CMEngine can also
be used here. Example: USEDBVERSION=Oracle 10.1.0 (which refers to the
version of the Oracle client library, for the (rare) cases where it is different from
the Oracle server version)
infofile Defines the path of the optional table structure information file. This file will be
generated when the source database will be exported. The file contains the table
structure as SQL script including tables, primary keys, indices and defaults. You
can copy and paste the SQL script directly into the sections begin/end source
SQL statements or begin/end target SQL statements of a possible
import script.
infomode Defines the method of how the SQL script is being generated. Normal is default
and alternate is usually a lower level method which does not always support all
structures.
5.5.6 Options
General info Options predefine the behavior of SQLTransfer in specific situations. These
predefinitions are necessary when a batch scheduler starts the transfer script
automatically, and there is no possibility for interactive inputs. The result of such
a transfer is always logged including the automatically chosen options.
The allowed values are in parentheses and the first value is the default.
full log Defines if there should be logged only errors, full or short.
(no,yes,error)
clear logfile Defines if the log should be cleared before the transfer.
(no,yes)
clear dblogfile Defines if the DBEngine log should be cleared before transfer.
(no,yes)
skip transfer Defines if the transfer should be skipped and the verify should be started
(no,yes) immediately.
row sorting Defines if the exported data rows should be strictly sorted.
(yes,no)
skip truncate Defines if the tables should be automatically deleted/truncated before importing
table (no,yes) data. If this option is set to yes, the imported data will be merged together with
the already existing data rows. This works only without error if there are no rows
imported that conflict with a double primary key or unique constraint.
force truncate Defines if truncate table instead of delete from table should be used.
table (yes,no) Truncate table is usually faster as this operation is not logged by the database
server but may conflict with a configured database replication because a
replication needs to have all operations logged. If this is the case just set this
option to no.
stop on error Defines if the transfer should immediately stop on first error.
(yes,no)
reconnect before Defines if the transfer should close the current connection and open a new one to
continue (yes,no) continue after an error.
skip corrupt Defines if the transfer should skip the rest of the table after an error or if the
tables (yes,no) transfer should try to continue with the same table.
stop on Defines if you can interactively interrupt the transfer with the [ESC] key (only
interruption Windows version).
(no,yes)
verify transfer Defines if the import should be verified after the transfer.
(no,yes)
ignore trailing Defines if the verification should ignore trailing spaces within char fields. This
spaces for verify makes it possible to verify char against varchar successfully.
(no,yes)
Force ODBC Corresponds to the parameter useodbc=yes. For almost all database types the
vendor specific ODBC driver can be used. For Oracle there is a different interface
used by default, which accesses directly the underlying OCI. With this switch you
can force the use of the vendor specific ODBC driver.
Thread Safety Sets some Oracle specific options to make the OCI thread safe. Usually it is not
necessary as SQLTransfer always runs in single threaded mode.
Register/Unregister Registers or unregisters the file types .sqx and .dat in the Windows Explorer
File Associations for use with SQLTransfer by default.
Install/Uninstall SQLTransfer uses standard encryption for the database password within the
Custom connection parameter (see source/target database connect, PWD=xxx). It also
Encryption Key takes unencrypted passwords for instant use, but it is not recommended to save
and distribute transfer scripts with unencrypted passwords.
Additionally you can install your own encryption key that will force all users on a
computer to use this password encryption instead of the standard encryption. This
also allows you to restrict the use of SQLTransfer for only some specific
purposes.
Important
ServiceControl.cfg
#==========================================================#
example file [COMMON]
LOGFILE=C:\Livelink\wcm\type1\logs\servicecontrol.log
#==========================================================#
[CMENGINE_1]
TYPE=RENDERER
PROGRAM=C:\Livelink\wcm\type1\bin\cmengine.exe
PORT=<port>
CONFIGFILE_PATH=<WCM Server config file directory>
#==========================================================#
[APACHE]
TYPE=SERVICE
SERVICENAME=apache
#=EOF======================================================#
6 Advanced Topics
In web server authentication, the user name and password are entered in a popup
dialog displayed by the browser, and the browser sends them to the web server,
along with the request, in the Authorization: header.
• both the client and the server are part of the same domain,
• the web server is an IIS,
• and the browser supports the NTLM protocol (IE and Mozilla >= 1.6),
the client is automatically logged in to the web site without having to type in
his/her password again (IE), resp. more than once (Mozilla).
Site Administrator The preview and some other functions in the Site Administrator require a working
and Web Server connection to the WCM Server. The Site Administrator is able to authenticate
Authentication itself to the WCM Server, if the WCM Server authentication scheme
(session-based authentication, the one that you use when you log in to the web
site via ?login) is used. It is, however, not able to authenticate itself via NTLM
(or some other form of web server authentication).
7 Maintenance Tasks
7.1 Backup
Important After the whole installation has been successful it is strongly recommended to
schedule a regular backup for each productive server database. This should
include daily database backups for development and staging server, which should
be held at least a week. For each week one backup should be held for at least 3
months and the monthly backups should be archived for a year or more. This
backup strategy has been proved for many years.
Creating a BAK 1. Select the database for which the .bak file is to be created. Right-click the
file database, point to All Tasks and click Backup Database.
2. Under the General tab of the SQL Server Backup dialog, click Add in the
Destination section.
3. In the Select Backup Destination dialog, choose the default directory or
specify another location. If you want to use the backup facility regularly it’s
recommended to configure a backup device.
4. Enter the file name in the Backup Device Location dialog.
5. The name has now been registered in SQL Server Backup. Begin backup by
confirming with OK.
Restoring a BAK 1. Select the database to be restored. Right-click the database, point to All
file Tasks and click Restore Database.
2. If no .bak file has been specified previously, select From Device. Click
Select Devices…
3. If the .bak file is on a local drive, click Add…. Otherwise it must be copied to
a drive from which it can be retrieved via tape.
4. Select the required file (Use the button … to browse for the file).
5. Confirm the file selection with OK.
6. Confirm loading of the file with OK.
7. Select the Options tab. Mark the checkbox Force restore over
existing database. Verify that the directory in which the .mdf and .ldf
files are located has been specified.
8. Begin the restoring process by clicking OK.
When restoring from a backup device with several backups in it, make always
sure you are restoring the correct backup, as the default is mostly not the latest but
the oldest backup.
Important
7.1.2 Oracle
Note In order to import or export data under Oracle, two utilities, imp and exp, are
provided. However, it is recommended that you use SQLTransfer for transferring
WCM Server web site data whenever possible, for the following reason:
imp and exp are usually not compatible across different versions. So use them
only if the Oracle version of the server where you export data from and the
version of the server where you are importing into are the same. Also the version
of the Oracle client must be the same as the version of the Oracle server. There
are cases where using different versions works, but usually it does not.
Oracle says:
A good reason for preferring imp/exp over SQLTransfer is when you have to
transfer large amounts of data, because imp/exp is faster than SQLTransfer (at
least it used to be, with the current versions SQLTransfer has become quite fast as
well!).
Exporting a Open a command line or terminal window and issue the following statement:
database
$ exp username/[email protected] file=filename.dmp direct=y
you have to set the NLS_LANG environment variable to the same character set as
$ export NLS_LANG=AMERICAN_AMERICA.US7ASCII
Importing a To import the data, use the following (make sure that the tables of the destination
database user are empty or do not exist):
Tip Another useful application of imp is to script a particular user's objects. If you
would do
the import is not actually made, but you will find create statements for all the
objects (tables and indexes) in filename.sql. It is not very well formatted,
however, and create statements for tables are commented out.
Most people are used to handling the web server log files because they (and their
management and marketing departments) are interested in the information those
files provide about their web site users. The WCM Server log files, on the other
hand, provide information about how “healthy” the system is.
Log File Rotation Log files should not grow too big; otherwise they are difficult to handle for the
administrator as well as for the system. The easiest way for implementing log file
<!WEM SYSDATE.”WW”> for example returns the current week number, which
can easily be used to define the log file name in the configuration file
cmengine.cfg:
LOGFILE=/opt/livelink/wcm/type1/logs/cmengine-<!WEM SYSDATE.”WW”>.log
Access to log We encourage users working with the Site Administrator to regularly check the
files log files as well, in order to see whether their scripts contain or produce any
errors. If those users do not have direct access to the server’s file system, they can
view the log files in their browsers (see below on how to do this), provided that
Analyzing the The LOGFILE (as defined in cmengine.cfg) provides information about:
LOGFILE
• Server (re-)starts
• Timeouts in scripts and data objects
• Failed login attempts
• Session timeouts
• Unsuccessful attempts to connect to a database
• Other problems
You can see the LOGFILE in the browser using a query parameter of
?debug=logfile.
Analyzing the The DBLOGFILE logs database errors. Information in the DBLOGFILE is almost
DBLOGFILE always critical in nature: Since all data of a WCM Server web site reside entirely
in the database, SQL errors can quickly have a negative impact on performance. If
there is an erroneous SQL statement in an object that belongs to several pages,
many (if not all) web site requests lead to one (uncached) SQL error, which
results in a database log file growing very rapidly. This makes database problems
very easy to spot: A quick glance at the log file directory should reveal any
problems immediately. The DBLOGFILE is created only if something has to be
written to it. Therefore, if there is none around, it could mean that the site did not
produce any SQL errors and the system is in a healthy state. However, it could
also mean that the CMEngine does not have write access to the log directory ;-)
Each SQL error is logged with the ID of the object that produced it. Therefore,
make sure you include this ID when you hand the error over to the person that
should fix it.
The DBLOGFILE can also be accessed by site builders and authors using the query
parameter ?debug=dblogfile.
Analyzing the The SCRIPTLOGFILE logs errors in server-side scripts. It also contains output
SCRIPTLOGFILE generated via the log() function. It can be accessed using the query parameter
?debug=scriptlogfile.
8 Appendix
Procedure 1. Start the Oracle installation program and confirm with Next.
2. Specify the installation path for Oracle. Important: The installation path must
not contain spaces or any other special characters as this will not be accepted
by the Oracle Java components.
3. The available products are listed. If you want to install a whole database
server instance choose Oracle9i Database. Select the desired product and
confirm with Next.
4. The available products are listed. If you want to install a whole database
server instance choose Oracle9i Database. Select the desired product and
confirm with Next.
5. Select the Standard or Enterprise Edition for the Oracle server
according to your license agreement. The Personal Edition will not be
Important
9. Choose the default character set for the database. Confirm with Next.
10. After the review of the installation choices you can start the installation with
install. After a while you will be asked to insert the second and then the
third CD. Oracle then creates the default database instance.
11. The most important information for the Oracle installation is displayed before
concluding.
Note This is just a very rough description to get you going. If you have any problems
installing Oracle, please refer to the relevant Oracle documentation and support
web sites (e.g. the Oracle Technology Network at http://otn.oracle.com or
Metalink at http://metalink.oracle.com).
Configure kernel Add the following parameters to /etc/system (these are the minimum
resources requirements):
set shmsys:shminfo_shmmax=4294967295
set shmsys:shminfo_shmmin=1
set shmsys:shminfo_shmmni=100
set shmsys:shminfo_shmseg=10
set semsys:seminfo_semmni=100
set semsys:seminfo_semmsl=200
set semsys:seminfo_semmns=700
set semsys:seminfo_semopm=100
set semsys:seminfo_semvmx=32767
Install required If not already installed on your system, install the following packages from your
packages Solaris operating system CD:
You might want to install bash, gzip, gtar etc. as well. You can get
precompiled Solaris binaries from http://www.sunfreeware.com.
New Password:
Re-enter new Password:
passwd: password successfully changed for oracle
# mkdir –p /opt/oracle/product/8.1.5
Edit oracle’s
$ vi /opt/oracle/.profile
profile umask 022
unset CLASSPATH
unset JAVA_HOME
unset LANG
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15
ORACLE_BASE=/opt/oracle
ORACLE_HOME=/opt/oracle/product/9.2.0
ORACLE_SID=ORCL
PATH=${PATH}:${ORACLE_HOME}/bin
export LD_ASSUME_KERNEL NLS_LANG ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
:wq
Unpack Create a directory, say orainst, and unpack the Oracle installation CD contents
installation into it (gzipped cpio archives).
archives
cd orainst
./runInstaller
and follow the instructions. Use Custom when asked for the installation method,
not Typical.
Create database When the installation has finished, the installer automatically starts dbassist to
instance create a new database. Choose Typical here and select OLTP as the type of
prevalent usage. When you are prompted for the database options, select only
what you really need. It'll take a long time anyway! (If you choose one of the
pre-created databases, it will take less time, but some settings might not be as you
would like them; e.g. they have a blocksize of only 4k.) Finally select Create
Now.
Unpack Create a directory, say orainst, and unpack the Oracle installation CD contents
installation into it (gzipped cpio archives).
archives
cd orainst
./runInstaller
and follow the instructions. Use Custom when asked for the installation method,
not Typical.
Apply glibc patch The following applies to Oracle 8i only: During the install you will get a link
(8i only) error. Go to another terminal window and install the patch
glibc-2.1.3-stubs.tar.gz (you can get it from Oracle):
$ cd $ORACLE_HOME
$ tar zxvf /tmp/glibc-2.1.3-stubs.tar.gz
$ ./setup_stubs.sh
When the installation script has finished, get back to the link error dialog and
click retry. It should now run through without errors.
Create database When the installation has finished, the installer automatically starts dbassist to
instance create a new database. Choose Typical here and select OLTP as the type of
prevalent usage. When you are prompted for the database options, select only
what you really need. It'll take a long time anyway! Finally select Create Now.
Configuration It is expected that the following environment variables are set in the .profile of
the Oracle user (which should be the case if you followed the instructions above).
ORACLE_BASE
ORACLE_HOME
ORACLE_SID
NLS_LANG
It is also important that the instance of the database was created with a global
database name including the domain.
OBTREE.MYDOMAIN.COM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhost)(PORT=1521))
)
(CONNECT_DATA =
(SERVICE_NAME = wcm.mydomain.com)
)
)
NAMES.DEFAULT_DOMAIN = MYDOMAIN.COM
as well as (possibly)
SQLNET.EXPIRE_TIME = 1
This entry defines the time interval in minutes in which the Oracle server checks
open connections. If the client doesn’t reply, the connection is closed.
tcp.nodelay=yes
As a default, this file does not exist so you will have to create it.
processes = 300
In case there are no raw devices used for tablespace data, the following parameter
should be specified:
disk_asynch_io = false