Sowohl End-2-End-Testing als auch End-2-End-Monitoring folgen dem gleichen Paradigma – sie betrachten eine Applikation aus der Sicht des End-Users. Hier darf es keine Rolle spielen, in welcher Oberflächentechnologie die Applikation geschrieben ist oder in welcher Art sie mit dem End-User in Verbindung tritt. Genau an diesem Punkt setzt das Open-Source-Tool Sakuli an.
Typical Java backend applications need to integrate with existing 3rd party services. In most cases, calls to these 3rd party services are authenticated. Frequently, Java applications are required to use login credentials for authenticated calls: A username and a password.
This scenario raises a problem: How can we store the password needed for calling the 3rd party service? We could store it in a properties file, but then everyone with access to the properties file learns the password. We could provide the password as a command line parameter or environment variable, but then everyone with access to the startup script learns the password. We could hard-code it in our application, but then everyone with access to the JAR file learns the password. We could encrypt the password using a master key, but then we have the same problem again: How to store the master key?
The common solution is to use a secure data store provided by the operating system. Our application runs on Windows Server, so we use the Windows Data Protection API (DPAPI) for protecting our secret passwords. This blog post shows how to use the DPAPI in Java applications.
DevoxxUS has been my first Devoxx outside of Europe so far. It was a total different Devoxx experience for me compared to the six times in Antwerp Belgium that I have been to in the past years.
Yet different it has been a great conference! I would like to share some of my adventures and thoughts in this post.
If you ever needed to request HTTP resources with Java, you probably came across several solutions put together from a surprising number of lines. And you probably ended up with using a third party library to achieve your goal in a reasonable manner.
Good news: besides [Java 9 modules], the next JDK version comes with a brand new HTTP client, and it not only brings support for HTTP/2, but also a sleek and comprehensive API. Let’s have a closer look at the new features.
The ELK-Stack is a good option to aggregate and visualize distributed logging-data. It basically based on
The core of the most ELK applications is the Logstash configuration. A user defines here which data (inputs) is processed, how (filter) the data is processed and where it will go afterwards (outputs). Especilly this configuration contains a lot of logic which is unfortunally not easy to test. In this article I want to show you how to setup a testing environment for your Logstash configuration.
In about three weeks [DevoxxUS] will take place in San Jose, California on March 21-23. After having visited Devoxx Belgium six
consecutive times this will be my first Devoxx conference outside of Europe. Once again I am honored
to be a speaker at that conference! After my Devoxx BE talk in 2015 ([Testing Microservices with a Citrus twist]) this is my second time speaking
in front of Devoxxians from all around the world. Fantastic!
This time I am going to talk about behavior driven integration with [Cucumber] and [Citrus].
Have you ever wondered what kind of patterns
.gitignore allows? Was it
*target*?? Read on and find out!
So, 2017 has arrived - this is the year when Java 9 will finally be released. And with it, the brand new module system called Jigsaw. In January, Marc Reinhold has announced that [JDK 9 is feature complete], so we have every reason to be optimistic that the final release will actually ready in July. So it is about time to get acquainted with project Jigsaw, also known as Java 9 modules.
Getting started with Kubernetes can be intimidating at first. Installing Kubernetes is not the easiest of tasks and can get quite frustrating.[^1] Luckily, there is an out-of-the box distribution called Minikube which makes toying around with Kubernetes a bliss.
At this year’s [FOSDEM] conference I did a 20 minutes presentation on how to implement
tail -f in [Go]. The video is available below.
Abstract: As part of a log file monitoring tool, I implemented a file tailer that keeps reading new lines from log files. This turned out to be much more challenging than I thought, especially because it should run on multiple operating systems and it should be robust against logrotate. In this 20 Minutes talk I will present the lessons learned, the pitfalls and dead-ends I ran into.
Undertow is an open-source lightweight, flexible and performant Java server, they say. I can confirm that it’s
- lightweight: just have a look at those few lines of code to start a server and 1MB core JAR
- flexible: always feel free to provide your own implementations or use Undertow helpers to delegate usual server glue code to a more specific implementation you provide
I didn’t check or compare performance. It is the default server implementation of Wildfly Application Server and sponsored by JBoss.
Die Software-Entwicklung ist im Wandel. Immer schneller, immer häufiger, immer einfacher müssen neue Features in Produktion gebracht werden. Große, schwergewichtige Alleskönner werden durch mehrere kleine, individuelle Services ersetzt. Jeder Microservice bildet einen Aspekt der gesamten Fachlichkeit ab und lässt sich deshalb unabhängig entwickeln und warten. …
Der vollständige Artikel ist in der Java aktuell 01-2017 zu finden:
Stabile und skalierbare Testumgebungen für End-2-End-Tests sind seit jeher schwer aufzusetzen und zu warten. Besonders in Kombination mit automatisierten UI-Tests stellen sie Tester und Entwickler immer wieder vor große Herausforderungen. Einen eleganten Ausweg bieten in Container verpackte Testumgebungen, die sowohl Web- als auch Rich-Clients in echten Desktop-Umgebungen testen können. Als “Immutable Infrastruktur” betrieben, wird es dadurch möglich, einen definierten Systemstand jederzeit reproduzierbar aufzurufen und Tests darin performant auszuführen.
The [Sakuli Java DSL] setup shows how easily you can use [Sakuli] to test your application in an end-2-end scenario. This is a great starting point to learn how to use [Sakuli] together with [Maven] and [Docker].
Sakuli wird für EndToEnd mit Linux und Windows Applikationen bereits vielfach eingesetzt. Wie sieht es aber mit Android, dem verbreitetsten mobilen Betriebssystem, aus? Hierzu ein Beispiel.
Der JUG Saxony Day fand am 30.09.2016 im Konferenzzentrum Radisson Blu Park Hotel in Dresden statt. Die von Anfang an gute und entspannte Atmosphäre beeindruckte ebenso wie die Auswahl der Vorträge. Insgesamt waren es über 30 Vorträge in 5 parallelen Tracks, die sowohl die aktuellen Trends in der Container-Technologie behandelten, Überblick über die neuesten Testing-Konzepte zeigten als auch einen Ausblick auf das zukünftige JDK 9 in petto hatten.
Mit seinem Vortrag “Containerized End-2-End-Testing” war Tobi am 31.08. als Redner beim [Herbstcampus] 2016 in Nürnberg.
“Sakuli”, das Open-Source-Framework zum automatisierten Testen von Applikationen, ist vor kurzem in Version 1.0 erschienen. Ein kleiner Blick auf die zurückliegenden Änderungen.
In a previous article we went through how to build a chat room web application that used REST and STOMP for communicating between the client and server. In this article I use the very same application and show how to write automated integration tests using the open source Citrus integration test framework.
If you haven’t read the first article don’t worry. A quick summary of all the important bits will be shown shortly below. But before I get to that lets talk a little bit about automated integration testing and citrus.
One of the biggest challenges when testing any application is being able to simulate all endpoints.
A couple of years have passed since we last looked into in-memory caches here at ConSol. In that time a bunch of things have happened:
Probably the most significant thing that happened was that the oldest Java Service Request JSR 107, also known as JCache, finally reached ‘Release’ status. This JSR was a long time in the making taking a whole 13 years since the initial proposal back in 2001.
The existing In-memory caches providers, like Hazelcast, have received a whole host of new features including things like support for distributed transactions, a new Map-Reduce API, interceptors for executing business logic, when the cache entries change, to mention just a few.
Sakuli todays release is a great milestone because it introduces a brand new graphical installer and a bunch of other features!
Download and check it out sakuli-v0.9.2-installer.jar!
Fabian and Christoph have been invited to speak at [Devoxx Conference] 2016 in Antwerp, Belgium. Watch their talks to learn more about HTTP2 and Citrus Framework.
Some time has passed since part one of this blog post series and we have made some improvements on the Citrus Arquillian extension.
So we can look forward to this post as we move on with a more complex test scenario where we include some Citrus mail server within our test. In part one we have already combined both frameworks Arquillian
and Citrus with a basic example.
Citrus and Arquillian
both refer to themselves as integration test frameworks. Following from that you might think these frameworks somehow ship the same package but this is not the case. In fact the frameworks work
brilliant together when it comes to automate the integration testing of JEE applications.
Just recently I gave a presentation on Git (the version control system, not the British pejorative). I introduced newbies to the Git world and the concepts behind it and demonstrated advanced users some lesser known Git features.
Additionally, I introduced my personal workflow when working on small scale features, let’s say the size of one commit to the main line. Some of my colleagues found this workflow to be particularly interesting, so I’d like to share it here and discuss its benefits and drawbacks.
In this post I will continue with the Apache Camel integration testing scenario that we have worked on in part one and part two of this series.
This time we focus on exception handling in Camel routes. First of all let’s add exception handling to our Camel route.
In part one of this blog series we have used Citrus in combination with Apache Camel for setting up a complete integration test scenario. Remember we have interacted with our Camel route
via JMS as client and via SOAP Http WebService as a server.
Now in the second part we want to interact with a Camel route using direct and Seda in memory message transports. First of all we need a Camel route to test.
Eine Konferenz in einem Vergnügungspark? Klang zunächst so ungewöhnlich, wie spannend. Zugegebenermaßen konnten wir uns im Vorfeld auch nicht genau vorstellen, wie so etwas aussehen wird. Und bereits beim Check-In im Hotel wurde klar: Das wird kein rein monotoner Talk-Marathon. Die beiden Hotels, welche von ConSol bezogen wurden, hatten jeweils ein Motto (asiatisch und afrikanisch) und wussten dieses auch für die Gäste, teils sehr detailverliebt, darzustellen. Nachfolgend wollen wir ein paar unserer persönlichen Eindrück schildern:
This blog post shows how to set up the new Docker plugin for Intellij IDEA 14.1 on Ubuntu Linux 14.10.
**1. Install Docker
If you haven’t installed Docker already, use the following command to install it:
<br /> wget -qO- https://get.docker.com/ | sudo sh<br />
Apache Camel is a great mediation and routing framework that integrates with almost every enterprise messaging transport. In the past I have experienced Camel projects struggling with integration testing where the actual message interfaces to boundary applications are not tested properly in an automated way.
So in a series of posts I would like to talk about integration testing strategies for Apache Camel projects using the Citrus integration test framework.
The GoTo Conference Berlin is part of a conference series with stops in Berlin, Chicago, Amsterdam, Aarhus and Copenhagen. The 3 day conference was divided in workshops on the first day and talks on the second and third day.
The talks and the catering were very well organized. The only drawback was, that the WLAN wasn’t working most of the time.
Now lets go through the talks:
Devoxx is over, sadly, and under normal circumstances this would be the time when we Devoxxians return to our everyday’s lives for another year.
However, this time it is different: At Google’s booth at the exhibition area we got their latest Cardboard gadget. Cardboard is a virtual reality viewer for Android phones and it is absolutely the greatest thing I have ever seen on a phone. The Cardboard app comes with a lot of fancy demos like a virtual reality tour through Versailles, flying around in Google earth and even a short animated 360° movie.
For me Devoxx did not stop when I left the venue this afternoon. Devoxx continued at home when I opened that Cardboard give-away. Infinite possibilities, the motto of this year’s Devoxx, couldn’t fit better. I definitely need to check it out and learn more about it.
Thank you very much for that, Google! (fabian)
See you next year, at the Devoxx. But before that lets have a look at the last day and a very inspiring talk on Android Wear:
First of all a small notice on the Ignite sessions at Devoxx. The 5 minute talks with 20 slides were very entertaining and I am glad that Roland kind of talked us into this. The sessions take place during lunch break but it is definitely worth taking the time and listening to the talks.
Now let’s go through the talks of day 4 in Antwerp.
Devoxx ignite sessions are a great thing: Each speaker has 20 slides in 5 minutes, the slides are auto-forwarding, so each slide is up 15 seconds. During the hour long ignite session you would hear 8 talks. Today, we learned how to make money, ride a mountain bike, do performance tuning, save the planet, be a diabolical developer, share a house, do open source, decode the airspace, and why Stephen Chin’s job sucks.
The format reminds a bit of TED’s talks, talks are quick, innovative, and engaging. Sometimes I even felt that the take away of a five minute talk is not necessarily less than the take away of the three hour university sessions.
So the group of ConSol Devoxxians is now complete as the rest of the posse has finally arrived for the upcoming conference days in Antwerp. And we are all excited to hear the latest news in the opening keynote from Stephan Janssen, who is best named as the father of the Devoxx conference and the Parleys platform.
Stephan has some great announcements in his keynote. One of them is to welcome Devoxx Poland as new family member in Krakow next year, which is indeed great news for our ConSol colleagues in Poland.
2nd day in Antwerp where Torsten, Julian, Roland and Fabian are able to listen to awesome university and tools in action talks. Tomorrow on Wednesday the rest of the ConSol posse (Ana, Georgi, Christian and Christoph) arrives in Antwerp to see the 3-day conference part of Devoxx. And still another highlight to come on Devoxx day 2: Roland speaks about “Spicing up JMX with Jolokia” in his tools in action talk scheduled 18:05-18:35 in room 8.
So here is the wrap up of Devoxx Day 2:
It’s Devoxx time! Mid of November in lovely Antwerp, Belgium. Five days packed with technical talks, hacks and technologies. And of course as usual a group of Consolis will bring the Devoxx atmosphere to you. We blog our experiences and impressions from Antwerp.
So be prepared to receive some on site summaries of what we have seen and what inspired us here.
It took some time, yes. In the past year most of the action was on the Jolokia side, but now Jmx4Perl 1.10 is out of the cage. It comes with a tons of fixes plus additional goodies:
In Part I of this tutorial I introduced the basic concepts and benefits of Citrus as a test driver for ESB projects in general and webMethods in particular. In this second part I want to discuss some Citrus project setup options and provide a quickstart template project for Ant users.
A new package of the Open Source integration test framework Citrus has just arrived. Version 1.4 comes with new features such as data dictionaries, SMTP mail support and an improved endpoints API for easier configuration. See the 1.4 documentation changes report for a detailed overview on all changes.
With the new configuration components we give credit to all users continuously giving us feedback on the Citrus configuration. With 1.4 our primary goal was to simplify the configuration without loosing the great extendability and customization capabilities of Citrus.
If you are coming from Citrus 1.x we have summarized the configuration changes in this migration sheet.
The old Citrus configuration components were marked as deprecated, so you can continue to use those components when upgrading to 1.4 without any changes. However you should consider to upgrade to the new endpoint configuration in order to be ready for the upcoming versions.
Also have a look at the new config sheet to see how the new configuration works for you.
Jatumba ConSolis! Zwei aufregende Tage gehen zu Ende und was können wir euch berichten? Das JavaLand hat einen super Start in der Welt der Konferenzen hingelegt! Sowohl die Speaker als auch die Atmosphäre ließen keine Zweifel offen, hier entsteht etwas Großes. Neben sieben parallelen Tracks, einem Hacker-Garten und zahlreichen Community-Aktivitäten gab es einen kompletten Freizeitpark zu entdecken.
Continuous integration is almost mainstream nowadays. Probably no one wants to argue against the value of having an all-embracing integration test suite in place, which is lightweight enough to be executed on each code change. In this blog series I want to show the interplay between Citrus, the integration test framework written and maintained by ConSol and a commonly used Enterprise Service Bus, the webMethods Integration Server.
New year, new release. Jolokia 1.2.0 is in the house.
For most employees at ConSol, today is the last day before their Christmas vacation. Eight of us took that opportunity and organized our first FedEx day:
During the full day event, we formed small teams and worked on innovative projects we are enthusiastic about.
At the end of the day, we had small presentations showing the results to the company.
In this blog post we’d like to share the projects we came up with:
There seem to be a lot of interest in building Raspberry Pi clusters for
One of the teams took the chance and built our own, with five Pis running an Infinispan distributed cache.
It turns out that having a real hardware cluster yields different results than testing Infinispan locally.
While clean shutdowns and startups are no problem, unplugging and plugging network cables is a much greater challange to the Infinispan infrastructure.
The Raspberry Pi hardware is sufficient to run embedded Infinispan instances, the JBoss based distributions don’t seem to fit well with the hardware.
The Raspberry Pi and a large screen is all that is needed for building an information kiosk.
One of the teams built a kiosk for our entrance hall, showing the current event schedule for our meeting rooms.
Access to the event database was implemented as a Spring application, on the front-end side
Ceylon 1.0.0 was released recently, and one of the teams took the chance to make some first experiences with the new programming language.
The strong type system enables a lot of tool support, but sometimes also results in errors that are hard to understand for the novice.
The ConSol academy is a company event where employees share their knowledge with their peers. One team used the FedEx day to build
a prototypical hardware for recording academy talks on video, to archive the talks for colleagues who cannot participate.
As most other project, the video recording hardware was also based on the Raspberry Pi.
The Pi was equipped with a small camera and a microphone, and streams the data over the network for recording.
The Raspberry Pi is currently the most popular thing
among our developers. It is easy to set up, and provides an open platform for a wide range of projects.
The FedEx day was a great opportunity to experiment with that, and it is also a good way to get together with colleagues who work in other projects.
So that Devoxx is now nearly over, here are some reviews of talks of the last full conference day. Day 5 is typically a phase-out day with only a handful talks and everybody is an hurry, our Devoxx 2013 wrap out will be published on Monday.
On Wednesday Torsten, Christoph and Jan joined our team, and the conference kicked off with full blast: Full Keynote, full rooms, full toilettes, empty coffee and much fun.
Yesterday was the last university day with in depth, 3 hour talks. Here we go.
We are back again. The ConSol posse enters Devoxx again and will posts some expressions from this largest independent Java conference. Roughly 3500 attendees transform Antwerp into Java’s epicenter for one week.
Distributed caches have evolved into an independent branch of Big Data solutions: When it comes to fast read and write access, distributed caches are the solution of choice.
Dr. Fabian Stäber gave a talk a JayDay 2013 where he introduced and compared the leading distributed cache implementations:
Based on a simple example application, the basic functionality is presented, and the specific strengths and weaknesses of the different cache architectures are highlighted and compared.
It took quite some time, but now Jmx4Perl 1.07 is out with some nice bug fixes and enhancements for the Nagios plugin
I am excited to announce that Citrus 1.3 has been released! We hope you enjoy the new feature set coming with this version like the new Java test builder for writing tests with Java code only and the new citrus-ssh module that adds connectivity to the ssh protocol as a client or server. Now let’s have a quick look at the major changes with this release.
Two new Jolokia releases (1.1.0 and 1.1.1) in the past month add some nice new features.
Last day of Devoxx conference in Antwerp Belgium is scheduled. We have had many awesome talks in the past 4 days and the conference closes with more talks to fit in this category. So before we ship home to our beloved ones let’s have a look at these last-minute impressions.
Let’s go directly into todays talks and sessions.
Conference part of the Devoxx 2012 starts today. This means three keynotes in the morning and 60 minute talks for the rest of the day. Finally all 3400 developers have arrived in Belgium to share the 3 day Devoxx conference. Also the rest of the ConSol gang has arrived in Antwerp so we are now 6 people.
The second day of Devoxx is history, here are our impressions.
It’s time again: The ConSol gang is coming back to Antwerp. And again,
we are presenting you our Devoxx impressions fresh from the movie
theaters. As last year, two of use (Georgi and Roland) went ahead
wereas the rest of us (Olaf, Kathrin, Christoph and Torsten) will join
us on Wednesday.
Monday and Tuesday are traditionally the days for the University talks
with in-depth coverage of certain topics.
I just returned from the GOTO Aarhus 2012 conference. Here’s some of my highlights:
This year was the first time I went to a GOTO conference,
i.e. [GOTO Aarhus 2012]. Traveling to Denmark took me remarkably
long (12 hours), but this is probably due to my inability in
effectively route planning (though it would be cool, if somebody could
point me how to go faster from Nuremberg, Germany to Aarhus,
Denmark. Just in case ;-). This blog sums up my impressions of this
It has been a while since our last final release for Citrus. Now I am proud to announce the final 1.2 release. The package ships with a huge list of new features and improvements that I would like to highlight in a few lines for you.
When working a lot with git knowing which branch you are in is an important information. Putting the branch information in your bash prompt makes this information always visible and also shows immediatly if you are in a folder managed by git.
This is how it looks:
13:46:50 sven@tsui:~/projects/Thruk (master) %>
All you need is a simple function in your .bashrc
Now that Devoxx has finished and we had a weekend in between, it is time to wrap things up. In this last #Devoxx blog for this year, everyone from the ConSol posse draws his very own personal conclusion.
Here are two talks reviews from Jan which didn’t made it into our last blog. (But this was not the only hangover this week ;-). Tomorrow we will wrap up things with some personal statements about the whole show. Sorry, for day 5 we didn’t managed to write a single review. Devoxx visitors might guess the reason ;-)
The last full day was again packed with high-end tech stuff before we enter the 10th anniversary party of Devoxx. So I guess, the fifth day gets a bit less blog coverage than the previous blogs. The ConSol posse has some reviews about Akka, JavaFX, HTML-5 and Android again, Play, JMS 2.0 and Clojure for you.
Day 3 and Devoxx is running at full blast now. Rooms are crowded, WiFi breaks down periodically, lanes in front of the toilets and lunch lanes, but nothing will stop the FUN we are having here ;-). There we go with our reviews about the diabolical developer, Play 2.0, Kotlin, JAX-RS 2.0, NoSQL, Phone Gap, HTML5 and the JDK 7 Filesystem API. Please fasten your seat belt for some geeky stuff.
On the second the rest of the ConSol posse joined us : Christoph, Christian and Torsten arrived for the fireside chat. A session format which lacked a bit the tension, but there were some rare highlights like the following joke: Q: “What’s the difference between Ant and Maven ?”, A: “The author of Ant apologized”. The other stuff covered were the ServiceMix combo, Groovy, Spring in the cloud, Infinispan, JDK 7 and Jenkins for Continous Delivery.
Here are the links I mentioned in my Devoxx Tools-in-Action Talk “Jolokia - JMX on Capsaicin”. Most of the pointers can of course be reached by starting at www.jolokia.org
We are back again. The first day as always is some sort of warming up and getting into the flow. This year was special in so far as one os us (roland) gave his first talk at Devoxx. But let’s start with the first talk. Here are our personal reviews for some of the talks we’ve attended with the author of each review is mentioned after the title in parentheses. These reviews covers JEE6 Enterprise applications, Arquillian, Continous Delivery, Spring Data JPA, Jolokia (of course ;-), Scala and Glassfish rolling updates.
The ConSol posse is on the road again for having a good and inspiring time at Devoxx. Devoxx is probably one of the best things what can happen to a Java developer. Marcel, Alvin, Jan and myself (Roland) will be at the show for the whole week, Christoph, Torsten and Christian will join us on wednesday.
Lately I had to deal with Excel files as REST Http service response. I came up with a pretty clever validation mechanism in Citrus that I would like to share with you. You can apply the Excel validator to your Citrus project, too. It is not very complicated as you will see in this post.
TestNG provides brilliant support for test parameters and data providers. With some annotation magic you are able to pass parameter values to your test method and finally to your Citrus test logic.
The next Citrus milestone release for version 1.2 has landed. This version introduces new REST Http support on client and server side. In particular we are now able to handle the Http request methods (GET, POST, PUT, DELETE, …) as well as Http response codes (e.g. 404 Not Found).
Citrus 1.2.M2 now works with Spring 3.0, Spring Integration 2.0 and Spring WS 2.0. In addition to that we have some bugfixes and improvements in this release. Check out the reference documentation for the complete changes list on what’s new.
We are very happy to announce the first milestone release of Citrus 1.2 in early 2011. The framework comes with great new features and many improvements to you. This post gives a short overview of the major changes, hope you enjoy the new features:
Citrus includes a lot of convenient features which are only waiting for you to discover and use them. The other day I needed to validate a SoapAttachment. As you probably already know, a SoapAttachment is referenced by a href property in an Include tag like this:
<Include href="..." xmlns="http://www.w3.org/2004/08/xop/include"/>. Validation is quite easy when you’re still mock testing your application because you have full control over what your mock response will look like.
Devoxx is over and it’s time for a
summary. We, the Citrus posse ;-), enjoyed the trip to Antwerp very
much and came back with a bunch of new impressions. It was a pleasure
to be part of this Java community event with great speakers and
The last full conference day of the Devoxx was again packed full with very interesting talks of various kind. It started with a keynote about the roadmap of JEE 7. Summarizing we can expect some smooth refinements of the platform (exept maybe the support for virtualization out of the box). Here are our impression on the talks of Thursday. Please expect our summary blog post on monday since we are all now in rush to get out things done and to catch train, plain etc. We hope, you enjoyed the blog flood so far ;-)
The rest of Citrus posse (Christoph, Martin, Ralf, Torsten) joined us
(Marcel, Roland) yesterday, so we are able to spread over much more
talks and will flood this blog with even more reports from interesting
The second day at Devoxx continues with a university day, with much introductory talks.
BTW, catering was fine today, better than two years ago. I think the is worth mentioning, since this was one of the weak points last time we visited the Devoxx. Ah yes, Wifi is ok, too. Now for the talks ;-)
Some of us ConSol Labs guys enter this year’s Devoxx, the largest
Java conference in Europe. You can expect some blogging about the
state of Java, the newest trends and cool stuff in general out there
for this week.
Citrus 1.1 release is here (download)! The release comes with a bunch of new features and bugfixes. Here is a short list of major features and changes in this release:
By setting the SOAP mustUnderstand header attribute to “1”, you indicate that the service provider must process the SOAP header entry. In case the service provider is not able to handle this special header a SOAP fault server error is sent back to the calling client. In this post I would like to point out an easy way to support these mustUnderstand headers when simulating SOAP WebServices with Citrus.
If you have ever sent or received mail messages via Java, chances are high that you have used JavaMail for this task. Most of the time JavaMail does an excellent job and a lot of use cases are described in the JavaMail FAQ. But there are still some additional quirks you should be aware of when doing advanced mail operations like adding or removing attachments (or “Parts”) from existing mails retreived from some IMAP or POP3 store. This post gives a showcase for how to remove an attachment from a mail at an arbitrary level which has been obtained from an IMAP store. It points to the pitfalls which are waiting and shows some possible solutions. The principles laid out here are important for adding new attachments to a mail as well, but that’s yet another story.
In my last post (citrus-xpath-validation-power) I solved a validation problem regarding generic XML data structures with some XPath expression power. Now in latest 1.1-SNAPSHOT version of Citrus things become even more straightforward.
I recently struggled with the validation of a very generic XML data structure in some message payload. It turned out to be a good example where XPath validation can overcome the normal XML tree comparison. I’d like to share my thoughts about this issue, because others might run into similar problems too and the solution with XPath really impressed me with its powerful validation possibilities.
The Citrus project sources are now available on GitHub for public checkout. You can clone/fork the Citrus project via Git and build your own version on your local machine. Visit the Citrus project site on GitHub for more details.
In larger projects usually a team of testers is working on Citrus integration tests. This means that we need to localize the citrus.properties for testing on different machines, as each tester executes test cases with individual environment settings. In this post I’d like to share an easy way to localize the Citrus settings with Maven.
We put a further Citrtus 1.1-SNAPSHOT version online (see http://www.citrusframework.org).
Test cases in Citrus are usually provided with some meta information like the author’s name or the date of creation. This post shows how to extend on this to include your very specific meta data on your own.
Once you have written Citrus integration tests it would be nice to also use these test scenarios for performance testing. In a recent project we accomplished basic performance tests just using some out-of-the-box features in TestNG. In this post I would like to share a simple example with you regarding performance testing in Citrus.
We fixed some issues in our 1.1-SNAPSHOT version of Citrus and also improved some features. For a detailed change history follow our changes report.
The latest version now supports multi-threaded performance tests. We recently tested a SOAP WebService regarding performance using Citrus. I will try to add a new post describing how to accomplish performance testing with Citrus as soon as possible.
Download the latest snapshot version of Citrus: Download
Labs got its own maven repository now:
Add the repos to your project POM. Here’s an example for the release repository:
</p> <repository> <id>consol-labs-release</id> <url>http://labs.consol.de/maven/repository/</url> <snapshots> <enabled>false</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </repository> <repository> <id>consol-labs-snapshots</id> <url>http://labs.consol.de/maven/snapshots-repository/</url> <snapshots> <enabled>true</enabled> <!-- Policy: always, daily, interval:xxx (xxx=#minutes, 60*24*7=10080), never --> <updatepolicy>interval:10080</updatepolicy> </snapshots> <releases> <enabled>false</enabled> </releases> </repository> <p>
Simply add this profile to your project, and activate it when deploying:
</p> <profile> <id>dist-labs</id> <distributionmanagement> <repository> <id>consol-labs-release</id> <url>scpexe://labs.consol.de/home/maven-repository/www/htdocs/repository</url> </repository> <snapshotrepository> <id>consol-labs-snapshots</id> <url>scpexe://labs.consol.de/home/maven-repository/www/htdocs/snapshots-repository</url> </snapshotrepository> </distributionmanagement> </profile> <p>
</p> <server> <id>consol-labs-release</id> <username>maven-repository</username> </server> <server> <id>consol-labs-snapshots</id> <username>maven-repository</username> </server> <p>
<br /> mvn clean install deploy -Pdist-labs<br />
In a multi module Maven project, it seems non trival to reference the project root location from the sub modules deeper down in the module hierarchy. The following approach describes how to configure a plugin referencing a root POM relative file.