When using Eclipse classic you probably noticed that there isn't any Marketplace installed - below is a few steps for installing this (and if you have never seen the Marketplace, your missing out on a lot of "fun"):

  1. Help->Install New Software...
  2. Point to Eclipse Indigo Site. If not available add the site "Indigo - http://download.eclipse.org/releases/indigo"
  3. Look at "General Purpose Tools"->"Marketplace Client"
  4. After installing, restart Eclipse and you can find Marketplace in "Help->Eclipse Marketplace..."

Tada, simple yet powerful!

Once you create a new Java (or any other file for that matter) under Eclipse it is quite convenient to add SVN header info upon comit automatically. This is done by adding a new file named "config" - e.g. in ~/.svn/settings/conf/. Then add the following information to the file:

[miscellany]
enable-auto-props = yes

[auto-props]
* = svn:keywords=Author Date Id Revision

Next, in Eclipse go to Windows > Preferences > Team > SVN and set the "Configuration location" to "Use directory", and simply browser to the configuration directory you just created (you select a dir, not a file!).

My initial plan was to use axis and to use the version provided by in jvm in Notes (/Domino? I cannot seem to figure out when to use Notes and when to use Domino, so I'll simply use Notes)... After exhausting trail'n' error I simply gave up and re-wrote everything in Spring.

This gave me the advantage of working without any Notes specific some-what-crappy-and-buggy-versions of axis - a framework which I haven't used for like 5 or 6 years... I use Spring on a daily basis, so this is just top dollah!

Anywho, this also gave me the advantage of being able to do my Java development in a plain Eclipse rather than some really horrible (imho) IDE provided by Notes (also known as the Designer). Again, being free of any specific Notes stuff I started by creating my Jaxb classes. Simply by using the maven-jaxb2-plugin for maven (for architectural reasons I'm stuck on 2.0.9). The power of the plugin is that you add the path to your xsds to the pom.xml and simply do a "mvn install" (read the documentation or catch me on twitter@sunlock). Then you have the model (e.g. xsd types), request, and response classes. Quite neat if I may say so.

Next up is the Spring part. If you have ever done any Spring development this is straight forward. Use Spring-WS and with a simply configuration your done! If you haven't your f*cked! :) Naaa, I have a breif tour on this page - and then your done.

Again, for architectural reasons I'm stuck on a old version of Spring, but that shouldn't stop you for doing some development in the newer versions.

My dependencies (thus being the files added to WEB-INF/lib on the Notes side) are:

  • commons-logging-1.1.1.jar (used by Spring)
  • spring-2.5.6.jar (older version, newest is currently 3.1)
  • spring-ws-1.5.9.jar (older version, newest is currently 2.0.2)
  • my-autogen-jaxb-classes.jar (my classes compiled by Jaxb - added to a jar)
  • my-webservice-consumer.jar (the actual implementation)

Please do notice this bug - currently we haven't had time to figure out what to do as it seems that this bug also exists in 8.5.3, but we're also looking into this.

As always, feel free to catch me on twitter@sunlock.

I'm currently working with Lotus Notes 8.5.3 and web services. This seems to be a brand new area, google doesn't find much (sometimes nothing), so not much help there. Also, I'd like to build my Java code as I normally do - that is, use maven etc. Spring-Ws would be nice, but I'm having a hard time trying to figure out how Notes handles dependencies (I'm guessing... it ain't!).

Guess I'll have to write an article about this some day, but for now... Help? Find me on twitter@sunlock. If you have any experince in this area, please give me a wink.

Over the past few weeks I have been working with Java, Spring-WS, and JAXB2. I must admit that it is simple yet powerful - although I feel that I'm missing something like using different datatypes.

E.g. using Javas own Calendar instead of a XMLGregorianCalendar when using e.g. dateTime. The solution is simple and elegant, simply add the following to your xsd:

<xs:schema ... xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0" ...>
    <xs:annotation>
        <xs:appinfo>
            <jaxb:globalBindings>
                <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime" parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime" printMethod="javax.xml.bind.DatatypeConverter.printDateTime" />
            </jaxb:globalBindings>
        </xs:appinfo>
    </xs:annotation>
    ...

This will change the xs:dateTime into a good old Java Calendar.

If you want more info go to the Unofficial JAXB Guide - Using different datatypes.

Not must to say, just wanted to say that the initial release of TrayMonitor is out!

Sometimes it would be nice to trim jsp for blank lines. Every JEE developer knows that jsps contains blank lines... lots'n'lots of silly stupid blank lines. But fear not, the solution is as simple as it is elegant. JSP 2.1 supports a new trimWhitespace directive:

<%@ page trimDirectiveWhitespaces="true" %>

You could also add the following to your web.xml:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <trim-directive-whitespaces>true</trim-directive-whitespaces>
    </jsp-property-group>
</jsp-config>

Notice that you should use a Servlet 2.5 XSD in order for this to work.

When working with stuff like ajax you might run into problems with IE (all versions I think). IE is notorious for its aggressive caching of Ajax responses. If your using jQuery you can simple use the cache flag in your ajax call:

$.ajax({
    ...
    cache: false,
    ...
});

This way caching will be disabled. If your not using IE there is a simple hack - simply add a random value to your url (e.g. timestamp).

Sometimes you might need to refresh a page on focus. E.g. this could be in a tabbed browser environment like an intra app or something. The following JavaScript does this:

onload = function () {
    onfocus = function () {
        onfocus = function () {}
        location.reload (true)
    }
}

Short, Vaadin is a Java framework for building modern web applications that look great, perform well and make you and your users happy. It sounds like a win-win. Here is a short tutorial to get you started.

NASA is ending attempts to regain contact with the long-lived Mars Exploration Rover Spirit, which last communicated on March 22, 2010.

3 months, 90 days - that was the time it was supposed to run. It gave up after 6 years... Guess Windows isn't an option ;)