Welcome

Welcome to our blog about all kind of topics that are related to software development. We blog about:

SOA, BPM, EDA, ECM and all the other buzz words. Beware some post might not be so common as you think. We are not scared to go against main stream thoughts.

Technologies like java, maven, springframework, OSGi and front end technologies and frameworks like jQuery, DWR, Flex.

Finally to make this happen we need tools and of course a Mac (well some of us do). So we blog about that as well.

Technorati

Add to Technorati Favorites

Linked in

We now have a linked in group, join the group if you are a regular reader and want to see who else reads this blog.

Building Spring DM server compliant OSGi bundles with Maven

s2-logo

Recently, SpringSource released the first version of their DM server. The SpringSource DM Server provides the ability to build enterprise web applications. In the basis, S2DM is a fine mixture of Equinox and Tomcat.

Building OSGi-based web applications was already possible, but it is tedious and error prone work. The typical hello-world example was easy to get going, but as soon as Hibernate or any other framework that helps in larger applications show up, so do your good old class loading problems. For classes to be visible in OSGi, a bundle must declare an Import-Package entry in the Manifest file. Chances are small that Hibernate (even if it were packaged as an OSGi bundle) has these entries for your persistent classes. This is where S2DM server comes in. It allows the more-than-hello-world web applications to be deployed in an environment where you can benefit from the best of OSGi, without the class loading misery. To do this, they have included some extra Manifest entries that are translated to OSGi-compliant directives at load time.

Comparable to the WAR, or better, EAR file, S2DM server supports the PAR file. A PAR file is much like a Jar, with some special headers in the Manifest file, containing all your bundle jars. Some of these jars may contain web bundles, while other typically contain domain classes or the service layer implementation. Contrary to EAR files, a PAR should only contain your own code. It is best practice to deploy frameworks and third party libraries separately. I’ll explain why later on.

With enterprise applications come enterprise development processes, using continuous integration, build servers and maven. In this post, I’ll lay out what you need to get maven to build S2DM server compliant bundles, and better, PAR files.

Continue reading Building Spring DM server compliant OSGi bundles with Maven

Continuous Integration (Again)

jteamlogoallsmall.png

This blog item gives you an inside scoop into the continuous integration environment at JTeam. You’ll learn about the why, what and how of continuous integration. The tools we use are mainly open source.

Why continuous integration?

A number of years a go not many people new the term continuous integration. That has changed a lot. All people at JTeam know what it is about and all projects use an environment that is set up to actually do continuous integration. For those that do not know what continuous integration is and those that need a short recap, we briefly explain what we think continuous integration is. Let’s start with the definition from Martin Fowler:

Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily – leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly

Key to continuous integration is delivering high quality artifacts. It is not the silver bullet, developers still need to create great code, but using a good continuous integration process helps finding bugs. Checking your quality standards a long the way increases the effect. Of course extra actions are still necessary. You can think about actions like: manual code reviews, performance tests, functional tests, etc.

JTeam has been using continuous integration from the start. Recently we implemented the second version of our continuous integration environment. We introduced new tools, the process however stayed the same.

Continue reading Continuous Integration (Again)

Doing flex with maven

jQuery(document).ready(function($) { window.setTimeout(‘loadFBShareMe_164()’,5000); }); function loadFBShareMe_164(){ jQuery(document).ready(function($) { $(‘.dd-fbshareme-164′).remove();$(‘.DD_FBSHAREME_AJAX_164′).attr(‘width’,’53′);$(‘.DD_FBSHAREME_AJAX_164′).attr(‘height’,’69′);$(‘.DD_FBSHAREME_AJAX_164′).attr(‘src’,'http://widgets.fbshare.me/files/fbshare.php?url=http://www.gridshore.nl/2008/07/24/doing-flex-with-maven/&size=large’); }); }

This is a very short item. In my last few posts I have done some flex things. For most of them I was still using a bit of ant integrated with maven or even not integrated at all. Some days a go I was [...]

Creating a Flex 3 DataGrid component with backend filtering

flexlogo.pngPreviously I have written an article about integrating flex with spring. In this article I explained the steps to take when creating a flex 3 application that calls the back end implemented using spring. To enable flex to do this, I used the blazeDS technology. The theory is not very hard, the biggest problems you’ll face are hibernate problems with lazy initialization etc. While creating an application using flex I was amazed there is no standard component for filtering data in a DataGrid. Since I am using such a component based on ajax technology I wanted to have it in flex as well. After a shot search I came across actually nothing. So I decided to create a solution for myself. I do want to stress it does not have the flexibility you usually require from a standard component.

Requirements

  • Input fields should be on top of each column.
  • Filter should be implemented on the back end.

Constraints

  • No drag able columns are supported

Read on to find out how we implemented these requirements into a custom component for flex3 using the spingframework at the back end.

Continue reading Creating a Flex 3 DataGrid component with backend filtering

Creating a jetty based OSGi HttpService for apache felix

logo.pngOSGi has a service spec called http.service (see Service Compendium document of the OSGi Alliance). Felix has an implementation for it that is based around jetty 4.x. Since we are at jetty 6.1.7 at the moment I thought about trying to create an implementation of my own. Not that it is really necessary, you can expose resources without complying to the spec (see my other post).

But the spec is there for a reason, so let’s try to adhere to it first. The specification is up to the following two interfaces and one exception.

  • HttpContext – Enables bundles to use provided information about a servlet or resource during registration.
  • HttpService – Enables other bundles to dynamically register sevlets or resources into the Http Service URI namespace.
  • NamespaceException – Thrown when a problem arises during registration of a servlet or resource into the Http Service UIR namespace.

At first I tried to create my own implementation for these interfaces. It did not look to hard, but in the end I found the following patch which made my life a lot easier.
jetty6 patch

jetty_logo.gifTo be able to understand the implementation of an Http Service using jetty, you should understand the basics with respect to Jetty. In a forthcoming post I’ll talk more about these details. Within this post I’ll concentrate on the using of the service. I do need to make a few remarks. What if you do not want to apply the patch, change the pom, etc. Well you can download the one I have created from here : org.apache.felix.http.jetty-0.9.0-GRIDSHORE.jar. Another thing I would like to stress is the current state of the bundle. There are a lot of TODO’d in there. It looks like security is not implemented as it should. There is a completely different implementation at the ops4j website. One disadvantage is the level of control, need to look into that thing again. It is much more complicated, uses other bundles of the pax project. It does look interesting, but for me it is not easy enough. Another implementation is available at the sling website. But again a lot to graps before you can start. So for now I have chosen to continue with the slightly limited implementation, adhere to the spec and my bundles should work with the others as well.

Read more to learn about the sample using http.service and maven to build the bundle.

Continue reading Creating a jetty based OSGi HttpService for apache felix

Using maven to create an osgi bundle (osgi felix sample step 2)

jQuery(document).ready(function($) { window.setTimeout(‘loadFBShareMe_42()’,5000); }); function loadFBShareMe_42(){ jQuery(document).ready(function($) { $(‘.dd-fbshareme-42′).remove();$(‘.DD_FBSHAREME_AJAX_42′).attr(‘width’,’53′);$(‘.DD_FBSHAREME_AJAX_42′).attr(‘height’,’69′);$(‘.DD_FBSHAREME_AJAX_42′).attr(‘src’,'http://widgets.fbshare.me/files/fbshare.php?url=http://www.gridshore.nl/2008/02/13/using-maven-to-create-an-osgi-bundle-osgi-felix-sample-step-2/&size=large’); }); }

This is the second step in a series of items about exploring the felix osgi container and some sidesteps to make life easier while developing osgi bundles. You can find the first step here: http://www.gridshore.nl/2008/02/10/starting-with-osgi-using-apache-felix-step-1/

This is so easy, I do not want to [...]

Upgrading maven on the mac

jQuery(document).ready(function($) { window.setTimeout(‘loadFBShareMe_11()’,5000); }); function loadFBShareMe_11(){ jQuery(document).ready(function($) { $(‘.dd-fbshareme-11′).remove();$(‘.DD_FBSHAREME_AJAX_11′).attr(‘width’,’53′);$(‘.DD_FBSHAREME_AJAX_11′).attr(‘height’,’69′);$(‘.DD_FBSHAREME_AJAX_11′).attr(‘src’,'http://widgets.fbshare.me/files/fbshare.php?url=http://www.gridshore.nl/2008/01/28/upgrading-maven-on-the-mac/&size=large’); }); }

Can you believe it, when you have Mac os-x 10.5 running, maven is pre-installed. If you are not programming java you practically do not care about it. But if you are not programming java you will not find this blog very interesting as well [...]