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

Tuesday, February 26, 2013

Test driving Java API for Processing JSON with GlassFish 4.0

12:37 Tuesday, February 26, 2013 Posted by Unknown 2 comments:
, ,
Writing and contributing to a specification is one thing. Working with it and looking into real examples a pre-condition if you want to give valuable feedback. The latest promoted GlassFish builds contain the renaming to 4.0 and I thought it might be a good time to give the Java API for Processing JSON (JSON-P) a test drive.

Get Java EE 7 enabled GlassFish 4.0 
First thing to do is to grab a copy of latest Java EE 7 enabled GlassFish 4.0 from the promoted builds. I am using the GlassFish Server Open Source Edition 4.0 (build 77) which seems to be quite stable. But in general, if you are trying this please keep in mind, that the promoted builds are basically development and unstable versions of ongoing work for GlassFish 4.0. It wouldn't make much sense to complain about them.
unzip the download into a suitable location.
For a later step you need to update the JSON-P RI within the modules directory. Follow Arun's Blog about getting and building the JSON-P RI and copy the jsonp~git\impl\target\javax.json-1.0-SNAPSHOT.jar to the glassfish4\glassfish\modules\javax.json.jar. Make sure to make a copy of the original in case you do something wrong in that step. If you are feeling uncomfortable with that you can also skip it and select a different dependency later on ... The fact is, that the JSON-P API changed that much over the past few months, that the GlassFish included b02 isn't appropriate anymore to show you anything. So, for now, we have to tweak it a bit.
Afterwards you are all set to integrate your fresh GlassFish install into your favorite IDE which could be NetBeans.

Create a new Java EE 7 Projekt
The Java EE 7 archetype is located in the codehaus.org snapshot repository. In order to use it via NetBeans effectively you have to configure the repository on the "Services" tab under "Maven Repositories". The repository URL is https://nexus.codehaus.org/content/repositories/snapshots/. It might take a while to process the index. After that, proceed with the "New Project > Maven > Project from Archetype" wizard and enter "webapp-javaee7" into the search box. Select the 0.1-SNAPSHOT and click "Finish". Alternatively you can always go with the following command line:

mvn -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=webapp-javaee7 -DarchetypeVersion=0.1-SNAPSHOT -DarchetypeRepository=https://nexus.codehaus.org/content/repositories/snapshots/ -DgroupId=net.eisele.sample -DartifactId=javaee7-jsonp -Dversion=1.0-SNAPSHOT -Dpackage=net.eisele.javaee7jsonp -Darchetype.interactive=false --batch-mode --update-snapshots archetype:generate

Now open the project and edit the pom.xml. Change the scope of the javaee-web-api to provided and add the json-api dependency as shown below:

 <dependencies>
        <dependency>
            <groupId>javax.json</groupId>
            <artifactId>javax.json-api</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0-b72</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

Please make sure to use the version 1.0-SNAPSHOT and _not_ the officially documented 1.0-b02. We want to use the latest snapshot we build in the first paragraph with all the new APIs :) If you decided not to go the "build it your own way" you can simply use the 1.0-b04 from maven central. This also works. Please make sure to have exactly this order of dependencies. If not, you will use the old b02 which is included with the javaee-web-api dependency :( Did someone say, Maven is easy? :)
That's it for now. Let's create a simple JAX-RS endpoint.

Adding a JAX-RS Person Resource
First thing to do is to write the basic JAX-RS resource. You can do this via the NetBeans' "RESTful Web Services from Pattern" wizard or yourself by simply outlining a brief class like the following:

@Path("person")
public class PersonResource {
    public PersonResource() {
    }

    @GET
    @Produces("application/json")
    public String getJson() {
        return "[]";
    }
This class needs to be registered. You can either use Jerseys servlet mechanism to do this or register it yourself with the application specific ApplicationConfig:

@javax.ws.rs.ApplicationPath("webresources")
public class ApplicationConfig extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new java.util.HashSet<>();
        resources.add(net.eisele.javaee7jsonp.PersonResource.class);
        return resources;
    }
}

Wow .. that should be all for now. You should give it a test drive. Deploy it to your domain and try http://localhost:8080/javaee7-jsonp/webresources/person. It should simply print the empty brackets []. Now it is time to get some JSON-P into the mix.

Building JSON Objects with JSON-P
We are going to build a JSON representation of a person with the DOM-based API. Replace the return statement in the PersonResource with the following code:

 JsonObjectBuilder builder = Json.createObjectBuilder();
        builder.add("person", Json.createObjectBuilder()
                .add("firstName", "Markus")
                .add("lastName", "Eisele"));
        JsonObject result = builder.build();
        StringWriter sw = new StringWriter();
        try (JsonWriter writer = Json.createWriter(sw)) {
            writer.writeObject(result);
        }
        return sw.toString();

And now lets use my most favorite Chrome extension to look at what we've got:
It obviously works. Turning this the other way round would mean to read incoming JSON. This could look like the following:

        String json = "{\n"
                + "    \"person\": {\n"
                + "        \"firstName\": \"Markus\",\n"
                + "        \"lastName\": \"Eisele\"\n"
                + "    }\n"
                + "}";
        JsonReader jr = Json.createReader(new StringReader(json));
        JsonValue value = jr.readObject();
        jr.close();

Beside the DOM-API you also have a Streaming-API which uses a

JsonGenerator generator = Json.createGenerator(new FileWriter(..))

JsonParser parser = Json.createParser(new StringReader(...));

to generate and parse JSON. Have a look at the latest JavaDoc for a complete reference. Go ahead and test drive yourself. The EG is still looking for feedback, so it might be a good idea to jump on the users list and send along your thoughts. I am also happy to read your ideas here!


Monday, February 25, 2013

Prime-UI, JAX-RS with Jersey and Gson on Oracle Cloud

08:44 Monday, February 25, 2013 Posted by Unknown 2 comments:
, , ,
The Oracle Cloud is around everywhere these days. It had a rough start with Larry denying the need for a cloud for a very (too) long time and some very early announcements and a very bad availability after last year's Open World nobody seems to be interested anymore. But for me it still has it's hidden treasures and I believe it has a fair chance of winning it's customers. Before I dive into the example which will show you how to use JAX-RS with Jersey on the Oracle Cloud Service I want to introduce you to the service a little bit. Feel free to skip this first section.

What the hell is the Oracle Cloud and why do you care?
The Oracle Cloud is a marketing term. It tries to capture a couple of different services sharing a common base called the platform services. Those two basically are the Java and the Database Service. Technically this isn't too new. We are talking about Oracle's "Cloud Application Foundation" which is out there since a while.
Oracle's Cloud Application Foundation
It is down at the bottom of the whole Oracle Fusion Middleware Stack (at least in the available marketing slides) and is the basic software stack that runs on the Exalogic appliances. Most relevant parts for Java developers are the Java EE 5 WebLogic Server and a load balancing solution called Traffic Director. The neat part here is, that you literally can have your personal share of a real Exalogic machine in the cloud for a fraction of the costs that even the smallest rack costs. And it is running in data centers around the world. Fully managed and including the licenses. So, with paying your monthly mite you are done with the administrative parts. And if you ever had the questionable pleasure to deal with licensing and supported platforms you know a little about the added value in it. Technically speaking the Java Service is of little interest at all. EE 5 is outdated and even the Java SE 6 based JRockit feels like a stranger from the past with all the new features in Java SE 7 and the end-of-public-updates policy for SE 6. But I still consider it a good start and I am very looking forward about having latest WebLogic 12c and a decent Java 7 in the cloud.

WebLogic Server and JAX-RS
Do you remember the ancient days? Java EE 5? Running around with the latest EE 6 specification since a couple of years now it feels like you have to drive the car you had as a student again. Believe it or not: JAX-Rs wasn't part of EE 5 at all. And this is exactly the reason why JAX-RS doesn't run out of the box on the Oracle Java Service. But you might know that the Weblogic team is very aware of the fact that they are running late with EE adoption and so they are rolling out features which will be included into the base server with the next specification version bit by bit to earlier versions. The same happened with JAX-RS back in early 2011. Since 10.3.4 you've been able to facilitate Jersey as JAX-RS implementation  by simply adding a library dependency or packaging it to your application. This also works for the Java Service. Simply start a new Maven project in your favorite IDE (might be latest NetBeans 7.3 which is hot off the press) and add

  <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-server</artifactId>
            <version>1.9</version>
            <scope>provided</scope>
  </dependency>

Jersey as a dependency with scope provided. Another pointer is the Java Version you should compile against. Make sure SE 7 doesn't slip in somewhere and set the mavven compiler-plugin to use source and target version 1.6. Sad as it is ... Next thing to add is the weblogic.xml library ref for Jersey:

 <library-ref>
        <library-name>jax-rs</library-name>
        <specification-version>1.1</specification-version>
        <implementation-version>1.9</implementation-version>
 </library-ref>

Which simply tells the container to add this to the class-loader. Typically you would have to deploy it to your domain first. But believe me: It is already there and you simply can use it. If you are using NetBeans and you start with the new "RESTful Web Services from Patterns" wizard you might end up with a couple of more (unneeded) dependencies but this would save you from adding the Jersey configuration to your web.xml which should look like the following:

 <servlet>
        <servlet-name>ServletAdaptor</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <description>Multiple packages, separated by semicolon(;), can be specified in param-value</description>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>net.eisele.primeui.cloud</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletAdaptor</servlet-name>
        <url-pattern>/webresources/*</url-pattern>
    </servlet-mapping>

And simply registers the REST servlet together with the package scanning path for your annotated implementation. Choose whatever mapping you like. Following this example closely you should be aware, that I'm going to hard-code the URL to the service in JavaScript later. Watch out for the "/webresources" part.

Adding some JSON
You for sure noticed the et.eisele.primeui.cloud package reference. Let's look at the class:

@Path("countries")
public class RestResource {
//...
@GET
    @Produces("application/json")
    public String getJson(@QueryParam("query") String query) {
        String[] raw = {
            "Albania", "Algeria",
//...
};
  List<ValueHolder> countries = new ArrayList<ValueHolder>();
  for (int i = 0; i < raw.length; i++) {
  countries.add(new ValueHolder(raw[i]));
   }
   Gson gson = new Gson();
   return gson.toJson(countries);
    }
}
//...
public class ValueHolder {
    public ValueHolder() {}

    public ValueHolder(String label) {
        this.label = label;
        this.value = "v_" + label;
    }
    private String label;
    private String value;
}
This basically contains a String[] of countries. Each entry gets converted to a ValueHolder object and added to an ArrayList which gets converted to JSON with the help of Google's gson library. This is the second dependency we need to include with the pom.xml

<dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.2.2</version>
            <scope>compile</scope>
        </dependency>

Make sure this is packaged with your application by using the compile scope. Mostly done now. You noticed the @QueryParam("query"). I build some more logic around selecting the right entries from the String[] to decide which ValueHolder to return. For the complete example refer to the RestResource on github. Now we are in need of a nice front-end.

Prime-UI to the rescue
Everybody is talking about JavaScript these days and I thought it might be a good way of showing off some of the things possible with latest Primefaces offspring called Prime-UI. Those guys do a great job pushing out their already well known and widely used JSF library PrimeFaces to the jQuery world by providing a widget library. Get everything you need from the PrimeFaces website by downloading the prime-ui zip file. If you started with a web project in NetBeans and you did not add JSF you end up by having a nice little jsp file in the webapp folder. Open it and make some changes and tweaks to it. The most important ones are the HTML5 doctype declaration and the needed JavaScript imports:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
  <!-- header, title, all the other stuff you need -->
  <!-- jQuery -->
  <script src="js/vendor/jquery.js"></script>
  <!-- jQuery UI -->
  <script src="js/vendor/jquery-ui.js"></script>
  <!-- Prime UI Core -->
  <script src="js/core/core.js"></script>
  <!-- Prime UI Input Text -->
  <script src="js/inputtext/inputtext.js"></script>
  <!-- Prime UI Autocomplete -->
  <script src="js/autocomplete/autocomplete.js"></script>
The Auto complete example binds an input text field to a backend and gives you type-ahead features. Lets assume you have the rest service above running you now simply add the following JavaScript to your head section:
<script type="text/javascript">
        $(function() {

            $('#remote').puiautocomplete({
                effect: 'fade',
                effectSpeed: 'fast',
                completeSource: function(request, response) {
                    $.ajax({
                        type: "GET",
                        url: './webresources/countries',
                        data: {query: request.query},
                        dataType: "json",
                        context: this,
                        success: function(data) {
                            response.call(this, data);
                        },
                        error: function(jqXHR, textStatus, errorThrown) {
                            console.log(textStatus, errorThrown);
                        }
                    });
                }
            });


        });
    </script>

And add the input tag to your body section of the page:
<input id="remote" name="remote" type="text"/>
That is all you have to do. One little remark. If you are going to deploy the app as it is, you will be prompted with a login screen in front of it. In order to open it to the public you have to add an empty
 <login-config/>
element to your web.xml. Now go on and add the cloud to your IDE and deploy the application to your trial instance. If you are using my github sources, it should look like this:
depending on the query it returns the more qualified results. Going the postman way it looks like this:

Take away
I hope, you didn't expect this to be kind of rocket science at all. It is a basic post along the lines of what most of the WebLogic server developers might have know already. This is one of the biggest advantages but also a big disadvantage of the Oracle Java Cloud Service. If you know WebLogic you are most likely going to love it. If you are on the Open Source side of things you might run into issues that are well known to the Oracle Middleware guys but not to you. EE 5 isn't that complete than EE 6 and EE 7 will only be slightly better in closing the vendor specific gabs between all the different implementations. But again: This isn't something new for you, right? Now go: Give it a test-drive and share your experiences! Looking forward reading about them!
 

Tuesday, February 19, 2013

Review: "Java EE Development with Eclipse" by Deepak Vohra

08:31 Tuesday, February 19, 2013 Posted by Unknown 2 comments:
, ,
Jumping around with Java EE development I naturally get the chance to review books in this area. And I really appreciate the chance to do this. Not only to get a chance to possibly learn something new but also to give the best possible guidance on new releases for my readers. Today it is time for another Packt book review. Published back in December 2012 this is a fresh new take on latest Java EE together with Eclipse.

Abstract
Java Platform, Enterprise Edition (Java EE) 6 is the industry standard for enterprise Java computing. Eclipse IDE for Java EE developers is the most commonly used Java IDE for Java EE development. Eclipse IDE for Java EE developers supports Java EE 5 completely and also supports several features from Java EE 6. The Oracle WebLogic Server product line is the industry's most comprehensive platform for developing, deploying, and integrating enterprise applications. Oracle Enterprise Pack for Eclipse provides a set of plugins (project facets) for Eclipse development with WebLogic Server. While a number of books are available on Eclipse IDE for Java Developers, none or very few are available on Eclipse IDE for Java EE Developers. In this book, we shall discuss Java EE development in Eclipse IDE for Java EE developers. While it is not feasible to cover all of the more than 30 technologies in the Java EE stack , we shall discuss the most commonly used Java EE technologies, especially the ones Eclipse IDE for Java EE developers (or Oracle Enterprise Pack for Eclipse) provides Project for Facets. Oracle Enterprise Pack for Eclipse is just an enhancement of Eclipse IDE for Java EE developers with integrated support for Oracle WebLogic Server.

Book: Java EE Development with Eclipse
Language : English
Paperback : 426 pages [ 235mm x 191mm ]
Release Date : December 2012
ISBN-10: 1782160965
ISBN-13: 978-1782160960

About the Author
Deepak Vohra is a consultant and a principal member of the NuBean.com software company. Deepak is a Sun Certified Java Programmer and Web Component Developer, and has worked in the fields of XML and Java programming and J2EE for over five years. Deepak is the co-author of the Apress book Pro XML Development with Java Technology and was the technical reviewer for the O'Reilly book WebLogic: The Definitive Guide. Deepak is also the author of the Packt Publishing books JDBC 4.0 and Oracle JDeveloper for J2EE Development; Processing XML documents with Oracle JDeveloper 11g; EJB 3.0 Database Persistence with Oracle Fusion Middleware 11g; and Java 7 JAX-WS Web Services.

The Content
If you remove preface and index you end up with 400 pages in 10 chapters. That is reasonable. I'm not digging into every chapter more detailed (see my conclusion for the details)

Chapter Outline:
Chapter 1: EJB 3.0 Database Persistence
Chapter 2: O/X Mapping with JAXB 2.x
Chapter 3: Developing a Web Project for JasperReports
Chapter 4: Creating a JSF Data Table
Chapter 5: Templating with Facelets
Chapter 6: Creating Apache Trinidad User Interfaces
Chapter 7: Creating an AJAX Application
Chapter 8: Creating a JAX-WS Web Service
Chapter 9: RESTful Web Services Using the JAX-RS API
Chapter 10: Spring

Writing and Style
Generally the instructions are clear and the screen-shots are helpful. The overall level of detail and mixed in complexity is appropriate and in case you need it you can download the source code from Packt.

Conclusion and recommendation
The book is aimed at intermediate to advanced Java EE developers. With Eclipse at version 3.7 (and Oracle Enterprise Pack for Eclipse), Ant and manual dependency management on top of Java SE 5 it is outdated today. Even if it uses Oracle's WebLogic 12c as server for the examples (which would be Java EE 6 capable) and some Java EE 6 technologies (e.g. JSF2) this is a mixture between the worlds and not very helpful for beginners. The topics and chapters look weird and it is hard to understand the concept behind it if you only look on them. A decent introduction to the overall plot would have been helpful. Bottom line: You get a decent overview about Java EE with Eclipse but the details are outdated and no longer appropriate to learn. Further on, the selection and mixture in technologies (Java EE 5/6, Spring, Jasper, Trinidad) makes it very hard to separate the standard from the add-ons, which is a no-go for me.

Monday, February 11, 2013

The Heroes of Java: Marcus Hirt

07:54 Monday, February 11, 2013 Posted by Unknown No comments:
, ,
Lets continue the "Heroes of Java" series. Today's interview has been planned nearly since the launch of the series and I knew that it would be a tough one to get. I know Marcus since a few years now and he is always busy providing the best diagnostic tools to Java developers. Thanks for finally joining, Marcus! It is a pleasure to have you here!

Marcus Hirt
is one of the founders of Appeal Virtual Machines, the company that created the JRockit JVM. He is currently working as Team Lead for the Java Mission Control team. In his spare time he enjoys coding on his many pet projects, composing music, and scuba diving. Marcus has contributed JRockit related articles, whitepapers, tutorials, and webinars to the JRockit community, and has been an appreciated speaker at various conferences, such as Oracle Open World and Java One. He is also one of the two authors behind a popular book about JVM technology (link to my review).

General Part
Who are you?
I am a computer aficionado with a strikingly unmodern and lengthy romance with typed languages, profiling and diagnostics. I have three kids and a lovely wife, so right now there isn't much spare time to go around. When there was, I used to compose music, play the piano, scuba dive and do martial arts.

Your official job title at your company?
Consulting Member of Technical Staff

Do you care about it?
I care about being appreciated for my work. The title itself means nothing.

Do you speak foreign languages? Which ones?
Swedish is my native tongue  and my preferred language for anything that is not computer related. That said, since most of the terminology in our business is in English, I actually prefer English when talking shop. I am half Swiss, and I did spend some time at Real Gymnasium Kirchenfeld in Bern. I haven't used my German since then though, so it is beyond rusty.

How long is your daily "bootstrap" process? (Coffee, news, email)
If you don't count email, it is almost non-existent. However, in my role as a team leader, email is chewing up a good portion of the morning these days. Thanks to the excellent mass transit system in Stockholm, that is usually taken care of before I arrive at the office. At least during the winters. During the summers I usually drive my motorcycle to work.

Twitter
You have a twitter handle? Why?
I indiscriminately sign up for all social services. Then I find that I don't use most of them. Twitter is a bit of a exception, since I do tend to read what others write. When I do tweet it is mostly about new obscure and/or unsupported features in the Hotspot JDK. My twitter handle is @hirt.

Whom are you following in general?
I mostly follow people that I know and respect in the Java community.

Do you have a personal "policy" for twitter?
I try to avoid it at work.

Does your company restrict or encourage you with your twitter usage?
Oracle has neither actively encouraged nor restricted my twitter usage. The only time I can recall a company actively encouraging me to engage in some official social capacity was some years ago, when BEA tried to encourage people to blog. I’ve since moved away from the official company blog, because of a tooling issue.

Work
What's your daily development setup? (OS/IDE/VC/other Tools)
Since the first target platform for JRockit was Windows, I've stuck with Windows at work. I am using Windows 7/Eclipse/Perforce and Visual Studio. At home I am using Mac OS X/Eclipse/Git&Perforce and XCode.

Which is the tool providing most productivity to your work?
These days: Eclipse. No doubt.

Your preferred way of interacting with co-workers?
Face to face for longer discussions. IM is good for smaller things, since you can choose when to handle the interrupt, whilst still being fairly interactive.

What's your favorite way of managing your todo's?
Pen and paper. Stone age, right?

If you could make a wish for a job at your favorite company: What would that be?
Whichever would give me the resources to attack some of the high impact development projects on my "want to do" list. Oracle is currently quite a good place to be.

Java
You're programming in Java. Why?
To be honest, I am not exclusively programming in Java. When I do, it is because it is one of the programming environments in which I find myself to be the most productive. It may not be the least verbose or most elegant of languages, but the tooling and debugging capabilities are top notch. Not to mention that some intrinsic features of the language itself, such as the memory management, makes it easier to write error free code. Also, since there has been competition around the JVM for more than a decade, the JVMs for Java are really quite sophisticated. Not to mention fast.

What's least fun with Java?
It is unnecessarily verbose (more type inference please), type erasure (ever sent in a class to your generic type to have a chance of knowing what runtime type it is?), and any and all things that makes the illusion of an all powerful runtime break down. In a perfect world, a Java programmer should not have to worry about the details of the JVM configuration. For instance, why should I need to estimate how much space I will need for constants and class metadata (perm gen)? Thankfully there is work being done on this as we speak; the perm gen is scheduled for removal in JDK 8. I think there is a lot to be said for improving the usability of the JVM.

If you could change one thing with Java, what would that be?
There are many who want Java to be everything to everyone. I don't subscribe to that view. Instead, let's make it easy to run whatever language you want on the JVM. That said, if I could change something about the implementation, I would probably want a thread local garbage collector. One with insanely good heuristics as to when to back off and stop handling an object thread locally. Then there are some other things, but since I may start working on them soon, I would rather keep them to myself for now. :)

What's your personal favorite in dynamic languages?
Ruby is cute. I especially like the implementation on the JVM (JRuby).

Which programming technique has moved you forwards most and why?
When I first started my education at the Royal Institute of Technology, I had already programmed in various languages, such as Pascal, C and assembly. I really thought I had things figured out, until I came to the first computer science course. There I got confronted with SICP and Scheme. That was IMHO a genius move by the computer science department. All the cocky kids with prior experience, such as myself, got a rich serving of humble-pie. Functional programming taught me very elegant ways of expressing myself. Kudos to MIT and Sussman et al.

What was the biggest project you've ever worked on?
JRockit and JRockit Mission Control. I was one of the founders of Appeal (Appeal Virtual Machines & Appeal Software Solutions), a big project in itself.

Which was the worst programming mistake you did?
Well, maybe not strictly a programming mistake, but one of the worst red-face issues I've done is when a JRockit performance counter was slightly misspelled - the 'o' was accidentally dropped from *count. The bug report stated that "the customer was not amused". I must admit I was though.

Another fun, deliberate, "mistake" was when I added the following three lines to one of the Mission Control property files:
------
# :) We just felt that we needed this one translated...
# /The MC team
Template_DEFAULT_TEMPLATE_NAME=All your base are belong to us!
------
I was hoping to get a cynical remark back from the translation team, but they just translated it the best they could. Heh.

Finally, one of the worst programming mistakes in recent history was in a small start-up project. A hash code calculation error caused some subtle errors to one of many data points in a running production system. I finally solved the problem when I got fiber installed at home and got bold. In desperation I started a node with jdwp turned on, and I then proceeded to set break points and evaluate code remotely over an ssh tunnel. The latency was so low that it almost felt like a local debugging session. Crazy, but you gotta love Java for providing you with options. ;)

Friday, February 8, 2013

Jfokus 2013 Trip Report - The hottest place in Sweden in February!

12:23 Friday, February 8, 2013 Posted by Unknown No comments:
, ,
I'm back since two days from my Jfokus trip. After visiting them for the first time back in 2012 it was a pleasure to catch up with the team lead by Mattias Karlsson. They continued to make Stockholm and the conference venue the hottest place for Java developers in Northern Europe in February. It was sold out two weeks before the official start and looking at the amazing speaker line-up this absolutely wasn't a big surprise. For myself I count myself one of the lucky program committee members which had the pleasure and pain of selecting the right sessions for you. Hope it did work out for you and you was among the 1550 attendees from more than 20 countries which were able to enjoy the conference.

Travelling and Speaker Walk
The first day always is about traveling. Getting to Stockholm is easy for Europeans. After a 2h flight I jumped on the famous Arlanda Express which directly brought me to Stockholm's Central Station. After a 10 minute walk I quickly reached the Radisson Blue Waterfront which is the hotel directly attached to the venue. Even if it is a little more expensive it is all worth it. Great staff, awesome rooms, wonderful view and the best part is, that you are only a few steps away from the venue. That gives you some precious extra minutes to sleep in the morning. Arriving the day before the conference is always a good thing to do. My timing was exactly right to came in time to attend the speaker walk in Gamla-Stan which is the old part of Stockholm. Together with 10+ other fearless speakers we took the one hour guided tour and learned a lot about the History and visited some nice places around. All this was topped by warming up again with a nice cup of Coffee. Followed by an awesome dinner with the most vocal parts of the JavaPosse back in the hotel.

Collage of the Speaker-Walk Pictures.

Monday Tutorial Day and Speaker Dinner
The first day of the conference started with the "Developing JAX-RS Web Applications Utilizing Server-sent Events and WebSockets" which Arun and I gave. It was all about GlassFish, WebSockets and latest Java EE 6 and 7. Head over to Arun's trip report to get hands on the latest lab-guide (PDF) and the code for the Java EE 7 parts. It is always a pleasure to work with you, Arun! You are great! Thanks for being around. I am very proud of being a part of this! And a big thank you goes out to all the attendees! We have been working with latest NetBeans RC1 and GlassFish 4.0 nightly builds! Indeed, everything worked like a charm!
Collage of some HoL Impressions
After that was done it was time to attend some other sessions myself and catch up with some folks I haven't seen in a while. Famous speaker dinner at the F12 restaurant in Stockholm was also that evening. It was marvelous, entertaining and full of information.

Speaker Dinner Impressions

Tuesday packed with Sessions
The official start of the real conference was on Tuesday. All the 1550 attendees started to show up and everything got finally crowded. But I liked it. Soo many sessions to attend. The Vaadin Cruise from Finland arrived early and brought in some more well know names. It all started with Georges Saab's Oracle Keynote. Honestly I was a little bit disappointed to see his name there. I was looking for something more exciting and my expectations have been very low on this one. But indeed: He managed to deliver an entertaining session with a decent humor and all the serious parts as expected. Thank you Georges for doing it like this! Very brave! Very valuable!


Find some more impressions on my picassa foto-set. After free beer, wine, soda, and buffet food provided by Atlassian the day closed with a marvelous dinner (in a Belgian restaurant, which has some British humor in it :-)) and some awesome discussions in the hotel lobby.

Wednesday Heading Home
The last day at a conference always is kind of sad. Trying to catch up with everybody to say good-bye, having all the luggage around. Anyway, a good place to do all this was the Oracle Community Red District aehm .. Corner :) Always plenty of folks around and a good meeting place. You also come across some people you might not have expected to see at an European conference. Some more pictures for you to look at are at the foto-set of the last day.

Third day impressions.

Takeaway
It was a great time! I enjoyed it! Thank you for organizing Jfokus! I will try to come back next year, too!