Sunday 30 January 2011

More on WebDAV and WebSphere Portal

Following on from an earlier blog post, whilst using WebDAV to do some work with the Page Builder theme in WebSphere Portal 7, I was perplexed to keep seeing: -

Internal Server Error

in my WebDAV client ( Nautlius 2.3.2.0 ), with: -

1/30/11 12:02:50:131 GMT] 00000088 servlet       E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: Uncaught exception created in one of the service methods of the servlet PROTECTED_HANDLER_47555912 in application wps. Exception created : java.lang.IllegalArgumentException: key:null
        at com.ibm.ws.cache.util.ValidateUtility.objectNotNull(ValidateUtility.java:47)
        at com.ibm.ws.cache.DistributedObjectCacheAdapter.common_get(DistributedObjectCacheAdapter.java:523)
        at com.ibm.ws.cache.DistributedMapImpl.get(DistributedMapImpl.java:59)
        at com.ibm.wps.services.cache.DistributedMapCache.get(DistributedMapCache.java:116)
        at com.ibm.wps.filestore.JCRDataSource.getCacheScope(JCRDataSource.java:176)
        at sun.reflect.GeneratedMethodAccessor138.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
        at java.lang.reflect.Method.invoke(Method.java:600)
        at com.ibm.wps.util.ContextWrapper$Handler.invoke(ContextWrapper.java:127)
        at $Proxy205.getCacheScope(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor138.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
        at java.lang.reflect.Method.invoke(Method.java:600)
        at com.ibm.wps.util.ContextWrapper$Handler.invoke(ContextWrapper.java:127)
        at $Proxy208.getCacheScope(Unknown Source)
...

in SystemOut.log on my WP7 server.

Thankfully, a quick search found this Technote: -

PM25317: WEBDAV COPY OPERATION ON FOLDERS MAY LEAD TO ILLEGALARGUMENTEXCEPTION

Am just applying the fix ( part of Cumulative Fix 001 for WebSphere Portal 7 , and will report back ...

Adding WebSphere Portlet Factory Designer 7 to Rational Software Architect 8

Well, I like WebSphere Portlet Factory Designer and I like Rational Software Architect, but which one is best ?

No, but seriously, some times I need to simply use WPF and other times I need the full majesty of RSA.

Therefore, being able to run one inside the other is a nice-to-have.

Oh, and of course, I want to run it on Ubuntu Linux 10.10 :-)

Well, it's easier than I thought, and much easier than the past.

Simply put, you install WPF and then you install RSA, and then you tell one to know about the other.

So, for me, I have WPF Designer v7 installed here: -

/opt/IBM/WebSphere/PortletFactory/Designer

and RSA 8 installed here: -

/opt/IBM/SDP

To add WPF into RSA, it's a simple matter to create a subdirectory called links under RSA: -

mkdir /opt/IBM/SDP/links

and then copy a file - com.bowstreet.designer.link - from WPF into it: -

/opt/IBM/SDP/links
cp /opt/IBM/WebSphere/PortletFactory/Designer/eclipse/com.bowstreet.designer.link .

Next time I start RSA, I have WPF available, and can create projects and models to my heart's content.

Thanks to the WPF wiki for the tip....

Thursday 27 January 2011

Error "CWWIM4512E The password match failed" seen using WebSphere Portal Express v7 on Linux

During the start-up of my WebSphere Portal Express v7 installation on Ubuntu ( I know, it's not supported, but it's fun ), I started seeing: -

...
21/01/11 23:02:32:665 GMT] 0000002a exception     W com.ibm.ws.wim.adapter.file.was.FileAdapter login CWWIM4512E The password match failed.
[21/01/11 23:02:32:666 GMT] 0000002a exception     W com.ibm.ws.wim.adapter.file.was.FileAdapter login
                                 com.ibm.websphere.wim.exception.PasswordCheckFailedException: CWWIM4512E The password match failed.
        at com.ibm.ws.wim.adapter.file.was.FileAdapter.login(FileAdapter.java:2015)
        at com.ibm.ws.wim.ProfileManager.loginImpl(ProfileManager.java:3381)
...

in SystemOut.log.

Digging further, I found this rather useful Technote: -

CWWIM4512E error during login requires reset of user's password in file registry

which relates to the same problem, and links to this even more useful Technote: -

How to reset the administrator's password in the file registry

which outlines how to fix the problem, summarized below: -

i) Start the wsadmin client

/opt/IBM/WebSphere/AppServer/profiles/wp_profile/bin/wsadmin.sh -conntype NONE

ii) Update the password for the admin user - wpadmin in my case

$AdminTask changeFileRegistryAccountPassword {-userId wpadmin -password <PASSWORD>}
$AdminConfig save
quit

iii) Update the password in the Portal and WAS configuration - assuming that you're using the same ID for both admin roles

cd /opt/IBM/WebSphere/AppServer/profiles/wp_profile/ConfigEngine
./ConfigEngine.sh wp-change-portal-admin-user -DnewAdminId=uid=wpadmin,o=defaultWIMFileBasedRealm -DnewAdminPw=<PASSWORD> -DnewAdminGroupId=cn=wpsadmins,o=defaultWIMFileBasedRealm
./ConfigEngine.sh wp-change-was-admin-user  -DnewAdminId=uid=wpadmin,o=defaultWIMFileBasedRealm -DnewAdminPw=<PASSWORD>

iv) Restart Portal

v) Login to WAS admin ( Integrated Solutions Console )

Use the Manage Users and Groups link to reset the password for, in my case, wpadmin to be consistent with the above scripts.

vi) Re-run the process to update the WAS Admin password

cd /opt/IBM/WebSphere/AppServer/profiles/wp_profile/ConfigEngine
./ConfigEngine.sh wp-change-was-admin-user  -DnewAdminId=uid=wpadmin,o=defaultWIMFileBasedRealm -DnewAdminPw=<PASSWORD>

vii) Restart Portal

Job done :-)

It's worth re-stating that  this is only necessary where you're using a file-system based password e.g. using WIM with a file registry e.g.

/opt/IBM/WebSphere/AppServer/profiles/wp_profile/config/cells/dmhw500/fileRegistry.xml

as evidenced in: -

...
  <userRegistries xmi:type="security:WIMUserRegistry" xmi:id="WIMUserRegistry_1" serverId="" serverPassword="{xor}" realm="defaultWIMFileBasedRealm" ignoreCase="true" useRegistryServerId="false" primaryAdminId="uid=wpadmin,o=defaultWIMFileBasedRealm" registryClassName="com.ibm.ws.wim.registry.WIMUserRegistry"/>
...

/opt/IBM/WebSphere/AppServer/profiles/wp_profile/config/cells/dmhw500/security.xml

Wednesday 26 January 2011

Project Wildfire on OpenNTF - An Update

I blogged about Wildfire last year, but have noticed that it's gone through a few more iterations since I last looked at it: -

How many social networks are you a part of? Got Sametime and Connections? Maybe you have multiple of each. Got Twitter as well? Socialtext? Facebook? Wordpress? Bebo? Tumblr? etc etc etc. I bet you have work related networks, personal networks, Yellowverse networks even!

Most of us have many social networks that we try and keep up to date but it is getting harder every day with so many networks. Wildfire! allows you to update multiple communities in one go! You can add all of your networks in the Wildfire application and select which ones to send an update to. You can group them, sort by type, and even view your twitter lifestream from the one interface.

WildFire is a Lotus Notes 8.5 Sidebar Application to Update Status's across a wide range of Social Networks including Sametime, Connections, Socialtext, Facebook, GTalk, PingFm, Plurk, Tumblr, Twitter, Wordpress and more!

You can also have mulitple of each network type!!

Time to have another look, I reckon

Just Released - IBM Lotus Connections 3.0 Files Plug-in for Lotus Notes

I saw this in a Tweet from Luis Benitez last evening,

  • The IBM Lotus Connections 3.0 Files Plug-in provides the following features:

  • Upload files for your own use or to share with others
  • Drag and drop a file from your desktop or attached to a Notes e-mail to Files
  • Send a link to a file
  • Search for files
  • Sort files for easier browsing
  • Open Lotus Connections Files in a browser

Will be taking a look as soon as time allows :-)

It'll also be added to the Lotus Connections 3 documentation  in the Wiki soon.

Tuesday 25 January 2011

IBM Software on Ubuntu Linux - Fun with DB2 UDB

As part of my ongoing mission to run all of my personal test/demonstration environments natively on Ubuntu Linux, I was hitting a problem with DB2 UDB as installed under-the-covers by WebSphere Portal Express.

I'd previously blogged on the dash vs. bash shell problem, and was able to get around that.

However, I then hit an issue whereby the installation was failing with: -

ERROR:DBI1131E The user ID  wpx70db2 is invalid.

being displayed in the installation log.

This turned out to be due to the earlier installation failing, but leaving bits of itself behind.

*CAVEAT* This is *NOT* the proper way to uninstall a software product *CAVEAT*

As a complete cheat, I'd been *cough* uninstalling merely by: -

  • deleting the contents of /opt/IBM*            rm -Rf /opt/IBM
  • deleting the contents of /opt/.ibm*            rm -Rf /opt/.ibm
  • removing the DB2 users                                     userdel --remove wpx70db2  and userdel --remove wpdb2fen

Sadly, alas, this wasn't enough - I had forgotten to remove the DB2 profiles registry - /var/db2/global.reg.

Again, being a complete hacker, I simply removed the /var/db2 directory - rm -Rf /var/db2.

*CAVEAT* This is *NOT* the proper way to uninstall a software product *CAVEAT*

Having done all of the above hackiness, I then tried the installation again.

This time, it installed but failed to start - this turned out to be because the DB2 instance wouldn't start.

When I tried to do this manually: -

su - wpx70db2
db2start

I got: -

SQL1084C Shared memory segments cannot be allocated. SQLSTATE=57019

Thankfully, somebody else had seen, and blogged the problem AND solution.

This required me to increase the memory available to DB2 by editing: -

/etc/sysctl.conf

and adding: -

kernel.sem=250 256000 32 1024
#Example shmmax for a 32-bit system
kernel.shmmax=1073741824
#Example shmall for 90 percent of 16 GB memory
kernel.shmall=3774873
kernel.msgmax=65535
kernel.msgmnb=65535

to increase the deafult segment size from 256 MB to 1 GB.

Once I did this, and ran sysctl -p, all was well.

I can now start DB2 at will, and WebSphere Portal Express 7 is running like a dream.

Friday 21 January 2011

MLinked and Lotus Connections - Yet another reason why I want an iPhone ...

One of my Twitter friends, Sjaak Ursinus, drew my attention to this : -

mLinked and mLinked Free are native iPhone applications to communicate with your public or corporate social network based on IBM Lotus Connections. IBM Lotus Connections is the industry leading solution for social software. Through mLinked you are able to connect directly from your iPhone to your network, search for profiles, make status updates and read blogs.


mLinked Free features



mLinked features

  • Configure and connect to your Lotus Connections networks
  • Support multiple networks
  • Status updates
  • Search profiles
  • Profile and network information
  • Call and e-mail directly from profiles
  • Accept and send invitations
  • Read, browse and recommend blogs
  • Supports IBM Lotus Connections 2.5 and 3.0

As per the headline, this just makes me want to find a spare £500 or so to buy a darn iPhone or, perhaps, the iPad 2 :-)


WebSphere Portal Express 7 - Installing silently

I'm not sure if it's just me, but I'm finding that the installation of WebSphere Portal Express on Linux fails when I perform a silent installation using a response file.

The error log ( wpinstalllog.txt ) fails with: -

(21-Jan-2011 10:44:53), PortalExpress.install, com.ibm.wps.install.SilentValidationAction, msg1, Silent Validation Logging: Property was specified: $W(defaults.cdLocation)=/tmp/WPX7/IL-Setup
(21-Jan-2011 10:44:53), PortalExpress.install, com.ibm.wps.install.SilentValidationAction, msg1, Silent Validation Logging: Can't locate CIP path: /tmp/WPX7/IL-Setup/linux/ia32/CIP
(21-Jan-2011 10:44:53), PortalExpress.install, com.ibm.wps.install.SilentValidationAction, msg1, Silent Validation Logging: Look for CDs.
(21-Jan-2011 10:44:53), PortalExpress.install, com.ibm.wps.install.SilentValidationAction, msg1, Silent Validation Logging: Property was specified: $W(defaults.cdLocation)=/tmp/WPX7/IL-Setup
(21-Jan-2011 10:44:53), PortalExpress.install, com.ibm.wps.install.SilentValidationAction, err, Silent Validation Logging: Can't locate media actual location: /tmp/WPX7/IL-Setup/linux/ia32/ifpackage/DISC1/WAS
(21-Jan-2011 10:44:53), PortalExpress.install, com.ibm.wps.install.SilentValidationAction, err, Silent Validation Logging: Can't locate WAS CIP or CD media.
(21-Jan-2011 10:44:53), PortalExpress.install, com.ibm.wps.install.SilentValidationAction, err, Silent Validation Logging: Silent validation failure. Exiting install.

I extract the installation code using the following script: -

mkdir                  /tmp/WPX7
unzip CZLL3ML.zip   -d /tmp/WPX7/IL-Setup
mkdir                  /tmp/WPX7/IL-1
tar xvf CZLP0ML.tar -C /tmp/WPX7/IL-1
unzip CZLR2ML.zip   -d /tmp/WPX7/IL-3
unzip CZLL6ML.zip   -d /tmp/WPX7/IL-4
unzip CZLL9ML.zip   -d /tmp/WPX7/IL-5
unzip CZLM2ML.zip   -d /tmp/WPX7/IL-6

which gives me: -

drwxr-xr-x  8 root   root    4096 2011-01-21 09:50 ./
drwxrwxrwx 35 root   root   12288 2011-01-21 12:23 ../
drwxrwxr-x  3 185101 330209  4096 2010-08-17 15:12 IL-1/
drwxr-xr-x  4 root   root    4096 2011-01-21 09:50 IL-3/
drwxr-xr-x  3 root   root    4096 2011-01-21 09:50 IL-4/
drwxr-xr-x  6 root   root    4096 2011-01-21 09:50 IL-5/
drwxr-xr-x  3 root   root    4096 2011-01-21 09:50 IL-6/
drwxr-xr-x  8 root   root    4096 2011-01-21 11:18 IL-Setup/

and I run the installation from a PortalExpress subdirectory of IL-Setup: -

cd /tmp/WPX7/IL-Setup/PortalExpress
./install.sh -options ../installresponse.txt

This differs to WebSphere Portal Server, where the install.sh script is in the IL-Setup directory.

I've also noticed that, in v7, the response file no longer includes the specific paths to the other installation image directories.

I'm digging further, and will report back when I have an update.

*15 April 2011*

Sorted, thanks to the able assistance of the WebSphere Portal L3 support team. The script that I was using to unpack the code needed to be updated; for WP7, the script now looks like this: -

mkdir                  /tmp/WPX7
unzip CZLL3ML.zip   -d /tmp/WPX7/IL-Setup
tar xvf CZLP0ML.tar -C /tmp/WPX7/IL-Setup
unzip CZLR2ML.zip   -d /tmp/WPX7/IL-Setup
unzip CZLL6ML.zip   -d /tmp/WPX7/IL-Setup
unzip CZLL9ML.zip   -d /tmp/WPX7/IL-Setup
unzip CZLM2ML.zip   -d /tmp/WPX7/IL-Setup

In other words, everything is unpacked into the same location e.g. IL-Setup.

Having done this, the silent installation APPEARS to be working.

Will confirm when it's done :-)

Installing WebSphere Portal 7 on Ubuntu 10.10

Following on from a previous blog post, I tried, and FAILED, to install WebSphere Portal Express 7 on my Thinkpad W500, which runs Ubuntu 10.10.

The failure occurs during the creation of the WAS profile, known as wp_profile, and I saw errors such as: -

<message>Value of PRE_IJC_LIB could not be extracted from the process environment, returning null</message>
<message>Could not resolve this argument: PRE_IJC_LIB, returning null</message>
<message>Value of POST_IJC_LIB could not be extracted from the process environment, returning null</message>
<message>Could not resolve this argument: POST_IJC_LIB, returning null</message>
<message>ConfigManager action execution failed on a fatal action</message>
<message>Creation of profile wp_profile at path /opt/IBM/WebSphere/AppServer/profiles/wp_profile failed.</message>
<message>INSTCONFFAILED: The profile could not be created.  For more information, consult the /opt/IBM/WebSphere/AppServer/logs/manageprofiles/wp_profile_create.log file.</message>

etc.

At the time, I didn't have the time or energy to dig into the problem last night, but my brain was nagging me to look at the default shell being used.

In the past, I've been caught out repeatedly by the fact that, by default, Ubuntu uses the dash shell, which breaks the wsadmin script.

In order to check, I ran the following commands: -

echo $SHELL

which returns: -

/bin/bash

and: -

which sh

which returns: -

/bin/sh

and: -

ll/bin/sh

which returns: -

/bin/sh -> dash*

There are two ways to resolve this: -

(a) Hacky

cd /bin
unlink sh
ln -s /bin/bash sh

I'll test this and report back ...

*UPDATE* Yep, that did it - once I unlinked dash, all was well ....

WebSphere Portal - Security Concepts and Considerations

Thanks to Rainier Varilla for alerting me to a rather useful article on the WebSphere Portal Wiki: -

Web security concepts and considerations for IBM WebSphere Portal administrators

BM WebSphere Portal can be leveraged to enforce security, an important requirement for many Web applications. It relies on underlying technologies in delivering certain security functionality and provides integration points for other security-related technologies.

This article is intended to inform WebSphere Portal administrators on how to leverage these capabilities to deliver secure Web applications. It provides examples, including configuration excerpts, but is not intended to replace product documentation as the primary reference for enablement.

This document focuses on WebSphere Portal versions 7.0 and 6.1. Most of these concepts also apply to earlier versions, although WebSphere Portal employed a different member manager in versions prior to 6.1.

The ToC is impressive: -

    * 1 Introduction
    * 2 WebSphere Portal and authentication
          o 2.1 Authentication against a user registry
          o 2.2 External security manager (ESM)
          o 2.3 Single sign-on (SSO)
    * 3 WebSphere Portal and authorization
          o 3.1 Authorization and the user repository
          o 3.2 Portal access control & external identifiers
    * 4 Virtual portals and realms
    * 5 Sessions
    * 6 Other LDAP considerations
    * 7 Users' passwords
    * 8 Remember Me and Step-up Authentication
    * 9 Impersonation
    * 10 SSL
    * 11 Cross-site scripting
    * 12 Securing the operating system
    * 13 Conclusion
    * 14 Resources and Glossary
    * 15 About the author

so the article covers a lot of very useful ground.

Worth a read ...

Thursday 20 January 2011

Love Film ? In that case you need this ....

As an aspirationally regular listener to Mark Kermode's Film Reviews, aka @Wittertainment, on BBC Radio 5 Live, albeit via the podcast version, I wanted to draw your attention to: -

(a) the podcast - if you don't listen to it, and you ever watch movies, then you really really really ought to have a listen
(b) the Wittertainment Code of Conduct

The latter is a thing of beauty - if you have ever been annoyed by mobile-phone using, popcorn-eating, soda-slurping, talking, kicking, giggling so-called movie-watchers, then you need to print this out, laminate it and then distribute it freely and widely.

Lovely :-)







PS Hello to Jason Isaacs

Going to Lotusphere 2011 #LS11 ? If so, you NEED to order some of these ...

Keith ( aka @LotusEvangelist ), being a true Lotus Evangelist, has written an XPages application to host a website with the honourable purpose of showcasing a yummy Lotusphere-themed treat; Girl Scout Cookies.

No, before you ask, I'm told that they are not made with real Girl Scouts; they are, however, made by a troupe of .... Girl Scouts ( aka Brownies, apparently ).

Not sure what you get if you mix cookies and Brownies ....

Anyway, here's the app -> http://noffiya.com/gscookie.nsf <- and here's Keith doing a much better job of describing the treat.

I've ordered mine, and am hoping that the lovely @dilftechnical can deliver them - assuming that her hold luggage is large enough to cope with all of these orders :-)

Monday 17 January 2011

From @LotusEvangelist - Lotus Connections 3 - Problems with TDI Updates

My pal Keith has blogged an interesting little problemette here, seen whilst trying to apply an update to IBM Tivoli Directory Integrator v7.

Unlike me, Keith is using Windows, but I don't hold that against him :-)

Bottom line, if the applyUpdates.bat script fails, try extracting the update to a root directory e.g. E:\tdi-update-70006.

For a more detailed explanation, read Keith's post.

Ubuntu 10.10 on Lenovo Thinkpad W500 - Problems with Suspend

Following an earlier problem with suspend/resume, I seem to have picked up another problem since  a kernel update over the weekend.

Following the update, I'm now on 2.6.35-25-generic-pae and, sadly, since then, my laptop doesn't suspend, regardless of whether I choose the Suspend option from the menu, close the lid or hit [Fn]+[F4].

I even tested using the command sudo pm-suspend but got the same issue.

The screen flashes to black, the crescent moon suspend indicator blinks on and off and, after 5-10 seconds, the display restores precisely to where it was before.

I even tried manually switching off the network and Bluetooth adapters, using the small switch at the front-left side of the keyboard, and also checked that I had no USB devices plugged in.

I noticed that I did see messages relating to: -

PM: Device 00:0a failed to suspend: error -5
PM: Some devices failed to suspend

in one of the virtual terminals, which gave me a potential helping hand, and led me to this page.

In essence, it appears that the kernel change has affected the way that a kernel module - tpm_tis - should be loaded. Apparently, TPM is part of the Trusted Rights Platform, and appears to relate to encryption, which is nice.

To cut a long story short, there are three inter-dependant modules that are loaded at boot-up: -

tpm
tpm_bios
tpm_tis

When the third module - tpm_tis - is loaded, it needs to have a parameter - itpm=1 - added as follows: -

sudo modprobe tpm
sudo modprobe tpm_bios
sudo modprobe tpm_tis itpm=1

I proved this by comparing the results of this set of commands: -

sudo rmmod tpm_tis tpm t
sudo modprobe tpm
sudo modprobe tpm_bios
sudo modprobe tpm_tis
sudo pm-suspend

with this: -

sudo rmmod tpm_tis tpm t
sudo modprobe tpm
sudo modprobe tpm_bios
sudo modprobe tpm_tis
sudo pm-suspend itpm=1

In the first case, suspend failed - in the second case, it worked as one would expect.

So, as a permanent ( I hope ) solution, I've created a new configuration file: -

/etc/modprobe.d/tpm.conf

into which I've placed: -

options tpm_tis itpm=1

Now, following a reboot, I'm pleased to report that suspend and, perhaps equally importantly, resume both work.

I'm hoping this'll be fixed in a future release, but my circumvention ( aka hack ) seems to work.

Mobile LS11 Goodness - Lotusphere 2011 Scheduler - on the Android ... and the iPhone and the BlackBerry

W00t, my IBM colleague, Jo Grant, has created a neat little application for the Android device, Lotusphere 2011 Scheduler,  as per this write-up here: -

This application is a simple resource to help you organize your Lotusphere 2011 schedule and get you to the events you need to go to. The data is driven by the wonderful database created by the folks at www.geniisoft.com

The main screen lists the events of Lotusphere 2011. There are rather a lot! To make it more manageable, you can access the menu to sort or filter this view by a number of criteria. Additionally, events that are taking place today will have their time backlight in light blue. Events that are taking place now will have their time backlight in blue. Events that you have liked will be backlight in green.

Selecting the code for an event brings you to the even screen. This gives full details and a map to the event's location.

If the schedule changes, we'll attempt to wrap that up in a new version. Check the Android Marketplace for an update as we get closer to the event.

This application was written by Jo Grant. Although an IBM employee, this is not an official application provided by IBM or the Lotusphere team.

Any faults or problems caused by this application are not IBM's responsibility. Blame Jo :-)

Jo will be at Lotusphere in the Solutions Development Lab. Drop by and say hello!

For those reading this on the Android itself, here's a direct link to the app in the Android Marketplace.

This is in addition to the most excellent apps that The Turtle Partnership have released for the iPhone and BlackBerry platforms.

Friday 14 January 2011

IBM Customer Experience Suite - It's Wiki'd

Whilst looking for some material on the Customer Experience Suite, I found this new (to me) post on the WebSphere Portal Wiki

IBM® Customer Experience Suite combines the essential ingredients needed to deliver exceptional, differentiated Web experiences, including Web content management, rich social and real-time communication features, search, commerce and analytics support, personalization, rich media management, mobile device support, and comprehensive integration capabilities. The net result is an agile platform that helps organizations dramatically improve their online experiences for their customers across multiple channels, leading to increased customer satisfaction, better brand awareness, and improved profitability.

Thus far, they have a whole bunch of articles, including: -

IBM Customer Experience Suite and Search Engine Optimization

IBM Customer Experience Suite and Mobile Application Delivery

Integrating the IBM Customer Experience Suite with WebSphere Commerce

Integrating the IBM Customer Experience Suite with Real-Time Web Analytics

Integrating the IBM Customer Experience Suite and SPSS Predictive Analytics

Social Software and the IBM Customer Experience Suite

Integrating the Customer Experience Suite with Rich Digital Media

IBM's vision and strategy for creating Exceptional Web Experiences

eForms and the Customer Experience Suite

Integrating the IBM Customer Experience Suite with Business Intelligence

Definitely worth bookmarking,  and also subscribing to the Wiki feed.

Friday 7 January 2011

WebSphere Application Server - Exploring the HTTP Headers sent from Web Server to the WAS Plugin

One of my Lotus Connections guru friends in the Netherlands had asked me about the headers that are sent  from the webserver, Microsoft Internet Information Server in his case, to the WebSphere Plugin.

These are revealed when one enables tracing by setting LogLevel=“Trace” in the Plugin configuration file - plugin-cfg.xml.

He referred me to this forum post: -

IIS websphere plugin headers - Websphere

as he was specifically interested in one heading - $WSAT.

Having checked this most useful reference - Demystifying the IBM Web Server Plug-in - written by Naveen Shetty and  Steve Reid from the IBM HTTP Server / WAS Plugin Support Team, I wasn't able to find that specific header, so I had to look further afield.

Thanks to some timely assistance from another IBM colleague, here are the headers explained: -

$WSAT -- The Auth Type that is being used to make this request. 
$WSCC -- The Client Certificate used for this request. If value is not base64 encoded for us by the webserver then the plugin will base64 encode it before sending it across to the Application Server.
$WSCS -- The Cipher Suite that the webserver negotiated with the client. This is not necessarily the cipher suite that the plugin will use to send the request across to the Application Server.
$WSIS -- This header will be set to either 'true' or 'false' depending on whether or not the request is secure or not(came in over SSL/TLS).
$WSSC -- The scheme being used for the request. This header will normally be set to either 'http' or 'https'.
$WSPR -- The HTTP protocol level being used for this request. The plugin currently has support for up to HTTP/1.1 requests.
$WSRA -- The remote IP address of the machine the client is running on.
$WSRH -- The remote hostname of the machine the client is running on. If the hostname can't be resolved then this header should be set to the IP address.
$WSRU -- The remote user specified for the given request.
$WSSN -- The server name used for this request. This should be the value that was specified in the HOST header of the incoming request.
$WSSP -- The server port that the request was received on. This will be the port value that is used in route determination.
$WSSI -- The SSL Session ID being used for this request. If the value is not base64 encoded for us by the webserver then the plugin will base64 encode it before sending it across to the Application Server.

So here's hoping that this is of use to my Dutch pal, as well as to other out there ....

Wednesday 5 January 2011

Repost - Creating your own IBM Lotus Connections Wiki client

Rainer Vetter blogged about this earlier: -

Most social networks (Twitter, Blogger, etc.) provide Representational State Transfer (REST) APIs to allow users to extend functionality and interact with their content. In the world of Enterprise Social Networks you, as a Lotus Connections user, can create your own applications and scripts that manipulate Connections content and functionality through the REST / Atom Syndication Format (Atom) API. There are many situations in which you can do smarter work by automating some everyday task, exporting important information to another application, or importing pre-prepared data to your collaborative social web.

One of the most useful features of Lotus Connections is the Wikis application, with which you can collaboratively create pages in rich text, HTML, or Wiki text, sharing them across your network or keeping them as your personal work diaries. Using the REST API you are able to send the data from your selected Wiki page to an external editor or save it as a part of a HTML document. You can also save your Wiki content for off-line editing and synchronize it later with the on-line version.

In this article we demonstrate the possibilities of the Lotus Connections API—specifically, the Wikis application API—and guide you through the process of writing your own REST/Atom client in Python. We introduce some basic scripts, explaining them line by line, and show how to authenticate with Lotus Connections and retrieve and parse a Wiki, or Wiki page Atom entry. You will also learn how to get and post the page content, all of which is made possible by use of the REST/Atom API

Want to know more ? Check out Rainer's post ...

CAT - Lotus Connections Administration Toolkit

This was posted to the Greenhouse Catalog a few weeks back.

Administering Lotus Connections requires editing XML files and sending commands in a case sensitive scripting language using “wsadmin” - the command line interface of the WebSphere Application Server.

Lotus Connections is deployed on WebSphere application server. Many Lotus Connections administrators have a background of administrating Lotus Domino using the Domino Administrator and are not used to the command line interface of the WebSphere Application Server. Domino Administrators might therefore avoid using wsadmin as much as possible.

Executing a single administrative task in Lotus Connections with wsadmin typically requires the following steps: 1. open remote console to Connections Server, 2. open DOS-BOX, 3. launch wsadmin, 4. identify and load relevant Jython scripts separately, 5. store temporary data, 6. check out XML file, 7. edit temporary data in XML file and 8. finally check in XML file.

Sample tasks that challenge even an experienced Lotus Connections administrator include:

  • Assigning community ownership from a user that left the company to another user
  • Reassign content and rights to a user after a name change
  • Recover accidentally deleted activities
  • Assigning the rights of one user to another user
  • Assigning the rights of one user to another user

All of the above and thousands more administrative tasks can be completed using CAT with an intuitive user interface. Administrative tasks that require several consecutive steps are carried out at once.

Want to know more ? Then click here for more details ...

Tuesday 4 January 2011

Installating IBM DB2 on Ubuntu Linux 10.10

As part of a new everything-on-one-box Lotus Connections 3.0 installation, I've updated my monster PC ( known as Orac ) to Ubuntu 10.10.

Orac has a quad core Intel CPU, 8 GB of RAM and 1.3 TB of storage, so he's a bit of a beast.



Having installed a 32-bit version Ubuntu 10.10, I was ready to go.

Oh, hang on, the free command only shows 3.X GB of RAM, despite my having 8 GB.

Ah, hang on, I forgot to install the PAE kernel - as I'm using the 32-bit distro, I need to use a kernel that can address more than 3.3 GB.

This is easy to fix - I simply ran the following command: -

sudo apt-get install linux-generic-pae

which installed three packages: -

ii  linux-generic-pae                    2.6.35.24.28                                    Complete Generic Linux kernel
ii  linux-image-2.6.35-24-generic-pae    2.6.35-24.42                                    Linux kernel image for version 2.6.35 on x86
ii  linux-image-generic-pae              2.6.35.24.28                                    Generic Linux kernel image

Now, after a quick reboot, the free command returns: -

            total       used       free     shared    buffers     cached
Mem:       8261504    5571908    2689596          0      46396    5081164
-/+ buffers/cache:     444348    7817156
Swap:      6538236          0    6538236

which is rather shiny.

So, on to DB2 ....

*NOTE* This is *NOT* a supported platform - it's merely for me to "play" with  *NOTE*

Once I had overcome my problem with the TAR command, I started the installation program: -

cd /tmp
./db2setup

which immediately failed with: -

ERROR:
   The required library file libaio.so.1 is not found on the system.
   Check the following web site for the up-to-date system requirements
   of IBM DB2 9.7
   http://www.ibm.com/software/data/db2/udb/sysreqs.html
   http://www.software.ibm.com/data/db2/linux/validate 
  Aborting the current installation ...
  Run installation with the option "-f sysreq" parameter to force the installation.

:-(

However, as ever, Google had the answer, Google is my friend.

Antonio Cangiano has blogged here about this - the solution is simple: -

sudo apt-get install libstdc++5
sudo apt-get install libaio-dev
sudo ./db2setup

Once I did this, the DB2 installation worked like  a dream.

I *love* it when a plan comes together :-)

*NOTE* This is *NOT* a supported platform - it's merely for me to "play" with  *NOTE*

Doh!, Error "tar: .: Cannot utime: Operation not permitted" seen when expanding an archive

I saw this exception: -

tar: .: Cannot utime: Operation not permitted
tar: Exiting with failure status due to previous errors

earlier when expanding a TAR file ( DB2  9.7 as a matter of fact ) into the /tmp directory of my Ubuntu 10.10 boxen: -

cd /tmp
tar xvf /media/LenovoExternal/Products/DB297/db297linux32.tar

Googling about the exception is actually telling me that TAR cannot update the access and modification times of the files within the archive.

I was running this as a non-root user.

You can guess the rest ...

When I checked the permissions of /tmp, I saw: -

drwxrwxrwt  19 root   root     4096 2011-01-04 18:22 tmp/

which suggests, to my simple mind, that I have all the right permissions, although the directory is owned by root.

Needless to say, when I ran the command "as root": -

cd /tmp
sudo tar xvf /media/LenovoExternal/Products/DB297/db297linux32.tar

all was well.

I reproduced this in my home directory: -

mkdir ~/foo
chown root:root ~/foo
chmod a+w ~/foo
cd ~/foo
tar xvf /media/LenovoExternal/Products/DB297/db297linux32.tar

This suggests to me that, despite the global RWX permissions: -

drwxrwxrwx  6 root root 4096 2011-01-04 18:34 foo/

the TAR command barfs if it's asked to update the utime of files within a directory that the user does not own.

Interesting, que ?

Monday 3 January 2011

Aide Memoire - Some useful (to me) Linux commands

Want to know what files are open ?

lsof

Want to know what files are opened by a specific process ?

lsof -p <pid>

- as an example, I've identified that WebSphere Portal is running as process ID ( pid ) 7725 so I use lsof -p 7725 to see all the files opened by that process

Want to know how large a file is ?

ls -lh

Want to see a file listing in order of modification ?

ls -ltrc

- shows the most recently modified at the bottom of the list

Want to search a binary file ?

grep --text <pattern> <filename>

or

grep -a <pattern> <filename>

- this gets around the error Binary file /opt/IBM/WebSphere/AppServer/java/bin//java matches
- I needed this to search a couple of logs files that contained some binary characters

Want to see files by type e.g. executable ?

ls -lF <filename>

- for example, this adds an asterisk to the listing to mark executable files

Want to list files without typing ls -alF ?

ll <filename>

- this is a useful little alias, as defined in ~/.bashrc

Want to know more about a process ?

Using the above example of WebSphere Portal running as process ID (pid) 7725, there are a bunch of files under the directory /proc/7725/ including: -

cat /proc/7725/status - shows memory utilisation etc.
cat /proc/7725/limits - shows various ulimits including open files etc.

- the first one was useful in confirming that my addition of ulimits -f 40000 to /opt/IBM/WebSphere/wp_profile/bin/setupCmdLine.sh had "taken" - this helped me overcome a "Too many open files" exception

WebSphere Portal Express v7 on Ubuntu Linux - sloooooooooooooooooooow

Having installed WebSphere Portal Express v7 on Linux a while back, I'd noticed an issue where it'd fail to start, instead filling the logs with exceptions such as: -

[28/12/10 19:09:31:110 GMT] 0000000f EventLogServi I   Rebuilding event log for library: Web Content
[28/12/10 19:11:31:375 GMT] 0000001d TimeoutManage I   WTRN0006W: Transaction 0000012D2E629F6D00000005000000276FACDD0C7C3820993606C63E30166C874E766DD70000012D2E629F6D00000005000000276FACDD0C7C3820993606C63E30166C874E766DD700000001 has timed out after 120 seconds.
[28/12/10 19:11:31:377 GMT] 0000001d TimeoutManage I   WTRN0124I: When the timeout occurred the thread with which the transaction is, or was most recently, associated was Thread[server.startup : 2,5,main]. The stack trace of this thread when the timeout occurred was:
java.util.ArrayList.indexOf(ArrayList.java:448)
java.util.ArrayList.remove(ArrayList.java:556)
java.util.Observable.deleteObserver(Observable.java:78)
org.apache.derby.impl.store.raw.data.BasePage.releaseExclusive(Unknown Source)
...

and: -

[28/12/10 19:38:21:873 GMT] 0000000f EventLogServi I   Rebuilding event log for library: Blog Solo Template v70
[28/12/10 19:40:22:065 GMT] 0000001d TimeoutManage I   WTRN0006W: Transaction 0000012D2E7D07F000000005000000486FACDD0C7C3820993606C63E30166C874E766DD70000012D2E7D07F000000005000000486FACDD0C7C3820993606C63E30166C874E766DD700000001 has timed out after 120 seconds.
[28/12/10 19:40:22:067 GMT] 0000001d TimeoutManage I   WTRN0124I: When the timeout occurred the thread with which the transaction is, or was most recently, associated was Thread[server.startup : 2,5,main]. The stack trace of this thread when the timeout occurred was:
org.apache.derby.impl.store.access.btree.ControlRow.getIsRoot(Unknown Source)
...

and: -

[28/12/10 20:35:31:975 GMT] 0000000f EventLogServi I   Rebuilding event log for library: Wiki Template v70
[28/12/10 20:37:32:087 GMT] 0000001b TimeoutManage I   WTRN0006W: Transaction 0000012D2EB15E7700000005000000D76FACDD0C7C3820993606C63E30166C874E766DD70000012D2EB15E7700000005000000D76FACDD0C7C3820993606C63E30166C874E766DD700000001 has timed out after 120 seconds.
[28/12/10 20:37:32:088 GMT] 0000001b TimeoutManage I   WTRN0124I: When the timeout occurred the thread with which the transaction is, or was most recently, associated was Thread[server.startup : 2,5,main]. The stack trace of this thread when the timeout occurred was:
org.apache.derby.impl.sql.execute.GenericQualifier.getOperator(Unknown Source)
...

etc.

Whilst I didn't actually resolve the issue, I simply left it running ( over the course of two days BUT with a suspend/resume somewhere in the middle ), and it sorted itself out.

Looking at the exceptions relating to org.apache.derby, I suspect that there is an issue with the Apache Derby database - I'm using the out-of-the-box version: -

[28/12/10 19:08:10:059 GMT] 00000008 InternalGener I   DSRA8203I: Database product name : Apache Derby
[28/12/10 19:08:10:068 GMT] 00000008 InternalGener I   DSRA8204I: Database product version : 10.3.3.1 - (883215)
[28/12/10 19:08:10:069 GMT] 00000008 InternalGener I   DSRA8205I: JDBC driver name  : Apache Derby Embedded JDBC Driver
[28/12/10 19:08:10:070 GMT] 00000008 InternalGener I   DSRA8206I: JDBC driver version  : 10.3.3.1 - (883215)

It may be simply that Derby cannot handle the event log rebuild process for the 10 WCM libraries that I have: -

  • Blog Solo Template v70
  • Blog Template v70
  • C_Content
  • C_Resources
  • Sample
  • TB_Catalog
  • TB_Core
  • TB_Shared
  • TB_Top
  • Web Content
I'll keep digging, and see whether I can find any relevant fixes for Derby, and report back. I'm currently looking at exceptions in derby.log in /opt/IBM/WebSphere/wp_profile/PortalServer/derby with exceptions such as: - ERROR XSDG3: Meta-data for Container org.apache.derby.impl.store.raw.data.RAFContainer4@57685768 could not be accessed at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)

*UPDATE* I note that this derby.log file is (a) marked as executable and (b) 2.3 GB ( yes, GIGABYTES ) in size. That'll make pleasant reading ...

In the meantime, if you see this, the best advice is to simply allow the rebuild to finish it's course. PS I even tried forcing a Javacore dump ( using kill -3 ) but WebSphere bravely kept running, even though I did get a Javacore logged to /opt/IBM/WebSphere/wp_profile.

Saturday 1 January 2011

BlueJ - an interactive Java learning environment

One of my Twitter correspondents posted this a few weeks back, and I've been meaning to blog about it.

"The BlueJ environment was developed as part of a university research project about teaching object-orientation to beginners. The system is being developed and maintained by a joint research group at La Trobe University, Melbourne, Australia, and the University of Kent in Canterbury, UK. The project is supported by Sun Microsystems.

The aim of BlueJ is to provide an easy-to-use teaching environment for the Java language that facilitates the teaching of Java to first year students. Special emphasis has been placed on visualisation and interaction techniques to create a highly interactive environment that encourages experimentation and exploration.

BlueJ is based on the Blue system. Blue is an integrated teaching environment and language, developed at the University of Sydney and Monash University, Australia. BlueJ provides a Blue-like environment for the Java language.

The BlueJ project started at Monash University in Melbourne, and later split and migrated to its current locations.

BlueJ is implemented in Java, and regularly being tested on Solaris, Linux, Macintosh, and various Windows versions. It should run on all platforms supporting a recent Java virtual machine."

Check it out here.

Visual Studio Code - Wow 🙀

Why did I not know that I can merely hit [cmd] [p]  to bring up a search box allowing me to search my project e.g. a repo cloned from GitHub...