Jul 28

Spring 1.1 RC 1 released

Tech No Comments »

The Spring folk keep pushing out code like the Apocalypse is coming.

Version 1.1 is looking nice, and seems pretty stable to me. I have been doing some work off of CVS HEAD and have been very happy with how stable it has been.

Some people would say it is due to TDD, but I think it is a bit more than that ;)

Hello everybody,

I'm pleased to announce that Spring Framework 1.1 RC1 is now available.
This release introduces a number of significant new features, among those
various bean factory enhancements, JMS support, nested transactions, enhanced JDO support, and support for Apache OJB.

* support for convenient JMS access in the new "org.springframework.jms" package

* retrieve multiple class path resources with same name via a "classpath*:" resource location
* reworked root/child bean definition concept, allowing to override any settings in a child
* added support for static factory methods ("factory-method" in XML bean definitions)
* added support for abstract lookup methods ("lookup-method" in XML bean definitions)
* bean factories can invoke non-public constructors, also autowire them
* AOP proxies including Advisors and TargetSources can now be serialized as far as possible
* reworked ApplicationEventMulticaster to allow for pluggability ("applicationEventMulticaster" bean)

* added "PROPAGATION_NESTED" to TransactionDefinition, for specifying a nested transaction
* added SavepointManager interface as superinterface of TransactionStatus, for generic savepoint management
* DataSourceTransactionManager supports nested transactions and savepoint management via JDBC 3.0 Savepoints

* added TransactionAwareDataSourceProxy, to allow for participating in Spring transactions with plain JDBC API code
* added support for retrieving JDBC 3.0 auto-generated keys to JdbcTemplate and SqlUpdate
* added support for BLOB/CLOB parameter values to JdbcTemplate, SqlUpdate and StoredProcedure
* added BatchSqlUpdate class to jdbc.object package, for convenient execution of batch updates

* added deferred close option to OpenSessionInViewFilter/Interceptor, as alternative to a single session per request
* reworked JdoDialect SPI (warning: not backwards-compatible!), to support more JDBC connection handling strategies
* JdoTransactionManager supports isolation levels and timeouts via JdoDialect's "beginTransaction" method
* introduced JdoOperations/JdoTemplate convenience methods for load, save, delete and find
* added OpenPersistenceManagerInViewInterceptor and OpenPersistenceManagerInViewFilter
* introduced "orm.ojb" package, for Apache OJB support (configuration in Spring, DAO support, transactions)

* added "dataSource" property to SchedulerFactoryBean, for using a Spring-managed DataSource as Quartz job store

* made BindStatus class more generic, moving it to support package, keeping a deprecated subclass in tags package
* added "fieldMarkerPrefix" support to ServletRequestDataBinder, for auto-resetting via "_fieldName" marker parameters
* added NestedPathTag for JSP, specifying a nested path (e.g. "customer.address") that BindTag will participate in
* added FreeMarkerViewResolver as convenience subclass of AbstractTemplateViewResolver
* added initial bind macro library for Velocity ("spring.vm"), automatically registered by VelocityConfigurer
* added initial bind macro library for FreeMarker ("spring.ftl"), automatically registered by FreeMarkerConfigurer
* reworked ContextLoaderPlugIn for Struts to support a context per Struts module

For details on bug fixes and further new features in this release, see the changelog.

For a showcase of Spring's new support for Apache OJB,
have a look at Petclinic - which features OJB as third data access option now,
alongside Hibernate and Spring JDBC.

Spring 1.1 final is scheduled for mid August.
The final release is mainly about completing the documentation,
but of course there is also the chance of minor new features :-)


Jul 28

New Reality TV? “The CTO Lifecycle”

Tech No Comments »

Screw the “You’re fired” guy. Why not a show based on our industry :)

Graham Glass is starting a series of blogs on The CTO Lifestyle.

Fox (or TechTV or G4TechTV or whatever they are now) should create a show where geeks via to be Graham’s number one, right hand man :)

Jul 28

“AOP is just the stuff that makes OOP work”

AOP, Tech 1 Comment »

I had a nice chat with Jon Tirsen. We talked about Groovy, AOP, Domain Driven Design, LISP, Ruby, Sydney, and bad beer.

Side Note: Aussies don’t care for Fosters:

Fosters: Australian for crap

and their Victoria Bitter is a lager not a bitter!

Anyway, while talking about http://intentsoft.com/ Jon came out with the above quote:

“AOP is just the stuff that makes OOP work”

I am really looking forward to getting the Domain Driven Design and seeing how it fits into the Microsoft DSL stuff.

Jul 28

XML on the Web Has Failed? Or is it people who only care about English? :)

Tech 2 Comments »

Mark Pilgrim got something off of his chest in XML on the Web Has Failed.

As always, what “failed” means is a tough one.

HTML has succeeded in that everyone uses it, but has failed in that noone does it right.

Mark talks about how noone is Doing the Right Thing with respect to XML. Are you using text/xml instead of application/xml? Are your header all setup correctly?

Most small coding houses couldn’t give a monkeys. They just want to whip something out and be done with it. “Works for me on IE. Next!”

The bigger problem that I have seen is that i16n is hard. As noone does the right thing, it borders on imposible. Maybe this is a market thing. If the market said “you must put more energy into i16n” then maybe it would. As a Brit living in the US, I definitely know that most people here don’t really care too much about other languages. “They all know English”.

But then, a project will come up where you have to work with Japan, China, and europe, and then suddenly they care. But this is rare.

So the solution is easy. Everyone should just speak American/English and be done with it ;)

Jul 28

Lookout: Email Search Tool

Tech 2 Comments »

The Lookout email search tool is up on the MSN sandbox. It sends you over to the download page.

I have always hated Outlook’s search. It is slow, and painful. With Lookout it has been working very nicely, and it is BLINDINGLY fast. It feels just like they are using Lucene behind the scenes ;)

Thanks guys


Yes it IS using Lucene. Lucene.NET!

But a quick perusal of the Lookout directory shows that it’s just using Lucene.NET for its searching and indexing. That’s an open source project through the Apache foundation.

from What exactly is Joel trying to say?

Jul 27

Now I know why you need a manual/stick shift

Personal 2 Comments »

I now know why you need a manual.

I just got back from The Bourne Supremacy and the car scene was great. I mean, how could Jason Bourne have driven like that if he was in a automatic transmission? :)

My Wife’s Quote

If I have to drive stick, how am I able to drink my Starbucks and talk on my cell phone while I drive?

Jul 27

Just installed IntelliJ IDEA 4.5

Tech No Comments »

It was nice to grab the final IDEA 4.5 and get playing with it.

Really funny to see:

“Language level for project: 1.3 or 1.4 or 5.0″ :)

That is where a bulk of the work was done I think:

Full JDK 1.5 support
Enhanced Java code analysis features

  • Duplicate code search
  • Analyze package and file dependencies
  • More than 100 new code inspection features

Java code-aware structured search and replace

This new powerful feature allows you to search and replace pieces of Java code using code patterns. This way you can easily search and optionally replace matching code relying on IDEA’s sophisticated Java-aware engine.

New refactorings

  • Inline constant refactoring
  • Extract subclass refactoring
  • Replace Method Code Duplicates
  • Convert To Instance Method
Jul 27

Where computers and keywords go wrong :)

Google, Tech No Comments »

Sometimes I have to laugh at the Google Ads that get served. Here on my blog I just got:

Class action?

Find out if you have a case! Free consultation!

I guess we need the Semantic Web to give these search engines some help!

Jul 27

Jeremy Boynes and Dain Sundstrom on Apache Geronimo on Video

Tech 1 Comment »

I had fun interviewing Jeremy Boynes and Dain Sundstrom on Apache Geronimo.

It is always good to hear what the core guys are thinking about, how things changed so you end up at solution X etc.

There are so many technologies that make up the J2EE stack, and Geronimo got to “start from scratch” so it is good to find out what the issues were.

Dain delves into the aims of Geronimo, challenges integrating the various Geronimo open source projects, and looks at the architecture.

Jeremy discusses the persistence options in Geronimo, how they handle the world of configuration, how security fits into the picture, EJB 3.0, and more.

Thanks for the interview guys.

Jul 27

Spring: Encapsulate the fact that you have a proxy and a target bean via “inner beans”

Tech 4 Comments »

I have always been a little irked when I saw two bean definitions:

  • The target: This is the real service that will do things
  • The proxy: This holds interceptors and such, and then finally delegates to the target

A usual Spring convention is to have fooTarget and foo. You know not to lookup *Target beans.

However, I want to stop people :) I don’t want it as an option.

Well, while talking about this with Rod Johnson, he told me that he had implemented this while sitting at an AOP talk at a BeJUG meeting :)

So now we can use inner bean classes:

<bean id=”person”
<property name=”proxyInterfaces”><value>com.mycompany.Person</value></property>

<!– Use inner bean, not local reference to target –>
<property name=”target”>
<bean class=”com.mycompany.PersonImpl”>
<property name=”name”><value>Tony</value></property>
<property name=”age”><value>51</value></property>

<property name=”interceptorNames”>

Compare that to the old way:

<bean id=”personTarget” class=”com.mycompany.PersonImpl”>
<property name=”name”><value>Tony</value></property>
<property name=”age”><value>51</value></property>

<bean id=”person”
<property name=”proxyInterfaces”><value>com.mycompany.Person</value></property>

<property name=”target”><ref local=”personTarget”/></property>
<property name=”interceptorNames”>

Obviously, I omitted the interceptor declarations

Thanks Rod, Juergen, and co!