Monday, April 30, 2007

Weekend hiking in Lake Serene

Lake Serene hike, the 7 miles round trip with 2000 feet elevation, probably takes a whole afternoon. The trail is strenuous, dangerous and out of maintenance for years. However, the stunning view from the summit of Mt. Index makes every drop of sweat count.

Direction: Take highway 2 from Monroe heading east, exit at milepost 35 for Mt. Index Rd. Map

Lookout from summit of Mt. Index Creek Lake Scenery

Album (74 photos)

Thursday, April 26, 2007

Reference from metrobellevue.com


One of the bellevue downtown photos is used by metrobellevue.com recently.

Wednesday, April 25, 2007

Maven Book, Maven: The Definitive Guide (1.0 Alpha 1)

It's also downloadable from http://www.sonatype.com/MavenTheDefinitiveGuide.zip

Why a Book?

You may ask "Why a Maven book? There are plenty of documents online, right?". The problem of diving into any new software project is the problem of where to begin. Yes, there is a growing wealth of information pertaining to the Maven project - but it is scattered and piecemeal. They make great reference materials (we even used some docs for this book) - but many developers, myself included, desire a narrative - a jolly stroll through the growing Maven metropolis - a place to see the grand sites without being overwhelmed - where does the yellow-brick road begin? Here.

Read more ...

Customize IdGenerator in JPA, gap between Hibernate and JPA annotations

JPA annotation is like a subset of Hibernate annotation, this means people will find something available in Hibernate missing in JPA. One of the important missing features in JPA is customized ID generator. JPA doesn't provide an approach for developer to plug in their own IdGenerator. For example, if you want the primary key of a table to be BigInteger coming from sequence, JPA will be out of solution.

Assume you don't mind the mixture of Hibernate and JPA Annotation and your JPA provider is Hibernate, which is mostly the case, a solution before JPA starts introducing new Annotation is, to replace JPA @SequenceGenerator with Hibernate @GenericGenerator. Now, let the code talk.
/**
* Ordinary JPA sequence.
* If the Long is changed into BigInteger,
* there will be runtime error complaining about the type of primary key
*/
@Id
@Column(name = "id", precision = 12)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "XyzIdGenerator")
@SequenceGenerator(name = "XyzIdGenerator", sequenceName = "xyz_id_sequence")
public Long getId() {
   return id;
}

In order to generate BigInteger primary key, a custom BigIntegerSequenceGenerator is created.
package com.mycompany.myapp.id;

import org.hibernate.id.SequenceGenerator;
...

public class BigIntegerSequenceGenerator
    extends SequenceGenerator
{
    @Override
    public Serializable generate(SessionImplementor session, Object obj)
    {
        ...
    }
}
Replace the JPA @SequenceGenerator with Hibernate @GenericGenerator, where the strategy can be the class name of IdGenerator.

@Id
@Column(name="id", precision = 32)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "XyzIdGenerator")
//@SequenceGenerator(name = "XyzIdGenerator", sequenceName = "xyz_id_sequence")
@GenericGenerator(name = "XyzIdGenerator",
        strategy = "com.mycompany.myapp.id.BigIntegerSequenceGenerator",
        parameters = {
            @Parameter(name = "sequence", value = "xyz_id_sequence")
        })
public BigInteger getId()
{
   return id;
}
Customized IdGenerator is one of the features in the gap between JPA and Hibernate persistence Annotations. Similar missing features in JPA include other things like @Generated annotation in Hibernate for non-primarykey generated fields.

Sunday, April 08, 2007

Mount Little Si, North Bend



Five miles to the summit, with 1200 feet elevation. The two hour hiking in Mount Little Si became perfect activity for Cloudy Saturday. Most part of the trail hides deeply inside the dark silent forest. This is not the trail where people can walk, chat, enjoy and relax. This is a hard, secret and spooky kind which make people sweat.