Enterprise grade Java.
You'll read about Conferences, Java User Groups, Java, Integration, Reactive, Microservices and other technologies.

Wednesday, January 28, 2009

Essential Java resources in 2009

09:05 Wednesday, January 28, 2009 Posted by Test No comments:
, , , , , , ,
A comprehensive listing of must-have books, sites, blogs, events, and more was compiled by Ted Neward. He is a consultant with ThoughtWorks, a worldwide consultancy, and the principal of Neward & Associates, where he consults, mentors, teaches, and presents on the Java, .NET, XML Services, and other platforms.

I personaly like the section about "Future trends to watch".

  • Dynamic languages

  • Functional languages

  • Closures in Java

  • The DaVinci Machine

  • User interface developments

As with anything "futures"-related, keep in mind that what's being discussed today may turn out to be a wrong direction, a flash-in-the-pan, a momentary distraction, an influence on the industry, or the Next Big Thing; keep an open mind and a healthy sense of skepticism in equal doses.

Tuesday, January 27, 2009

Eclipse Process Framework - Search with published war file

09:54 Tuesday, January 27, 2009 Posted by Test No comments:
, , , , ,
The new EPF Composer 1.5 is out since some time. The publishing process now got an option to publish sites for processes as .war files.
This is quite a big step forward. Before this, you had to publish html pages and copy them to your target webserver.
EPF build in is a lucene search. If you stick to tomcat you never will run into any problems with this construct. If you try to use the Oracle Weblogic to deploy your process.war file, you get into trouble.

The root of all evil is the spec. The org.eclipse.epf.web.servlet.SearchServlet uses
ServletConfig.getServletContext().getRealPath(index) to determine the lucene index location. If you look at the Servlet Specification you read this:

The real path returned will be in a form appropriate to the computer and
operating system on which the servlet container is running, including the
proper path separators. This method returns null if the servlet container
cannot translate the virtual path to a real path for any reason (such as
when the content is being made available from a .war archive).

Tomcat for example returns the path of the actual exploded deployment. Weblogic simply returns null here.

LD> _indexPath: null
LD> _currentSearchString: test
LD> unicodes: test
LD> analyzerName: null
LD> _hits: null
at org.eclipse.epf.web.servlet.SearchServlet.runQuery(SearchServlet.java
at org.eclipse.epf.web.servlet.SearchServlet.runSearch(SearchServlet.jav
at org.eclipse.epf.web.servlet.SearchServlet.doGet(SearchServlet.java:12
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:821)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecuri
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.jav
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.jav
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
at weblogic.security.service.SecurityManager.runAs(Unknown Source)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppS
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletC
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.j
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)

Ok. What to do to get this working on Oracle Weblogic Server? You have different options.
1) you can simply deploy the process.war exploded. No NullPointerException, everything works fine. If this is no option for you, you need to digg deeper
2) you can change the org.eclipse.epf.web.servlet.SearchServlet a bit to refer to absolute paths. Look at lines 64/65 and change them to:

_indexPath = config.getInitParameter("searchIndex");
_xslURL = config.getInitParameter("xslFile");

This means, you have to move the index directory out of the war to a separate location on your disc. After this you should also change the web.xml:

This mean, you always have to distribute the search index as a separate directory. I Should mention here, that I realy did not try this out at all. You may come across some more issues with the org.eclipse.epf.web.search.IndexSearch after this.

3) you can do some heavier modifications on the codebase. Its an option to change the lucene directory driver. A good beginning for further research on this could be this thread in the lucene java-users mailinglist. I will possibly get the change to a more deeper look at the 3rd way in the future ...

Monday, January 26, 2009

JEE6 - Public Review Draft

12:43 Monday, January 26, 2009 Posted by Test No comments:
, , , , , ,
The public review period of the JEE6 specification (JSR-316) started on january 23. It will be open for comments up to the 23 of february.
Java EE 6 is the Enterprise Edition of version 6 of the Java platform, and thus will be built on Java SE 6.

The main focus of this new release will be to include existing JSRs and frameworks to the JEE landscape and to further continue in simplyfing the whole platform. The reach of the Java EE platform has become so broad that it has lost some of its original focus. To refocus the Java EE platform on particular classes of developers and applications, the JSR-316 introduces the concept of Java EE platform Profiles. The public review draft already contains the initial Java™ Platform, Enterprise Edition 6 (Java EE 6) Web Profile Specification.

At the moment the required components of the Web Profile are defined as follows:
The following technologies are required components of the Web Profile:
  • Servlet 3.0
  • JavaServer Pages (JSP) 2.2
  • Expression Language (EL) 2.2
  • Debugging Support for Other Languages (JSR-45) 1.0
  • Standard Tag Library for JavaServer Pages (JSTL) 1.2
  • JavaServer Faces (JSF) 2.0
  • Common Annotations for Java Platform (JSR-250) 1.1
  • Enterprise JavaBeans (EJB) 3.1 Lite
  • Java Transaction API (JTA) 1.1
  • Java Persistence API (JPA) 2.0

The specification team is looking for comments onto including Web Beans (JSR-299) into the profile or not. The profile definition itself is quite simple. Beside the Web Beans I am missing the possibility to deploy libraries to the container.

Let's see, what other Profiles will be available with the final version and what happens to the application server out there. I personaly expect non of them to provide separate profiles. They all will deliver complete JEE6 functionality.
Changes will come to separate webcontainers, like tomcat.

Btw: did you wonder about (EJB) 3.1 Lite? I did!
Chapter 2.11 from the EJB 3.1 (JSR-318) Specification states:

The EJB API is comprised of a large feature set with support for implementing business logic in a wide variety of enterprise applications. However, the full range of API contracts is not always crucial for all runtime environments. In addition, the breadth of the full API can present challenges for developers just getting started with Enterprise JavaBeans technology.
For these reasons this specification defines a minimal subset of the EJB API known as EJB Lite. EJB Lite is a proper subset of the full EJB 3.1 API. It contains a small, powerful selection of EJB features suitable for writing portable transactional business logic. The vastly reduced size of the feature set makes it suitable for inclusion in a wider range of Enterprise Java products, many of which have much smaller installation and runtime footprints than a typical full Java EE implementation.
An EJB Lite application is merely an EJB application whose EJB API usage falls within the EJB Lite subset. There are no special APIs defined only for EJB Lite. Therefore, any EJB Lite application can be deployed on any Java EE product that implements Enterprise JavaBeans technology, whether that product
supports EJB Lite or the full EJB API.
The EJB Lite API is composed of the following subset of the EJB API :
  • Stateless, Stateful, and Singleton Session Bean components
  • Local and no-interface view only
  • Synchronous method invocations only
  • Container-managed transactions / Bean-managed transactions
  • Declarative and programmatic Security
  • Interceptors
  • Deployment Descriptor support (ejb-jar.xml)

An EJB Lite implementation is also required to support Java Persistence 2.0.

There you are. It's a quite minimalistic approach. But after all it's nothing. No full blown EJB and no minimalistic POJOs. What do you think?

See my boss live - Eclipse EPF at msg systems

10:23 Monday, January 26, 2009 Posted by Test No comments:
, ,
My department chief Rainer Singvogel is going to give a speech at the SE 2009 in march. His speech has the title "Effective and efficient: Software development processes based on Eclipse EPF".
He is going to talk about msg's own software development process and how we based it on the EPF framework. I have not seen the slides up to now, but I expect some more details on general best practices and basic usage of the most common EPF features to allow for needed flexibility.

Find more information about this (in german) on the msg systems ag homepage.

Sunday, January 25, 2009

Saturday, January 24, 2009

Thursday, January 22, 2009

Perf4J: Performance Analysis for Enterprise Java

06:41 Thursday, January 22, 2009 Posted by Test No comments:
, , , , ,
Perf4J was announced yesterday. It is a new open-source performance logging, monitoring and analysis library for enterprise Java applications. For developers who are familiar with common Java logging frameworks like log4j, the team likes to describe Perf4J with an analogy:

Perf4J is to System.currentTimeMillis() as log4J is to System.out.println()

Some highlights of Perf4J's functionality include:

  • A simple stop watch mechanism for succinct timing statements.

  • A command line tool for parsing log files that generates aggregated statistics and performance graphs.

  • Easy integration with the most common logging frameworks and facades: log4j, java.util.logging, Apache Commons Logging and SLF4J.

  • Custom log4j appenders to generate statistics and graphs in a running application.

  • The ability to expose performance statistics as JMX attributes, and to send notifications when statistics exceed specified thresholds.

  • A servlet for exposing performance graphs in a web application.

  • A Profiled annotation and a set of custom aspects that allow unobstrusive timing statements when coupled with an AOP framework such as AspectJ or Spring AOP.

(Taken from the original theserverside.com announcement)

For more details have a look at the developer documentation.

You can integrate Perf4J with maven. It is available from the codehaus repository (http://repository.codehaus.org/org/perf4j/perf4j/).


This seems to be a good thing to start over a new article on :)

Connecting PHP and Java

06:02 Thursday, January 22, 2009 Posted by Test No comments:
, , , , ,
Back in 2008 I wrote an article about connecting PHP and Java/JEE. This was published yesterday for free on the new heise channel "developer".
Go and read it. Unfortunatualy this was written in german.

In Detail I am talking about:

  • PHP Java Extensions and the PHP-Servlet SAPI

  • Java Scripting API (JSR 223)

  • PHP/Java Bridge

  • Quercus from Caucho

  • NuSOAP

  • Zend PHP/Java Integration

Tuesday, January 20, 2009

JPA implementations comparison: Hibernate, Toplink Essentials, Openjpa, Eclipselink

07:10 Tuesday, January 20, 2009 Posted by Test 1 comment:
, , , , ,
Found an article about performance comparison for the most well known Java Persistence API (JPA) implementations: Toplink Essentials, EclipseLink, Hibernate and OpenJPA.

Summarized conclusions: (taken from the articel)

  1. There is not an implementation that clearly has the best performance. Some had a very good CPU or memory performance and some did it very well when inserting or querying. But none of them was outstanding as a whole.

  2. The number of records inserted by Hibernate was extremely higher than it was for any other implementation (4 times more compared to Eclipselink and 24 times more compared to OpenJPA). However, Hibernate was also the JPA implementation that executed the lowest number of queries, although the differences in this value (3080 for Hibernate vs 3740 for Toplink Essentials) are not so extreme as for the number of inserts.

  3. Hibernate was also the implementation that consumed more memory. But having into account that it inserted many more records than the others, it sounds reasonable.

  4. OpenJPA had the lowest value of inserts+queries.

  5. The number of inserts executed by OpenJPA was extremely low, compared to the others.

  6. The usage of CPU in the case of Toplink Essentials and Eclipselink was extremely low.

read the full article here

Monday, January 19, 2009

Grails with Glassfish v3 Prelude

09:00 Monday, January 19, 2009 Posted by Test No comments:
, , , ,
I got the change to take a deeper look at the new GlassFish v3 Prelude. Nazrul Islam published a personal top 10 of the biggest features in v3. One among others is the "Support for dynamic languages such as Ruby and Groovy". Have a look at the official OnePager or a presentation.

In this short howto I want to provide a brief step by step guide, on how to setup a sample Grails application and start it with the embedded GlassFish server.

#1 Download GlassFish v3 prelude from the official website (choose the distribution ,you like)
#2 Install or extract the archive to a suitable location
#3 Add your JDK/bin folder to the path variable (export with unix/linux)
#4 Start the server with <as-install>/bin/asadmin start-domain
#5 Access the admin console http://localhost:4848/
#6 Click on Update Tool, choose "Available AddOns", choose "Grails Scripting" (version 1.0.4-1.0 at the time of writing)
#7 Stop the server with <as-install>/bin/asadmin stop-domain
#8 Set/export GRAILS_HOME=<as-install>/glassfish/grails
#9 Execute GRAILS_HOME/bin/grails create-app <your_app_name>
#10 Change to the newly created directory <your_app_name>
#11 Execute GRAILS_HOME/bin/grails run-app
#12 Open your favorite browser and point it to: http://localhost:8080/<your_app_name>/

Congratulations! You are done!

Thursday, January 15, 2009

German Book about Apache Geronimo

12:36 Thursday, January 15, 2009 Posted by Test No comments:
, , ,
A new book about the Apache Geronimo Server is available. In december the german dpunkt verlag published it.

Apache Geronimo, m. CD-ROM. Server-Handbuch für Java-EE-Entwickler und -Administratoren

It is written by Frank Pientka and covers nearly completely all Gerionimo related topics. It also is worth reading, if you are using the IBM Version (WAS Community Edition), too.

Read more about the book (german only).

Wednesday, January 14, 2009

artists can color the sky red

15:17 Wednesday, January 14, 2009 Posted by Test No comments:

artists can color the sky red, originally uploaded by myfear.

Did this recently. It's a true artwork. A combination of two images. One taken with my famous N73 (which I still love, even if I now have to use this cam-sick blackberry) and one taken with my 350D.

The quote posted along with the image:

“Artists can color the sky red because they know it's blue. Those of us who aren't artists must color things the way they really are or people might think we're stupid.”
(Jules Feiffer)

SANS Institute TOP 25 Most Dangerous Programming Errors

10:36 Wednesday, January 14, 2009 Posted by Test No comments:
, ,
On January 12, 2009 the SANS Institute released a combined list of the 25 most dangerous programming errors. Experts from more than 30 US and international cyber security organizations jointly released the consensus list.

The 2009 CWE/SANS Top 25 Most Dangerous Programming Errors is a list of the most significant programming errors that can lead to serious software vulnerabilities. They occur frequently, are often easy to find, and easy to exploit. They are dangerous because they will frequently allow attackers to completely take over the software, steal data, or prevent the software from working at all.

Until now, most guidance focused on the 'vulnerabilities' that result from programming errors. This is helpful. The Top 25, however, focuses on the actual programming errors, made by developers that create the vulnerabilities. As important, the Top 25 web site provides detailed and authoritative information on mitigation.

The main goal for the Top 25 list is to stop vulnerabilities at the source by educating programmers on how to eliminate all-too-common mistakes before software is even shipped. The list will be a tool for education and awareness that will help programmers to prevent the kinds of vulnerabilities that plague the software industry. Software consumers could use the same list to help them to ask for more secure software. Finally, software managers and CIOs can use the Top 25 list as a measuring stick of progress in their efforts to secure their software.

Monday, January 12, 2009

work on stuff that matters

13:04 Monday, January 12, 2009 Posted by Test No comments:
Yesterday I found this post from Tim O'Reilly.
He is talking about "work on stuff that matters". To me the most important part in his posting is the break where he points out how to find "stuff that matters" for your self.

Some of you may end up working at highflying companies. Some of you may succeed, and some of you may fail. I want to remind you that financial success is not the only goal or the only measure of success. It's easy to get caught up in the heady buzz of making money. You should regard money as fuel for what you really want to do, not as a goal in and of itself. Money is like gas in the car -- you need to pay attention or you'll end up on the side of the road -- but a well-lived life is not a tour of gas stations!

Whatever you do, think about what you really value. If you're an entrepreneur, the time you spend thinking about your values will help you build a better company. If you're going to work for someone else, the time you spend understanding your values will help you find the right kind of company or institution to work for, and when you find it, to do a better job.

Sales engineers and technology evangelists

09:35 Monday, January 12, 2009 Posted by Test No comments:
I just found this today on someones bookmarks. Kevin Hoyt writes about sales engineers and technology evangelists. Quite interesting, that he points out, that "[technology evangelists] have some degree of ego [...]" to stay on stage and fulfil the promises of the sales engineers.

Read the full story here:

Sunday, January 11, 2009

Installing and Configuring the WLS Apache Plugin

09:44 Sunday, January 11, 2009 Posted by Test No comments:
, , ,
There were some questions recently reguarding the Weblogic Apache plugin. I just want to show you in this quick example, how to configure and test the plugin in some easy steps:

1) Download the Apache plugins for WLS from the Oracle OTN website
2) Identify the right plugin for your platform and apache version.
You can decide to use a regular strength or a 128-bit encryption version of the modules.
3) Install the right plugin to your apache folder (/modules)
For this example I use the server103_apacheplugins.zip\win\32\mod_wl_20.so
4) Configure your apache to use it by editing httpd.conf and add the line :
LoadModule weblogic_module modules/mod_wl_20.so
5) Define any additional parameters for the Apache HTTP Server Plug-In.
The Apache HTTP Server Plug-In recognizes the parameters listed in General Parameters for Web Server Plug-Ins. To modify the behavior of your Apache HTTP Server Plug-In, define these parameters:
- In a Location block, for parameters that apply to proxying by path, or
- In an IfModule block, for parameters that apply to proxying by MIME type.
A simple example would be:

<IfModule mod_weblogic.c>
WebLogicHost localhost
WebLogicPort 7001
MatchExpression *.jsp

6) Start/Restart the Apache server
7) Start your Weblogic Server
8) Test the plugin with an appropriate url (for the above example:

Additional features:
1) Custom error-pages for the plugin.
If something goes wrong during the wls server or cluster request, you can redirect to a custom error page using this configuration directive:
<IfModule mod_weblogic.c>
WebLogicHost localhost
WebLogicPort 7001
ErrorPage http://myerrorpage1.mydomain.com
MatchExpression *.jsp

2) Turn debugging on:
You can turn on debugging for the plugin using this directive:
<IfModule mod_weblogic.c>
WebLogicHost localhost
WebLogicPort 7001
Debug ON
WLLogFile c:/tmp/global_proxy.log

MatchExpression *.jsp

3) Turn on debug config info:
In addition to the debug log you can also turn on a separate debug configuration information using this switch:
<IfModule mod_weblogic.c>
WebLogicHost localhost
WebLogicPort 7001
Debug ON
DebugConfigInfo On

WLLogFile c:/tmp/global_proxy.log
MatchExpression *.jsp

If you enable this switch, you can access the configuration information of the plugin with


4) You can change the name of the session cookie used by weblogic server:

<IfModule mod_weblogic.c>
WebLogicHost localhost
WebLogicPort 7001
MatchExpression *.jsp

Wednesday, January 7, 2009

05:44 Wednesday, January 7, 2009 Posted by Test No comments:
, , ,
Now it is official :) The burton group analyst Anne Thomas Manes anounces on her blog, what everybody already knew ;) SOA is Dead!

My favorite quote:

It’s time to accept reality. SOA fatigue has turned into SOA disillusionment.

SOA met its demise on January 1, 2009, when it was wiped out by the catastrophic impact of the economic recession. SOA is survived by its offspring: mashups, BPM, SaaS, Cloud Computing, and all other architectural approaches that depend on “services”.

Read the full story.

Btw: If you like to, you can have a look at my SOA Paper (PDF, ~1.4MB). It was written in 2006. Quite surprising, what we wrote there before :) Sorry for all english speakers. It is only available in german.

After the tremendous amount of reactions regarding the post the author added another blogpost which states a bit more clearly what she was adressing:


My real point is that we should not be talking about an architectural concept that has no universally accepted definition and an indefensible value proposition. Instead we should be talking about concrete things (like services) and concrete architectural practices (like application portfolio management) that deliver real value to the business.

Friday, January 2, 2009

2008 review

08:55 Friday, January 2, 2009 Posted by Test No comments:
, , ,
Friday morning. In fact it is a bit too early for waking up during my holidays but that is quite normal for me. Befor I jump into the topic of this post I wish you all a wonderfull start into the new year and hope, you had a wonderfull christmas time with your loved ones.

During the more silent times of the year it is more easy to reflect on the things that happened in the past. 2008 was by far the most interesting and challenging year of my life so far. Beginning with the mostly stress-free pregnancy of my wife things changed significant with the birth of our daughter in march. Beside this, I became responsible as a software architect for a new project in my company. Not too bad at all. The unlovely part in this was the fact, that it was anything but small and simple :) Therefore I was more onsite with the customer than I wish I had to. So I missed some of the early proceedings of my daughter.
But after all, the good things prevailed.

    Good things happend in 2008:

  • Svenja :)

  • family well and healthy

  • christening of svenja

  • appointed ACE Director

  • DOAG conference

  • some smaller articles

  • started this blog

    Things to come in 2009:

  • more articles again

  • at least one conference again

  • new project(s) with ABPM

  • write more blogposts

  • ...

"And I said to the man who stood at the gate of the year: Give me a light that I may tread safely into the unknown. And he replied: Go out into the darkness and put your hand into the hand of God. That shall be to you better than light, and safer than a known way."
(Minnie L. Haskins)