Upgrade and new theme

Just upgraded WordPress to the latest and greatest (stable version), and took the liberty of downloading and installing a new theme. I’m hoping that the new WordPress makes the site faster and easier to maintain.

I’m trying to find a good plugin to manage a conference: CfP, publishing the schedule, registering attendants, etc. Our company website runs on WordPress, so a WordPress plugin would be great. If not, I’ll have to convince the powers that be to move to RadiantCMS and use the ApacheCon conference plugin, created by J. Aaron Farr.

Wicket trainings at ApacheCon

ApacheCon EU hosts 2 days worth of Wicket training March 23rd and 24th in Amsterdam: Introduction to Wicket and Behavior Driven Development with Wicket and JDave. These trainings will be given by core team members of the Apache Wicket project, giving you access to the experts.

You can pick and choose, but if you want the best experience you should book both courses. On monday I’ll be giving an introduction course to Apache Wicket. On tuesday, Timo Rantalaiho will give a course on driving your web application development using Wicket, WebDriver and JDave.

Pricing is available at the ApacheCon website. Book now and get your team up to speed with the best Java web development experience in just two days!

Introduction to Wicket

March 23rd, Martijn Dashorst, full description

Learn how to use Apache Wicket to create web applications on your own from the masters. This hands-on lab will provide a quick introduction to the Wicket framework and we’ll start with coding right away. At the basis for this course lies the Wicket in Action book, written by the course leader. We’ll start with setting up our project, move on from a simple hello world application to implementing an online cheese store. We’ll learn to connect it to services delivered by Spring and a back end served with a JPA provider (Hibernate or OpenJPA). During this course we’ll cover the end-to-end basics of web application development: unit testing, writing maintainable code, internationalization, security and deployment.

Behavior-Driving Your Apache Wicket Application: Making the Most of Webdriver and JDave-Wicket

March 24th, Timo Rantalaiho, full description

How to get good unit and black-box test coverage by expressive, executable specifications on your Apache Wicket application code, with JDave BDD framework and WebDriver functional testing tool.The training is mostly hands-on programming assignments of applying WebDriver and jdave-wicket for testing and adding features to a Wicket application.

Hating Oracle

Oracle is a decent product but there are some things I loathe about it. The biggest gripe I have with Oracle, and it is a BIG issue I have with it is the following:

Caused by: java.sql.SQLException: Invalid column name
    at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
    at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:112)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:173)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:229)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:403)
    at oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3366)
    at oracle.jdbc.driver.OracleResultSetImpl.findColumn(OracleResultSetImpl.java:2009)
    at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:494)
    at com.mchange.v2.c3p0.impl.NewProxyResultSet.getString(NewProxyResultSet.java:3342)
    at org.hibernate.type.StringType.get(StringType.java:18)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:189)
    at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.extract(CustomLoader.java:474)
    at org.hibernate.loader.custom.CustomLoader$ResultRowProcessor.buildResultRow(CustomLoader.java:420)
    at org.hibernate.loader.custom.CustomLoader.getResultColumnOrRow(CustomLoader.java:317)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:606)
    at org.hibernate.loader.Loader.doQuery(Loader.java:701)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:2220)
    ... 46 more

Can someone please put the guy that crafted this error message to the wall and shoot him? If you discover an invalid column name, then TELL me which one that was. Queries can span 100+ column names, and it is neigh impossible to figure out which one is invalid.

And this is not the only place where Oracle really is subpar in its error messages. Any of the invalid identifier messages doesn’t provide you with context. A multi-thousand dollar license product that can’t give me decent error messages is not worth a penny in my opinion. Oracle should be ashamed of itself and make a public apologie for billions lost revenue of their customers. Now go and stand in the corner!

Daily WTF: ehcache startup code

I found this gem in the ehcache library while debugging my own code and using the thrown and uncaught exception breakpoint filter from Eclipse (in ConfigurationHelper:

public final BootstrapCacheLoader createBootstrapCacheLoader(
        CacheConfiguration.BootstrapCacheLoaderFactoryConfiguration factoryConfiguration) throws CacheException {
    String className = null;
    BootstrapCacheLoader bootstrapCacheLoader = null;
    try {
        className = factoryConfiguration.fullyQualifiedClassPath;
    } catch (Throwable t) {
        //No class created because the config was missing
    }
    if (className == null || className.length() == 0) {
        LOG.debug("No BootstrapCacheLoaderFactory class specified. Skipping...");
    } else {
        BootstrapCacheLoaderFactory factory = (BootstrapCacheLoaderFactory)
                ClassLoaderUtil.createNewInstance(className);
        Properties properties = PropertyUtil.parseProperties(factoryConfiguration.getProperties());
        return factory.createBootstrapCacheLoader(properties);
    }
    return bootstrapCacheLoader;
}

Notice that the parameter given to this method can be null. I always suspected that using an if-statement to check for null-ness was an over-engineered approach.