Thursday, April 29, 2010
Java People Spotlight: Erik Jan de Wit
So today we want to present a rather new member in the CTP Java gang: Erik Jan de Wit, dutch Java power at its best!
Erik has joined Cambridge Technology Partners in February 2009. His technical excellence and social skills are true assets for our projects as well as for our Java oriented internal activities. Not without reasons, "@EJD" became an alias among CTP Java dudes to shortcut the fact that Erik will get "injected" and involved on projects, tasks...:-)
So let's check out the answers by Erik then!
Java Competence Role:
Senior Developer [aka Singing Scrum Master]
My Master Kung-Fu Skills:
Intergate new technology into existing projects fast
I'd be excited to get my hands dirty on:
Scala, ESB, JavaFX, Cloud-Computing and the new EJD... sorry EJB Criteria... well it's anyway JPA Criteria API :-)
Q&A
Q: Hi Erik, how would your message look like if you would have to tell it via Twitter what you are currently doing?
A: Be a great Scrum master on this time challenged project
Q: What was the greatest piece of code you have ever written so far?
A: A screen scraper that enabled to integrate an external site into another site while changing all links back to our site including form actions.
Q: Really? I'm sure dutch scrum masters did something more fancy on projects than this....:-)
A: Well yeah, you're right: So on my kenai.com account I published an open-source framework which is basically a reverse regular expression generator that is used in the testdata project to generate test data that adheres to a specific regular expression. The testdata framework inspects your domain model and creates data for your domain. So if you use hibernate validator or bean validation annotations in your domain it will use the regular expression on the field to generate data that is valid. So that's what I used later on projects.
Q: Awesome!
A: And!! ... there is also a Scala version of it, based on the StandardTokenParsers
Q: Now we're talking :-)
Q: What is the best quote you have ever heard about programming?
A: All my peers are trying to talk dutch... very nice!
Q: What is the best quote you have heard from our managers?
A: I had to review Java code written in Turkish and my manager said: "It is still Java, it is not Rocket Science!"
Q: What is the most cutting-edge technology or framework you actually used on projects?
A: jBPM, Seam, JSF and Java EE6
Q: What is your favorite podcast?
A: I really love the Java Posse, I listen to it all the time... another that I like which is actually non-Java related is Best of Youtube VideoCast.
Q: Which Java book can you recommend and for what reason?
A: It seems that always the latest book I've read is the best one, in this case it's "Clean Code" from "Uncle Bob"
You can further visit Erik at his Google Profile or on linkedin.
Wednesday, April 28, 2010
JBoss Seam Maven Archetype Video Tutorial
seam-gen, or if you're like me a Maven user, with an Archetype.Chris has prepared a video tutorial on how to get started with our Maven WAR archetype (featuring hot deploy, TestNG with embedded JBoss and either RichFaces or ICEFaces inclusion) based on one of my previous articles. Check it out here (best seen in HD [UPDATE: sorry, missed the HD embed]):
Enjoy!
Friday, November 20, 2009
Java People Spotlight: Sylvain Berthouzoz
Sylvain has joined Cambridge Technology Partners in January 2006 and is an important know-how carrier in the Java Competence Group since then.
So let's check out the answers by Sylvain then!
Java Competence Role:
Developer [aka Java Debugger or Mr. jBPM]
My Master Kung-Fu Skills:
I can hit everyone with a single process in jBPM
I'd be excited to get my hands dirty on:
JPA2: see how they included the Criteria query...
...and to see what Ezio Audirore da Firenze will do.
Q&A
Q: Hi Sylvain, how would your message look like if you would have to tell it via Twitter what you are currently doing?
A: Sitting in the train in hoping that the locomotive don’t break this time.
Q: What was the greatest piece of code you have ever written so far?
A: Testing if all the elements in a list are different from each other:
List< Long > list = Arrays.asList(longs); Set< Long > set = new HashSet< Long >(list); return (longs.length == set.size());Q: What is the best quote you have ever heard about programming?
A: “koffienodig”
Q: What is the best quote you have heard from our managers?
A: "There is not enough boxes here."
Q: What is the most cutting-edge technology or framework you actually used on projects?
A: JBoss Seam
Q: What is your favorite podcast?
A: The gameblog podcast every week. And the Java Posse from time to time.
Q: Which Java book can you recommend and for what reason?
A: Seam in Action, because it is a great book to start with seam and you’ll also learn how to play golf.
Devoxx day 4/5
After that, another great keynote from Robert Martin a.k.a Uncle Bob he is the founder of fitnesse and very focused on TDD (Test driven development). His talk was about "Filling The Professionalism Gap" by being Craftsmen. What it comes down to, is to make more IT projects succeed, developers must see themselves more as craftsmen. That means that developers should have a more "ethic" approach in delivering things and only create software that is clean tested and that really works. This is what we already do at CTP but I think a lot of developers can learn from this.
There were also some big announcements made at this Devoxx:
- Closures are in JDK7
- More new components in JavaFx 1.3
Also I had some fun of this day at devoxx, I went to the presentation of the JavaPosse. And when you hear the recording you can probably hear me shout: "Switzerland" :-). Of course they had their beer sponsor Atlassian so we had some nice Belgium beer (Duvel). A cool side effect of conferences is the fact that they are normally hosted inside a movie theatre: So at Devoxx they showed the new movie '2012', a very nice movie with lots of effects.
And then it is already the last day and I didn't notice this before, but it's only half a day. So I had some good sessions today one from Andy Wilkinson about Modular Web Applications with OSGi. He uses Spring DM (that's an application server, but not a Java EE certified one) to be able to split his web application vertically and/or horizontally in different OSGi bundles. That could be really good to manage big applications. Also he had some news, they are working on a version that does not require Spring DM, so that is definitely something we must keep an eye on.
That is it from Antwerp, Devoxx 2009!
So let's see what will happen with all the announcements made here in the next year...
Wednesday, November 18, 2009
Devoxx Day 3
Next keynote was presented by Roberto Chinnici from SUN, he is the spec lead for JavaEE6 and gave a quick overview what is new in EE6. As I already had a 2 hours talk about that topic during the university days there was nothing new to me but all in all it well covered all aspects for people hearing about it for the first time. One of the cool things in Java EE 6 I like most is the modularity of the web.xml being part of the Servlet 3.0 spec. Using 3rd party frameworks only requires to add a library, instead of also adding a servlet or servlet filter in your web.xml.
Also announced in the keynote is that everything presented at Devoxx is going to be released on parleys.com (currently upgraded to version 3!! ). That is great as all the presentations I've visited can be watched again including comments by other visitors etc.
During the break I ran into a lot of people I know from previous companies I worked for. It is always nice to hear what they are doing now and what other sessions they have seen and to tell them if they ever want to work for a nice company in Switzerland, I would know a good one :D
Now an update on where JDK7 is right now by Mark Reinhold. Great talk about what is important and where the focus for making Java move forward is going to lay. Talking about Project Jigsaw this is the first time ever I have seen some implementation how this could/would work. The shame is that there is no JSR for Java SE 7 so all development will not progress as long as this is the case. What was very surprising is that Mark wants Closures in, but in a very simple form, but that is great news for a lot of things Closures will make my code look nice.
In the keynote Apple gets a lot of criticism about being slow accepting apps in the store and the kind of feedback Apple provides when apps are disallowed.
Lunch break: Bumping into a lot of people again that I know; Talking to someone from JBoss about their community, now I have a nice CD to give away.
James Gosling is talking about the Java Store and I hope he is going to tell us that we here in Europe can use it now. So he is talking that we should provide him with feedback on the stuff they made, but as of now the Java Store is still not accessible for us. That makes his whole talk a bit pointless. Yes, I would love to have a platform I can sell my hobby projects with, but no need to tell me about how great it is when I still can't use it. There are a couple of countries being added in the near future, but Switzerland is not one of them.
Cameron Purdy tells us how we should change our programming paradigms if we want to use multi core, multi node programs. So the answer to all our problems is to use partitioning? I'm a bit puzzled how I could use this. I think this presentation could have been a bit more concrete. He presents all theoretical ways to do parallel distributed computing. At the very end I know why everything was so vague, if you want an implementation of all of what he talked about than you'll need to buy Coherence a bit of an anticlimax.
Doug Tidwell will now tell us a little about how to extract a way from implementations of cloud computing. He is from IBM an I hope this is not another product plug and it turns out that it's not, he is funny and a good speaker. What he is trying to tell us is that we need a standard for doing cloud computing, an API to talk to different clouds. The problem is that the services that clouds provide now are so diverse that one API to rule them all makes no sense. That is a bit what I miss, nobody is talking about how using a cloud will impact my design.
Then one of the creators of the Android platform Romain Guy will talk about animation. Romain Guy is really famous in the Java world so his presentation will be good. It's about animating GUI using the cartoon rules. There are some basic cartoon rules for doing animation he shows us how they apply to GUI animation.
Tuesday, November 17, 2009
Devoxx day 2
My first session of today is a session about JEE6. They are talking about and demo-ing everything that is new in the spec. Antonio Goncalves a French Java Rockstar has a lot of humor and a nice presenting style. JSF 2.0 is kind of confusing, because it could run on servlet 2.5 but also on 3.0 but then less needs to be configured. Yesterday the expert group also talked about this that they communicate better what is now the "preferred" way of doing things. This is difficult when you make a spec. You can't remove things, because it needs to be backwards compatible. This is also the case for EJB3 - there is now a EJB3.1 lite edition where all old stuff is removed. According to them there are some containers being built that only support this spec.
JavaFX is what my next talk is about. This is hyped a lot by Sun and now with the takeover by Oracle also Oracle will continue with JavaFX. The last changes around JavaFX involved a lot of tooling at this year's JavaOne. Tor Norbye presented a tool for designers that they can layout an application for mobile and desktop. Stephen Chin also a Java Champion starts with a nice little JavaFX Puzzle. For his demo he is using twitter but that was a bit of a poor choice, because with the Devoxx network, reaching twitter proves a bit of a challenge. So most of the time we are waiting for some internet resource to load. So I'm changing again, I already know the basics about JavaFX and I was hoping this would be a little bit more deep dive. Emmanuel Bernard is also a guru of the Hibernate team and here at Devoxx he is talking about integrating Lucene into Hibernate as an alternative query API. So the bridge they have built for Hibernate is really cool. In the past we did this on ourselves, have a Lucene index to search on and then load entities when needed. But with the Hibernate search query API we can do it "automatically".
During the lunch I talked to Ceki Gülcü who is also from Switzerland and giving a talk about logback, the continuation of the dead log4j project, tomorrow. He would make a nice speaker on the JUGS.
Now it's time for tools in action again, first up is Gradle. Hans Dockter is the project lead and he gives an introduction about Gradle. Gradle is a build tool that uses CoC and has a DSL to configure your build. Yet another build tool, but this time is using groovy DSL to make a build file. I also blogged that Maven3 is also going to provide this. I don't know what Hans is trying to explain to me or how this is better than Maven3, but he is a bit chaotic. After a while there is a new speaker that is even worse. I think there are some good options in Gradle, but these are not the guys to explain it to me. One thing I did get from the presentation that you could fork your test over more threads, which is cool.
Next up is Scala Actors that will be a good one. You all know of course that Scala is a language on top of the JVM and developed in Switzerland. Because computers are getting more and more processors, functional languages like Scala could be very useful for this, because they are stateless and you don't need to think about how to distribute the work. After a little history lesson, Frank Sommers gave us a concrete example of how Actors can be used in Scala. It's great, a lot of stuff you get for free. Of course the concept of Actors is not bound to Scala, but there are things that Scala offers that make Scala a good language to use with Actors. For instance types in Scala are immutable by default. Great talk and when I'm going to type synchronized in code again I must remember this talk.
That is it for day number 2, it was a fun packed day and I look forward to tomorrow. One more thing I noticed today if you want to present on Devoxx you'll need a Mac and IntelliJ IDEA.
Monday, November 16, 2009
Devoxx day 1
When I think of Belgium I think of beer, bars, chocolate, hospitality and cosiness. But when I arrived and saw my hotel all these feelings went away. The location of my hotel and the conference is in an industrial part of Antwerp. There is nothing here but harbours and sea containers. So there is absolutely nothing distracting me from attending the sessions :D
So my first session of the day was about jBpm 4 and that was very impressive, I've used jBpm in the past together with Seam. I wish that I could use it with my last project. They changed a lot the API making deployment and testing easier. The console is now rewritten in GWT, and there is a web app that business people can use to create and modify processes. Also creating screens for tasks now works!
This one was not interesting at all, if I want to know how the webservices of amazon work I'll look it up myself. So I switched to a talk from a SUN guy who is clicking stuff together in Netbeans. What he is talking about is interesting. But his demos don't go further than the wizard screens of Netbeans and he is looking all the time to his webpage.
So after the break it was "Tools in Action" time, these sessions are shorter and focused on tools, hence the name. The first one I saw was about Introducing Scimpi a framework rather than an actual tool, build on Naked Objects, but the concept is a bit old and Scimpi is sort of redefining it. I've used metawidget for similar things but I think this gives me more control over the output than Scimpi and also has more powerful components that I can use.
All in all it was a very interesting day and let's see what tomorrow brings.
Friday, October 30, 2009
Portal Update November 2009 and Java Buzz
From the commercial side, major players are:
- Oracle WebLogic Portal:
The current release is still WLP 10g3 but soon we expect the first 11g release with codename "Sunshine".
Major improvements are
- JSR-286 compliance (Portlet 2.0)
- WSRP 2.0 support (Event based coordination, IPC for remote portlets, resource serving)
- Full interoperability with WebCenter in both directions
- Improved Ajax support
- VCR Direct SPI Support for UCM
- Even more REST APIs to access portal informations
- New REST API to access Unified User Profile data
- First support of the new Content Management Standard driven by Oasis: CMIS
- Apache Beehive still supported but not enhanced
- Replacement of Autonomy Search Engine by SES
The REST API Architecture in WLP 11g:
- Oracle WebCenter Suite 11g R1:
WebCenter Suite includes the formerly known product AquaLogic Interaction by BEA, now called WCI, WebCenter Interaction. Download it here.
- Adobe: Adobe? Yes... Since the new release of Adobe ColdFusion 9, there is a new portal player to be considered when it comes to interoperability based on JSR-168/286 portlets. ColdFusion 9 is now fully compliant with the Portlet Containers from the Java world.
- IBM WebSphere Portal 6.1: no updates.
- JBoss Portal and eXo Portal have been merged!

This latest interesting announcement has been made official on Sep 3rd at the JBoss World in Chicago. eXo has fully committed its entire open source portal stack to Red Hat’s newly introduced GateIn portal project extending it with cutting-edge collaboration features as well as document and content management features.
- Liferay Portal 5.2: no major updates since last post.
- SUN continues to offer the Web Space Server based on the Liferay Portal source code. No major updates besides a brand new white paper.
- JBoss Portal 2.7.2:
- Since June 2009, JBoss fully focused on the new project GateIn - eXo Portal 2.5.1: no updates besides GateIn announcements
- Jetspeed 2.2.0: After quite a long time without updates a new version has been released (summer 2009) that is fully JSR-286 compliant! The new version comes along with quite a bunch of updated documentation pages... So it would be worth to have a look at it again. Download it here.
- Java EE 6: The JSR-316 has reached Proposed Final Draft. The hot discussions between JSR-299 vs JSR-330 have finally found a common resolution and both will be part of EE6 where JSR-299 will be based on the dependency injection specification defined by JSR-330.
- Oracle has still not acquired SUN : The OK from EMEA is still pending.
- JSF 2.0 : Mojarra 2.0, the production-quality, reference implementation for JSF 2.0 is out! This will of course be part of GlassFish v3 (final release planned for Dec-12th 2009) but you can grab the bits right now for your first dirty hands-on experience!
- IntelliJ IDEA is now available in two editions. The Community Edition (JavaSE-focused) is now Available under OpenSource at JetBrains.org
- Geek Food: I discovered mainly two new things that I found diserve a Geek award:
- Prezi ! Forget PPT and Google Presentations... Old school!
- Play ! Clean alternative to develop JavaEE apps based on RESTful architectures. - Google Wave: I finally got an account (thanks a lot J. !!) but up to now I'm rather disappointed... nonetheless, the full features are not released yet, so I'm ready to get blown away. If you are interested, I still have some invitations left :-) Start your wave!
- JavaOne 2010 : ... no, still no signs whether there will be a next JavaOne :-(
Unit Testing EJBs and JPA with Embeddable GlassFish
Only one thing we failed to run in a stable way: The new EJB 3.1 container API refused to run our unit tests. The main problem was JPA support - persistence units got not recognized and EJBs usually failed with a
NullPointerException calling the EntityManager.Alexis and Adam recently blogged about this specific feature, and of course I had to get back and try it out myself! Indeed, starting up a container and looking up EJBs works fine. But to test your Entities there are still a few tweaks you might want to apply.
Start with creating a Maven project and add the embeddable GlassFish dependency. I'm also using TestNG instead of JUnit, as it has a nice
@BeforeSuite annotation which allows starting the container only once before running your tests.
<dependency>
<groupId>org.glassfish.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.0-b69</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.9</version>
<scope>test</scope>
<classifier>jdk15</classifier>
</dependency>
As described in Alexis' blog, you can start your
EJBContainer with a reference to your GlassFish domain. This will allow you to start up data sources you most probably need to properly test your JPA code.The disadvantage here is that you either depend on a hardcoded location or a system property which each of your team members have to set. Or, in case of your continuous integration system, you might not want to have a GlassFish installation at all.
Fortunately you can create a mini GlassFish domain with only a few files. The image below shows the files you need and how I placed them in my Maven module:

You can take your existing
domain.xml containing your data sources and place it in here - you can reference it now relatively to your module location. Your unit tests then start with:
private static Context ctx;
private static EJBContainer container;
@BeforeSuite
public static void createContainer() {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(EJBContainer.MODULES, new File("target/classes");
properties.put("org.glassfish.ejb.embedded.glassfish.installation.root",
"./src/test/glassfish");
container = EJBContainer.createEJBContainer(properties);
ctx = container.getContext();
}
This will run your unit tests against your development database. In case you want to run them in a local database, you can simple replace the connection pool config in your
domain.xml, e.g. with a local Derby installation:
<jdbc-connection-pool datasource-classname="org.apache.derby.jdbc.EmbeddedDataSource"
res-type="javax.sql.DataSource" name="[your DS name]" ping="true">
<property name="ConnectionAttributes" value="create=true" />
<property name="DatabaseName" value="./target/unit-test" />
<property name="Password" value="" />
<property name="User" value="" />
</jdbc-connection-pool>
This creates the database in your
target folder and requires adding Derby to your Maven POM:
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.5.3.0_1</version>
<scope>test</scope>
</dependency>
Unfortunately this setup might not match with the configuration in your
persistence.xml and generate invalid SQL for your test database. You can either solve this with Maven filters in different profiles, or alternatively create a staging directory for your EJBContainer. I'm using the Apache Commons IO tools here for convenience:
...
private static final String MODULE_NAME = "embedded";
private static final String TARGET_DIR = "target/" + MODULE_NAME;
@BeforeSuite
public static void createContainer() throws Exception {
File target = prepareModuleDirectory();
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(EJBContainer.MODULES, target);
properties.put("org.glassfish.ejb.embedded.glassfish.installation.root",
"./src/test/glassfish");
...
}
private static File prepareModuleDirectory() throws IOException {
File result = new File(TARGET_DIR);
FileUtils.copyDirectory(new File("target/classes"), result);
FileUtils.copyFile(new File("target/test-classes/META-INF/persistence.xml"),
new File(TARGET_DIR + "/META-INF/persistence.xml"));
return result;
}
You can use the
@AfterSuite annotation to clean up the temporary folder. Note that with this setup, the EJB lookups change:
protected <T> T lookupBy(Class<T> type) throws NamingException {
return (T) ctx.lookup("java:global/" + MODULE_NAME + "/"
+ type.getSimpleName());
}
Wednesday, October 21, 2009
Oracle WebLogic Server Versions
So the following list should clarify the mapping between these two versioning schemes:
- WLS 10g3 (10.3.0) : recent version but used by latest WebLogic Portal 10g3
- WLS 11g R1 (10.3.1) : current version
- WLS 11g R1 PS1 (10.3.2) : upcoming patchset version planned for Nov/Dec 2009
- WLS 11g R1 PS2 (10.3.3) : another patchset anticipated March / April 2010
- WLS 11g R2 : Planned for 2010. I haven't found any relation to a 10.x version at this moment.
Oracle OpenWorld 2009 Updates: WebLogic Server 11g R2 in 2010 will get Oracle RAC and Coherence integrated to make them native in the application server. WebLogic Server will get RAC event awareness, providing fast connection and fail over, while Coherence will be managed as part of WebLogic - currently it's an external application. - WLS 12g : Planned for 2011. I assume this will be the Java EE 6 compliant release along with the release of all other Fusion Middleware 12g products.
Friday, October 16, 2009
LambdaJ new trends in Java
int totalAge = sum(meAndMyFriends, on(Person.class).getAge());
Person totalsPerson = sumFrom(meAndMyFriends);
int totalAge = totalsPerson.getAge();
int totalLength = totalsPerson.getLength();
List<Person> oldFriends = filter(having(on(Person.class).getAge(), greaterThan(30)), meAndMyFriends);
But as Mario Fusco also pointed out at the end of his presentation.... If you can, you should really give Scala a spin. Then you will not need lambdaj, you will have something more powerful.
Tuesday, September 22, 2009
Maven 3 early access
So now I can build and run Maven 3. In the presentation from Jason he told us that they didn't want to change too much because they didn't want to break backwards compatibility. They did a lot of tests to fulfil that promise by checking out Maven 2 open source projects and testing them with maven 3. They even have a Hudson grid running multiple builds to ensure backwards compatibility. So I thought that my project will work without any problem. I never do anything exotic in my builds, but how wrong could I have been, because it does not build with Maven 3. It gives the following error that was very clear:
[ERROR] Some problems were encountered while processing the POMs: [ERROR] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: xml-resolver:xml-resolver:jar -> null vs null @ ch.admin.smclient:smclient:1.0.1-SNAPSHOT, /home/edewit/workspace/smclient/smclient/pom.xml
So what I never noticed before is that I had the xml-resolver twice in my dependency list. Once with a version number and one without. Maven 2 never warned me about this. This shows that the dependency management resolving has improved a lot. Also the way the errors are presented is improved I think.
Also Jason mentioned that the speed of Maven 3 has improved, so I tested this as well and it turns out that on my project the speed increase was about 11%. That is not great but it's not bad as well.
Jason said that everything they are working on (Maven 3, m2eclipse and Nexus) is going to be finalized at the end of this year. So I'll be looking forward to that even though I think this version of maven is already a step forward. After more projects successfully built with Maven 3 I'm sure that they intend to add more new features.
Friday, September 18, 2009
Thoughts on Jason van Zyl talking about Maven 3
Wednesday, July 1, 2009
JBoss Seam Archetype - now with ICEfaces
You can give it a spin by starting a shell and running Maven with the Archetype plugin:
>mvn archetype:generate -DarchetypeCatalog=http://tinyurl.com/jbsarch -DajaxLibrary=icefaces
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
...
Choose archetype:
1: http://tinyurl.com/jbsarch -> jboss-seam-archetype (Archetype for JBoss Seam Projects)
Choose a number: (1): 1
Define value for serverDir: : [your JBoss 5 server location]
Define value for groupId: : [your groupId]
Define value for artifactId: : [your artifactId]
Define value for version: 1.0-SNAPSHOT: : [your version]
Define value for package: : [your package]
Confirm properties configuration:
serverType: jboss5
ajaxLibrary: icefaces
...
Y: : y
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
...Make sure you don't misspell "icefaces", this will otherwise screw up the application. No input validation in Maven Archetype yet, but I started looking into it ;-)
Again, change to the project directory and build the project:
>mvn packageNow this also executes a sample unit test (fingers crossed it works this time ;-) - thanks to Oscar for the feedback!
Have fun with it! Anybody mind contributing a decent layout template?
Friday, June 19, 2009
Creating a JBoss Seam Maven Archetype
Maven provides so called archetypes for a quick project setup. As there is not (yet?) an official archetype for Seam projects, I've been working on my own - and here's how you can use it as well!
All you need is
- a recent version of Maven downloaded (I used 2.0.10)
- and the Maven executable referenced in your path so you can use it on the console.
cd to your projects directory and type:
mvn archetype:generate -DarchetypeCatalog=http://tinyurl.com/jbsarch
This will start Maven and show the following command line output:
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[INFO] [archetype:generate]
[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: http://tinyurl.com/jbsarch -> jboss-seam-archetype (Archetype for JBoss Seam Projects)
Choose a number: (1):The remote archetype catalog contains so far only one archetype (BTW: the jbsarch in tinyurl.com/jbsarch stands for JBoss Seam ARCHetype - hope you can remember this better than the full URL :-) Select the archetype by typing
1 and enter your Maven project properties as well as your JBoss Server directory:[INFO] snapshot com.ctp.archetype:jboss-seam-archetype:1.0.0-SNAPSHOT: checking for updates from jboss-seam-archetype-repo
Define value for serverDir: : /Developer/Servers/JBoss/jboss-5.1.0.GA
Define value for groupId: : com.ctp
Define value for artifactId: : fluxcapacitor
Define value for version: 1.0-SNAPSHOT: :
Define value for package: com.ctp: : com.ctp.fluxcapacitor
Confirm properties configuration:
serverType: jboss5
serverDir: /Developer/Servers/JBoss/jboss-5.1.0.GA
groupId: com.ctp
artifactId: fluxcapacitor
version: 1.0-SNAPSHOT
package: com.ctp.fluxcapacitor
Y: : y
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4 minutes 57 seconds
[INFO] Finished at: Fri Jun 19 19:12:19 CEST 2009
[INFO] Final Memory: 12M/79M
[INFO] ------------------------------------------------------------------------Note that the serverType property defaults to
jboss5. If you have a JBoss 4.2.x installation, quit with n and retype everything (hmm...) and use jboss4 instead.In case anything fails here, make sure your archetype plugin is at least version 2.0-alpha-4 (I had to delete the local repo info file in the local repository once). Now with your project created, lets build and deploy it!
Aragorn:sandbox thug$ cd fluxcapacitor/
Aragorn:fluxcapacitor thug$ mvn package
[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO] [fluxcapacitor]
[INFO] [fluxcapacitor :: JBoss Configuration]
[INFO] [fluxcapacitor :: Web Application]The project currently features two modules: One with the actual web application, and the other one containing JBoss Server configuration files. With the basic archetype you only get a datasource there, but you can also use it to change server ports, define security realms, queues etc.
Environment specific properties are referenced in filter property files. You can find the development filter file in
${artifactId}/environment/filters/${artifactId}-development.properties. The filter file selection happens in the parent POM. It defines a development profile which sets the environment property. Setting this property to test will look for a ${artifactId}/environment/filters/${artifactId}-test.properties filter file.Note that the parent POM contains your JBoss installation directory hard coded. You might want to factor this out into a developer specific profile when working in a team. Fire up your JBoss instance. Everything should start up well (fingers crossed...) and you can point your browser to the base URL of your application.

Done! Import the project in your favorite IDE and start prototyping!
Unfortunately this is still far away of what seam-gen provides up to now. Maven archetypes have improved over time but are currently still not as flexible to be useful in complex setups:
- Entering project properties is not even close to be user friendly. At least a description, input validation (enumerations) and reasonable handling of default values might help.
- Conditional installation of files. If you know how this works - let me know :-) This would be required to distinguish between WAR and EAR projects, and for targeting different applications servers (yeah, like GlassFish!).
Saturday, June 6, 2009
JavaOne 2009 Summary: Friday (Day 4)
Related Posts so far:
- Day 0: CommunityOne, GlassFish
- Day 1: JavaOne, Key Note
- Day 2: JavaOne, Mobility
- Day 3: JavaOne, Microsoft and IBM
Welcome back, the final day has come and it's called "Toy Show Time" !
The whole show is not about standards or technical details, it is about Java, the Java ecosystem and how Java is used in its various situations driven by innovative people around the world:
- The BlueJ team received a well-deserved special recognition for building tools that help millions of high school and college students get started with Java.
- A fellow from RuneScape dev demoed their tools, and I learned how one animates a water troll, something that will surely come in handy one day.
- JavaFX Demo with inversed Nintendo Wii Remote Control. See BOF descriptions in my last post. Instead of virtually painting on the wall, they used a piece of glass and it therefore looked like a scene of Minority Report :-)
- Tor Norbye (a JavaPosse member) showed a very impressive JavaFX authoring tool whose release is planned in December. When JavaFX was presented the first time at JavaOne 2007 it looked good already but nothing really happened after that announcement. In 2008 it was pushed again but it did not kick off (again). Since the release of Java SE 6 Update 10 and this year's JavaOne, it is now really looking much much better! The demos of the upcoming JavaFX version by end of this year looked even better!! Together with Larry's indication to heavily push JavaFX forward, it might soon be a valid competitor of Flex and Silverlight.
- There was a demo by the high school kids who won the FIRST robotics contest. Sun and the FIRST folks just ported the programming environment from C/C++ to Java.
- The Grameen Foundation showed off an open source system for helping with microfinance in third world countries.
- A fellow showed SIM cards running Java and a web server. The latest ones can interact with sensors and WiFi radios.
- At the age of 14, James Gosling was working on some satellite ground station application running on a PDP-8... as of James, it had less compute power than a modern smart card :-) His mother took this photo by then:
He was very excited to have on stage a guy showing a top-notch cutting-edge version of a satellite ground station management application used today and running fully on Java using over 1000 OSGi modules. - Two Hungarian university students showed off the project that won them first price in the Ricoh Printer Contest. Those printer/copiers are Java-powered and the students used them to grade multiple choice exams.
- Atlassian wins Duke's Choice Award for Clover!
- Another interesting guest was Visuvi: Not only can you upload (cell phone cam or hi-res) images to their search engine and have them analyzed (e.g. to answer the question "who painted that?"), but most importantly, the new image analysis technology is used for cancer research (e.g. you can search through a biopsy image database for visually similar cases). The database currently stores about 50 million images whereas a high-resolution image hold 3000 Mega Pixels and is about 60 GB !!!
- A musician showed off a Java-powered juke box that allows independent artists to upload their creations to a web site and have it played in bars. As James put it: “Here's Manuel. He is a musician. He has a problem.”And with the help of a touch screen, a cash reader, and Java FX, he put together a solution. James had to insert a 1$ bill in order to run the demo :-) He said: "1$ for a starving musician"...
- "Project Bixby" controls an Audi TT on a dirt rallye course going really fast (160 km/h) without a driver! This was very impressive...
- And finally, the“LincVolt” project controls a 1959 Lincoln Continental with an electric motor, this time with a human driver: Neil Young! There is a Swing-based control panel in the car and while driving around, people can follow the data on the website. Fancy stuff... If I'm right, the car can produce 500 horse power !?
I'm still suffering from this week's firehose of information! It is again 2:35am... there will be only the titles of visited technical sessions without any comments. Sorry!
- JCA 1.6 (by the two spec leads): most important take away: in addition to security context outflow there is now also security context inflow -> JCA 1.6 provides E2E security context propagation!
- Google Guice (by Jesse Wilson)
- Async with SCA (Apache Toscany)
- JMS: Performance vs Reliability
=== Bye Bye San Francisco ===
After the last session (5.10pm) we had early dinner at the Chieftain Irish Pub. After that I headed back to hotel for writing the two posts (yesterday and today).
On the way to the pub we spotted these here...
Finally in the Pub: Anchor Steams... aaaah
At 9.30pm, we had a quick walk around block to take some photoshoots of SF by night:
Bye bye JavaOne, Hello WWDC!
This year's JavaOne was one of the best so far, not only due to the strong focus on Java EE 6 but also because of having talked to so many people, spec leads, experts and other visitors...
As said, time passed by so quickly, it's quite a shock realizing that all this is already over again...
Looking forward to bring back lots of infos, impressions and ... gadgets back to Switzerland!
CU soon
- Balz
Friday, June 5, 2009
JavaOne 2009 Summary: Thursday (Day 3)
Related Posts so far:
JavaOne Day 3 Summary
=== General Sessions ===
- Microsoft in a general session!
Corporate VP Dan'l Lewin started with the 5 year partnership with Sun and mentioned Microsoft's dedication to the interoperability topic between Java and .NET. As of a survey they did last year, 73% out of 5 million interviewed developers work in a mixed environment.
At JavaOne 2006 Sun announced new workforces together with Microsoft to work on the interoperatbility topic. The demoed Apache Stonehenge is certainly an outcome of it, a prove also that Sun joined the project which serves as set of sample applications to demonstrate seamless interoperability across multiple underlying platform technologies (like Java and .NET). Key message here was that given the matured WS-* standards, interoperability was "possible" but the last mile on "how to correctly configure the products/framworks on each side" was still very hard to do. Now with Stonehenge the last mile gap is closed. The demo was presented by Greg Leake, a Senior Director at Microsoft, and Harold Carr, Sun's Lead Architect for the Metro Web Service Stack.
Further resources: www.interoperabilitybridges.com - IBM: Extreme Transaction Processing and Elasticity
Craig Hayman, IBM's vice president of WebSphere software, focused on the importance on open source and open standards development with Java. To demonstrate some of the work that IBM has been doing with open source to innovate in the middle tier, Hayman called to the stage Ted Ellison, vice president of the Apache Software Foundation and an IBM senior technical staff member, to give a demonstration of the Apache Harmony project. More details on the session see here.
One particular slide in the presentation I found cool in particular: it showed again the evolution of architectures and their focus points:
Mainframe based Architectures ->
-> Client/Server Architectures ->
-> Focus on Mobility Architectures ->
-> Cloud Architectures... what comes next? Unfortunately, I was not quick enough to take a photo of the slide... This one is good too:
- Enterprise Integration Patterns in Practice
by Andreas Egloff (Lead Architect GlassFish Fuji) and Bruce Snyder (Apache Camel)
Besides the introduction of some integration patterns (like "Content Based Routing", "Pipeline Routing", "Spitter" and "Aggregator"), both presenters summarized two open source products that address this topic:
- Fuji: The core of OpenESB v3, originating from Java CAPS, currently still beta (M6)
- Apache Camel
While both products surprised in their richness of functionality that certainly simplifies many application implementations, Fuji convinced us more and not only because it really cool web based UI (based on JavaScript!):
In the Pavilion I talked to Andreas Egloff asking about clusterability: this will come next year with GlassFish AS v3.1 which by then will support clusters and Fuji will be built on top of that. Transaction Support: Fuji's focus is Ease of Development combined with strong focus on Enterprise implementations, so distributed transactions are fully supported as of the first release by end of this year. - Dealing with Asynchronicity in Java Web Services
by Gerard Davison and Manoj Kumar (both Oracle)
- nothing new, it was pure JAX-WS based async stuff - Bean Validation: Declare Once, Use Anywhere
by Emmanuel Bernard
Actually a very good presentation, Validation Cascadation, Groups (Subset of constraints), Partial Validation, Custom constraints, Metadata API!... Bean Validation is available across layers (JSF, EJBs, JPA): JSF2 requires zero config, JPA2: validate on entity change. In general, Bean Validators can be injected as Resources in Java EE 6. - eBay: Best Practices for Large-Scale Web Sites
by Randy Shoup (Lead Architect of eBay)
I expected a special large scale Java EE architecture but it was the contradiction of it:
- no JDBC client transactions, no distributed transactions (2PC, XA)
- no DB constraints in the DB schema
- no HTTP session states (the state is kept in a combination of cookie/URL-params/DB)
- no EJBs
- everything is asynchronously processed
I was surprised about the architecture very much, somehow I could not believe it but due to the success of eBay, it is obviously like that...
Some backgrounds:
No DB Constraints: The user profiles are kept in a DB RAC, the auction items are kept in another DB RAC. The 1:many relation between user and item was not based on constraints but was solved by treating it in a bottom-up approach...
The best practices in a nut shell were:
- Partition Everything (e.g. User Profile DB RAC, Item DB RAC, split data by load and usage pattern
- Async Everywhere: Synchronous designs must address peak load whereas asnyc designs can flatten out peak loads and compensate at time of low loads
- Automate Everything: Based on feedback loops the systems adapt their configuration automatically (sizing). This is achieved by defining SLA between consumer and producer components. If the consumer tends to violate an SLA, it starts to scale itself horizontally.
- Everything can fail: all systems must be tolerant of failure
- Embrace Inconsistency: He introduced the CAP theorem: Consistency, Availability, Partitioning. As of the theorem you can have only two of them. eBay selected availability (7x24) and partitioning according to its priorities. Consistency is seen as a spectrum and is therefore not comparable to "normal Java EE" designs.
Some numbers:
- 1.6 millions of transactions per second worldwide
- 88.3 millions of user profiles
- 160 millions of items
- 2 Tera Bytes of logfiles per day
- 2 billion page views per day (ebay.com) - Drizzle: A New Database for the Cloud
- Various:
- SpringSource Tool Suite (STS) is now for free!
- Enterprise Web 2.0 Architectures
by Brazilian Consultancy Company Globalcode
Goal of the session was to show how they compared different web application stacks and which stack suits best for which customer environment. Stacks considered were:
1.) Pure Web: JSF 1.2, Facelets 1.1.x
2.) Web + JMS + EJB: Compared to Pure Web: Business Logic in EJBs, not in JSF managed beans anymore
3.) Spring: Pure Web + Spring components, Spring AOP and Spring Security
4.) Seam: Pure Web + JSF/Ajax + Seam components and JBoss Rules
5.) Seam + Spring: As of some customer they have in Brazil, a migration from large-scale Spring based applications was required to a Seam based model. In this very special case, they found out that both worlds can live together at the same time in the same application. They also found out that injecting a Seam component into the Spring container was possible and vice versa.
It is definitly worth going through these slides and see the last table (criterias vs stacks): red cells indicate high risk, orange a potential risk.
A big surprise was the public availability of a web based CRUD generator where you can enter the data model, select the stack and export a sample application as ZIP file containing the IDE project... Really nice!
Check it out here: supercrud.com
- JavaFX and the Nintendo Wiimote
Take a Wii Remote Controller, mount it near the image source (TV, Beamer) and mount the infrared sensors (that are normally mounted near the image source) on your moving objects, in this BOF a normal glove. Write some JavaFX and off you go with a virtual paint panel wherever the beamer is projecting to :-)
painting on the wall by using fancy JavaFX gadgets...
Back in 1999, I was in San Francisco in the very same hall at the ISSCC (International Solid State Circuit Conference) presenting the diploma thesis from ETH Zurich. In the very same hall, the official JavaOne After Dark Bash party took place... impressive!! Very loud live rock band performing on a huge stage accompanied by a food buffet and various drink bars.
While Dani was still at some JavaFX labs exercise, I spent some 45 minutes there and enjoyed the short break :-) After that, I went back to the last BOF (while Dani enjoyed the last hour of the bashing party :-)...
=== Bookstore ===
As usual, the book store always attracts each day again... this time:
- JSF 2 and JBoss Seam / WebBeans
Cu tomorrow, last day!

