Apache Camel is a versatile open-source integration framework based on known Enterprise Integration Patterns.
I thing this is enough to decide whether to read or not to read this article. If you thing lightweight Integration framework could be something interesting but you need further readingo to decide, so maybe the shortest path is to look at Stackoverflow discussion about what actually Apache Camel is. Read short introduction to Apache Camel with example below.
Apache Camel is java library and engine which is well situated for different Integration patterns. However Camel is not BPMN Engine or ESB but it could be under the hood implementation of such products. Apache Camel is a programers tool for mediation and integration problems. Let’s understand it by looking on the entitiest.
Lets’ start by basic Camel entities: Message and Exchange.
org.apache.camel.Message – is the fundamental entity containing the data being carried and routed in Camel. Massages are contained out of
- Unique Identifier: of type java.lang.String .
- Headers may provide some hints about content. Headers are organized as name-value pairs. The name is a
unique, case-insensitive string, and the value is of type java.lang.Object.
- The body is of type java.lang.Object . It means that it’s up to you to make sure that the receiver can understand the content of the message. When the sender and receiver use different body formats you can use a number of camel mechanisms to transform the data into an specific format. In many cases the conversion can happen automatically with pre-defined type converters.
- The fault flag it is a bit special thing to distinguish between normal and fault returns as defined by some Standards (e.g. WSDL).
org.apache.camel.Exchange is abstraction for an exchange of messages as part of a “conversation”. Below are components of a such conversation, that make this abstraction more comprehensive.
- Exchange ID
- MEP a particular Message Exchange Pattern like InOnly or InOut. When the pattern is InOnly, the exchange contains only IN- Message.
- Exception when it occurs at any time during routing.
- Properties are similar to message headers, but they last for the duration of the entire exchange also camel may add some properties to a particular exchange.
- IN-Message or request message is mandatory.
- OUT-Message or replay message exists if the MEP is defined as InOut. Read more »
This post covers some basic OSGi concepts. Also i’ll present a Tycho buildable example of service definition in declarative approach. Next article will cover OSGi Blueprint DI container. Also look here for more complex tycho example.
Breaking a system in modules is a very important architectural task or even a methodology. Remember the Separation of Concerns (SoC) principle [1, 2] and consider better system maintainability by enforcing logical boundaries between modules. This and other aspects explain the growing popularity of OSGi technology in the past years. Since OSGi is very popular today (Nearly every modern Java Application Server and IDE is based on OSGi platform) it is worth to be familiar with it.
Read more »
Modern oracle jvms (java 1.7, java 1.6) are bundled with couple of tools that allow watching to the heartbeat of your jvm during the run-time. One of the prominent is of course VisualVM which evolves even independently of jvm releases. If you didn’t used it before try right now. VisualVM allows relative deep analysis and its comprehensive enough furthermore it’s open source tool.
However it reaches limitats when you have to work with java version prior to 1.5. (in a real world sometimes thing changes slowly Also it’s often the case that its not easy to connect over RMI remotely to productive machines, therefore its never a bad thing to be familiar with console tools modern jdk and jvm’s providing. Furthermore console tools are often very handy, focused on one or few tasks, they are low resource consuming and you can build chains of such tools and reuse them in your way. So let’s look on them.
Read more »
This post shows how to clean JPA entities out of Persistence Context overhead when you need to use them outside of container, serialize them and send them over RMI, SOAP and other protocols to another JVMs.
You may found yourself in a situation where you don’t have DTO’s, there existing object-graph is a bit wide-spreading but you need to use entity objects outside of the managed scope. So where is a problem? In case of Hibernate first problem appears is huge object footprint you’ll have to serialize by default even if you send just one detached entity. I found that at some circumstances nearly the whole Hibernate Context is still connected to your detached entities. If you serializes such an huge but useless object graph every time, you slows down your client, last your network, creates huge RMI/Web Service marshalling overhead, wastes client memory which even can provokes out of memory problems. All that you don’t need in your application.
So how to avoid this? We need a simple way to purify given entities at “low cost”. Which means the solution has to be simple for developers, with minimal boilerplate code and also performant at run-time. The output should contain clearly detached and as much as possible purified entities. It’s very important to cut any possible references to technical baground object of (hibernate) persistent context.
Before you start you have to be clear about that such cleaning makes sense only outside of transaction scope. Then at the end of transaction all participated entities have to maintain their persistent state, so of course they cannot be detached before that point. Otherwise detached and pruned entities cannot be persist by entity manager anymore and have to be refreshed first.
However you don’t have to weak transactional behavior, just do cleaning outside of transactional scope. In container managed transaction environment it simply achieved by annotations. Read more »
This post was began for more than a 2 years ago and because i was to busy to finish it. But now here is it, better late than never.
The goal is simple. There is a need of having a central storage of shared and private documents for small (rarely changing) user group. We have windows and Linux PC that have to access this centralized file storage. A user-friendly access as well minimum of maintenance are also goals here. Furthermore base level of security is a goal here as well.
However the peresented configuration as I think is quite suituable for private use, small working groups and even kinds of small businesses.
It think it’s not a bad idea to have two different data spaces: private and shared. An this separation leads to simple rules of usage:
- Every user can read own documents and documents of other users in the shared place.
- write and delete is only permitted in user’s private directory.
Read more »
This post is attended to everyone who is creating Java applications with Eclipse Rich Client Platform. This article describes a working tycho configuration on working project (demo) project. That project can be build fully automatically with tycho on your CI server e.g. Jenkins.
If you have developed Eclipse RCP, you maybe also come to the conclusion that PDE-Build out of Eclipse IDE is not really an apropriate and stable way to build serious, production ready applications. But also automatization of PDE Build was not straightforward task, and a such is still not well documented (IMHO).
Furthermore maybe you heard about some alternatives like buckminister approach or athena. There is also a couple more approaches, but my focus yet is on tycho because i believe it has bright feature.
So again this post describe kick stat tycho approache the next topic may cover, artifact repository, CI Server or, advanced tycho tasks, fill fre to comment…
Let me introduce tycho in few words here. Technically tycho is a set of maven plugins. But let it be said at the beginning, tycho tries to use all the eclipse PDE/JDT metadata first, everywhere it’s possible and therefore one of the goals of tycho project is to minimise configuraton duplication in maven artefacts. I try to show how this works on a working example.
But first here is the self-speaking list of tychos packaging types, i will covers here some of them more detailed.
- eclipse-plugin result in Eclipse Plug-In bundle
- eclipse-test-plugin result in a test Plugin
- eclipse-feature wich eclipse feature as Result
- eclipse-application builds Eclipse Applicaton
- eclipse-repository builds repository an executables
- eclipse-update-site responisble for update-sites
Tycho current release is 0.13.0 and is used in my example.
Read more »
Looking on my block at the end of the year i see than nearly two years ago i wrote about extracting archives under Linux but not about putting files in to archives. Now a have some time to continue.
Here are some common way to create your archives.
#Creates simple targetfile.tar without compression.
tar cvf targetfile.tar sourcedir/*
#Zip everything beneath sourcedir to targetfile.tar.gz
tar cvzf targetfile.tar.gz sourcedir/*
#Bzip2 everything beneath sourcedir to targetfile.tar.bz2
tar cvjf targetfile.tar.bz2 sourcedir/*
- c or –create create a new archive
- v or –verbose verbosely list files processed
- z or –gzip usage of gzip compression (or also decompression, context dependent)
- j or –bzip2 usage of bzip2 compression
- f or –file use archive file
Alternative with pipe usage:
tar -cf - sourcedir | gzip -c > filename.tar.gz
#Zip every file in current directroy to file.zip.
#But hidden files like (.htaccess) are not included.
zip file.zip sourcedir/*
#also includes hidden files.
zip file.zip sourcedir/*.*
The above examples include directories but still not their content recursively, -r option is required.
#Adds all files and directories recursivly.
zip file.zip -r /sourcedir/*
#Same as abowe with addtional enryption and password lock.
#Password is prompted on the terminal.
zip file.zip -re /sourcedir/*
#Splitts creted archive to parts not bigger than 2 Gigabytes.
zip -s 2g -r test.zip ./*
Hope that helps someone.
Happy new year!!!
This is a short step by step explanation of the setup of JBoss 7.0.2 on your Linux (explicit debian). Nowadays there is still no official Debian package for JBoss 7 out there, so we have to do a couple of steps manually. First i describe how to download and to prepare the jboss. Secondly we do some basic configuration that you’ll be needed and at the end i will show you one of the ways to register JBoss as a service.
1. download and prepare.
Start by download currently available version (7.0.2) of the JBoss 7.
#Web Profile version download.
Extracting files to the final location using tar.
Read more »
Here is just an example of how to install java 7 on your linux.
I use current Debian and oracle (former sun) java 7.
First i had to download the latest java from oracle site and then extract it. I have to do it because at the moment the is no official debian package for java 7.
So we are not able to do it with apt-get as we can it for java 6.
Read more »
What is your favorite Free or Open-Source UML Plug-in?
Every year i try some of them and remove them after few hours. As i remember, they where resource-hungry or just bad in reverse engineering
Some weeks ago i tried ObjectAid UML Explorer Class Diagram and liked it. It could quick and easy create simple class Diagrams – just by Drag & Drop. And i had no problems with static constructors or inner classes and other stuff in the code which causes problems to another Plug-ins.
Unfortunately Object Aid Sequence Diagram are not free but cost not much for private usage. Maybe i’ll try it soon.
But first i would ask you what is your favorite Eclipse IDE Plug-in for fast and easy (e.g. partly) revers engineered UML diagrams which can be used to show some architectural details to your colleagues?
Thank you for comments!