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

Friday, October 24, 2014

Trip Report: OpenSlava 2014

12:00 Friday, October 24, 2014 Posted by Test No comments:
, , ,
I had the pleasure to attend OpenSlava conference in Bratislava last week. It is a one day event which is comparably new and launched last year. This year it grew even bigger and even expanded to another area at the Faculty of Electrical Engineering and Information Technologies (FEI STU) of Bratislava. And as there are no registration fees for the conference, it is a great chance to catch up with a lot of interesting speakers.

Bratislava is a wonderful city and it is a pity that there was barely enough time to see a little bit of it. The organization of the event was great and everything went smoothly. So, thank you to the whole team! If you want to receive updates on the event make sure to follow @OpenSlava on Twitter or like the OpenSlava Facebook page.

I gave a presentation about the 50 Best Features of Java EE 7. The slides are published on speakerdeck. Sorry for having to squeeze everything into 35 minutes. It was a funny rush and I hope the attendees enjoyed it!

And you can also watch the recording of the talk on youtube:

There are many other recordings on the youtube account, so make sure to also check out:
- Mark Little talking about "Open Source Trends"
- Marek Jelen abut how to "Bring DevOps to the Enterprise with PaaS"
- Karoly Nagy and "The next wave in BPM from Red Hat"

I leave you with a bunch of impressions from the venue and the city. Thanks for having me! Looking forward to next year!

Wednesday, October 15, 2014

Developer Interview (#DI 7) Matthias Wessendorf (@mwessendorf) about Openshift, Aerogear and how to bring Java EE to Mobiles

12:00 Wednesday, October 15, 2014 Posted by Test No comments:
, , ,
Welcome to another episode of my developer interviews. It is my pleasure to introduce Matthias Wessendorf (@mwessendorf, blog), whom I know since a long time already. We've been working in and around Java EE for quite a while and met again in Red Hat finally.

Matthias is working at Red Hat where he is leading the AeroGear project. Previously, he was the PMC Chair of the Apache MyFaces project. Matthias is a regular conference speaker.

We've been talking about all kinds of mobile and his project AeroGear and OpenShift and how to connect Java EE backends to Mobiles of any kind.

Sit back, relax and get a #Coffee+++! Thanks Matthias for taking the time!

Monday, October 13, 2014

Virtual JBUG at JavaOne - Infinispan, Java EE 7, Hibernate, CDI, Ceylon and Arquillian

00:00 Monday, October 13, 2014 Posted by Test No comments:
, ,
You have heard about the Virtual JBoss User Group before. It is your unique chance to catch up with all kinds of technologies and methodologies presented by well known Redhatters and community members from all around the world. Just a short week ago the vJBUG was live-streaming the Red Hat mini-booth sessions from JavaOne and we made all of them available for your to watch if you haven't been able to catch up.
Keep an eye on our Youtube Channel, join the Google+ page, follow us on Twitter @vJBUG and make sure to register on our Meetup group.

Test ride of the Arquillian Universe
Aslak Knutsen (@aslakknutsen, Blog, GitHub) & Bartosz Majsak (@majson, Blog, GitHub)
Learn about Arquillian's unknown features and how to use the testing related services which are provided by Drone and other extensions.

Ceylon's fast-growing ecosystem
Stéphane Épardaud (@UnFroMage, Blog, GitHub)
Learn all about Ceylon's fast growing ecosystem. Ceylon is a new modern JVM and JSVM language with a nice blend of functional and object, modularity and great tooling, designed first and foremost for team work.

Java and Mongo for a fun mapping experience
Steve Citron-Pousty (@TheSteve0, Blog, GitHub)
You have a great idea for quick and interesting mapping application with pins on a map with some basic search. Then you lose interest because of all the pieces to install. NOT ANYMORE! In this workshop we are going to use 1 command to spin up all our infrastructure (EAP and MongoDB). Then write some quick and easy Java EE code to build a REST service on MongoDB. To wrap it up we will use a simple Leaflet application to display the results. You will witness the transformation from idea to cool pinny map in this quick session.

Going Native: Bringing FFI to the JVM
Charles Nutter (@headius, Blog, GitHub)
How to make it easier to call native code on the JVM and what the future might be.

The Path to CDI 2.0
Antoine Sabot-Durand (@antoine_sd, Blog, GitHub)
CDI has proven itself to be a great asset for Java. The many features it provides (dependency injection, contextual lifecycle, configuration, interception, event notification, and more) and the innovative way it provides them (through the use of meta-annotations) explain its rapid adoption. This session reviews the features introduced in CDI 1.1 and 1.2 and discusses improvements planned for CDI 2.0.

Automatically scaling Java applications in the cloud
Steve Citron-Pousty (@TheSteve0, Blog, GitHub)
Steve shows how to automatically scale Java EE applications on a PaaS environment using JBoss EAP and OpenShift. In a live demo he deploys an application to the cloud and then turn up the heat by running a load test with thousands of users.

Building Java EE Applications FAST
George Gastaldi (@gegastaldi, Blog, GitHub) & Lincoln Baxter (@lincolnthree, Blog, GitHub)
George and Lincoln will demonstrate the power of JBoss Forge, while creating an end-to-end Java EE application in mere minutes.

Mythbusters: ORMs and SQL - Good or Bad?
Emmanuel Bernard (@emmanuelbernardBlogGitHub)
Java is an object-oriented kingdom where ORMs have flourished. This episode explores key myths and preconceptions about ORMs in a NoSQL and polyglot era. Join this journey to challenge these myths and find out if they are busted, plausible, or confirmed.

Developing Modern Mobile Applications
Sébastien Blanc (@sebi2706, Blog, GitHub)
This live coding session, driven by Java and using a familiar development environment, goes step by step through building a complete mobile, hybrid, multiplatform application ready to be distributed on different vendors’ stores, such as the Apple store or Google Play.

Develop Modern Java Web Applications with Java EE 7
Grant Shipley (@gshipleyBlogGitHub)
Grant showcases how easily you can develop Java EE 7 applications with OpenShift. A live coding session building a Java EE 7 application on WildFly application server using MongoDB as a database.

Scaling Your Database With Infinispan
Mircea Markus (@mirceamarkusBlogGitHub)
Ways of scaling out database systems using the Infinispan data grid.

Friday, October 10, 2014

Come and learn about OpenShift, JBoss Fuse, Fabric8 and HawtIO

12:00 Friday, October 10, 2014 Posted by Test No comments:
, , , ,
Attend Red Hat's complementary, hands-on technical workshop and experience Red Hat JBoss Fuse and OpenShift. Learn how middleware and cloud solutions bridge the theory with reality. Come and learn about OpenShift, JBoss Fuse, Fabric8 and HawtIO, and how these technologies can help you implement a successful DevOps strategy with Automation, Continuous Delivery, and a deep understanding of your middleware.

After attending this FREE 1-day workshop you’ll be able to:
  • Learn how integration Platform-as-a-Service (iPaaS) connects on premise and cloud solutions, and reap the operational efficiencies that OpenShift brings combined with the messaging and routing/mediation/transformation of Red Hat JBoss Fuse.
  • Work with hands-on labs based on real-world case studies led by experienced solution architects.
  • Learn how to use open source integration and messaging software safely and securely in your enterprise.
October 22, 2014 – San Francisco
October 23, 2014 – Los Angeles
October 28, 2014 – Chicago
October 29, 2014 – New York
November 4, 2014 – Houston
December 2, 2014 – Boston
December 3, 2014 – Atlanta

Please make sure to bring a laptop with a minimum of 2GB of RAM (4GB if using a virtual machine) and register at the official event website.

Thursday, October 9, 2014

Developer Interview (#DI 6) Geert Schuring (@geertschuring) about Fuse, Tinkerforge with Apache Camel and Open Source

12:00 Thursday, October 9, 2014 Posted by Test No comments:
, , , ,
I'm happy to welcome you to another episode of my developer interviews. This time happening in the same timezone and a bright awake Markus got the chance to talk to Geert Schuring (@geertschuring, blog) wo works for Dutch Luminis. We talked about his latest project with JBoss Fuse and why he loves it a lot. Beside that he gave a very impressive demo which will make my daughters jealous: He controlled a Tinkerforge LED panel with the help of Apache Camel routes (Find the source code for the Camel component in his Bitbucket repository).

Geert is working as a Java developer since 2006. He always loved the open source concept, and particularly anything that had to do with messaging. For him working on messaging systems and service oriented applications is like playing transport tycoon. He specialized in the Camel/ActiveMQ combination, and particularly in the RedHat Fuse product. At home he likes to install computers and attach a bunch of sensors to them to collect all data. So he is monitoring temperature, humidity, lighting levels, and motion in every room.

As usual, time to grab a coffee+++ and lean back while listening! Thank you Geert, for taking the time!!

Wednesday, October 8, 2014

The Heroes of Java: Dan Allen

12:00 Wednesday, October 8, 2014 Posted by Test No comments:
The "Heroes of Java" series took a long break. Honestly, I thought it might end in the middle of nowhere, even if there are still so many people I would love to include here. One of them is Dan. The first time I asked him to contribute is almost one and a half year back and with everything which happened in the meantime, I made my peace with not getting an answer anymore. But the following arrived in my inbox during JavaOne and was basically a birthday present for me. So, I open the Heroes of Java book again today and add another chapter to it! Thank you Dan! It is very good to call you a friend!

Dan Allen
Dan Allen is an open source and standards advocate and innovator. He worked at Red Hat as a Principal Software Engineer. In that role, he served as the Arquillian community manager, contributed to various open source projects (including Arquillian, Asciidoctor, Awestruct and JBoss Forge) and participated in the JCP. He helped a variety of open source projects become wildly successful. He's also the author of Seam in Action (Manning, 2008), has written technical articles for various publications and is an internationally recognized speaker.

Who are you?
I’m an open source advocate and developer, community catalyst, author, speaker and business owner. Currently, I’m working to improve the state of documentation by leading the Asciidoctor project, advocating for better software quality by advocating for Arquillian, and, generally, doing whatever I can to make the open source projects to which I contribute, and their communities, wildly successful. After a long conference day, you’ll likely find me geeking out with fellow community members over a Trappist beer.

Your official job title at your company?
Vice President, Open Source Hacker and Community Strategist at OpenDevise, a consulting firm I founded with Sarah White.

Do you care about it?
I care more about this title, compared to titles I’ve had in the past, primarily because I got to define it.

In general, though, titles can be pretty meaningless. Take my previous title, Middleware Principal Software Engineer. All titles like this really manage to accomplish is to communicate an employee’s pay grade. The honorary that follows “Principal” is “Senior Principal”. Then, what next? “Principal Principal?” What was I before? A Junior Insignificant Engineer? We might as well just use number grades like in the US government (e.g. GS-10). At least that’s a logical system.

Like many of my peers, I’ve always sought to define my own title for my role. To me, the purpose of a title is to help others know your specialty and focus. That way, they know when you’re the one they need to seek out. That’s why I chose the title “Open Source Hacker and Community Strategist”

I live and breathe open source, so the “Open Source” part of the title fits. If you want to discuss anything about open source, I’m always game.

I also love community, especially passionate ones. I’m always thinking about it and how to make it work better. That’s where the term “community strategist” comes in.

I enjoy getting people excited about a technology and then being there to help get them going when they find their passion to improve or innovate on it. It’s such a thrilling and proud experience for both sides. To me, that feeling is called open source. I simply work to reproduce it over and over as an “Open Source Hacker and Community Strategist”. Maybe one day people will recognize me as a “Serial Community Creator” ;)

Those of us in open source also identify ourselves by the projects we lead or help manage, if any. Currently, I’m the Asciidoctor project lead—​and it’s about as much as I can handle.

Do you speak foreign languages? Which ones?
I wish. I studied French in high school, but consider that experience purely academic. I’m challenging myself to read tweets in French to brush up on what I once knew.

My real life experience with foreign languages comes from interacting with open source community members from around the globe and spending time in other countries. Even though I cannot understand other languages, I enjoy taking in the sounds and rhythms like music. There’s a certain amount of enjoyment I get from listening without the distraction of comprehension.

My favorite foreign language experience was working with the translations—​and their translators—​of the Arquillian User Guides. Not only did it expose me to a lot of languages (over a dozen), it gave me a first-hand appreciation for how much language plays into a person’s identity and the feeling of pride for one’s country.

The experience also pushed me to understand Unicode and fonts. I’m proud to say that I get the whole point of Unicode and how it works (at least from a programming standpoint).

I look forward to working more with translations, rethinking how translations are managed and continuing to take in the sounds and rhythms of languages. One day, perhaps, I will be fluent in at least one of them.

How long is your daily "bootstrap" process?
A more interesting question might be “when?” since I keep some pretty odd hours. My daily goal is usually to get to bed before the sun comes up. That makes my breakfast and bootstrap process your lunch. That all depends on timezone, of course. As one of my colleagues pointed out, I’m surprisingly non-Vampirish at conferences.

You may be wondering what’s with the crazy schedule. The thing about managing an open source project is that you never know when someone is going to be ready to participate. When someone shows up ready to participate, you need to jump on the opportunity. It could be a while (if ever) before they have time again. And that person could be in any time zone in the world.

Truth be told, I like the night just as much as the day anyway. There’s a solitude at night that I enjoy and I often do some of my best work then. Other times, I just enjoy the silence. I look forward to the day too, especially when the view of the Colorado Rockies is clear. I do some of my best work against the backdrop of their purple or white peaks. You might say that I draw inspiration from both the day and night to feed my creativity.

I only do coffee first thing in my “morning”, but I do the other bootstrap activities (like Twitter) several times a day. It takes me about an hour or two to sift through my e-mail and Twitter, with a pit stop at Google+.

You have a twitter handle? Why?
For sure. It’s @mojavelinux.
I have a Twitter account:

  • to be open
  • to connect
  • to discover
  • to report
  • to keep in touch

When I first started using Twitter (over 6 years ago), many people thought it was ridiculous and pointless. I was drawn to it because it offered a way to communicate without any prior arrangements. It’s sort of like a global IRC channel with a contextual filter applied to it.

Twitter has changed the way I do business, and the way I interact with my colleagues and community. Rather try to explain it, I’ll give two examples.

When we were growing the Seam 3 community, we didn’t just wait for people to come join the mailinglist. We looked for people talking about JSF and Java EE on Twitter. One of the more vocal people at that time was Brian Leathem. When he posted feedback or a complaint about JSF, we would engage him by responding to him directly. That turned his post into the start of a conversation or design session. When it came time to hire someone for a related position, he was already a top candidate, and has since become a top employee. There are stories like Brian’s.

It’s easy to conclude that we “hired someone we met on Twitter”. That misses the whole point. Twitter’s public channel gave us an opportunity to find someone who has deep interest and experience with a particular technology or platform. So public that we don’t even have to know where to look for each other (except on Twitter). The meetup is inevitable.

Twitter has also eliminated the overhead of communicating with associates in your own company or even other companies. You just put out a broadcast on Twitter, usually planting a few trigger words or tags, and that person will see it, or someone will pass it on to that person. Either way, you cut out the whole hassle of an employee directory. There’s a global conversation happening on Twitter and we’re all a part of it. Now that’s open.

Whom are you following in general?
First and foremost, my fellow community members. As I mentioned, Twitter is how I keep the pulse on my community and communicate with them throughout the day. I follow a few company and project feeds, such as GitHub and Java EE, but mostly I like to know there is a person behind the account.

I’m hesitant about following anyone I haven’t met, either in person or through a conversation online. I follow the same policy for LinkedIn and Google+ as well.

Do you have a personal "policy" for twitter?
One policy is to stay dialed in. I plow thorough my timeline at least once a day and try to respond to any questions I’m asked. As a community leader, it’s important to be present and participate in the global conversation. Some days, I iron out my agenda only after consulting my stream.

I do make sure to not let it take over (sort of). When I find myself only reading or retweeting, but not sharing, I realize I need to get back to creating so that I have something to share (or just take a break).

I’m very careful to post and retweet useful information. That’s an important part of my personal policy. I use tools like Klout, the Twitter mentions tab and the new Twitter analytics to learn what people consider useful or interesting and focus on expanding on those topics. I dialing down topics that get little response because I respect the time of my followers.

Does your company restricts or encourages you with your twitter usage?
The company policy is, use your own judgment.

Public social networks have had a tremendously positive impact on open source, primarily because open source is both public and social. That makes Twitter pretty central to my position. We often discover new contributors (and vice-versa) on Twitter. We also use it as a 140 character limit mailing list at times (which, trust me, is a relief from the essays that are often found on real mailing lists).

Simply put, I couldn’t do my job (in this day and age) without Twitter (or something like it).

What’s your daily development setup?
A tabbed terminal with lots of Vim and a web browser. Nearly all the work I do happens in these environments. Since I’ve been heavily involved in AsciiDoc and writing content in general, many of my Vim sessions have an AsciiDoc document queued up.

I do all my Ruby development in Vim. I rely on syntax highlighting and my own intuition as my Ruby IDE. If you saw the number of times I split the window, it would frighten you. Don’t mimic what I do, it’s probably terribly inefficient, but somehow it works for me.

When I need to do some Java hacking, I absolutely must fire up an IDE. Editing Java in Vim (without any additional plugins) is just a waste of time. I’m most comfortable in Eclipse because that’s what I used first in my career. However, I’m been firing up IntelliJ IDEA more often lately and I do like Netbeans on occasion. When I have to edit XML in the project, I flip back to Vim because copy-paste is much more efficient :)

The development tools in the browser are a life and time saver when editing CSS. I like to work out the CSS rules I want in a live session, then transfer them to the stylesheet in the project. It all begins with “Inspect element”.

Which is the tool providing most productivity to your work?
Vim. I’ve used Vim every single day I’ve been at a computer for the last decade. I couldn’t imagine life without it. Vim is my hammer.

Your prefered way of interacting with co-workers?

Primarily async communication, with a few face-to-face meetups a year.

The async communication is a mix of mailinglists, social networks, emails and (on and off) IRC. Most personal emails with my close colleagues have been replaced by Google+ and Twitter private messages, since we all have too much email. You’d be amazed how much more effective those private messages are. Something certainly worth noting.

We usually get face time at conferences like Devoxx and JavaOne. This time is so important because it’s when we form the impression of the person behind the screenname. After you’ve met someone, and heard their voice, you’ll never read an email from them the same again. You’ll hear it coming from them, with their voice and expressions. Those impression, and the bonds you form when in person, is what make the virtual relationships work. You also discover some other things to talk about besides tech (or your tech in particular).

Occasionally, I get put on these teams that like to do phone meetings. First, will someone please kill conference lines? They are horrible and a buzz kill. Besides that, phone calls in a global company simply don’t work. No time is a good time for someone. When we finally do manage to get (most) everyone on the phone, no one knows when to talk (or shut up). It’s a circus. Return me to my async communication.

If I do need to be “on the phone”, I prefer Google Hangout (when it works). I’m not exaggerating when I say it’s almost as good as being in person.

What’s your favorite way of managing your todo’s?
I did a lot of research in this area and decided on an online application named Nirvana. It adheres to David Allen’s GTD method more faithfully than any other one I evaluated. When I’m good about sticking to it, it serves me well.

When I’m not so good, I fall back to my two anchors, a text file named WORKLOG and my email inbox.

One trick I’ve used for years, which works great for context switching, is maintaining a WORKLOG file in each project that I work on. The tasks in this file aren’t perk pressing, but do remind me of what I want to do next when I have time to work on the project. It’s especially useful when you return to a project after a long break.

If you could make a wish for a job at your favorite company, what would that be?
I’m at the point now where my ideal job isn’t at someone else’s company, but at my own. One of the main reasons I love open source is the autonomy it grants. I don’t have problems finding ways to create value, but I do sometimes have problems convincing my employer to pursue that value creation.

In my ideal job, which I’m now pursuing, I can create value anyway I want, I can judge when I’ve succeeded and when I’ve failed for myself, I can decide when growth is necessary and when it isn’t and I can defend the principles important to me. That’s why my wife and I took the step to create our own business. Our goals are pretty simple: survive, be happy & healthy, create value, work in open source and help clients be wildly successful.

You’re programming in Java. Why?
I’m a strong believer in portability and choice. And I believe the JVM provides us that freedom. The fact it’s one of the most optimized and efficient runtimes is just icing on the cake.

I use Java because it’s the default language on the JVM. If another language replaced it as the default, I’d probably use that instead. Java is a means to and end to run and integrate code on the common runtime of the JVM. There are some compelling features that have made Java enjoyable, such as annotations and now lambdas and streams. However, if I have my choice, I prefer other languages, such as Ruby, Groovy and Clojure…​as long as the language runs well on the JVM :)

What’s least fun with Java?
The ceremony and verbosity. It’s too much to type. I like code that can get a lot done in a little amount of space, but still be readable and intuitive. Java requires a lot of space.

Java is also missing some really key features from the standard library that you find in most other languages. A good example is a single function that can read all the content from a file or URL. It’s a simple concept. It should have a simple function. Not so with Java.

Also, getters and setters are dumb.

If you could change one thing with Java, what would that be?
Less ceremony for imports. I know, that’s not the first thing that comes to a lot of people’s minds…​that is unless you’ve done a lot of work in a dynamic language.

One of the biggest differences between Java and dynamic languages not often mentioned is the number of types in the default language set and the number of import statements you need to get more.

It may not seem such a big deal, especially since IDEs help manage the import statements, but you’d be surprised how much they still slow you down, and outright paralyze development without the help of an IDE. In Ruby (and to some extent, Groovy), you can write most simple programs without a single import (require) statement. That means you can just keep plugging away.

Ruby also let’s you import a whole library so it’s accessible to all the files in your application with a single statement (a RubyGem). In Java, you have to import every single type you use (or at least every package that contains them) in every single file. That’s a huge number of extra lines to manage.

My hope is that this improvement comes along with Java modularity. You can import a module into your application, then use the types from it anywhere. That would be game changing for me. Combined with the language improvements in Java 8, my efficiency in Java just might be able to catch up to my efficiency in Ruby.

What’s your personal favorite in dynamic languages?
Ruby. I’ve now written more code in Ruby than in any other programming language (https://www.openhub.net/accounts/mojavelinux/languages). (I’ve also explored the Ruby and Java interop extensively). I can attest that Ruby is very natural, just as the language designer intended it to be.

I’m also a fan of Groovy and Clojure. I like Groovy for the reasons I like Ruby, with the added benefit that it integrates seamlessly with Java.

Clojure is my “challenge yourself language”. I wouldn’t say it feels natural to me yet, but it pushes me to write better code. It’s true what they say about a LISP. It does expand your thinking.

Which programming technique has moved you forwards most and why?
Functional programming, no doubt. This is a popular response, but for good reason. It’s more than just a trend.

From my experience working with Java EE, Seam and CDI, I believe I’m qualified to say that managing state in a shared context is difficult in the best cases and usually fallible or impossible. As isolated processes become increasingly rare, we must change our approach to development.

Functional programming gives us the necessary tools. Higher order functions allow us to compose logic without having to rely on class hierarchy and the temptation of relying on shared state. Persistent collections and no side effects let’s us write code that is thread safe by default and, better yet, prepared to be optimized for multi-core and even distributed.

Don’t take my word for it, though. Just listen to a few of Rich Hickey’s talks, then grab a book or tutorial on Clojure and start studying it. Your mind will convince you.

What was the biggest project you’ve ever worked on?
It was a J2EE web application that facilitated mortgage lending and automated appraisal services. The application was written in a somewhat obscure component-based framework that predated JSF that talked to an EJB2 backend and webMethods services. It had to be loaded on the bootclasspath of Weblogic in order for it to run for reasons I’ll never understand. In my time working there, the test suite never completed successfully and no one could figure out how to fix the behemoth. Debugging was a nightmare. It wasn’t pretty. Let’s just say I appreciated the need for a lightweight framework like Spring and changed my career path once I lost the stomach to work on this system.

The nice part about that job was that I got experience using the XP development methodology (story cards, pair programming, continuously failing integration, etc). It’s probably the only reason the application was staying afloat and moving forward at all.

Which was the worst programming mistake you did?
Not documenting (and not testing).

I’m always getting on myself for not documenting. We think of programming mistakes as logic or syntax errors, but the worst crimes we can commit are not passing on knowledge and stability. It’s like spreading land mines around a property, forgetting about them and then turning the property into a park. The mistakes are going to be made by the next person who isn’t aware of all those things you need to know to keep the system running securely.

I’ll end with a variation on the most popular Tweet at this year’s OSCON to help encourage you to be a more disciplined programmer.
Always [write documentation] as if the [person] who ends up maintaining your code will be a violent psychopath who knows where you live.
— John Woods (source)

Monday, October 6, 2014

The future is Micro Service Architectures on Apache Karaf

13:00 Monday, October 6, 2014 Posted by Test No comments:
, ,
This is a guest blog post by Jamie Goodyear (blog@icbts). He is an open source advocate, Apache developer, and computer systems analyst with Savoir Technologies; he has designed, critiqued, and supported architectures for large organizations worldwide. He holds a Bachelor of Science degree in Computer Science from Memorial University of Newfoundland.

Jamie has worked in systems administration, software quality assurance, and senior software developer roles for businesses ranging from small start-ups to international corporations. He has attained committer status on Apache Karaf, ServiceMix, and Felix, Project Management Committee member on Apache Karaf, and is an Apache Software Foundation member. His first printed publication was co-authoring Instant OSGi Starter, Packt Publishing, with Johan Edstrom followed by Learning Apache Karaf, Packt Publishing, with Johan Edstrom and Heath Kesler. His third and latest publication is Apache Karaf Cookbook, Packt Publishing, with Johan Edstrom, Heath Kesler, and Achim Nierbeck.

I like Micro Service Architectures.

There are many descriptions of what constitutes a micro service, and many specifications that could be described as following the pattern. In short, I tend to describe them as being the smallest unit of work that an application can do as a service for others. Bringing together these services we’re able to build larger architectures that are modular, light weight, and resilient to change.

From the point of view of modern systems architecture the ability to provision small applications with full life cycle control is our idea platform. Operators need only deploy the services they need, updating them in place, spinning up additional instances as required. Another way of describing this is as Applications as a Service (AaaS). Take particular small services such as Apache Camel routes or Apache CXF endpoints and bring them up and down with out destroying the whole application. Apache Karaf IS the platform to do micro services.

To make micro services easier, Karaf provides many helpful features right out of the box;

  • A collection of well tested libraries and frameworks to help taken the guess work out of assembling a platform for your applications.
  • Provisioning of libraries or applications via a variety of mechanisms such as Apache Maven.
  • Feature descriptors to allow deployment of related services & resources together.
  • Console and web-based commands to help make fine grained control easy, and
  • Simplified integration testing via Pax Exam.

One of my favourite micro service patterns is to use Apache Camel with a Managed Service Factory (MSF) on Apache Karaf. Camel provides a simple DSL for wiring together Enterprise Integration Patterns, moving data from endpoint A to endpoint B as an example. A Managed Service Factory is an Modular Pattern for configuration driven deployments of your micro services - it ties together ConfigAdmin, the OSGi Service Registry, and our application code.

For instance, a user could create a configuration to wire their Camel route, using a MSF, unique PIDs will be generated per a configuration. This pattern is truly powerful. Create 100 configurations, and 100 corresponding micro services (Camel routes) will be instantiated. Only one set of code however requires maintenance.

Let’s take a close look at the implementation of the Managed Service Factory. The ManagedServiceFactory is responsible for managing instantiations (configurationPid), creating or updating values of instantiated services, and finally, cleaning up after service instantiations. Read more on the ManagedServiceFactory API.

public class HelloFactory implements ManagedServiceFactory {

 public String getName() { return configurationPid; }

 public void updated(String pid, Dictionary dict) throws  ConfigurationException { 
  // Create a dispatching engine for given configuration.

 public void deleted(String pid) {
  // Delete corresponding dispatch engine for given configuration.

 //We wire in blueprint
 public void init() {} 
 public void destroy() {}
 public void setConfigurationPid(String configurationPid) {}
 public void setBundleContext(BundleContext bContext) {}
 public void setCamelContext(CamelContext camelContext) {}

We override the given ManageServiceFactory interface to work with DispatchEngines. The DispatchEngine is a simple class that contains code for instantiating a Camel route using a given configuration.

public class HelloDispatcher {

 public void start() {
  // Create routeBuilder using configuration, add to CamelContext.
  // Here ‘greeting’ and ‘name’ comes from configuration file.

        routeId("Hello " + name).
        log(greeting + " " + name);            

 public void stop() {
  // remove route from CamelContext.

When we deploy these classes as a bundle into Karaf we obtain a particularly powerful Application as a Service. Each configuration we provision to the service instantiates a new Camel router (these configuration files quite simply consist of Greeting and Name). Camel’s Karaf commands allow for fine grained control over these routes, providing the operator with simple management.

Complete code for the above example is available via github, and is explored in detail in Packt Publishing’s Apache Karaf Cookbook.

Micro Service Architectures such as above unleash the power of OSGi for common applications such as a Camel route or CXF endpoint. These are not the only applications which benefit however. I’d like to share one of our Karaf success stories that highlights how Apache Karaf helped bring structure to an existing large scale micro service based project.

Imagine having hundreds of bundles distributed over dozens of interconnected projects essentially being deployed in a plain OSGi core and left to best luck to successfully boot properly. This is the situation that OpenDaylight, a platform for SDN and NFV, found themselves in a few months ago.

Using Karaf Feature descriptors each project was able to organize their dependencies, bundles, and other resources into coherent structures. Custom commands were developed to interact with their core services. Integration testing of each project into the project’s whole were automated. Finally all of these projects have been integrated into their own custom distribution.

Their first Karaf-based release, Helium, is due out very soon. We’re all looking forward to welcoming the SDN & NFV community to Karaf.

While Apache Karaf 3.0.x line is maintained as our primary production target, the community has been busy as ever developing the next generation of Karaf containers.

The 4.0.x line will ship with OSGi Rev5 support via Felix 4.4.1 and Equinox 3.9.1-v20140110-1610, and a completely refactored internal framework based on Declarative Services instead of Blueprint. From a users point of view these changes will yield a smaller, more efficient Karaf core. There will be a Blueprint feature present in Karaf so that you can easily install Blueprint based applications. You will always be capable of using Blueprint in Karaf. So the main difference from a user perspective is that you’d need to depend on the Blueprint service if you need it.

This has been a very brief overview of Micro Service Architectures on Apache Karaf, and Karaf’s future direction. I’d suggest anyone interested in Micro Services to visit the OSGi Alliance website, and join Apache Karaf community. For those whom whom would like to dive into an advanced custom Karaf distribution have a look into Aetos. Apache Karaf is also part of JBoss Fuse.

Wednesday, October 1, 2014

Virtual JBoss User Group (Virtual:JBUG)

12:00 Wednesday, October 1, 2014 Posted by Test No comments:
, ,
Do you know what the number one stop for all kinds of great JBoss developer sessions is? No? It is the Virtual JBoss User Group. It has been launched at the beginning of this year and gained more and more attraction. The idea behind it is pretty simple. Make it easy for all interested developers around the world to attend a user group and take advantage of the knowledge that is shared in those meetings. With all our days becoming more and more busy it is just a bit like NetFlix. Instead of having to walk or drive to attend a session you're interested in you could either join the live-stream or watch a recording of the session. Some pretty awesome ones have already been held since it's launch. But this is only the beginning. We're looking for speakers and content and of course appreciate any ideas and hints to improve on the meetings.

So, if you are interested in latest and greatest from the JBoss ecosystem, just tune in to the meetings or subscribe to the Youtube channel.

If you want to give a session, send your suggestions to Paul Robinson (@Pfrobinson) or myself (@myfear), by shooting out to us on twitter or leave a comment on this blog-post or send me an email to markus at jboss dot org.