Tuesday 31 August 2010

Introducing the IBM Lotus Connections administration web interface

Thanks to Sonia Malik for sharing this via Twitter: -

The IBM Lotus Connections administration UI application is an easy-to-install and easy-to-use IBM WebSphere Application Server portlet. Lotus Connections administrators can perform the majority of the functionality offered by the WSAdmin console without needing to know complex WSAdmin scripting languages.

Lotus Connections is a social networking application for business and is deployed on WebSphere Application Server. WebSphere Application Server deployment and its application servers, on which Lotus Connections is hosted, are maintained and administered by running various commands on the WebSphere Application Server administration console.

The administration console utilizes a series of Jython and Jacl script files to allow administrators to work with Lotus Connections. These files provide automated ways to access the Lotus Connections MBeans that change back-end settings in databases and configuration files that service a deployment. Working with these Jython and Jacl script files requires some programming and scripting knowledge; the ability to import packages in the terminal, assign and use variables, and other basic programming concepts, all in the Jython or Jacl languages, are required. These languages, while not inherently hard languages to use, are relatively specialized and might be unfamiliar to the average Lotus Connections administrator. Removing control of Lotus Connections from the administration console and putting it into a web-based solution alleviate the need for specialized skills, providing a cost of ownership reduction to Lotus Connections customers.

The Lotus Connections administration web interface provides an interface that is easy to install and easy to use. The interface is added as a portlet to the Integrated Solutions Console (ISC) of WebSphere Application Server and provides the majority of the functionality offered by the ISC with greatly increased usability and functionality. The web interface allows for easy administration of multiple Lotus Connections services in the same session and the ability to call certain functions on multiple services at the same time.

The article is available on developerWorks here.

*UPDATE 19 October 2010*
Sadly, this article has now been permanently withdrawn for legal reasons.
*UPDATE 19 October 2010*

WebSphere Portal v7 - Download Document

Interestingly, the Download Document for WP7 has been published here, even though ( as far as I'm aware ), the software has not yet been released.

The System Requirements document has not yet been updated, but the Download Document does give a few clues, including the inclusion of DB2 UDB 9.7, Tivoli Directory Integrator 7 ( included with Portal for the first time afaik ) and, of course, WebSphere Application Server v7.

*UPDATE* I *may* be wrong on the release; it *looks* like the software is available on the download site .....

Monday 30 August 2010

Book Review

Having finished a number of other reads, including Michael Sampson's User Adoption Strategies and Stieg Larsson's excellent Dragon Tattoo trilogy, plus various others, I'm now, as promised, cracking on with Packt Publishing's volume entitled Application Development for IBM WebSphere Process Server 7 and Enterprise Service Bus 7.

I'm up to Chapter 3 so far, with a good overview of Service Oriented Architecture, Business Process Management, WebSphere Integration Developer and WebSphere Process Server, plus a walk-through of the installation of WID and WPS.

Next step is to walk through the development of my first ever SOA project ( well, first ever since I attended a Proof of Technology at IBM Hursley Park back in 2007 ).

More to come, but it's good fund so far ...

Saturday 28 August 2010

MySQL on Linux with WebSphere Application Server - My First Adventure

Having worked with enterprise databases like DB2 UDB, Oracle and SQL Server, I thought I'd give MySQL a try.

Specifically, I wanted to run it on my native Linux 10.04 desktop, and then use the DB from within WebSphere Application Server.

Installing it was absolutely simple - I fired up Synaptic Package Manager, search for mysql and select to install one single package - mysql-server - and let Synaptic take care of the dependancies. After a fairly brief download/installation, I was asked to set the MySQL password ( in the DB2 world, this would be the instance owner's password ) using the following command: -

sudo dpkg-reconfigure mysql-server-5.1

This command can be re-run at any time, as/if required.

For the record, these are the packages that I installed: -

root@dmhw500:~# sudo dpkg --list | grep -i mysql

ii  libdbd-mysql-perl                                        4.012-1ubuntu1                                  A Perl5 database interface to the MySQL databa
ii  libmysql-java                                            5.1.10+dfsg-2ubuntu1                            Java database (JDBC) driver for MySQL
ii  libmysqlclient16                                         5.1.41-3ubuntu12.6                              MySQL database client library
ii  mysql-client-5.1                                         5.1.41-3ubuntu12.6                              MySQL database client binaries
ii  mysql-client-core-5.1                                    5.1.41-3ubuntu12.6                              MySQL database core client binaries
ii  mysql-common                                             5.1.41-3ubuntu12.6                              MySQL database common files (e.g. /etc/mysql/m
ii  mysql-server                                             5.1.41-3ubuntu12.6                              MySQL database server (metapackage depending o
ii  mysql-server-5.1                                         5.1.41-3ubuntu12.6                              MySQL database server binaries
ii  mysql-server-core-5.1                                    5.1.41-3ubuntu12.6                              MySQL database core server files

* The JDBC driver isn't part of the core package, but I needed it for WebSphere.

Having installed it, it took me 5 minutes to realise that I can't use it without being a root user: -

hayd@dmhw500:~$ mysql -p
Enter password:
ERROR 1045 (28000): Access denied for user 'hayd'@'localhost' (using password: YES)

whereas once I "became" root: -

hayd@dmhw500:~$ sudo bash
[sudo] password for hayd:
root@dmhw500:~# mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.1.41-3ubuntu12.6 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

I was in like Flynn.

*UPDATE*

That nice Mr Andrew Frayling pointed out that I could easily overcome this issue by, as my normal non-root user, run the command: -

hayd@dmhw500:~$ mysql -u root -p

*UPDATE*


The next step was to create a database: -

mysql> create database loanrequest;
Query OK, 1 row affected (0.00 sec)

and then make that my current database ( equivalent of DB2 CONNECT TO LOANREQUEST ): -

mysql> use loanrequest;
Database changed

and then create a table: -

mysql> create table loanrequests(name varchar(30) not null,custnum varchar(10) not null primary key,amount float not null);
Query OK, 0 rows affected (0.11 sec)

and then look at the table just created: -

mysql> describe loanrequests;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | varchar(30) | NO   |     | NULL    |       |
| custnum | varchar(10) | NO   | PRI | NULL    |       |
| amount  | float       | NO   |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

and then populate the table: -

mysql> insert into loanrequests values('Dave Hay','006734',12345.67);
Query OK, 1 row affected (0.00 sec)

mysql> insert into loanrequests values('Homer Simpson','123456',456.78);
Query OK, 1 row affected (0.00 sec)

mysql> insert into loanrequests value('Marge Simpson','661222',123.42);
Query OK, 1 row affected (0.00 sec)

mysql> insert into loanrequests value('Lisa Simpson','123123',21323.23);
Query OK, 1 row affected (0.00 sec)

mysql> insert into loanrequests value('Bart Simpson','43215',6651.21);
Query OK, 1 row affected (0.00 sec)

and then query the table: -

mysql> select * from loanrequests;
+---------------+---------+---------+
| name          | custnum | amount  |
+---------------+---------+---------+
| Dave Hay      | 006734  | 12345.7 |
| Homer Simpson | 123456  |  456.78 |
| Marge Simpson | 661222  |  123.42 |
| Lisa Simpson  | 123123  | 21323.2 |
| Bart Simpson  | 43215   | 6651.21 |
+---------------+---------+---------+
5 rows in set (0.00 sec)

mysql> quit

So far, so good.

I then wanted to access the database from WebSphere Application Server - I'm using 6.1.0.29.

This is a relatively simple matter that's covered elsewhere, so I'll merely provide the key points: -

a) Copy the JDBC driver to the WebSphere lib/ext directory

cp /usr/share/java/mysql-connector-java-5.1.10.jar /opt/IBM/WebSphere/AppServer/lib/ext

b) Log into the WAS admin console ( Integrated Solutions Console ) ->  https://dmhw500.uk.ibm.com:10041/ibm/console/login.do?action=secure

c) Navigate to Resources -> JDBC -> JDBC Providers

d) Create a new provider: -

    Name:                      MySQL
    Class path:                /opt/IBM/WebSphere/AppServer/lib/ext/mysql-connector-java-5.1.10.jar
    Implementation class name: com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource

e) Create a new datasource: -

    Name:                                     loanRequest
    JNDI name:                                jdbc/loanRequest

f) Create the following three custom properties ( you may have a large number created via the WAS template; I chose to delete them all and merely add these three ): -

    serverName:                               dmhw500
    databaseName:                             loanrequest
    port:                                     3306

g) Create a JAAS - J2C authentication data alias ( keeps credentials separate from your data sources ): -

     User ID:                                 root
     Password:                                passw0rd

Having saved the configuration, and restarted WebSphere, I was able to successfully test the connection, which returned the message: -

The test connection operation for data source loanRequest on server WebSphere_Portal at node dmhw500 was successful with 1 warning(s)

For the record, the warning, as seen in SystemOut.log, is: -

[28/08/10 17:03:52:613 BST] 00000036 DSConfigurati W   DSRA0174W: Warning: GenericDataStoreHelper is being used.

Obvious really :-)

For me, the next step was to then use WebSphere Portlet Factory Designer to access the newly created datasource, and add some create/read/update/delete methods to my database from a portlet ... which is nice :-)

Friday 27 August 2010

Using the new IBM Lotus Connections 2.5 migration tool

A useful article from the IBM China labs, worth a read if you're looking to migrate to Lotus Connections 2.5 - I'm guessing that there'll be a new version along once the next release of Connections is available: -

This article describes the new IBM® Lotus® Connections 2.5 migration tool, including its architecture, how to use it, and how to troubleshoot errors and perform a recovery. The new migration tool is based on Extensible Stylesheet Language Transformation (XSLT) technology and provides a simple, effective way to migrate all necessary artifacts, freeing you from manually reapplying configurations.


Migrating artifacts is a key task when you are migrating your existing Lotus Connections version. Using the migration tool in version 2.0.1, you were able to accomplish this task to some extent; for example, you could migrate some configuration and all data files. You still had to customize many configurations manually, which is one of the most painful tasks in the migration process.

The newly added features in Lotus Connections 2.5 mean that many more configurations must be migrated. The latest migration tool, which is based on XSLT technology, provides a simple and effective way to migrate all necessary configurations and data files. With its help, you don't need to manually reapply all configurations.

This article explains how to use the Lotus Connections 2.5 migration tool, including how to troubleshoot errors and perform a recovery, so that you can understand the migration tool and correctly migrate the artifacts of your existing Lotus Connections environment.

It is assumed that you have a good understanding of IBM WebSphere® Application Server and a general understanding of XSLT and XML Path Language (XPath) technology.

Using the new IBM Lotus Connections 2.5 migration tool

Wednesday 25 August 2010

SECJ0369E: Authentication failed when using LTPA. The exception is

This one goes into the "Doh!" box, but I thought I'd blog it here (a) to aid me in the future and (b) perhaps to aid others.

One of my colleagues was finding that certain users were unable to log into a Lotus Connections 2.5.0.1 environment - the problem only appeared to affect a specific subset of users, added more recently via LDAP ( Tivoli Directory Server ).

The exceptions that we were seeing were: -

[8/25/10 10:40:38:368 GMT] 0000002f LTPAServerObj E   SECJ0369E: Authentication failed when using LTPA. The exception is <null>
[8/25/10 10:40:38:369 GMT] 0000002f FormLoginExte E   SECJ0118E: Authentication error during authentication for user hayd

with: -

Your user name and/or password does not match any existing accounts. Please check and try again

in the browser.

Being a techie, I immediately dived off into the depths of the "problem", looking at LDAP using Apache Directory Studio, DB2 database tables ( EMPINST.EMPLOYEE in PEOPLEDB ), TDI logs etc. I even re-ran the to-DB2 TDI assembly line, via the script ./populate_from_dn_file.sh in /home/idcuser/LC/Wizards/TDIPopulation/TDISOL/linux having manually added a DN to collect.dns.

Having done all this ....

Do you know what the solution was ?

We were using the wrong passwords :-)

Isn't it nice when a plan comes together ........................

Tuesday 24 August 2010

Encouraging User Adoption - Getting Users to update and maintain their own Profiles in Lotus Connections

An interesting post from Michael Ransley, promoting a widget from, I assume, his company, JustNudge.

Lotus Connections has a lot of options and places where information can be entered and it can be overwhelming for a new user who doesn’t know where to start. A simple graphical widget can give them an indication of their profile maturity and how it can be improved. To a certain point these can be thought of as collectable achievements and is a well known method in getting users more involved in systems.

JustNudge has produced a widget that provides this feedback to the user, giving them both a graphical representation of their progress together with information on a potential next step.

http://www.justnudge.com/2010/08/profile-population

Check it out ...

Friday 20 August 2010

Want "Learn Lotus" ?? I know I do ...

Thanks to those clever @ThisWeekInLotus folks who provide the most excellent This Week In Lotus podcast, I now know about this rather useful site: -

Learn Lotus and WebSphere Portal Products

Find media resources including demonstrations, videos, tutorials, reference cards, and web seminars to help you get started with Lotus and WebSphere Portal Products.
http://www-10.lotus.com/mmup/index.html

I may/not be wrong, but I believe that part of this site is actually delivered using technology similar to: -

Multimedia Library for Lotus Software

The fastest, most affordable way for end-users to learn Lotus Software.

The Multimedia Library for Lotus will quickly teach your employees the essential skills they need to be successful. New employees will learn key tasks and seasoned employees will learn new features and productivity tips. "What's New" tutorials teach valuable skills and benefits of new features. This is the ultimate training solution for end users, administrative assistants, mobile users and tech support teams.

http://www-01.ibm.com/software/lotus/training/multimedialibrary.html

Thursday 19 August 2010

TDI Solution Directory for Lotus Connections 2.5 Fix Pack 2 (2.5.0.2)

That very clever chap, "Curious" Mitch Cohen, has just blogged about the need to update Tivoli Directory Integrator's solution directory ( aka tdisol ) for Windows / Linux as/when you move to the most recent fix pack for Lotus Connections, 2.5.0.2.

Rather than hear it from me, heeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeerrrrrrrrrrrrrrrrrrrrrrrrrrrrrreeeeeeeeeeeeeeeeeeeeeeeeee's Mitch: -

TDI Solution Directory for Lotus Connections 2.5 Fix Pack 2 (2.5.0.2)

Enjoy ... you know you should

Tuesday 17 August 2010

Lotus Connections 2.5.0.2 and WebSphere Portal 6.1.5.1 ( 6.1.0.4 ) - Doing Business (Cards) Together - Version 2

Following my earlier blog posts: -

Lotus Connections 2.5.0.1 - Doing Business (Cards) with WebSphere Portal 6.1.5

and: -

Lotus Connections Profiles' Business Card appearing in WebSphere Portal - Or not ?

I've spent the last couple of days, recreating the environment, using Lotus Connections 2.5.0.2 and WebSphere Portal 6.1.5.1 ( aka 6.1.0.4 ), using the latest set of LC25 portlets: -

*UPDATED* IBM Lotus Connections 2.5 Portlets for IBM WebSphere Portal

that were released in late June 2010.

It's been a fun ride, but I was finally able to crack the "problem" and now have Business Cards appearing in the Profiles portlet in WebSphere Portal.

These were the key lessons learnt: -

(1) Unlike earlier versions of WebSphere Portal and Lotus Connections, it is not necessary to install the following iFixes: -

2.5.0.1-LC-Multi-PROFILES-IFLO46757        ( for Connections 2.5.0.1 )
6.1.0.3-WP-Multi-IFPM02565                        ( for Portal 6.1.0.3 )

(2) It's necessary to restart Portal after: -

(a) updating WIM
(b) configuring the URL for Profiles
(b) updating the styles JSP

(3) If in doubt, restart both Portal and Connections.

(4) If you want to be really really sure, delete the contents of: -

/opt/IBM/WebSphere/wp_profile/temp
/opt/IBM/WebSphere/wp_profile/wstemp

before starting Portal again.

(5) For me, this didn't work until I brought Connections up to 2.5.0.2 and Portal up to 6.1.5.1; previously, I'd been using LC 2.5.0.1 and WP 6.1.0.3 In addition, getting the specification URL in the ISC right took time; it's not totally clear which of the
following it should have been: -

http://lc25.uk.ibm.com:9083
https://lc25.uk.ibm.com:9446
https://lc25.uk.ibm.com:9446/profiles/html/businessCard
http://lc25.uk.ibm.com:9083/profiles/html/businessCard

This is what worked for me: -

http://lc25.uk.ibm.com:9083

I've written the solution up in a document, which I'm intending to get published via the Lotus Connections Wiki but I can share privately if required. Just let me know ...

Friday 13 August 2010

Gnome 3 Beta - Shiny Shiny Shiny

Following an article in this month's Linux Format magazine, I've been taking a look at the freshly mown beuaty that is Gnome 3 Beta.

It's pretty easy to install and use it, in parallel with the current Gnome 2.30.2, without causing any major impact.

In essence, I opened a terminal window ( using [Alt] + [F2] -> xterm ), and then ran the commands: -

hayd@dmhw500:~$ sudo add-apt-repository ppa:ricotz/testing
hayd@dmhw500:~$ sudo apt-get update
hayd@dmhw500:~$ sudo apt-get install gnome-shell
hayd@dmhw500:~$ gnome-shell --replace

This automagically switches into the new GUI, where the new Activities uber menu expands and contracts to fill the left-hand side of the screen, on-demand. This happens in a number of ways: -

-    Hitting the [Windows] key, if you have one
-    Moving the mouse pointer to the top-left corner of the screen
-    Hitting  the[Alt] and [F1] keys simulteanously

All of your applications, folders, documents etc. appear in Activities, and you can find apps etc. merely by typing their name in the Find... field. Once located, an application can be launched by dragging it onto a virtual desktop.

It's also possible to add and remove virtual desktops using the + and - icons on the screen.

There's far more to it, but doing is better than telling.

Once you're bored with it, you can simply kill the gnome-shell by hitting [CTRL] + [C] in the still open terminal window.

I have had a few hang-ups, one of which forced me to reboot using [CTRL] + [ALT] + [DELETE] so I'd strongly recommend caution.

Remember, your mileage may vary.

Tuesday 10 August 2010

Oops, that didn't work - Lotus Connections 2.5 - Perhaps an error message that's just too darned friendly

Things that make me go "Hmmmmmmmmmmmm".

I don't yet have a solution for this, but I'm seeing: -

com.ibm.websphere.servlet.error.ServletErrorReport: Filter [TabInfoUpdatePageFilter]: filter is unavailable.
com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.invokeFilters(DefaultExtensionProcessor.java:866)
com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:574)
com.ibm.ws.wswebcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:113)
com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3548)
com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:269)
com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:818)
com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1478)
com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:126)
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102)
com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
com.ibm.io.async.ResultHandler.complete(ResultHandler.java:196)
com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:751)
com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881)
com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497)

on the Homepage of a freshly minted Lotus Connections 2.5.0.0 single-node clustered installation when I authenticate, via Profiles <-> LDAP, with the following in SystemOut.log: -

[8/10/10 14:44:43:380 BST] 00000075 ServletWrappe E   SRVE0068E: Uncaught exception thrown in one of the service methods of the servlet: FilterProxyServlet. Exception thrown : javax.servlet.ServletException: Filter [TabInfoUpdatePageFilter]: filter is unavailable.
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:233)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:837)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:680)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:588)
        at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:525)
        at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:321)
        at com.ibm.ws.webcontainer.servlet.FilterProxyServlet.dispatch(FilterProxyServlet.java:79)
        at com.ibm.ws.webcontainer.servlet.FilterProxyServlet.service(FilterProxyServlet.java:58)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1146)
        at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1087)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:145)
        at com.ibm.lotus.connections.dashboard.web.webui.internal.filters.UserInfoFilter.doFilter(UserInfoFilter.java:221)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
        at com.ibm.lotus.connections.dashboard.web.webui.internal.filters.SessionValidationFilter.doFilter(SessionValidationFilter.java:92)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
        at com.ibm.lconn.core.web.auth.LCBasicAuthFilter.doFilter(LCBasicAuthFilter.java:79)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
        at com.ibm.lconn.core.web.auth.LCUserDataConstraintFilter.doFilter(LCUserDataConstraintFilter.java:84)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
        at com.ibm.lconn.core.web.util.lang.I18NFilter.doFilter(I18NFilter.java:203)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
        at com.ibm.lotus.connections.dashboard.web.webui.internal.filters.Utf8CharsetFilter.doFilter(Utf8CharsetFilter.java:43)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
        at com.ibm.lconn.core.web.request.HttpRequestFilter.doFilter(HttpRequestFilter.java:77)
        at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
        at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:837)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:747)
        at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:700)
        at com.ibm.ws.wswebcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:115)
        at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.invokeFilters(DefaultExtensionProcessor.java:856)
        at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:574)
        at com.ibm.ws.wswebcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:113)
        at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3548)
        at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:269)
        at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:818)
        at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1478)
        at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:126)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
        at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
        at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102)
        at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
        at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
        at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
        at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
        at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:196)
        at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:751)
        at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881)
        at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497)

I've tried applying the 2.5.0.2 cumulative fix pack, but to no avail.

Given that I'm running WAS 6.1.0.29, I figured that updating LC *might* be the solution, as I can't see anything immediately obvious.

For the record, I only have Homepage and Profiles installed, as I'm running this on a fairly low-end VMware image on my Thinkpad, alongside LDAP, DB2 and Portal.

Ah well, I'll crack it ......

More to come ....

Cleaning up WebSphere Application Server profiles

Having performed a clean installation of WebSphere Application Server 6.1.0.0, I chose to create a Deployment Manager ( dmgr ) profile, but was surprised to find that another profile ( AppSvr01 ) was also created at the same time. However, this profile did not have an application server instance e.g. server1, available to it.

I wanted to create a new, clean profile, also called AppSvr01, I wanted to remove the "old" profile. Being a typical hacker, I used the command: -

rm -Rf /opt/IBM/WebSphere/AppServer/profiles/AppSvr01

which worked a treat.

However, the Profile Management Tool ( pmt.sh ) still thought that this profile existed, and therefore, would not let me create a new one.

I dug around, and found the manageprofiles.sh command which, through some trial and lots of error, allowed me to validate and then remove the now orphaned AppSvr01 profile as follows: -

(a)

The -listProfiles subcommand didn't show AppSvr01 at all, merely returning: -

[Dmgr01]

(b)

The -validateRegistry subcommand showed me that AppSvr01 was not valid: -

/opt/IBM/WebSphere/AppServer/bin/manageprofiles.sh -validateRegistry

returned: -

A list of profiles that are not valid follows:
[AppSrv01]

(c)

The -validateAndUpdateRegistry subcommand cleaned up the registry nicely, returning: -

[AppSrv01]

(d)

The -validateRegistry subcommand showed me that AppSvr01 was not valid: -

/opt/IBM/WebSphere/AppServer/bin/manageprofiles.sh -validateRegistry

then returned: -

All of the profiles in the registry are valid.

I probably could have used the -augment subcommand, but didn't need to do so in this particular instance.

For the record, here's much much more fine information about manageprofiles.sh

http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/topic/com.ibm.websphere.base.doc/info/aes/ae/rxml_manageprofiles.html

VMware Ate My Keyboard

Just hit an interesting little problem ( aka bug or feature ) in VMware Workstation 7.1.0 build 261024 running under Ubuntu 10.0.4 on a Thinkpad W500.

For no apparent reason, the so-called special modifier keys ( Ctrl, Shift etc. ) stopped working in the host OS, even though they continued working within a running VM ( Red Hat Enterprise Linux 5.5, in case it helps ).

The symptoms included the inability to use [Shift] to achieve CAPITALS or get special characters such as currency ( £, $ ), punctuation symbols ( !, ? ) etc.

This made life somewhat difficult for me.

As always, Google had the answer, Google is my friend, with this old post from 2008: -
Workstation 6 + Xorg 7.3 - keyboard issues
http://ubuntuforums.org/showthread.php?p=4990785#post4990785

which directs one to run the command /usr/bin/setxkbmap - no parameters etc. needed.

That was all I needed to do - the special modifier keys burst back into life, and I didn't have to "turn it off and on again"

Roy: [answers phone] Hello, IT. Have you tried turning it off and on again? ... OK, well, the button on the side. Is it glowing? ... Yeah, you need to turn it on. Err, the button turns it on. Yeah, you do know how a button works, don't you? No, not on clothes.
[Moss's phone rings. He answers it.]
Moss: Hello IT. Yuhuh. Have you tried forcing an unexpected reboot?
Roy: No, there you go, I just heard it come on. No, that's the music you hear when it comes on. No, that's the music you hear when... I'm sorry, are you from the past?
Moss: You see the driver hooks a function by patching the system call table so it's not safe to unload it unless another thread is going to jump in there and do its stuff and you don't want to end up in the middle of invalid memory... Hello?


http://en.wikiquote.org/wiki/The_IT_Crowd

Saturday 7 August 2010

Interesting "feature" using external USB drives with Ubuntu

This morning, I raised my first ever bug report for Ubuntu on the excellent Launchpad site: -


as follows: -

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
I have the following entry in /etc/fstab: -

/dev/sdb2               /home/hayd/lenovo               hfsplus rw,auto,exec,user

relating to an external USB drive.

During boot-up of the previous 2.6.32-23-generic-pae kernel, I am prompted with the following message: -

The disk drive for /home/hayd/lenovo is not ready yet or not present
Continue to wait; or press S to skip mounting or M for manual recovery


which is precisely as one would expect.

However, following a recent upgrade to 2.6.32-24-generic-pae, this message is no longer displayed; instead, I am presented with a completely blank screen.

Having used the GRUB2 menu ( via the [Shift] key ) to boot back to the -23 kernel, I realised: -

(a) what the problem is
(b) how to overcome it - by pressing the [S] key to skip the auto-mount.

Therefore, I'm now able to boot -24 and get past the exception, by hitting [S], but the message should be displayed in clear text.

It's my view that this is a bug introduced by the kernel update.

Hardware

Lenovo Thinkpad W500 ( 4061-BL5 )
AMD/ATI Radeo graphics ( via i915 open-source driver )
Gnome 2.30.02

OS

Ubuntu 10.04.1 LTS
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Will be interested to see whether (a) I can reproduce this on other hardware and (b) whether others have the same problem.

Friday 6 August 2010

Installing Tivoli Directory Integrator 6.1.1 Fixpacks ...

This is purely an aide memoire, to save me having to look it up each time; in order to install a fix pack onto TDI 6.1.1 using the GUI, run the following command ( as root ): -

/usr/ibm/common/ci/gmi/bin/gmi

I've never been too sure why I see the exception: -

Error in copying /tmp/ismp001/8229657/data/a7390f9ecf6457bf3713f951c90b1bdb/1.0.0.0/resource.map  there may not be enough space on device

and: -

java.io.IOException: File does not exist: /usr/ibm/common/acsi/jre/lib/ext/svcdump.jar
        at com.installshield.boot.streamhandler.ISMPFileURLStreamHandler.openConnection(Unknown Source)
        at java.net.URL.openConnection(URL.java:925)
        at sun.net.www.protocol.jar.JarURLConnection.<init>(JarURLConnection.java:91)
        at sun.net.www.protocol.jar.Handler.openConnection(Handler.java:41)
        at java.net.URL.openConnection(URL.java:925)
        at sun.misc.URLClassPath$JarLoader.getJarFile(URLClassPath.java:644)
        at sun.misc.URLClassPath$JarLoader.<init>(URLClassPath.java:609)
        at sun.misc.URLClassPath$3.run(URLClassPath.java:387)
        at java.security.AccessController.doPrivileged1(Native Method)
        at java.security.AccessController.doPrivileged(AccessController.java:351)
        at sun.misc.URLClassPath.getLoader(URLClassPath.java(Inlined Compiled Code))
        at sun.misc.URLClassPath.getLoader(URLClassPath.java(Compiled Code))
        at sun.misc.URLClassPath.getResource(URLClassPath.java(Compiled Code))
        at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java(Compiled Code))
        at java.security.AccessController.doPrivileged1(Native Method)
        at java.security.AccessController.doPrivileged(AccessController.java(Compiled Code))
        at java.net.URLClassLoader.findClass(URLClassLoader.java(Compiled Code))
        at java.lang.ClassLoader.loadClass(ClassLoader.java(Compiled Code))
        at java.lang.ClassLoader.loadClass(ClassLoader.java:502)
        at java.util.ResourceBundle.loadBundle(ResourceBundle.java:1030)
        at java.util.ResourceBundle.findBundle(ResourceBundle.java:907)
        at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:732)
        at java.util.ResourceBundle.getBundle(ResourceBundle.java:532)
        at com.installshield.util.LocalizedStringResolver.resolve(Unknown Source)
        at com.installshield.util.LocalizedStringResolver.resolve(Unknown Source)
        at com.ibm.ci.gmi.util.GmiConfig.setGmiDefaults(GmiConfig.java:147)
        at com.ibm.ci.gmi.util.GmiConfig.getConfig(GmiConfig.java:97)
        at com.ibm.ci.gmi.issi.commandline.InitializeGmi.initializeLogging(InitializeGmi.java:102)
        at com.ibm.ci.gmi.issi.commandline.InitializeGmi.execute(InitializeGmi.java:85)
        at com.installshield.wizard.Wizard.executeStartupBeans(Unknown Source)
        at com.installshield.wizard.Wizard.startup(Unknown Source)
        at com.installshield.boot.BootMain.bootstart(Unknown Source)
        at com.installshield.boot.BootMain.executeBoot(Unknown Source)
        at com.installshield.boot.si.SIBootMain.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:570)

but it appears to work.

It's also worth noting that I see a "Sign On to the Server" dialogue box three times; this is spookily reminiscent of the dialogue boxes that I used to see when installing WebSphere Application Server on OS/400 back in the day but .... clicking 'Cancel' gets rid of the box, and TDI seems none the worse.

Final point, running: -

/usr/ibm/common/ci/gmi/bin/gmi -help

returns: -

Update Installer Command Line Options:

-help
Displays a list of available command line options.

-version
Displays the Update Installer version.

-console
Runs Update Installer in console mode.  This option suppresses the graphical user
interface.

-record <response-file>
Creates a response file containing options for running Update Installer in silent mode.

-silent -options <response-file>
Runs Update Installer in silent mode.  A response file, previously created with the
-record option, can be used to specify the actions to be performed by Update Installer.

-uninstall
Runs Update Installer in uninstall mode.  Maintenance is removed by Update Installer.

-uuid <uuid>
Identifies the 32-character UUID of the offering that will be updated by Update Installer.
If more than one instance of the offering is installed, the -discriminant
option is required.

-discriminant <discriminant>
Identifies the discriminant that uniquely identifies an installed instance
of the offering to Solution Install.

-mdvFile <mdv-file-list>
Identifies one or more maintenance package, separated by
spaces, to be installed or uninstalled by Update Installer.
This option may only be used with the -silent option.

-fixName <IU-name-list>
Identifies one or more IU fix names, separated by spaces, to be uninstalled.
This option may only be used with the -silent option.

-updateVersion <update-version>
Identifies the version of an update to be uninstalled.
This option may only be used with the -silent option.

For more information, see the Update Installer User's Guide.

which is rather handy.

Thursday 5 August 2010

Extend WebSphere Portal WCM Seedlist with Custom Metadata

Whilst researching for a project on which I'm currently engaged, I found this potentially quite useful document up on the most excellent WebSphere Portal Wiki.

I'll be reading it further, and also discussing with my development colleague, Brian, but it looks rather relevant: -

WCM Seedlist is the output format which is being used by WebSphere Portal to crawl and index WCM content. WCM Seedlist is based on the seedlist framework for seedlist v1.0. This is an ATOM feed based format. It doesn't only list links, but also provides additional metadata (author, category, publish date, access rights etc.). It furthermore tells the crawler how to handle the currently processed link: add to index, remove from index, update in index etc.

This article describes how to extend the WCM Seedlist which is consumed by search crawlers like PSE, Omnifind, Google [EITAN: Is that true that google can crawl Seedlist? ]  etc. You learn how to enrich the provided metadata with your own custom metadata: update, delete or add new values. The idea is to use the custom metadata in extended search queries to provide better or specific search results
.

For more information, go check out the article - Extend WebSphere Portal WCM Seedlist with Custom Metadata

An interesting change looks to be coming with Lotus Web Content Management 7

According to the folks who really should know, the Australia Development Lab, the next release of WCM will have the capability to create a Content Library with a number of default items. To quote from their blog: -

<snip>
A new option ("Include default items in the new library") has been added when creating a new WCM library. When selected the new library will be pre-populated with a basic set of items. This helps avoid the some what tedious initial setup steps needed to get WCM going (e.g. Create a Workflow, but need stages... that need actions etc etc etc). 

...
The default items include:
  • Workflow Actions (Publish and Expire)
  • Workflow stages (3 of them)
  • Workfow (An express and a 3 stage workflow)
  • Authoring and corresponding Presentation template
  • Components (A menu and authoring tools component)
  • 1 Site area and 2 sample content items
The default items are a simple but effective starting point for a new library. Those new to the product get a working site they can experiment with, and experienced users avoid needing to create the base set of workflow actions every time they start with a fresh WCM :-)... pick and choose what you want to keep and delete the rest.
</snip>

Should be interesting .....

Tuesday 3 August 2010

*UPDATED* IBM Lotus Connections 2.5 Portlets for IBM WebSphere Portal

This had completely passed me by, but the Lotus Connections 2.5 portlets posted into the Catalog earlier this year have been updated recently ( July 20 ) to include better support for Profiles, as well as tag clouds.

The IBM Lotus Connections 2.5 Portlets for WebSphere Portal delivers the Lotus Connections rich set of social software services for use within a WebSphere Portal environment. WebSphere Portal users can integrate the Activities, Blogs, Bookmarks, and Profiles applications of Lotus Connections to:

  • Create and work with Lotus Connections Activities within WebSphere Portal. Users can easily set prioritization, Activity status and to do items for their Activities. Also, users have the ability to manage the membership to add and leverage the expertise and experience of others in the organization by working together.
  • Within WebSphere Portal users can view and create Lotus Connections Blog postings and comments.
  • Easily create, edit and discover Bookmarks in Lotus Connections that have been qualified by others with similar interests and expertise.
  • Search a directory of colleagues you can use to build a network and locate expertise. Update and comment on Status Updates from your network.
  • Incorporate meaningful keywords to find associated content and filter the items in other Lotus Connections portlets.

The Lotus Connections portlets support Lotus Connections 2.5 and WebSphere Portal 6.1.5.


July 20, 2010:  IBM has posted an updated package to the catalog containing new Profiles and Tag Cloud portlets, as well as updates to the other portlets.

So, on your marks, get set, start your downloads .....

Book To Be Reviewed - Application Development for IBM WebSphere Process Server 7 and Enterprise Service Bus 7

After a few weeks of waiting for Postman Pat, I'm pleased to report that my review copy of Packt Publishing's latest tome has arrived.

Having just reached the end of Stieg Larrson's excellent Dragon Tattoo series of novels, this is the next on my reading list, so I'll report back shortly.

On a semi-related note, I'm looking at a project at present using WebSphere Process Server and WebSphere Portal, so this is very timely. I'm also starting to look at WebSphere Lombardi Edition, as an aside, so the world is very very bright.  Watch this space ...

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