New FitNesse version brings auto-install

I just downloaded the new FitNesse release 20090709. From this version on FitNesse is released just as a single jar with ~5MB size. In previous versions FitNesse was delivered as zipped distribution. I wondered where the Zip distribution can be downloaded from and read the release notes for version 20090709. There was an interesting entry there:

“Self Install/Update. From now on FitNesse will be released as a jar file. When you first run a new version with java -jar fitnesse.jar it will install itself (or update itself) into the directory in which it is running. No more zip files. No more missing jar files. No more moving pages into new installations. FitNesse takes care of it’s own environment for you.”
So I just downloaded the jar file and launched it:
java -jar fitnesse.jar
Unpacking new version of FitNesse resources.  Please be patient.
................................................................................................................
................................................................................................................
................................................................................................................
................................................................................
You must now reload FitNesse.  Thank you for your patience........
After this was finished FitNesse created the well known directory structure.
Also the start scripts (run.sh/bat) have gone. The jar is executable, so I started it:
java -jar fitnesse.jar -p 8080
FitNesse (v20090709) Started...
port:              8080
root page:         fitnesse.wiki.FileSystemPage at ./FitNesseRoot
logger:            none
authenticator:     fitnesse.authentication.PromiscuousAuthenticator
html page factory: fitnesse.html.HtmlPageFactory
page version expiration set to 14 days.
Soon I will update fit4oaw to use this version.

Posted via email from Karsten’s Blog

Using fit4oaw for complex Xtend functions

This is my first try to use posterous. I’m excited what this service will provide me. To have something worthful to write about I decided to write about my current work I’m on today.
I have a customer who has defined a data transformation language with Xtext. Part of this language are declarations and usages of variables. No wonder. Of course variables can be used just within their scope – and here it becomes interesting. Xtext does not provide this out-of-the-box. The functions that we need to detect scoping are rather complex to develop. Basically we need just one function which detects for a given variable reference if the referenced variable is within the scope.
I use fit4oaw to go for a test-first approach. This helps me develop this function test-driven.
As you can see from this screenshot I evaluate expressions and compare their results. In the loaded model there are several variable references, and the function inScope() detects whether the referred variable is in scope. Now I have managed to get them all green, but work is not completely done. I now have to construct more complex situations and I know of at least one situation that would fail now. So – change the test model, add the test and it should fail again. Then develop further on the functions to handle this situation and the test should execute successful.
Writing complex Xtend functions was never so easy!

Posted via email from Karsten’s Blog

Founded Google Code project for the Hybridlabs Beautifier

The Hybridlabs beautifier has become a famous component for oAW. It is a Java code formatter based on the Jalopy library and what it makes it especially interesting is its feature of auto-organizing Java imports. Since M2T is now upcoming users ask for porting the component to M2T Xpand.

I have asked Karsten Klein, the founder of the Hybridlabs beautifier, to host the projectat a public site and join development efforts. Karsten is at the moment too busy on his normal projects to work on sparetime projects like his beautifier. So I got agreement from Karsten to support him founding the project.

Yesterday I created the Hybridlabs Beautifier project at Google Code. The project is now public, so it is not necessary to send patches and feature requests to Karsten per Mail, better use the given Infrastructure of the project from now on. I took the sources from version 1.1.9, set up the project structure and provided a Maven build for the project. I decided to make to increment the version here to 2.0.0, since project organization changed and M2T support was added.

Internally the code change is really small. The main component, JavaImportBeautifier, now imports both PostProcessor interfaces, from oAW4 Xpand2 and from Eclipse M2T Xpand. This way the component could kept backward compatible to oAW4 while at the same time being compatible for M2T Xpand. A good example why it makes sense to program against interfaces. A drawback of this approach is that this component has now a class dependency to both, which makes it necessary to have oAW4 Xpand on the classpath when using the component within M2T. I excluded all transitive dependencies for oaw-core-xpand2, so dependencies are rather small.

As a result I have created a bundle of the current build including dependencies and uploaded it. This bundle can be downloaded here.

fit4oaw 1.0.0 released

Yesterday night I finished the work on fit4oaw release 1.0.0. This has been hard work in the last weeks, especially since I had to work in spare time for this project. My daytime job is already challenging and exhausting, and after 8-10 hours of work the additional work on fit4oaw began, often until deep in the night. For work on other projects, i.e. openArchitectureWare, M2T Xpand, EMFT MWE, Fornax etc. there was no time naturally.

fit4oaw screenshot

This is just the first release, there is many more work to do to make this project successful. Not only additional features, the current feature set is quite sufficient to be useful, also other tasks like documentation, PR, usage scenarios, examples have to be solved. I plan to document the main tasks into the project wiki. If you are willing to contribute then check this task list.

I am quite confident that this project will be a success and of great use in my projects in the future. I already managed to find first users within itemis who used the beta versions and gave valuable feedback. Therefore I thank Alexander Nittka, Marc Eilens, Michael Bädorf, Ingo Feltes and Heiko Behrens. Tomorrow I will have an interview with Hergen Oltmann, and then I will announce this release in our internal itemis podcast.

For my current project this project comes a bit late. It would have been of great use in the past weeks. We developed lots of extension functions, which are only tested by executing within our generation process. They weren’t documented enough and I would document and test them now with fit4oaw. Who knows, maybe my customer decides to extend my work for them and then I could have a chance to place this fine product in the project. I really think it would be of great use in mid-term. They would have to document all developed stuff properly anyway.

Download fit4oaw now and give it a try! Just unpack, start and run the Fit4oawDemo test suite. It is really easy!

Working on fit4oaw

In the last days I made huge progress in the development of my new open source project, fit4oaw. Most of it in my spare time when I was in the hotel in Frankfurt, but today and yesterday I spend some time from my regular working time on it. At itemis we have an open minded management, which let us invest some of our time for such activities. We call it “4+1”, means in average we have 1 day per week on our own, which is totally filled with my various open source developments.

This week I released the first beta version, which already is bundled as an out-of-the-box solution with all dependencies within. Just download, unpack, start and run the Fit4oawDemo tests. As I heard from colleagues it also worked for them and I get already positive feedback. This is really nice, and confirms me that I had the right idea.

After releasing the beta I realized that I have to change some fixtures again to make things even easier. The CallXtendFunction fixture will disappear and all will be done in the Expression fixture. To give you an impression how test cases for oAW Xtend functions and expressions look like:

fit4oaw Test Execution

Next week I meet with Hergen Oltmann to record our itemis internal podcast. Until then I want to release version 1.0.0. I’m quite confident that I will manage to release the first version and that it already matches many needs. And I spent time to set up the build process with Maven. Building a release package is just executing a Maven build.

However, I already have ideas for extensions and further colleagues addressed interesting ideas for extending the project after 1.0.0 already. I will talk with Andreas Mülder, he worked successfully with the Groovy EMF Builder, with which test models can easily be created. Until now I assume to load fixed models with fit4oaw. I hope we can integrate the EMF Builder into fixtures easily to create EMF and UML2 models on-the-fly for tests.

I’d like to thank Alexander Nittka, Marc Eilens and Michael Kloss for evaluating the project in this early stage. Their feedback was very valuable to see real requirements besides my own. For now I could only test the product for small examples, since I spent much time on the build process and those examples. I’m sure that in a greater context I will face some gaps I need to fill.

Further news is that I told Darius Jockel and Andre Neumann to use Fit4oaw to test development of the Fornax JavaBasic and Hibernate cartridges. And Carsten Oltmann will create a nice logo for this project soon!

FitNesse cannot retrieve socket

I sometime experience the problem that FitNesse cannot execute tests anymore. After pressing the “Test” button test execution starts, hangs, and after a timeout I get the following error in the log:

Internal Exception:

 java.lang.Exception: FitClient: communication socket was not received on time.
    fitnesse.components.CommandRunningFitClient$TimeoutRunnable.run(CommandRunningFitClient.java:126)
    java.lang.Thread.run(Thread.java:613)

The executed command is:
java -cp /Users/thoms/.m2/repository/org/fitnesse/fitnesse/20090214/fitnesse-20090214.jar:……. :classes:fitnesse.jar:fitlibrary.jar fit.FitServer thoms.local 8080 1

After reading a but through the source I came to the point that this problem arises, when the class FitServer wants to establish a socket for host ‘thoms.local’ and port 8080. Now ‘thoms.local’ is of course my local host, and therefore the same as localhost and 127.0.0.1. I tested now with a small class:

This here works:

public class SocketTest {
    public static void main(String[] args) throws Exception  {
        Socket socket = new Socket(“localhost”, 8080);
        System.out.println(“Socket established”);
        socket.close();
    }
}


When replacing ‘localhost’ by ‘thoms.local’ I get the same problem.

        Socket socket = new Socket(“localhost”, 8080);

Exception in thread “main” java.net.ConnectException: Operation timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:430)
    at java.net.Socket.connect(Socket.java:520)
    at java.net.Socket.connect(Socket.java:470)
    at java.net.Socket.<init>(Socket.java:367)
    at java.net.Socket.<init>(Socket.java:180)
    at playground.SocketTest.main(SocketTest.java:12)

For now I cannot explain why this is happening. Also FitNesse should not call FitServer with ‘thoms.local’, since I call FitNesse with http://localhost:8080.

Blogged with the Flock Browser

Tags: ,

Founding fit4oaw

Today I created my first own open source project: fit4oaw. fit4oaw will provide a FitNesse for testing openArchitectureWare artifacts. Originally I planned to create a further subproject on the Fornax Platform, but then I realized that FitNesse is GPL licensed. This forces any work upon FitNesse to be also GPL, but Fornax requires hosted projects to be licensed under the ASL2 license. Personally, I deeply believe that GPL is no good open source license, and ASL is.

Now I will set up the project infrastructure, the initial code is already committed and it works. I just remembered that I saw an article in the JavaMagazin about the Maven License Plugin. This plugin is really useful and I will adapt it soon for Fornax also, and maybe in my current customer project. Currently I am struggling a bit around with custom file mappings to generate file headers for oAW artifacts.