First OpenSource Enterprise Architecture Management Tool - iteraplan

We just released the first open source EAM tool called iteraplan.
Enterprise architecture management creates transparency about your current and future IT landscape and provides instruments for the analysis, creation, planning and control of the application landscape. The enterprise architecture management ties together business structures as for example business processes, products, organisation unities, technical domains, technical functions and business data with the application landscape and their technical realisation or company infrastructure. Thus the enterprise architecture management supports you with the control of the complexity of your IT landscape and allows an up-to-date and efficient control of the IT.

With iteraplan and his database based model of your application landscape:
   * you identify saving potentials
   * you are always informed about the state of your IT
   * you possess reliable and up-to-date data as a basis for your strategical decisions

iteraplan is an JavaEE web application based on other well established OpenSource tools like Spring Framework, Hibernate, Tomcat, ...

For more information visit www.iteraplan.org or go directly to a online demo
Do not hesitate to ask questions in english in the forum.
Looking forward to your feedback.

Posted by Karsten at 12:50 | Comments (0) | TrackBack


Software to build open source communities

I wonder why there is no real "community" software out there for open source software projects, especially if you want to have an integrated experience for a user.
If you look at big open source projects you have a diverse set of tools used for the websites. I compiled the following table based on looking at hints within the page or the page source codes, so it might be not correct:

Spring FrameworkJIRADrupalvBulletin/Mailinglist was at sourceforge but is retired-WordpressSourceForge
HibernateJIRAcoWikiphpBB/mailman(coWiki)Seam basedJBoss/SourceForge
Apache (Struts)JIRAMaven-Generated-/apache-mailinglistsConfluence-Apache
AppFuseJIRAConfluenceNabble webinterface to mailinglist/via dev.java.netConfluenceConfluence-Newsjava.net
Sourceforgeown module-own/own-Only News-FunctionSourceForge

Beside JIRA being the de facto standard for issue tracking, the rest is a bit of a mess, and most of the selected open source communities are in the Java area. So what tools would you recommend for starting an open source project/community?
Currently I am looking at Confluence, Drupal, JIRA, TikiWiki and Trac. I guess we will have to use more than one tool to cover all, but I will try to limit it to as few tools as possible.
Any thoughts/help?

Posted by Karsten at 16:40 | Comments (0) | TrackBack


[JavaPolis2007] EJB 3.1

Secification lead Kenneth Saks was updating the JavaPolians about the status and the news of EJB 3.1.
So the focus of this JSR is on two themes, one is to improve on the ease of use, which was already the main thing in EJB 3.0, put can be continued. And additionally to the rather minor features added in EJB 3.0 there will be some additional features in EJB 3.1.
Timewise the first early draft is planned for beginning 2008.
The local business interface will be obsolete, but still the client should not use the new() semantics.
There will be an @Singeleton-Annotation to enable shared data and make the handling mcuh easier. Since the AppServer is normally taking care of concurrency by either instanciating another bean (stateless session bean) or synchronizing the access (stateful session bean) the access to methods in an @Singelton annotated bean will be synchrozied by default. But the developer can specify bean managed concurrency which one should use to distinct between read-only methods (non-synchronized) and write-methods (synchronized).
IMO this will be one of the new performance pitfalls in JavaEE 6 where a lot of people will run into.
All in all a nice talk an d definitly something to keep an eye on.

Posted by Karsten at 13:17 | Comments (0) | TrackBack


[JavaPolis2007] Thinking in Flex

So after JSF got a bit boring, I went to look around at the other talks and finally stayed at thinking in Flex, which was again a presentation by two presenters, but this time Bruce Eckel and James Ward played along quite nicely. While James was showing of and coding wild, Bruce was there to highlight some of the pitfalls or bigger picture facts.
They showed some nice demos with drag'n'drop functionality from a flex app data grid into Excel or a nice app with cover flow like in iTunes, build just in three lines of code.
The demoing was done with the flex builder, which is an Eclipse extension and can be downloaded as a test version for free. The SDK itself is currently being open sourced, the flash player will be open sourced and there is a community at flex.org.
The Flex builder has an build in debugger.
A lot of fancy UI effects are build in, like an accordion with a lot of details to be specified like a bounce effect with timing.
Then James went on and showed AIR, which is a superset of the webapp, so you have all the functions from an webapp, which enables you to reuse your webapp code. AIR also provides some functions like local file access and a DB storage via SQLite. AIR itself is based on Webkit (as Safari).
You can install an AIR application just like a normal program and then launch it via Windows->Start->Programs for example.
There are also already testing tools like Flexenium, which is based on Selenium to test the UI, but also plugins for commercial products like Mercury Testrunner.

Posted by Karsten at 22:27 | Comments (0) | TrackBack

[JavaPolis2007] Be productive with JSF

Again a talk of two presenters - Ed Burns and Yara Senger. Like in tennis a double is more difficult to play than a single and although both are good and experienced presenters the talk had some hiccups.
What I really liked was how Ed set the stage by looking at the history of distributed app UI, which began with dumb terminals like PLATO (1960ies), Mainframes, IBM, .... The traction and popularity then went to systems like X-Window, Windows, MacOS, etc. But since 10 years the Web UI is the rising start.
After that the history of web framework war and struts was once again mentioned in a JSF talk and before going into JSF itself, its unique selling points were highlighted like the fact, that JSF is a standard, were backward compatibility is guaranteed and it will be part of every JavaEE 5 Server, so the developer and the deployer don't have to handle the jars them self.
Since the talk continued with the introductory style I went on an went to "Thinking in Flex".

Posted by Karsten at 16:33 | Comments (0) | TrackBack


[JavaPolis2007] - Day 1 - Hudson

The last talk of the day that I went to was about Hudson, the continuous integration system.
Hudson ...

  • seems to get momentum, if you look at the increasing mailing list traffic, 35 plugins at the moment, and it is used in many public
    projects like Apache Lucene, Netbeans, ...
  • Hudson is build from ground up for extensibility, so even the core features are plugins and there is a special Maven support for plugin developers.
  • is runnable via commandline (which will start an embedded servlet container) or simply as a .war-file in an servlet container
  • has a nice UI
  • nice comfort functions (tag builds, see for how many builds a test already failed, ...)
  • Maven integration, so one doesn't have to configure Hudson to pic the javadoc from folder x, the test results form folder y etc. It simply reads the POM and knows where the stuff is.

    I definitely have to take a look at it. I worked already with Cruisecontrol and Luntbuild and although they are doing their jobs well, Hudson seems to go a step further.

    Posted by Karsten at 23:40 | Comments (0) | TrackBack
  • [JavaPolis2007] - Day 1 - Seam in action - Part2

    The second part of this session was delivered by two guys from Lunatech, so no Seam Commiters or JBoss employees.
    Unfortunately one of the guys was hardly understandable since his French English was hard to follow.
    The talk first started again with an intro to JSF and Seam-features.
    Then they reported difficulties to migrate from Seam 1.2.1 to 2.0 which was partly due to the migration from JSF 1.1 to 1.2. This is a big contrast to Spring or Struts which do very conversative releases (drop-in replacements)
    The documentation of seam was partly confusing especially if you where new to JSF, since the boarder between plain JSF and Seam is blurring and if you do not know the hard way (plain JSF) you do not get the easy way (example in Seam).
    They really liked facelets, since it made it possible to use the plain HTML.
    Starting problem with no layers as a start, since layering is optional in Seam. So they started simply with one layer, and later extracted a DAO layer.
    They had problems with the supported UI testing, but it should get better in Seam 2.0. In container and integration testing was difficult to set up, so it was skipped.
    Still they had some criticisms with seam

  • not URL-friendly pages
  • defaults to stateful
  • missing backward compatibility
  • confusing validation framework
    Regarding the future of Seam it probably is the next Struts and will be standardised with JSR-299 (WebBeans), but still needs to overcome some drawbacks like missing Restlest support and standardised Ajax architecture.
    All in all it was a nice talk with some nice pointers on how they struggled and what they liked and what they didn't. Still this part wasn't as good as the first part. It included some repetition from the first part and some rather basic code fragments were explained very long.

    Posted by Karsten at 15:00 | Comments (0) | TrackBack
  • [JavaPolis2007] - Day 1 - Seam in action - Part1

    In this talk Peter Muir, who is a Seam committer, gave a quick intro to JSF, EJB3, Seam and JBoss Tools.
    Since many people knew already about JSF and EJB3 Peter only quickly introduced JSF and EJB with an example app, highlighting already some of the drawbacks of the plain usage of these technologies. Nice way to introduce Seam ;)
    After that he showed how Seam makes life easier to use JSF and EJB3 as well as some further features.
    Seam adds more scopes to the already familiar ones like event, session and application, which are page, conversation and business process.
    It opens your Domain Model to be used via EL.
    Enables Bijection wit @In and @Out annotations, so the objects get injected before and stored after the call to the method.
    PersistenceContext flushes not on every method leaving this to the developer on when he want to (which makes cancels much easier).
    Validation is put into one single place, and the used Hibernate validators, which is also usable with another JPA implementation like Toplink.
    Finally he showed how to create, deploy and change a Seam application with the JBoss tools.
    The tools nicely integrates nicely into Eclipse and I really liked wizards to create the applications and actions etc. Additionally it provides you with a visual preview which is synchronized with you code and if you click a component in the preview the corresponding source code gets highlighted.
    Another feature which looked great to reduce development time was the hot deploy functionality. It enables not only code replacement within methods, but also the whole class signature could change. I only wonder if this is only possible with JBoss application server or also other webservers.

    Posted by Karsten at 13:30 | Comments (0) | TrackBack


    Javapolis 2007 around the corner

    Javapolis starts tomorrow and I am looking forward to it. Hope it still is as good or even better than two years ago. This time my wife and our little one Jonathan is coming with me, so the evenings are blocked with non technical things ;)
    Hope to meet some of you guys there.

    Posted by Karsten at 00:31 | Comments (0) | TrackBack


    Java EE 6 proposal sounds good

    Yesterday the Java EE 6 proposal (JSR 316) was published and Rod Johnson did a nice commenting, why Java EE 6 Gets it Right.
    Besides the necessary updates and improvements the biggest accomplishments would be deprecation/removal of old features and the so called profiles. The removal of old and unused features like EJB CMP (effectively replaced by JPA) and JAX-RPC (effectively replaced by JAX-WS),which are already mentioned in the JSR, is IMO long due.
    The profiles are another hugh step forward, although I guess that only a few profiles will make it into the release and many other will have to what or will be added "unofficially" by the community.
    It is a shame that it still takes so long for JavaEE 5 Servers to arrive (only BEA and Glassfish are final), an hopefully JavaEE 6 will be adopted faster.
    Good luck and best wishes for the whole expert group!

    Posted by Karsten at 12:08 | Comments (0) | TrackBack


    Orchestra is the new Seam

    Apache MyFaces announced the availability of Apache MyFaces Orchestra and it sounds like a real great integration tool:
    JSF - Spring - JPA
    Although they are not positioning it directly as a Seam killer (see Orchestra and Seam) IMO it is competing here. But Orchestra is doing some things better than Seam:
    Leveraging the defacto standard Spring truly
    Being open for other ORM solutions than JPA
    Having an Apache Licence
    Providing hooks for other web frameworks and not only JSF

    Although I must admit, that I haven't used Seam yet I probably would rather choose Orchestra in my next JSF project. Still I wish both projects the best and it is good to have choice around and see common problems tackled.

    Posted by Karsten at 09:44 | Comments (0) | TrackBack


    First company blog entry: It's Joda Time

    Today I wrote my first blogentry at our new company team blog. See Jato Consulting Team Blog » Es ist Joda Time!.
    I might posts on both blogs now, although our company blog will be in German.
    Enjoy the reading!

    Posted by Karsten at 11:01 | Comments (0) | TrackBack


    Best comment on an oneliner

    Just red the Fishbowl and a blog entry on commenting. The best part was the following comment to a simple buffer.append(“\n”);

    The newline before the title parameter below fixes CONF-4562. I have absolutely no idea HOW it fixes CONF-4562, but the simple fact that it does fix the problem indicates that I could spend my whole life trying to work out why and be none the wiser.

    I suggest you don’t think too hard about it either, and instead contemplate the many joys that can be found in life — the sunlight reflecting off Sydney Harbour; walking through the Blue Mountains on a dew-laden Autumn morning; the love of a beautiful woman — this should in some way distract you from the insane ugliness of the code I am about to check in.

    Oh, and whatever you do, don’t remove the damn newline.

    I also liked the subheading of the blog:
    tail -f /dev/mind > blog
    Very geekisch :)

    Posted by Karsten at 16:13


    Five things I hate about AppFuse

    First of all I have to thank Matt Raible for his great work with AppFuse. Appfuse gives you a lot of choices and integrates very well with a lot of frameworks/tools.
    Still there are a couple of things I really hate, most of them realted to the build mechanism:

    1. It's nice to choose between the usage of JSP 2.0 or before, but making the changes (to all jsps and the web.xml) every time I build my app sucks. This should be part of the initial setup (as the package naming) and not part of each build. How often do I switch my Server from an old version to a new one or vica versa?

    2. Seperating the classes in web, services and dao is good, but I hate the building of jar-Files for the different layers. Just take the classes under dao and service and copy them into the war or move them over to the webapps folder as it is done with the web classes!

    3. Eclipse crashed with OutOfMemory errors. Always when trying to open the build file. The build file is really, really long, with lots of stuff in there. IMO 50% of it could be deleted.

    4. Generation of Hibernate-Mapping files. I really hate it to look within a jarfile how the Hibernate mapping file looks like. It is nice to get it generated, but I prefer to be able make adjustments to it by hand to try out things quickly. And it is quite hard to enter special SQL statements in an Hibernate file, if it gets overwritten all the time.

    5. I don't like to get my struts.xml merged from many sources. I like to have one struts-config file holding all my struts configuration.

    So Appfuse itself is a great tool and I also like the generation of CRUD operations from a POJO or DB table, but the ant-file is a big mess and it probably is the best to simply throw it out totally.
    And the move to Maven-2 with Appfuse-2 is not an option for me. Maven is even more flawed than the current Appfuse build system. Vom Regen in die Traufe!
    I hope I haven't sounded like the Bileblog ;)

    Matt responded already in his blog. Nice and fast.
    My Eclipse is already ready for hugh memory consumption (eclipse.exe -vmargs -Xms256m -Xmx512m), but still get this OOM :(
    And thanks for the @hibernate FAQ reference and the other remarks. Very helpful.

    Posted by Karsten at 15:24 | Comments (0) | TrackBack


    Error at idealo.de shows Resin 2.1.14

    500 Servlet Exception

    java.lang.IllegalStateException: Current state = FLUSHED, new state = CODING
    at java.nio.charset.CharsetEncoder.throwIllegalStateException(CharsetEncoder.ja
    at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:537)
    at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:136)
    at java.io.OutputStreamWriter.write(OutputStreamWriter.java:191)
    at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111)
    at java.io.BufferedWriter.write(BufferedWriter.java:212)
    at java.io.Writer.write(Writer.java:126)
    at org.apache.log4j.helpers.QuietWriter.write(QuietWriter.java:47)
    at org.apache.log4j.DailyRollingFileAppender.subAppend(DailyRollingFileAppender
    at org.apache.log4j.WriterAppender.append(WriterAppender.java:159)
    at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65)
    at org.apache.log4j.Category.callAppenders(Category.java:203)
    at org.apache.log4j.Category.forcedLog(Category.java:388)
    at org.apache.log4j.Category.debug(Category.java:257)
    at com.caucho.http.session.SessionImpl.callDestroyListeners(SessionImpl.java:584)
    at com.caucho.util.LruCache.remove(LruCache.java:370)
    at com.caucho.util.LruCache.put(LruCache.java:218)
    at com.caucho.util.LruCache.putIfNew(LruCache.java:194)
    at com.caucho.http.session.SessionManager.createSession(SessionManager.java:666)
    at com.caucho.server.http.AbstractRequest.createSession(AbstractRequest.java:466)
    at com.caucho.server.http.Request.getSession(Request.java:1186)
    at de.idealo.tools.filter.RequestSupport.getSession(RequestSupport.java:571)
    at com.caucho.server.http.Invocation.service(Invocation.java:315)
    at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:274)
    at com.caucho.server.TcpConnection.run(TcpConnection.java:139)
    at java.lang.Thread.run(Thread.java:595)

    Resin 2.1.14 (built Thu Jul 1 18:39:55 PDT 2004)

    Posted by Karsten at 08:47 | Comments (0) | TrackBack


    MessAdmin - Nice notification system and session administration for Webapps

    Recently I came across MessAdmin, which describes itself as:
    Notification system and Session administration for J2EE Web Applications
    The installation process is very easy, only drop in a .jar and some JSPs, add some lines to your web.xml and there you go. That's it.
    Very nice. It passes the 5 minute test very well.
    And I love the feature of sending a message to all users, which gets delivered the next time they access the system. So it is very easy to notify users of maintenance downtimes etc.
    MessAdmin also provides a new TomcatManager-App where you get a lot of the functionality for all webapps. Can't Tomcat include this by default? Or make it possible to configure this?
    The only drawbacks I could think of are performance and security. Anyone knows the performance impact of a servlet filter like the one in MessAdmin?

    Posted by Karsten at 15:06 | Comments (1) | TrackBack


    First steps with AndroMDA

    The last couple of days I decided to give MDA in gerneral and especially AndroMDA (Model Driven Architecture Framework) a try.
    The website looks good and there was a quite good getting started section as well. Still I encountered a lot of problems which I want to describe here.
    First the site only states as a dependency regarding Maven: "Just make sure you are using the latest version, Maven 1.0.2 or higher is recommended". So I gave Maven 2.0.2 a try. Which was not working at all with the rest of the documentation, so I tried Maven 1.0.2 and it worked.
    Second was MagicDraw as UML-Tool. I downloaded the newest version (10.5), which was again a fault. AndroMDA is only working with 9.5.
    Third issue was doing some simple modelling in MagicDraw and saving the file as XMI. Running maven mda failed miserably, due to wrong dependencies. Then I encountered the solution: Open the generated myproject.xmi file under myprojec\mda\src\uml in MagicDraw and start working from there.
    Lastly I wanted to look at the sourcecode and starting to edit it, but integrating all this maven things into my Eclipse brought up some other problems so I decided to stop this experiment at least for a while.
    I hope the AndroMDA Team will either update their starting section or adjust their tool to work with the newer tools.

    Posted by Karsten at 09:50 | Comments (2) | TrackBack


    Webinar on Geronimo

    I just attended a Introduction to Apache Geronimo 1.0 Webinar, presented by Jeff Genender, which was my first Webinar ever. It was strange to see slides in a special Java-Applet viewer and it was possible to type in questions although I did not post any and I haven't seen someone else raising questions via chat.
    The webinar was just a simple intro covering the basics. Most of the webinar was familiar to me, since I tried moving an app from Tomcat to Geronimo and played with Geronimo a bit.
    Still Jeff Genender did a good job in introducing the basics.
    And I must say, that I liked the webinar type of learing since it is nice to see slides and have audio with it. I just wonder how big my telephone bill will be like, since I had to call an number in the US :( Wouldn't it be better to stream this via Internet? It can't be a money reason, since the number was toll free for the US (not internationally :( ). It can't be for security reason, since it was possible to register for the webinar with dummy values for free.
    So where is the next webinar to attend? ;)

    Posted by Karsten at 22:04 | Comments (0) | TrackBack


    Moving from Tomcat to Geronimo failed

    Today I played a bit with Geronimo and the app-server was easy to install and startup. So after a management console gothrough I tried to install/deploy one of our Tomcat apps but failed miserably.
    After trying to get it running for quite some time, I decided to file an issue at their beautiful JIRA installation:
    [#GERONIMO-1602] Switching from Tomcat causes error in JAAS module: "Unable to instantiate login module" - ASF JIRA

    I deployed the war without any deployment plan and the app seams to be working (JSPs work and the startup-servlet works as well)
    But the JAASLoginModule was missing, so I could not log in. -> so far no Problem!
    Afterwards I configured a security realm with the console (very nice) and after a restart my app does not complain about a missing LoginModule anymore but throws an error.
    For Tomcat I do the following:
    in catalina.properties I set


    and the login.config looks like this:

    MyApp {
    de.jato.security.auth.module.JatoServletLoginModule Sufficient loginServlet="/login/login.jsp";

    I tried to use a special geronimo-web.xml where I set the
    But I still get the same error:
    javax.security.auth.login.LoginException: org.apache.geronimo.common.GeronimoSecurityException: Unable to instantiate login module

    Caused by: java.lang.ClassNotFoundException: de.jato.security.auth.module.JatoServletLoginModule

    Am I doing something wrong? The class is in the war I deployed, and everything works fine in Tomcat.
    Has anyone tried to accomplish this transition as well?
    I know that it does not make a lot of sense to switch from Tomcat to Geronimo if you do not need any of the additional features, but I wanted to give it a try anyway.

    Posted by Karsten at 13:29 | Comments (1) | TrackBack


    JavaBlackBelt.com ErrorMessage: Spring/Struts/Hibernate

    I just registered at JavaBlackBelt.com and one of the first things was an error :Apache Tomcat/5.5.9 - Error report at javablackbelt.com
    So they are running on Tomcat 5.5.9 and use the OpenSessionInViewFilter provided by Spring, running Tiles/Struts and Hibernate. Nice StackTrace:

    javax.servlet.jsp.JspException: ServletException in '/WEB-INF/jsps/common/fragments/header.jsp': Could not open Hibernate Session for transaction; nested exception is net.sf.hibernate.exception.JDBCConnectionException: Cannot open connection org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:921) org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:460) org.apache.jsp.WEB_002dINF.jsps.common.templates.main_jsp._jspx_meth_tiles_insert_0(org.apache.jsp.WEB_002dINF.jsps.common.templates.main_jsp:301) org.apache.jsp.WEB_002dINF.jsps.common.templates.main_jsp._jspService(org.apache.jsp.WEB_002dINF.jsps.common.templates.main_jsp:224) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056) org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:261) org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:237) org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:300) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164) org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1056) org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:261) org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:388) org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:316) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164) org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) be.loop.jbb.web.filter.CompressionFilter.doFilter(CompressionFilter.java:60) be.loop.jbb.web.filter.LoginFilter.doFilter(LoginFilter.java:84) org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) be.loop.jbb.web.filter.ProxyEncodeFilter.doFilter(ProxyEncodeFilter.java:26)

    Posted by Karsten at 17:06 | Comments (1) | TrackBack


    Hibernate 3.1 and Spring 2.0?

    I wonder when is the right time to migrate from Hibernate 3.0.5 to Hibernate 3.1.x (see hibernate.org - Hibernate3 Migration Guide) and from Spring 1.2.x to 2.0?
    Has anyone acomplished this migration? I know that Spring is just in the Milestones Release phase but they plan to release the final version in Spring ;) I guess. And Hibernates seams to get stable on their 3.1 branch.
    Are there any issues migrating to the new Hibernate jar only? I saw something in Spring's JIRA (http://opensource2.atlassian.com/projects/spring/browse/SPR-1354) but it seams like Spring just doesn't care about this upgrade, which would be nice.
    So I might give the new Hibernate Release a try first and update Spring later in a couple of month.

    Posted by Karsten at 09:14 | Comments (2) | TrackBack


    Error at actuate.com shows SQL Server

    This ErrorSite actuate.com
    showed that they use SQLServer:

    Microsoft OLE DB Provider for SQL Server error '80040e10'

    No value given for one or more required parameters.

    /view/viewcontent.asp, line 94

    Posted by Karsten at 18:41 | Comments (0) | TrackBack

    Error at Reportenginges.com shows Tomcat

    Apache Tomcat/4.1.18 - Error report
    type Exception report


    description The server encountered an internal error () that prevented it from fulfilling this request.


    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:248)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:575)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:498)
    at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:822)
    at org.apache.jsp.viewcontent_jsp._jspService(viewcontent_jsp.java:197)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:204)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
    at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:575)
    at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:498)
    at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:822)
    at org.apache.jsp.partnerbin_jsp._jspService(partnerbin_jsp.java:41)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:204)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
    at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:432)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:386)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:534)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:530)
    at java.lang.Thread.run(Unknown Source)

    root cause

    at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:533)
    at org.apache.jsp.review1_jsp._jspService(review1_jsp.java:263)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:204)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

    Posted by Karsten at 18:39 | Comments (0) | TrackBack


    [JP] Summary

    So JavaPolis is over since yesterday. I finally made it back home to a reliable network, so I can blog again.
    After submitting the first entry directly on Monday I was never again able to post a new blogentry through the crapy WLAN there.
    So I will try to post about more of the talks here. Keep up-to-date for the next few days. I will list them here:

  • JavaPolis started today
  • [JP] Day 1 - Business Rules and Drools
  • [JP] Day 1 - BOF on Eclipse RCP
  • [JP] Day 2 - Spring Middle Tier and Spring 2.0
  • [JP] Day 2 - Radrace
  • [JP] Day 4 - Glassfish
  • [JP] Day 5 - DataBase Refactoring

    Some facts and figures about JavaPolis:

    2.100+ JavaPolian
    150+ Speakers
    from 43 countries (Germany on 3rd place); no one from Portugal. Already last year there was noone from Portugal attending JavaPolis, so there must be something wrong with this country. Are they only doing .NET??
    48% Belgians compared to 70% Belgians in 2004.
    The slides will be faster available than last time, but the DVD hast to wait until March 2006 onwards.
    The content will be spread to Javalobby (Conference Day 1), TheServerSide (Conf. Day 2), JavaPolis Wiki (Conf. Day 3), InfoQ (some content) and others.

    11.500 registered wiki-members

    This was by far the best conference I attended ever. So I can highly recommend to go there if you are into Java. Thanks guys at BeJUG for making this happen!!!

    Posted by Karsten at 19:38 | Comments (0) | TrackBack
  • 15.12.05

    [JP] Day 4 - Glassfish

    Glassfish is the RI (Reference Implementation) of the Java EE 5 Application Server, which gets developed mainly by Sun in conjunction with Oracle.
    So they are using an evolved TopLink for the JPA (Java Persistence API) which is better known as EJB 3.0, although EJB is more than that and the JPA will have live beyond EJB.
    Beside being the RI of Java EE 5.0 Glashfish offers two nice features:
    + Profiling
    + Monitoring
    + you can turn it on/off at any time

    + HTTP-Framework
    + uses NIO
    + non-blocking sockets for HTTP-Processing
    + integrates into Tomcat
    + replaces Tomcats frontend and will be handed over to Tomcat
    + a lot faster (between 5 and 500 times) then old I/O-style thread processing

    Posted by Karsten at 20:04 | Comments (0) | TrackBack


    [JP] Day 2 - Radrace

    There was a RAD Race going on the second day at JavaPolis and the next day was the winner anouncement. If you want further information about RAD Race go to radrace.org and see all the details to the setting, rules, etc.
    These are the main things you should keep in mind, when doing a RAD Race:

  • Know your tools and know them well.
  • Make a choice and stick to it.
  • forget "flavour of the month"
  • good habits never fail:
    + data modeling
    + no beta software
    + know your tools

    There were 3 winning teams. Oracle JDeveloper was used by 2 of the 3 winners. Oracle send one of their ADF-Champions into the RAD race.

    Further details on who used which tools will get posted on the JavaPolis Wiki.

    Posted by Karsten at 20:05 | Comments (0) | TrackBack
  • 13.12.05

    [JP] Day 2 - Spring Middle Tier and Spring 2.0

    Jürgen Höller and Rob Harrop did the best presentation so far about hot topics in Spring's Middle Tier Services and the upcoming Spring 2.0 release.
    Introduces XML-Schema and new Custom tags, with the following advantages:
    - Easier to write
    - Easier to read
    - Better tool support (Schema-validation is far more powerful than a DTD)
    Here came a quick demo showing the validation/code-assist possible with Schema, so one easily knows which fields are required and where only certain enumeration values or boolean values can be filled in. With the simple DTD-Validation there is no tool support for this.

    The new techniques are fully backward compatible, you can even mix both styles in one configuration file and this will be how most apps will look like.
    The old style is the generic configuration and the new custom tags are for rather specific problems.
    So the custom tags aims not at simplifying your application configuration regaring your beands/application dependencies, but rather at infrastructure tasks (JNDI, AOP, Transactions, ...) and 3rd party packages (like Acegi Security).

    The custom tags shiped in Spring 2.0 M1 will be:
    - jndi:lookup
    - util:properties
    - aop:*
    - tx:*

    For the final Spring 2.0 Release which is planned for March 2006 the team plans to add more:
    - Maps, List, Sets
    - JMX
    - Remoting
    - Scheduling
    - MVC

    If you plan to extend the custom tags you must implement the NamespaceHandler Interface and provide this implementation within a jar, describing in META-INF/spring.handlers your implementation.
    Spring takes care of the rest.

    That was the news about the upcoming simplifications in Spring 2.0.

    Next topic was Spring AOP and the fruits of having the AspectJ-lead Adrian Coyler now working for Interface21 (the company behind Spring).
    AspectJ will be closer integrated into Spring's AOP framework, not only making Spring AOP more powerful but also easing transition between the two.
    So the AspectJ expression language is now available in Spring.
    Via a @SpringConfigured annotation it should be possible to Dependency Inject any object via AspectJ

    In the next section about transactions Jürgen and Rob gave us plenty of demos and examples. It really looks great how the namespaces simplifiy the configuration.

    Scheduling Support in Spring 2.0 was one of the things I was personally interessted since we use this feature of Spring already a lot. So here are the news:
    - Support for new JDK 5.0 Scheduling Services
    - Support for CommonJ TimerManager
    - New Interface TaskExecutor with void execute(Runnable task)

    Ok, so you might wonder what CommonJ is, just like I did, so here is the explanation:
    CommonJ is spezification by BEA and IBM, currently supported by WebLogic Server 9 and WebSphere 6. This way allows a partly vendor indiependent way of solving something.
    CommonJ provides a WorkManager which is configured via an administration console and made available to applications as a JNDI-Ressource.
    It solves the problem in Application Servers where direct thread-creation is not allowed due to the spec, but nowhere the spec provides access to the functionality of Tasks/Threads and scheduling.

    Spring provides default implementations of this interface and the TaskExecutor is also used within Spring:
    - for execution of apßplication event listener
    - for asynchronous JMS-Message processing

    Spring is able to delegate the ThreadManagement of a QuartzScheduler to a CommonJ WorkManager, which enables App.Server compliance scheduling with quartz.

    The last section was JMS where they went it a lot great of detail which was far to much to cover here.

    Spring 2.0 looks realy, realy great only from the middle tier side and I guess there will be plenty of other great things in the web tier as well.
    The only drawback I see at Spring 2.0: Final Release is scheduled for March 2006. Soooo late! Hello Sun/IBM/"put big company here" you should have scheduled this for March 1996!!!!
    The Spring team is clearly my winner of the award: "Best/Smartest Java-Team EVER"
    (I just hope Erich Gamma and Kent Beck do not read this, since they are right behind on second place :))

    Posted by Karsten at 19:45 | Comments (0) | TrackBack


    [JP] Day 1 - BOF on Eclipse RCP

    This was the latest event on JavaPolis first day (21:40 - 22:40) and not a real presentation, but rather a discussion and demo form.
    One of the participants told us from his company and how they decided to go for Eclipse RCP directly when it was announced. The funny part was, that they were looking at Eclipse at a base for their own RichClientApps even before Eclipse announced the RCP.
    So the announcement came at the right moment for them to say yes we will take Eclipse as a base, since they even will offer some kind of support for this now.
    Later we saw a nice demonstration on how easy it is to build your own RCP. The demo app was an Ebay browser and bidder. I really have to find either some spare time or a way to sell this technology to a client so that I can experiment a bit with it.
    Wayne Beaton (RCP Evangelist) was a really good demonstrator and made this BOF a quick and deep one. Thanks.

    PS: If you are already using Eclipse RCP or Eclipse itself and you are missing a feature, got a question, found a bug, or similar, Wayne encouraged everybody to use bugzilla to raise these issues.

    Posted by Karsten at 23:23 | Comments (0) | TrackBack

    [JP] Day 1 - Business Rules and Drools

    Mark Protor who leads the Drools project gave first an overview over the history of Drools and BusinessRules and the thinking behind them.
    Some of Marks statements to Drools/BusinessRules:

  • Rules are mainly like SQL with many mathing tables and joins.
  • OR is something dangerous and should be avoided where possible. Often missused by beginners.
  • Rules are the Knowledge Expert System, Facts are hold in the Working Memory and PatternMatching between the two causes actions to fire

    As an example of how Drools fires actions an how to control flow via semaphores Marc went through Fibonacci calculation to show us how recursion works the "Drools-Way"

    Great Pluses for Drools/BusinessRules:

  • + BusinessAnalysts understand the rules
  • + BusinessAnalysts can change them and therefore feel responsible for them and the rules are always up-to-date
  • + BusinessAnalysts can identify interference between rules
  • + it is easy to change the rules, so if you deal with often changing rules, give a BusinessRules a try
  • + with JMS you are able to change the rules, without a redeploy of an application, which sounds very nice
  • + only changed items cause a reevaluation. Everything else will not be recalculated

    Minus for Drools/BusinessRules:

  • - high learning curve since it is a different paradigma than coding in a programming language
  • - Performance problems if not applied correctly, can be solved with better knowledge
  • - the learning curve
  • - if you do not have at least a week of free time to experiment with it, forget it. There is a high learning curve involved!!!

    All in all the presentation was far to fast - considering non native speakers, non Drools-Experts being in the audience. One slide came fast after the other with quick explanations which just scratched the surface.

    Posted by Karsten at 20:02 | Comments (2) | TrackBack
  • [JP] JavaPolis started today

    After attending JAX and W-JAX, two Java conferences in Germany, I thought it is time to step up on an international level. The bad sideeffect is the 8 hours journey by train. Luckily I had some sleep on my way here in the German high-speed train ICE.

    I was already impressed when I arrieved here. There are hundreds of young people here speaking plenty of european languages. The conference is held in a big movie theatre, so each room is hugh, each room got a hugh, hugh screen and a great sound system, very, very comfortable seats - not so comfortable with a laptop :( - lots, lots of space for the seats. The drawbacks are missing powersupply at my seat, nothing to put the laptop an, besides my knees, and an expensive Wi-Fi for 50 Euro for five days. It really sucks to pay for this at a conference but hey it's the low-cost JavaPolis so I forgive this. Today is University Day and I went to "BusinessRules/Drools" and "EJB 3.0", but more on this later.

    Posted by Karsten at 10:43 | Comments (0) | TrackBack


    Struts and WebWork join forces

    You can read it everywhere, even on TheServerSide:
    WebWork merging with Struts
    IMO this move was overdue. Struts technology side could be highly enhanced by WebWorks technology and WebWork is almost useless with the current momentum and userbase. So the merger makes perfectly sense.
    I do not see it as a direkt rival for JSF. JSF is more component based and there will be enough frameworks emerging on the JSF-Side, coping with limitations of JSF and enhancing it.
    So Struts/WebWork is rather the JSF counterpart which is needed.
    I wish the Struts and WebWork teams the best in joining forces.

    Posted by Karsten at 13:34 | Comments (0) | TrackBack


    World of Warcraft uses Spring

    One of my hobbies is to catch error messages to see what kind of software/tools a system is using. And Magnus Mickelsson found and interesting one:
    World of Warcraft running Spring
    I guess it was the message from the Server in the online connection.

    Posted by Karsten at 17:52 | Comments (0) | TrackBack


    Error caused by PHP within Tomcat

    Just encountered an error at Digital Radio

    Warning: Too many connections in /var/jakarta-tomcat-4.1.27/webapps/digitalradio/export/digitalradio.de/php/dopublics/HverDB.php on line 437

    It was reproducable by hitting reload for a couple of times.
    I wonder why they run PHP inside of tomcat.
    And I wonder why they still use tomcat 4.1. This is soooo old.
    Here is the Screenshot:

    See more of my errorspotting

    Posted by Karsten at 11:23 | Comments (0) | TrackBack


    Eclipse 3.1RC2 with WTP rocks

    Today I decided to give the new Eclipse Release Candidate 2 (3.1RC2) a chance.
    It is amazing how fast it is and how smooth it is running. I really like the features the Eclipse team introduced with 3.1.
    And I am astonished about the Eclipse Web Tools Platform Project. I tried the latest Integration build (I20050617)
    and it is flying as well. The JSP editor is solid and I love the autocomplete feature. The XML editor looks good, and that is all I need atm.
    So I can recommend the new Eclipse 3.1. Go for it!

    Posted by Karsten at 13:27 | Comments (0) | TrackBack


    Switching to Roller nad dumping MovableType

    Today I made a decision. After my unsuccessful upgrade to MovableType 3.1 I am at a point where I think it is time for a new weblog software. Therefore I decided to go for Roller, which is a Java based open-source solution. MovableType is both - vendor locked and non-Java.
    I hate it to rely on code where I have no clue at all. (What the heck is perl ;) ) The only bad thing is that I have to switch hosting to get some Tomcat hosting, or I move the weblog over to my VServer.
    Anyone with suggestions?
    You might wonder why I chose Roller. THis is out of two reasons:
    It poweres a two great sites: jroller.com and the sun bloggers.
    It looks more sophisticated than blojsom or snipsnap or ...

    And I recognized Matt Raible on the commiter list of Roller ;)
    I just wonder if I should go for the source code and build it myself or take the finished tar?

    Posted by Karsten at 18:40 | Comments (2) | TrackBack


    Tech Talk Video with Matt Raible

    Just listened to the Tech Talk Video with Matt Raible over on TheServerSide. Nice to see him talk, although there isn't much great and new in his interview.
    I am currently trying to base a new app on equinox and it is a cool base. But more on my difficulties there later.

    Posted by Karsten at 13:34 | Comments (0) | TrackBack


    JAX 2005: Craig Russell about EJB 3.0

    Craig Russell from SUN talked at JAX yesterday. His talk was about the history and current issues in persistence. He claimed that “EJB 3.0 is the holy grail after the persistence war”.
    I wonder if this is true, but the future might tell.
    For him EJB 3.0 is a mixture of Hibernate, TopLink and JDO.
    JDBC 4.0 will bring a mapping of ResultSets to JavaBeans, which is one of the greatest news IMO, and much nice than this EJB 3.0 is so coooool hype bullshit.
    Craigs take away thoughts were:

  • Domain Object Model is king (so become an expert)
  • EJB 3.0 is becoming (whatever, whenever, …)

    Posted by Karsten at 10:08 | Comments (0) | TrackBack
  • JAX 2005: JSF Workshop

    I decided to go for this workshop out of two reasons:
    First we are currently starting a new project with one of our clients at Jato Consulting where we might haven’t decided the view component yet.
    Second JSF is a standard an one of my co-workers advocates standards.
    I must admit that I do not like Struts, mainly because I think that Rod Johnson is right about what he criticizes on the design of Struts. So JSF is – as a kind of standardized follow up of Struts – not my best choice at first hand.
    Nevertheless I also must admit that I haven’t looked at JSF in detail.
    After this Workshop: JSF looks like a cool concept.
    But besides being a standard I miss the USP of JSF (unique selling point of Java ServerFaces). Ok JSF got converters, which are nice, but still I miss the Aha- or Wow-Effect.
    The best part of the presentation was the CD with a running Eclipse-JSF-Tomcat-Tutorial-Environment. Excelent to have all this set up, including a clean Ant-Build. Nice.
    But besides this the workshop wasn’t really good. There were too many people. So there where JDK Problems here, deployment problems there… And there was nothing to do in the meanwhile, mainly because the Workshop character was missing. It was mainly a presentation including a CD with code and some setup issues. :(
    And I also – as always – get the impression that most developers are bad presenter. So I guess that I won’t go to a workshop at JAX anymore, but rather go for the management day.

    Posted by Karsten at 09:56 | Comments (0) | TrackBack


    JAX 2005: Intro

    The main part of the JAX 2005 started today with the three day conference full of sessions. There are more than 100 speakers in 128 Sessions. Wow. Unfortunately I might only be able to see hardly 20 of them. :(
    There are 45 companies having stalls in the lobby and a total of two soccer tables :)
    Compared to the W-JAX, which I attended in November 2004, this JAX is amazingly big. I guess that there are more than 1000 people here at the moment. But the Congress Center in Frankfurt is a convenient and nice location.
    I am looking forward to the parties tonight and tomorrow night including the free beer :)

    Posted by Karsten at 14:07 | Comments (0) | TrackBack


    JAX 2005 started today

    Today I made my way to Frankfurt with the ICE Sprinter to attend the JAX, a conference on Java, XML and WebServices in Germany. It is my second Java conference after the W-JAX last november.
    Today is ManagementDay or WorkshopDay.
    The management day focuses on SW-Development approaches and techniques like estimating, agile development etc.
    I am currently sitting in a workshop on JSF. But later more about this.

    Posted by Karsten at 13:34 | Comments (0) | TrackBack


    Open Source Survey Tool (Java)

    Due to my job at Jato Consulting I am currently looking at survey tools. We need a highly customizable solution (LDAP integration, access to our own role based security system, integration with existing data basis, ...) of a survey tool and I was wondering if there are any solutions out there.
    It has to be Java based since all the above mentioned integration parts are in the J2EE world.
    So far I found four survey tools, which are OpenSource and written in Java:

  • ePoll provided by Jcorporate and based on their famous Expresso Framework which I already worked with.
    Still it seams a bit heavy to use the Expresso Framework merely to have some Survey/Polling features.
  • SurveyTool is hosted at java.net, but not a lot of information is available at their site and I do not like the idea of having to use a full blown app server to run a survey.
  • JSP Survey Library hosted at SourceForge, but with no real release yet, only CVS access. But looks from the screenshots promising. Maybe I will give this one a try. And Carnegie Mellon University sounds like a good background for a project.
  • VTSurvey comes from another university (Virgina Tech) and is also hosted at SourceForge. From the release number (2.2.3) it sounds pretty stable. But what made me hesitate is the fact that it stores the data into XML on the filesystem. I definitely prefer a DB solution for persistence of the survey data.

    Who has got experience with any of these tools?
    Can anyone suggest another open source survey tool written in java?

    PS: if you post a comment, please be aware of the fact, that all comments with a ".com" in it get denied by my spam blocker. It is sad, but I had a lot of comment spam and with this I reduced it totally.

    Posted by Karsten at 11:09 | Comments (7) | TrackBack
  • 15.04.05

    Yoda teaches the right development attitude

    One of the best articles about the attitude a developer should have, was posted by Ted Neward at his blog - The Mountain of Worthless Information.
    Seams like Yoda is one of the best teachers ever.

    Luke: All right, I'll try.
    Yoda: (emphatically) NO. Do, or do not. There is no try.

    Ted Neward changes this to:
    Ted: (emphatically) NO. The system is, or it is not. There is no should.

    So never say: "The system should ...".
    Instead ask yourself: "What are my assumptions and do they always hold, or is there a flaw somewhere?"
    This way you will find the truth.

    PS: This works only in a non Microsoft based development environment. If you develop MS Access never make the assumption of a functioning system.

    Posted by Karsten at 09:57 | Comments (0) | TrackBack


    Bloglines caught me

    After reading a lot about Bloglines, I decided it was time to give it a try. Now I do not have to look around at my favourite sites by myself. All gets aggregated into my online feedreader: Bloglines | karstenvoges's Blogs
    I get notified of changes in the browser via a Firefox extension and I can easliy subscribe blogs to it.
    I just love it.
    It is especially great for blogs with high quality but less frequent entries. I do not miss them anymore and I do not have to look at things I read already since they automatically disappear.
    Great stuff.
    I just wonder when I have to pay for it.

    Posted by Karsten at 17:41 | Comments (0) | TrackBack


    Coolest Shopping cart powered by Ruby

    Have a look at PanicGoods and their great drag and drop functionality.
    Awesome technology.

    Posted by Karsten at 19:46 | Comments (3) | TrackBack

    Stringified representation of arrays in Java

    Jeff Mesnil has a nice trick for Stringified representation of arrays in Java.
    Thanks mate.

    Posted by Karsten at 19:39 | Comments (0) | TrackBack


    Spring Web Flow looks promising

    As Keith Donald wrote, Spring Web Flow is coming with Spring 1.2 and I must confess that it looks very promising.
    I hope to find some time to give it a try.
    The best thing for a starter like me is the outstanding documentation about it.
    Anyone else tried it already?

    Posted by Karsten at 17:16 | Comments (0) | TrackBack


    Looking for Java at Apache?

    You are interested in all Java related projects at Apache? After Java Programming Notes and All OpenSource JavaTools listed I found another nice site today:

    Java at Apache


    Posted by Karsten at 09:23 | Comments (0) | TrackBack


    Single Sign On with NT Domain logins into WebApp

    I did not knew that it is possible to use the Windows Domain login as a SSO source for a J2EE webapp. But it is. I cam accross it at Lucas Jellema post
    He refers to the description at Samba: JCIFS NTLM HTTP Authentication
    I do not need this feature in any of my companies webapps now, but it is nice to know about this feature.

    Posted by Karsten at 10:37 | Comments (0) | TrackBack


    Java Programming Notes

    Sometimes you forgot about array specifics, want to know more about String Regular Expressions? Classpath handling? GUI specifics? or any other Java specifid?
    Then there is a site for you:
    Java Programming Notes
    Nice list of a references, well structured/ordered.
    So it is time to forget all the details and always go there as reference ;)

    Posted by Karsten at 09:16 | Comments (0) | TrackBack


    All OpenSource JavaTools listed

    Are you looking for a open source caching solution in java? or forum software? or a database? or ...
    And you were browsing around at jakarta, Sourceforge, Google etc?
    Searching is over. You can find all OpenSource Java tools listed on Open Source Software in Java(tm) at java-source.net.
    I like the site and I hope you are enjoying it as well.

    Posted by Karsten at 17:46 | Comments (1) | TrackBack

    javablogs.com has Problems

    javablogs.com has some Problems lately:

    500 Internal Server Error
    Could not create Hibernate transaction; nested exception is net.sf.hibernate.JDBCException: Cannot open connection
    Caught an Ognl exception while getting property blogEntries

    And it is often not reachable. This is a pitty since I like the site a lot.

    Posted by Karsten at 17:36 | Comments (0) | TrackBack


    Longest StackTrace ever on TSS

    It seams like TheServerSide.com had a problem but recovered already. It is the longest stack trace I have ever seen in a webpage. It is far too long and I copied it, so you can see it here:
    It tells a lot of interesting things about TSS.com. So they use:
    Kodo from solarmetric.com

    And you can even see the Table structure they have.
    Seams like no good errormessage delivered to customers, or?

    Posted by Karsten at 22:24 | Comments (4) | TrackBack


    Best bug tracker?

    What kind of bugtracker do you use in your project?
    At Skex/MojoKnows we used Bugzilla and I was very happy with it. The reporting functionality and the integration with CVSMail was great. And I miss it already.
    Now at Jato Consulting they had
    Mantis, a PHP solution, which looks a bit fancier but lacks some functionality like sendmail integration, CVS integration, etc.
    But it might be nicer for clients to report bugs.
    And since all the opensource projects can use it, I got a bit in contact with JIRA from Atlassian. I must admit that after getting used to bugzilla that much it is different to use JIRA and I like buzilla better merely for the reason of lazyness.
    Do I miss any other good bugtracker?
    What are your experiences? What do you prefer/like/dislike?
    I already ordered a vserver to play a bit around on a machine with bugtrackers.

    Posted by Karsten at 14:35 | Comments (6) | TrackBack


    W-JAX: Key lessons day 1

    The key lessons at W-JAX Management day have been:

    Customers are like girls and therefore they need individual consulting and development in an iterative way.

    If there isn’t a SW for a business process but building a SW for the process is to expensiv a lot of companies adjust their business processes to fit a standard as SAP.

    Software development is a craft and therefore needs tools. Automated Test, Profiling are some of them.

    Posted by Karsten at 18:22 | Comments (0) | TrackBack


    Why is blogging so unpopular in Germany

    The last couple of days I went to W-JAX, a java conference with 500 other attendees, and nobody, really nobody blogged about it. WOW!
    Unbelievable in the US, just have a look at javablogs.com and type in ApacheCon and you get a couple of results.
    Why is nobody blogging over here in good old europe? Are we to shy? Is it a problem of adaption (nobody does it therefore nobody tries it) ?
    But at least some people must read blogs, since some people recognized my name from my badge ("Hey, aren't u the guy with the weblog?").
    Or is it a language thing? There aren't really blogs out there about programming in plain old German.
    mmmhhh. makes me wonder why I am blogging in English most of the time. Well, I guess it is because English is the language of the web and I want to give more people the opportunity to consume the trash I blog. And I want to tell the world out there, what is going on in Germany, that we got great Java conferences as well, that we know how to write code, vote for a good government ;) and are rather poor in writing English. At least according to my beloved mother.

    Posted by Karsten at 22:30 | Comments (3) | TrackBack

    Nice sessions at W-JAX

    Today was the first session day at W-JAX and I enjoyed it a lot. Most of the sessions were very interesting and I must admit, that I learned a lot today. I have been to the following sessions, ordered by my favourites:

    1. O/R Mapping
    2. J2EE Security - WebApps
    3. Development of Eclipse Plugins
    4. Tomcat 5 and Apache 2 in Clusters
    5. JMX

    Three Keynotes by Compuware, Microsoft and Sun were interesting but nothing special. Hopefully I find some more time tomorrow to tell you about the most interesting parts and further details from the W-JAX sessions.

    Posted by Karsten at 00:18 | Comments (0) | TrackBack


    Management Day at W-JAX

    Today was the management day at W-JAX with nine presentations in total. This is just a brief summary of what happend on day one and my thoughts about the presentation and the conference in total. Probably none of you who is not from Germany knows W-JAX. It is a conference on Java, XML and WebServices and organized by the publisher Software & Support Verlag and presented by the Java Magazin and the XML & Web Services Magazin.
    Since we got winter now it is the W-JAX, while in summer they present the JAX. ;)
    But now to the sessions in detail:

    Chances and Riscs of J2EE Projects
    this one was presented by openknowledge and not too good. Additionally they went totally overtime and had their hands in the pocket all the time. Big minus on that one.
    New for me was that J2EE includes a development process, and I recalled a lack in my knowledge about the security features and roles J2EE is providing.
    Freedom of Choice = Ordeal of Choice
    Interesting fact: J2EE sums up to more than 10.000 pages
    Crux: customer got an individual problem, but J2EE provides a general solution platform

    Planning, estimating and correcting in agile projects
    This was a good one and I will write more about it later.

    Model based project management
    very sales-like presentation.
    Not a lot of interesting news. Just the moving the Model based approach from development to project management.

    SOA - Beyond the buzzwords
    SOA Wrappers around big monolithic applications is not the right SOA approach. Instead one should split the business process in smaller pieces and gain a deeper understanding of the business process on the fly.

    Make, take or buy?
    One of the best presentations today was from Mathema Software. It highlighted the three decisions possibilities (Make, take or buy) from the viewpoint of developers (his favourite is make, since it makes more fun, comes with freedom and involves coding) as well as from the Management (who favours Buy, because the like to have someone to sue if something goes wrong).
    Big dilemma; if neither 'Buy' nor 'Make' are possible, because the first is not available and the second to expensive , many companies adjust their business process to an existing software instead. Wow. That's the big power of companies like SAP.

    Tools for J2EE application performace
    This was an english presentation from a funny dutch java advocat from Quest. The first product centric presentation and the funniest so far.
    The tools looked not to bad, but the presentation was very confusing and a bit hectic. I guess I have to take a look at their booth they got in the entrance hall.

    MDA and UML2
    Abstraction is not a higher level view. It sometimes can mean that, but it isn't just that. That was the major part of this speech, and I liked it.

    Interative development
    The waterfall process was a missunderstanding. The father of it, W. Royce, saw it only for small and easy projects and even then with an iteration of two or three times, with is already an iterative process.
    Agile gets less in each iteration.
    Not estimation of what is missing, but estimating the probility of getting it done for the iteration.

    social dynamics in projects
    Strenght of programmers: Analysing and abstraction, complex technical issues
    Weacknesses: integral perception (Fear, politics, ...)

    So that was Day One: Management Day.
    Tomorrow is the main conference and I hope to find some time next night to give some further insights into it.

    Posted by Karsten at 01:26 | Comments (0) | TrackBack


    First day at W-JAX conference over

    The first day at my first Java conference is over and I enjoyed it a lot, although my brain got a bit dizzy to follow it all.
    Luckily I got a ticket for the famous SechsTageRennen (SixDayRace) which is a cycling competition here in Munich. So I got to go but I hope to find some power and time tonight to blog a bit about the Sessions held today and my impression of this conference.

    Posted by Karsten at 18:43 | Comments (0) | TrackBack

    Plenty of new releases out

    Seams like I missed a lot of releases lately:
    MovableType reached 3.12 and I am still stuck to 2.6x. This is definitly on my upgrade to do list.
    Apache Jakarta Tomcat 5.5.4 is the first Tomcat 5.5.x which is declared stabe release by the team.
    Apache Struts 1.2.4 and I haven't worked with Struts since 1.1.x, so it is another item on my list.
    Firefox is out and I am still stuck with Mozilla.
    and the list goes on. I hope to find some time this week to update.

    Posted by Karsten at 00:02 | Comments (0) | TrackBack


    W-JAX starts tomorrow

    Tomorrow starts W-JAX a conference on Java, XML and Web Services. I have never been to a Programmer's conference and therefore I am looking forward to it. All in all it will be four days and I really apreaciate my bosses at Jato Consulting for giving me the opportunity to go there. It is here at munich so unfortunately it does not involve any travelling, but it's not to bad to stay home.
    The greatest highlight I can see is the speach of James Gosling, but I am also looking forward to all that sessions.
    I hope I can find the time to write some news at the end of each day here.
    So stay tuned for the latest news from W-JAX. ;)

    Posted by Karsten at 23:14 | Comments (0) | TrackBack


    Hibernate 3.0 = EJB 3.0

    In an interview at JavaFree.com.br
    Gavin King talks about Hibernate 3, EJB 3 and OR in general.
    It was new to me, that Hibernate 3.0 will be an implementation of the EJB 3.0 specification. But no wonder, since Gavin works now for JBoss. So Hibernate becomes an 'offical' standard? Not bad, since it is good technology, but a bit smellie IMO. So JBoss got already the implementation of an upcoming specification. How? they just put someone into the JCP. Nice move.
    It's a nice interview. Go check it out.

    Posted by Karsten at 12:04 | Comments (2) | TrackBack


    Change a project in eclipse to Java?

    After I checked out a project from CVS, and forgetting to check it out as a Java Project, I couldn't get it changed.
    Does anyone know how to change a project to a new kind of project?
    Or to change one from Java to Tomcat?
    It really sucks to remove the project and then create it new with the wizards. I could not get it changed with the project properties.
    Can anyone help?

    Posted by Karsten at 09:49 | Comments (3) | TrackBack


    great install tool: MyJavaPack

    Matt Raible hinted me to MyJavaPack a nice open source installer of Java developer goodies (e.g. Eclipse, Ant, Spring, Hibernate, Tomcat, ...).
    That's a good thing to install a complete infrastructure on a new machine. Looks like a great tool.

    Posted by Karsten at 16:33 | Comments (0) | TrackBack


    GMX powered by Tomcat

    Just encountered an error at GMX (big WebMail Provider) and stumbled across a Tomcat error.
    So I got the information that they are using:
    Apache Tomcat/4.1.24-LE-jdk14

    Nice. I wonder what other open source products they are using?
    The only thing I can tell from the website is, that they are using CoreMedia which seems to get quite popular in Germany. Isn't BILD also using CoreMedia?

    Posted by Karsten at 17:30 | Comments (2) | TrackBack


    Open Source Maturity Model

    Are you thinking of using OpenSource for a project but you do not know if the OpenSource product is mature enough and if it suits your needs from a business perspective? The you should check the Open Source Maturity Model (OSMM) out.
    Bernard Golden, CEO of Navica Inc. tells you how to proceed either in his book ("Succeeding with Open Source") or in short form in an interview at SearchEnterpriseLinux.com ("Evaluate open source, or else")

    Posted by Karsten at 20:52 | Comments (0) | TrackBack


    JDeveloper at JUGM

    Today I went the first time to a JUG Munich Meeting. Georg Neumann, Principal Member of Technical Staff, Oracle, talked about the development process, history and future of JDeveloper, Oracles Java IDE.
    The most interesting things:

  • Due to Eclipse's and IntelliJ's small release cycles, JDeveloper will get split into three editions: Java, J2EE and Studio versions
    The first two might even get distributed for free. Amazing how Eclipse forced the market in that respect.
  • as Source Code Management tool Rationals ClearCase was not sufficant enough to hold all the data
  • the development team for JDeveloper is very distributed (USA, UK, India, Germany and OZ)
  • in the final presentation of JDeveloper itself it looked a bit like a clicky-clicky tool for dummies but with features for professionals (debugging, profiling, ...)

    But it was all in all interesting and I guess I might go there again.

    Posted by Karsten at 01:21 | Comments (0) | TrackBack
  • 17.08.04

    Eliminate declaration of Log variables

    Thanks to Matt Raible's post on "log.debug vs. logger.debug" I learned another trick in OO Design.
    It is possible to eliminate the need to initialize a log variable in each class when you insert a statement in the superclass.
    Before in every class:
    protected final Log logger = LogFactory.getLog(MyClass.class);

    After merely in the Superclass:
    protected final Log logger = LogFactory.getLog(getClass());

    I often forgot to change the classname after I copied some code, so I hated thes logger declarations anyway.

    Posted by Karsten at 14:42 | Comments (3) | TrackBack


    Java User Group München

    Morgen trifft sich die Java User Group München mal wieder und ich habe vor mal dort vorbeizuschauen. Wusste gar nicht, dass es sowas hier gibt. Bin nur darauf aufmerksam geworden, als ich in verschiedenen Javablogs über JUG Treffen gelesen habe.
    Bin schon gespannt wie das wird und was dort für Leute sind.
    Das Thema "Making Of JDeveloper" haut mich ja nicht soo vom Hocker, aber vielleicht wird es ja doch ganz interessant.

    Posted by Karsten at 23:31 | Comments (0) | TrackBack


    Intro to Spring in German

    Finally there is a introduction for the Spring framework in German.
    It is a nice read and it is written by Jürgen Höller, the Co-Lead of the Spring Framework.
    IMO it is a bit centred on the rationale why to choose the spring framework. But since it is not well spread in Germany yet a focus on the rationale side comes quite handy.
    I missed a bit the history of Spring and a more detailed example with some more code.

    Posted by Karsten at 11:45 | Comments (0) | TrackBack


    Sourcebeat: Spring Live

    Today I bought myself Spring Live by Matt Raible from Sourcebeat. Sourcebeat offers books in a very unique way. You subscribe to a book for 12 months, getting updates every couple of months about the book you subscribed to. This is a great deal IMO, since a lot of books in the programming world are outdated very fast. But with this electronical publishing model Sourcebeat breaks this vicious circle and delivers good books.
    So far I just read two chapters of "Spring Live" but it is a great introduction to the Springframework with a lot of code and examples and how to solve things. I like it and recommend it to anyone interested in the Spring Framework.
    Since it comes with a lot of good code, I guess I will use it to set up some things for work and private playground.
    Has anyone experience with other titles of sourcebeat?

    Posted by Karsten at 20:13 | Comments (3) | TrackBack


    6 Best Practices for J2EE Architecture

    6 Best Practices for J2EE Architecture is a nice how to for learning some very important things in J2EE apps:
    Lesson 1: Never Shortcut Server-Side Validation
    Lesson 2: Security is Not an Add-On
    Lesson 3: I18N is Not a Just a Buzzword Anymore
    Lesson 4: Avoid Common Mistakes With MVC Presentation
    Lesson 5: Don't Be Embarrassed by POJOs
    Lesson 6: Data Access Does Not Mandate O/R Mapping

    And I think it is a good advice for the Springframework as well, since all the things it advocates are solved by Spring very nicely.

    Posted by Karsten at 00:03 | Comments (0) | TrackBack


    Inversion of Control/Dependency Injection

    Seit einiger Zeit geistert ein neues Muster (Pattern) durch die OO-Gemeinde: Inversion of Control (IoC) bzw Dependency Injection.
    IoC ist die ältere Bezeichnung, welche dann Martin Fowler in seinem weitreichenden Artikel (Inversion of Control Containers and the Dependency Injection pattern) umnannte in Dependency Injection.
    Die immer komplizierter werdenden J2EE Spezifikationen haben sicher einen Grossteil dazu beigetragen, dass dieser neue Ansatz derart populär geworden ist und in den letzten Jahren neue Frameworks mit IoC nur so aus dem Boden geschossen sind.
    "Inversion of Control" / "Dependency Injection" ist ein Pattern, das die Verbindung verschiedener Software-Komponenten (sowie meist das SW-Testen) schneller und einfacher macht.
    Wer sich näher dafür interessiert, empfehle ich den oben genannten Artikel von Martin Fowler zu lesen, bzw. einen Blick auf die Dokumentationen der folgenden Frameworks zu werfen:

    Posted by Karsten at 16:10 | Comments (0) | TrackBack


    SW-Entwicklung und Entropie

    Eine nette Anekdote zum Thema SW-Entwicklung und Entropie:
    Ein Arzt, ein Bauingenieur und ein Softwareentwickler diskutieren darüber, welches der älteste Beruf der Welt ist. Der Arzt sagt: "Da Gott Eva aus der Rippe von Adam schuf und dafür eine Operation notwendig war, kann ich mit Recht behaupten, dass Arzt der älteste Beruf der Welt ist." Der Bauingenieur meint dazu: "Aber schon viel früher steht, dass Gott die Ordnung von Himmel und Erde aus dem Choas formte. Als erstes war daher Gott ein Bauingenieur und daher ist mein Beruf der älteste."
    Der Softwareentwickler lehnt sich zurück und sagt selbstbewusst: "Aber wer denkt ihr denn hat das Chaos erschaffen?"

    Posted by Karsten at 11:32 | Comments (0) | TrackBack


    Einführung: Springframework

    Bis heute gibt es noch keine deutschsprachige Einführung in das Springframework (dt: Frühlingsrahmenwerk ;)), weder beim Java Magazin noch beim Java SPEKTRUM ist ein Artikel darüber erschienen, dabei ist es somit das beste Java Framework das ich kenne.
    Seit längerem interessiere ich mich für und arbeite mit dem Springframework und bin von ihm hellauf begeistert.
    Leider gibt es nur englischsprachige Einführungen, hier mal eine kleine Auswahl:

    Was ist Ihre Meinung zum Spring Framework?

    Posted by Karsten at 22:32 | Comments (0) | TrackBack


    Interview with Rod Johnson

    Interview With Rod Johnson
    I can strongly recommend to view this interview which durates 30 minutes. In it Rod Johnson (Founder of The Spring Framework; Author of 'J2EE without EJB') talks about the springframework, AOP and other things in the J2EE world.
    Alll in all I really like these Tech Talks. It is great to hear and see the interview instead of merely reading it. It is easier to consume and remember.

    Posted by Karsten at 17:00 | Comments (0) | TrackBack

    Internationalized data in Hibernate

    Just read Gavin Kings article about Internationalized data in Hibernate on TheServerSide.com and can recommend it. In one of my projects we had a similar problem o storing language dependent values in a table, but Gavin Kings solution seams nice.

    Posted by Karsten at 08:47 | Comments (0) | TrackBack


    Website: java.blogs

    Today I registered my blog at java.blogs after I read them almost daily since over a year. I like the site since the blogs there really deal with java things only and I like the daily email with the most favourite blogs. So I do not have to go there and search for readworthy things. A really good feature.
    If you are interested in Java/J2EE things I can strongly recommend this source. They also provide a nice search function, so if you are interested in comments about a product or so you can look at what others wrote about it and therefore it is a nice aggregator place.
    I merely hope that 30% blog entries in my Java/J2EE category are enough for their knock out description of "Your blog must be 'largely' to do with Java".
    You can find my Weblog at java.blogs with some stats about the usage.

    Posted by Karsten at 16:11 | Comments (0) | TrackBack


    A Web-based Medical Image Database System

    As I stated already in my projects I wrote my master thesis (German: Diplomarbeit) at the Nanyang Technological University, Singapore.
    You can find it online here form today on: A Web-based Medical Image Database System (WebMIDS)

    And here is the Abstract:

    In this report a web based medical image database is introduced. First, the requirements due to the domain of medical images in the context of a web application are specified and evaluated. This evaluation led to the aim of building a secured web application with new query functions at almost no costs.
    The project is embedded in a brief description of current approaches and solutions in the domain of medical image databases.
    For the implementation, J2EE is used together with the Expresso Framework. J2EE was chosen because of its strong libraries and maturity. The Expresso Framework provides useful functionalities for this project such as user management, a secured workflow and an Object-to-Relational mapping. These functions are combined with a vital development community and so Expresso was given preference over other frameworks.
    Although DB2 with its Image Extender would have been preferred, MySQL was chosen as database system for the implementation due to limited funds. MySQL is a free, reliable and fast database and the lack of some functions are no big drawback for this system and are overcome by the implementation of the application.
    The database design is a good reduction to the essentials, serving the different needs of users from a medical and a non-medical background.
    A dedicated server was set up with Linux as the operating system and with Tomcat as servlet container. The features of the system are described in a user manual and an administrator manual. Features include the uploading and the retrieval of images with a normal web browser via the Internet. The implementation will be up and running at http://mrcas.mpe.ntu.edu.sg after an in-house test phase.
    To make this system a long-lasting one some future extensions are outlined and the name WebMIDS was chosen.

    For this thesis I got a grade of 1,3 which is equivalent to A- from Prof. Dr. Donald Kossmann, who was teaching at my home university back then.
    The biggest junk was the implementation of the web application, which is not included since the NTU wanted to keep the code.

    Posted by Karsten at 11:05 | Comments (0) | TrackBack


    Erik's Linkblog

    Erik's Linkblog is one of the greatest sources of links, regarding the Java, IT and mobile news.
    I stumbled accross Erik's site after having some referrers in my webstats coming from his linkblog. So I had a look at it and I am a regular reader of it.
    So I can strongly recommend it, since it is a good source for a quick Java/IT/mobile overview what is going on in the blogworld and what is interessting.

    Posted by Karsten at 00:00 | Comments (0) | TrackBack


    Impressed by Springframework

    I used the JDBC part of the Springframework to connect to an Oracle DB and call a stored procedure. So for the beginning I simply used the DriverManagerDataSource since it was sufficient for the beginning. But after having a greater load and the need for a connection pool I switched to Apache's Jakarta Commons DBCP and was impressed how easy it is to switch. I merely copied the .jar into the WEB-INF libs and changed my beans-config.xml by replacing the datasource class name of the bean definition with "org.apache.commons.dbcp.BasicDataSource".
    And that's it!
    Magic .... :)

    Posted by Karsten at 09:51 | Comments (0) | TrackBack


    Resources: Software test

    This is a short overview about some resources related to software testing. After attending a lecture about testing of software last year at my university I went for a certificate for ISTQB Certified Tester - Foundation Level. I can strongly recommend this education/certificate since it gives you good advice on how to test and insight views into testing.
    The International Software Quality Institute (iSQI) also helds a couple of big events like:

  • World Congress for Software Quality
  • CONQUEST 2004
  • iMPROVE 2004

    For German readers I can highly recommend:

  • Basiswissen Softwaretest von Andreas Spillner, Tilo Linz
  • Software-Test von Georg E. Thaller
  • Unit Tests mit Java. Der Test-First-Ansatz von Johannes Link, Peter Fröhlich
    and a good tool list as well as white papers is available from Imbus AG.

    For the Java world JUnit.org is the tool to know and the place to go for further information about the test-first or test-driven development methods.
    Fostering my testing capabilities is on my tbd. list and I will write some more thoughts about this subject soon.

    Posted by Karsten at 00:04 | Comments (1) | TrackBack
  • 27.06.04

    Eclipse 3.0 finally released

    Although announced for the 30th June, the Eclipse Foundation has released the final version of Eclipse 3.0.
    I am happy about the end of all the Milestones (M1 to M9) and updates every couple of months, destroying plugins and the total IDE setup.
    And it is nice to see all the new features since version 2.1 compiled in one New and Noteworthy Document.
    After I omitted all the Release Candidates I will upgrade to the final version and looking forward to see all the plugins working stable again for longer than one month.

    Posted by Karsten at 15:54 | Comments (0) | TrackBack


    Eclipse Community Education Project

    Due to Gabriel Chua's weblog entry about a Eclipse Plug-in Development Course I stumbled over the Eclipse Community Education Project which is an Eclipse Technology Research Subproject. There you can download a free video course on Plugin-Development for Eclipse. Unfortunately this course is based on Eclipse 2.1.x and not the new Eclipse 3.0. This is quite sad. And the course is a bit outdated therefore. It is a well designed course with 9 lessons and comes as a real player stream or download.
    Looking forward to see newer material in this project which could be a great resource, but up to now it is a bit empty and useless.

    Posted by Karsten at 01:20 | Comments (0) | TrackBack


    Java Studio Creator announced

    Sun announced "Java Studio Creator" for Monday. Just read the news on Heise about this. The formaly known as "Project Rave" IDE will be available on Monday for 99 Dollars. Currently you can access a Java Studio Creator Early Access Release, but you have to register to do so. This stopped me from giving this new tool a try today. I wonder how it will "feel" like compared to my IDE of choice, Eclipse.
    With this tool Sun tries to attack VB.NET and the easiness of M$ development tools. Therefore I guess that the IDE will be very graphic orientated and encourage click based development. I will definitely give it a try. Or does anyone got already experience with it?

    Posted by Karsten at 18:39 | Comments (0) | TrackBack


    Joke: Two ints and a Float are in a bar...

    madbean.com: [joke] Two ints and a Float are in a bar...

    Two ints and a Float are in a bar. They spot an attractive Double on her own. The first int walks up to her. "Hey, baby", he says, "my VM or yours". She slaps him and he walks back dejected.
    The second int walks over. "Hey, cute-stuff, can I cook your Beans for breakfast". After a quick slapping, he too walks back.
    The Float then ambles over casually. "Were those two primitive types bothering you?", he remarks.
    "Yes. I'm so glad you're here", she says. "They just had no Class!"

    Posted by Karsten at 13:43 | Comments (0) | TrackBack


    Prevent Concurrent Updates through Webinterfaces

    When you provide a set of special administrators a webinterface to update a set of data, how do you insure, that the data gets not updated concurrently?
    In this case concurrently means, that two persons retrieve the data into a form field and both do updates based on this data. Now in a naive developed webapp, the data of the first save will be lost, since the second one will overwrite it.
    To prevent this you can insert a new date field into your database and store there the last value of an update. This date data is stored in a hidden form field and whenever an update is called you check if the submitted date is the one in the DB. If true the data in the form field was up-to-date and an update on the DB is save. Otherwise you have to reject the update and send the new data to the client to enable him to update his part based on the new data.
    This is a trick I just learned from Toni at Jato Consulting.

    Posted by Karsten at 00:19 | Comments (0) | TrackBack


    My IT projects

    Jato Consulting

    Shortly after my arrival from Australia I started to work for Jato Consulting were I got involved in different projects they do for BMW and Siemens.
    They give me the chance to look at different projects and work with different technologies (XML and Digester, Java Timer or J2EE web apps in general).


    In Melbourne, Australia, SKEX IT Services gave me the opportunity to gain experience as a development manager. At MojoKnows I was responsible for a development team of four persons, planning releases/tasks in a XP (eXtreme Programming) sort of development process. Beside my team leader role I was 50% of my time coding. My specialties where JMS (OpenJMS) and Struts, but we used a lot of other tools like Hibernate (with XDoclet), Ant, Bugzilla, Tomcat, MySQL, ...

    NTU Singapore

    At the Nanyang Technological University, Singapore, I wrote my master thesis "A Web-based Medical Image Database System (WebMIDS)". For the implementation, J2EE is used together with the Expresso Framework. MySQL was chosen as database system for the implementation due to limited funds.
    A dedicated server was set up with Linux as the operating system and with Tomcat as servlet container.


    At Apeiron, a small but very skilled SoftwareService Company, I was participating in the redesign of Almeda and building my first J2EE skills. Almeda is technologically solved with the Vignette Storyserver (a TCL based Template and Content-Management System).
    My first J2EE experiences were encountered by experimenting with Struts and an in-house DB framework to build a Intranet Timesheet on a Tomcat server.
    I can strongly recommend Apeiron for your projekt in the Java World. Thanks to Christoph Kipp and Andreas Prohaska for the great time there (2001-2002).


    My very first IT job was at Siemens, where I was building Intranet applications based on Cold Fusion. The team there was responsible for the business communication of ICN VD. The VD-Trainingsportal and a Intranet FAQ was one of the things i developed there with the help of ColdFusion and NetFusion Objects.
    It was a great time and I was touched by the gratification for my extraordinary work.

    Private Projects

    In my private life I started the Mitfeierzentrale, build the Fasanenhus site and currently a new project is in the pipe.

    Posted by Karsten at 08:38 | Comments (0) | TrackBack


    How-To: Comments in JSPs

    There are two kind of comments possible in a JSP. HTML comments (or visible comments) and JSP comments (hidden comments).
    <!-- my comment visible for the client -->
    <%-- my comment not send to the client --%>

    In one of my projects the JSPs were documented very well with big blocks of comments. Navigating to the point of interest within the JSP code was very fast. That was very good and helped a lot. Unfortunately all comments where in HTML style, so first of all everybody could read them (which was not a problem in our case) but they also caused latency in the download and increased the web traffic (which was not good in our case).
    Changing the comments to not generated output comments reduced a webpage for about 20%.
    So in general I recommend to use only hidden JSP comments. The only reason I see in HTML style comments is to use it for debug reasons like:
    <!-- Debug: myVariable = <%= myVariable %> -->

    Posted by Karsten at 22:16 | Comments (0) | TrackBack


    Refactoring to generalize

    Today at work I was refactoring some of my initial code and it was a great feeling.
    First I was doing something like

    myUpdate(long id, byte bytAnswer1, byte bytAnswer2, byte bytAnswer3, byte bytAnswer4, ....)

    to fill a stored procedure with

    MyCallableStatement.setByte (4, bytAnswer2);

    Then I realized how stupid it is to make the method signature dependable on the amount of AnswerBytes. So I changed it to

    myUpdate(long id, byte[] Answers)

    which is much shorter and better from the maintenance point of view.
    This also gave me the opportunity to change 10 calls of the above setByte statement to a generic

    final int anzAnswers = 10;
    for (int i=0;i MyCallableStatement.setByte (i+1, Answers[i]);

    I know that it is nothing special, but was a great feeling for me to see how the code evolved and to see the step by step improvement.

    Posted by Karsten at 14:45 | Comments (0) | TrackBack

    TheServerSide: Caching in web applications article

    On TheServerSide a nice article on Enhancing Web Application Performance with Caching was published. Neal Ford from The DSW Group explains the usage of the Flyweight Design Pattern (also from the Gang of Four book) to share objects. That is not my definition of caching, but it reduces the memory usage and helps therefore for the overall performance.
    Therefore the article is worth reading.

    Posted by Karsten at 09:19 | Comments (0) | TrackBack


    Pragmatic Code Documentation

    Robert Watkins has written a nice blog entry on How not to comment code and I totally agree with him.
    Too much comments are definetly a drawback and slow down the experienced user as well as a novice.
    But my experience in a various of projects is, that the not or bad commented source code is the one you find most often. And that is really, really bad. Javadocs a one of the greatest inventions. So, stop reading here and start writing comments in your source. ;)

    Posted by Karsten at 17:19 | Comments (0) | TrackBack


    Avoid NullPointerExceptions

    This is a simple trick to avoid these nasty NullPointerExceptions:
    instead of
    if (myVar.equals(MY_CONSTANT))
    simply write
    if (MY_CONSTANT.equals(myVar))

    The second form is better and more stable since it avoids NullPointerExceptions and merely will evaluate to false if myVar is null. But the first will throw a NullPointerExceptions instead. This is what I call defensive programming. Patrick at MojoKnows was a big advocate of defensive programming.

    Posted by Karsten at 03:30 | Comments (7) | TrackBack


    Article on Spring, Struts and Hibernate

    Wiring Your Web Application with Open Source Java by Mark Eagle is a nice article about building a web application with Java which uses a combination of UI, business logic, and persistence. This article introduces a way to leverage open source software to lessen the burden and uses Spring, Struts and Hibernate.
    The article is well written although it lacks some more code and is very high level. But for a first impression on how to wire things and if you are not familiar with Spring it is a nice introduction.

    Posted by Karsten at 11:41 | Comments (0) | TrackBack


    Whitespaces in debug/error statements

    Everybody knows that tailing whitespaces can cause a lot of errors. But how to prevent it?
    While working in Australia for MojoKnows Patrick developed a Java program for checking at least all property files for this.
    Another thing I read in a book was to use a logging like:
    log("Error with:'"+myporperty+"'.")
    which will show something like:
    Error with:'myporperty '.
    where you can easily detect the fault.
    Nice logging IMHO.

    Posted by Karsten at 21:23 | TrackBack


    Experience Springframework

    Today was the big day with my first usage of the spring framework. And I am starting to like it very much. After reading "Expert One-on-One J2EE Design and Development" by Rod Johnson (Wrox, 2002) already a while ago, this was on my To-Do list, but up to now I never found the time to dig deeper into it and solve something with it.
    For today I only used the JDBC package with stored procedures (Oracle) and it took me a while to get it all running (I even guess that it took me longer than plain JDBC code would have). But the time and effort was worth it. The mailinglist and the forum of the spring framework have been a useful ressource for removing some problems.
    Now I think about using it for wiring up the application as well to gain some flexibility and to dig deeper into spring. The quality of the documentation and the framework itself are outstanding. Big compliments to the spring dream team.
    I highly recommend J2EE developers to take a look at the spring framework for help in the solution domain of J2EE.

    Posted by Karsten at 16:45 | TrackBack


    Eclipse 3.0 M9 is out!!!

    After I read another blog at how IDEA gets more and more buggy and looses some advantages over Eclipse I am happy to be part of the Eclipse hype ;)
    I think I tried every Milestone of the new Eclipse 3.0 and it is really amazing how it evolved and how stable and professionel this product is. Since yesterday the new Milestone M9 is out. Check out the Eclipse 3.0 M9 New and Noteworthy.
    My two favourites are the code folding and the highlighting of the exit points of a method.
    But the rest of improvements is also astonishing. But simply check it out yourself.

    Posted by Karsten at 14:24 | TrackBack


    Java Scheduler

    Tomorrow I will go working again and my task is some scheduler for retrieving SAP data on a regular base and handle the data.
    Hmpf. Never done any scheduling in Java. So my day will start with some googling about the topic.
    Heard about this Quartz Scheduler since it was mentioned a couple of times on theserverside.com but that is all my knowledge so far, but I'll keep u updated about the solution.
    I guess I'll start with the following resources:

    Posted by Karsten at 22:46 | TrackBack


    Jakarta: Commons Digester Component

    At my new job at I have to implement a servlet as an interface to retrieve XML data, parse the data and persist it.
    After reading the great Introduction to the Digester Component my tool of choice will be the Commons Digester from Jakarta.
    And I thought about translating the introduction to German and add the servlet functionality. Add some thoughts about the things I learned from Rod Johnson's "J2EE Design and Development". But it is again the timeconstraint preventing it I guess. mmmhhh. Maybe I should ask theserverside or some german java magazin to publish something??? ;) Whatever.
    Time to go studying again.

    Posted by Karsten at 14:48 | Comments (0) | TrackBack


    Eclipse M7

    Eclipse M7 is out.
    I downloaded it already and the new features it has are not too bad. I will give it a try on Monday (working day which is better than a weekend, or?)
    Let's see if it rocks as usual. And it is really amazing how the eclipse group manages to ship their releases always in time.
    (continued on Monday ...)
    The really rocking feature is the backward compatibility with old plugins. So from now on you can run all your beloved old plugins even from 2.1 in the new Eclipse.
    That is really amazing and kicks ass.
    And I finally made it to use an external workspace, so I do not have to import all the setup stuff with every new eclipse. It is very simple, I only needed to create a shortcut of the eclipse.exe and insert into the target field something like
    C:\dev\eclipse\eclipse.exe -data C:\dev\workspace
    And all coding styles and other adjustments are available with the new eclipse. That is really great and I wonder how I managed it before.
    The next thing I really love is the "Mark locations of thrown exceptions". I really hated it to look in the code where this exception might be thrown to write a javadoc comment for it. This feature makes it now fairly easy. The only drawback is that you have to adjust the default settings to do so, but since Eclipse is very well documented this is ok.
    It is also nice to click into a variable and then get the occurences highlighted.
    mmhh, I really love this tool now. But I must admit that I haven't looked at IDEA since its 3.0 release and never ever looked at netbeans.
    But I am so happy with eclipse now that I do not want to change my tool of choice.

    Posted by Karsten at 12:49 | Comments (0) | TrackBack


    Sun's letter to Eclipse "Get Serious"

    Just read at the JDJ Sun's open letter to Eclipse "Get Serious".
    It is very interesting to read this letter after the decision of Sun not to join Eclipse consortium but also after Eclipse tries to get away from IBM.
    In my opinion IBM put a lot of effort into Eclipse and I never thought that the leadership of IMB was any harm to Eclipse, but rather an advantage, but some people might think different about it.
    I am already looking forward to see what is going on in the community about this.

    Posted by Karsten at 11:17 | Comments (0) | TrackBack


    Articles from Martin Fowler

    Since I got across the site of Martin Fowler I read regular one of his articles. The quality is outstanding, but after you read one of his books you know what to expect.
    Lately I read his three most popular articles:
    The New Methodology | Is Design Dead? | Continuous Integration.

    I liked the Methodology one very much since it compared agile development processes a bit and mentions some which I never heard about and also Open Source development is mentioned as development process. I never thought about this, but it makes sense, since most of the Open Source projects share a common approach to develop an manage the development. Not onlybecause of this insight this article is my most favourite so far.

    Design is Dead?
    just read this article today. It is about wheter design is still needed today and ...

    Continuous Integration
    In this article you learn how important continuous integration is and how easy it is after you set up the process properly. This made me think a lot and I also think about introducing a fully automated integration process in the company I work for at the moment (MojoKnows). It is a tedious hassle to set up and introduce, but I think the benefits are overcoming the drawbacks. This articel is also worth reading.

    Posted by Karsten at 05:25 | Comments (1) | TrackBack



    Maybe it is a big mouth for me to talk already about architecture, but I just got across Martin Fowlers article Who needs architects.
    Btw. this is about software architects, sorry to disappoint you old fashioned architects.;)
    The best part of this article is the definition of architecture from Ralph Johnson. It is simple put very precise IMO. Ok, it lacks the objectivity, but that is what I like about the definition.
    he simply states that architecture is what the senior or expert developers define as architecture in the way they make decisions and design the structure of the system.
    ok, ok, Ralph Johnson explained it better, but for those who are lazy and for me in the future I wanted to put it into my own words.

    Posted by Karsten at 07:44 | Comments (0)


    Martin Fowler and Rod Johnson

    Just came across the nice blog of great Martin Fowler. Looks promising, I really like the way he explains complicated things. Just read his nice article about Inversion of Control Containers and the Dependency Injection pattern. He really knows what he is talking about and it was also nice, to see, that Rod Johnson contributed to this article. Rod Johnson is one of the J2EE architects that I admire. Most of what he is saying is profound and well thought through.
    I bought his book Expert One-on-One: J2EE Design and Development. I just read a couple of chapters but they where worth the time.
    Just wander how it would be to meet once with these guys, but since I am just a bloody starter, still doing his master at university I presume that it will never happen.

    Posted by Karsten at 00:57 | Comments (0)


    IoC and Spring

    this springframework seams really to rock. there are so many articles I read so fare, pointing out how good it is that I really should gather some time and have a closer look at it. The reputation is amazing.
    Also this whole IoC - Inversion of control is alluring. Just read this blog about IoC pattern and frameworks. Looks like IoC is just sound OO design but I think it really is hard to write such code. At least they seldom teach you this anywhere.
    Another thing on my To-Study-And-Learn List. Maybe next month? ;)

    Posted by Karsten at 11:42 | Comments (0)


    Planning Extreme Programming

    just read this book from Kent Beck and Martin Fowler.
    Very short and good book. Lots of real world examples and I like the style it is written in. Strongly can recommend it for team leaders or members working or planning to work in a XP style.
    I myself have to admit that we at MojoKnows do it all a bit different and there are some suggestions in this book which I would like to see in my project, too.
    Lets see what the future will bring us.

    Posted by Karsten at 02:45 | Comments (0)



    da ich ganz angetan war von den eintraegen auf javablog.com habe ich mir dieses weblog aufgebaut um auch mal etwas senf abzugeben zu der grossen javawelt.
    Als newcomer lese/lerne ich ja noch viel neues und oft verliere/vergesse ich was und dann ist es weg. Um das zu vermeiden, werde ich hier in unregelmaessigen Abstaenden meine Ideen/Erkenntnisse und gefundene Links posten.
    Viel Spass beim Lesen!

    Posted by Karsten at 08:13