<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Ioannis Canellos</title><link>https://iocanel.com/post/</link><description>Recent content in Posts on Ioannis Canellos</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 06 May 2026 20:33:24 +0000</lastBuildDate><atom:link href="https://iocanel.com/post/index.xml" rel="self" type="application/rss+xml"/><item><title>Workflows everywhere pt. 2</title><link>https://iocanel.com/2025/07/workflows-everywhere-pt.-2/</link><pubDate>Tue, 29 Jul 2025 00:00:00 +0000</pubDate><guid>https://iocanel.com/2025/07/workflows-everywhere-pt.-2/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;In my previous post &lt;a href="https://iocanel.com/2025/07/workflows-everywhere-pt.-1/"&gt;Workflows everywhere pt. 1&lt;/a&gt; I tried to define &lt;a href="https://en.wikipedia.org/wiki/Workflow"&gt;workflows&lt;/a&gt; and enumerate their
functional and non-functional requirements. The post concluded with the realization that in many
case we need workflow engines to power our workflows.&lt;/p&gt;
&lt;p&gt;This post defines what a workflow engine is and lists some of the most popular engines by category.
Or at least that was the original intention, but there is a twist.&lt;/p&gt;
&lt;h2 id="what-is-a-workflow-engine"&gt;What Is a Workflow Engine?&lt;/h2&gt;
&lt;p&gt;Workflow engines are systems designed to simplify the creation and execution of workflows.
They orchestrate the flow of information between the activities that compose the workflow based
on predefined logic, conditions and dependencies.&lt;/p&gt;</description></item><item><title>Workflows everywhere pt. 1</title><link>https://iocanel.com/2025/07/workflows-everywhere-pt.-1/</link><pubDate>Sun, 06 Jul 2025 00:00:00 +0000</pubDate><guid>https://iocanel.com/2025/07/workflows-everywhere-pt.-1/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Workflows are everywhere. From CI/CD pipelines, all system / data integration to business process automation.
It wouldn&amp;rsquo;t be too far-fetched to say that even modern software build tools
like make, maven or npm are in their own way workflow engines.&lt;/p&gt;
&lt;p&gt;There are countless tools out there that help people define,
execute and monitor workflows varying from simple no-code tools to complex
frameworks that allow developers to define workflows in code, or even architect
their software as workflows.&lt;/p&gt;</description></item><item><title>Secure programming practices - Signed commits</title><link>https://iocanel.com/2025/04/secure-programming-practices-signed-commits/</link><pubDate>Wed, 02 Apr 2025 00:00:00 +0000</pubDate><guid>https://iocanel.com/2025/04/secure-programming-practices-signed-commits/</guid><description>&lt;h2 id="signing-git-commits"&gt;Signing Git Commits&lt;/h2&gt;
&lt;p&gt;I recently had a discussion with two fellow engineers about secure coding practices.
After the discussion I realized that I am neglecting one of the most important practices: signing my commits.&lt;/p&gt;
&lt;p&gt;There are tons of articles on the internet explaining why and how. These are my notes on the subject that I decided to publish.&lt;/p&gt;
&lt;p&gt;These notes actually use &lt;code&gt;literate programming&lt;/code&gt; so they are a mix of notes and code you can actually use via org-mode.
You can find the actual notes file &lt;a href="https://github.com/iocanel/blog/blob/main/2025/04/02/Secure%20programming%20practices%20-%20Signed%20commits/readme.org"&gt;here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Creating an MCP Server with Quarkus and Backstage</title><link>https://iocanel.com/2025/03/creating-an-mcp-server-with-quarkus-and-backstage/</link><pubDate>Sat, 22 Mar 2025 00:00:00 +0000</pubDate><guid>https://iocanel.com/2025/03/creating-an-mcp-server-with-quarkus-and-backstage/</guid><description>&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;It seems that everyone is an MCP guru these days.&lt;/p&gt;
&lt;p&gt;I am not.&lt;/p&gt;
&lt;p&gt;In fact, I know almost nothing about it. I am just aware of the concept.&lt;/p&gt;
&lt;p&gt;This post describes the steps I took in order to create an MCP from scratch, resulting in the project created at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/iocanel/backstage-mcp"&gt;https://github.com/iocanel/backstage-mcp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also recorded my journey starting from scatch with almost zero knowledge on the topic and using the Quarkus Blog as a guide:&lt;/p&gt;</description></item><item><title>Using ChatGPT via gptel to make my Emacs nutrition tracker smarter</title><link>https://iocanel.com/2025/02/using-chatgpt-via-gptel-to-make-my-emacs-nutrition-tracker-smarter/</link><pubDate>Sun, 16 Feb 2025 09:19:00 +0300</pubDate><guid>https://iocanel.com/2025/02/using-chatgpt-via-gptel-to-make-my-emacs-nutrition-tracker-smarter/</guid><description>&lt;h2 id="using-chatgpt-via-gptel-to-make-my-emacs-nutrition-tracker-smarter"&gt;Using ChatGPT via gptel to make my Emacs nutrition tracker smarter&lt;/h2&gt;
&lt;h3 id="introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Back in April 2020 I shared how I built a nutrition tracker in Emacs that leveraged org-capture templates and or-ql to record foods, recipes, and meals.
At that time, I relied on an org-mode based database and manual updates to keep track of calories, protein, carbs, and fat. While the system worked, maintaining that data was both tedious and error-prone.
Each time I needed to insert a new food, I had to do an internet search to find the nutritional information and then manually update my org-mode files.&lt;/p&gt;</description></item><item><title>Porting the DuckDuckGo example from Python to Java with Quarkus and Langchain4j</title><link>https://iocanel.com/2025/02/porting-the-duckduckgo-example-from-python-to-java-with-quarkus-and-langchain4j/</link><pubDate>Fri, 14 Feb 2025 00:00:00 +0200</pubDate><guid>https://iocanel.com/2025/02/porting-the-duckduckgo-example-from-python-to-java-with-quarkus-and-langchain4j/</guid><description>&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;A couple of weeks ago I came across &lt;a href="https://rcarrata.github.io/about/"&gt;Roberto Carratalla&lt;/a&gt;&amp;rsquo;s blog post on &lt;a href="https://ai-on-openshift.io/odh-rhoai/enable-function-calling/"&gt;Function calling on OpenShift AI.&lt;/a&gt;
At the time I was preparing for &lt;a href="https://www.redhat.com/en/summit/connect/emea/zurich-2024"&gt;RedHat Summit Connect Zurich 2025&lt;/a&gt; where I was meant to run a workshop on &lt;a href="http://iocanel.com/rh-summit-connect-quarkus-langchain4j-workshop/"&gt;Quarkus and Langchain4j&lt;/a&gt; with
&lt;a href="https://www.linkedin.com/in/kyra-goud/"&gt;Kyra Goud&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/dandreadis/"&gt;Dimitris Andreadis&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/codrin/"&gt;Codrin Bucur&lt;/a&gt;. We had an issue however, related to enabling functions on OpenShift AI.&lt;/p&gt;
&lt;p&gt;Roberto pointed us to the blog post, but I couldn&amp;rsquo;t spot what I was doing wrong. So, I decided to port the examples in the blog post to Java
to make sure that I was comparing apples to apples.&lt;/p&gt;</description></item><item><title>Quarkus React with Quinoa and Keycloak</title><link>https://iocanel.com/2022/10/quarkus-react-with-quinoa-and-keycloak/</link><pubDate>Mon, 17 Oct 2022 14:36:00 +0300</pubDate><guid>https://iocanel.com/2022/10/quarkus-react-with-quinoa-and-keycloak/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This year I decided to put some personal time in learning &lt;a href="https://reactjs.org/"&gt;reactjs&lt;/a&gt;. While I enjoy using Javascript for the frontend, I&amp;rsquo;d say that it&amp;rsquo;s not the language of choice for me for backend use.
I don&amp;rsquo;t have anything against &lt;a href="https://nodejs.org"&gt;nodejs&lt;/a&gt;, but I prefer use java frameworks, which is the focus of my day job. So, I wanted to combine &lt;a href="https://reactjs.org/"&gt;reactjs&lt;/a&gt; with &lt;a href="https://quarkus.io/"&gt;Quarkus&lt;/a&gt;. A combination that just became
more fun with the &lt;a href="https://quarkiverse.github.io/quarkiverse-docs/quarkus-quinoa/dev/"&gt;Quinoa&lt;/a&gt;. &lt;a href="https://quarkiverse.github.io/quarkiverse-docs/quarkus-quinoa/dev/"&gt;Quinoa&lt;/a&gt; allows users to use their favorite javascript framework with &lt;a href="https://quarkus.io/"&gt;Quarkus&lt;/a&gt; with no additional configuration. On top of that it allows development of both
backend and fronted from via the &lt;a href="https://quarkus.io/"&gt;Quarkus&lt;/a&gt; dev mode. Last but not least it allows for native compilation that produces a single binary containing both fronted and backend.&lt;/p&gt;</description></item><item><title>Hackers guide to Jiu Jitsu: Flowcharts</title><link>https://iocanel.com/2022/01/hackers-guide-to-jiu-jitsu-flowcharts/</link><pubDate>Tue, 11 Jan 2022 23:56:00 +0200</pubDate><guid>https://iocanel.com/2022/01/hackers-guide-to-jiu-jitsu-flowcharts/</guid><description>&lt;figure&gt;&lt;img src="./hackers-guide-to-jiu-jitsu.png"&gt;
&lt;/figure&gt;

&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;I am a 40+ software engineer and recreational Jiu Jitsu practitioner, struggling with vast amount of information related to the sport.
I decided to make use of my `computer` skills to aid me in the process of taming this new skill.&lt;/p&gt;
&lt;p&gt;In this post I am going to discuss about flowcharts and more specifically about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;why bother with flowcharts&lt;/li&gt;
&lt;li&gt;tools for creating flowcharts&lt;/li&gt;
&lt;li&gt;integrating flowcharts with with wiki&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-is-a-flowchart"&gt;What is a flowchart ?&lt;/h2&gt;
&lt;p&gt;A flowchart is a diagram of the sequences of movements or actions of people or things involved in a complex system or activity.&lt;/p&gt;</description></item><item><title>Using Quarkus with the Service Binding Operator</title><link>https://iocanel.com/2021/11/using-quarkus-with-the-service-binding-operator/</link><pubDate>Mon, 29 Nov 2021 17:56:00 +0200</pubDate><guid>https://iocanel.com/2021/11/using-quarkus-with-the-service-binding-operator/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://kubernetes.io"&gt;Kubernetes&lt;/a&gt; is around for almost 7 years now!
Ever since the beggining there have been efforts to make consuming / binding to services simpler.
And while discovering the actual service is not so much of an issue
(if you employ a set of conventions), getting the credentials etc is slightly trickier.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://svc-cat.io"&gt;Service Catalog&lt;/a&gt; has been an effort that promised to simplify provisioning and binding to
services, but it seems that it has lost its momentum.
The lack of uniformity between providers, the differences in how each service communicated
the binding information and the fact that people tend to favor operators for provisioning services
made it pretty hard to use in practice.&lt;/p&gt;</description></item><item><title>Using sdkman in github actions</title><link>https://iocanel.com/2021/09/using-sdkman-in-github-actions/</link><pubDate>Mon, 20 Sep 2021 09:20:00 +0300</pubDate><guid>https://iocanel.com/2021/09/using-sdkman-in-github-actions/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I was experimenting with some &lt;a href="https://github.com/features/actions"&gt;Github Actions&lt;/a&gt; that needed to make use of &lt;a href="https://github.com/graalvm/mandrel"&gt;Mandrel&lt;/a&gt; so, I thought that I should use &lt;a href="https://sdkman.io/"&gt;sdkman&lt;/a&gt;.
I run into some issues though and I thought I should document the experience&lt;/p&gt;
&lt;p&gt;The main issue I encountered, is that no matter how I mixed &lt;a href="https://sdkman.io/"&gt;sdkamn&lt;/a&gt; into the mix, my steps acted like it was not&lt;/p&gt;
&lt;h2 id="the-sdkamn-action"&gt;The sdkamn action&lt;/h2&gt;
&lt;p&gt;It seems that there is a &lt;a href="https://github.com/sdkman/sdkman-action/"&gt;Github Action for sdkman&lt;/a&gt; available, which should allow you to manage any `candidate`.
I used it like this:&lt;/p&gt;</description></item><item><title>Wordpress: Notes on syntax highlighting</title><link>https://iocanel.com/2021/09/wordpress-notes-on-syntax-highlighting/</link><pubDate>Wed, 01 Sep 2021 12:38:00 +0300</pubDate><guid>https://iocanel.com/2021/09/wordpress-notes-on-syntax-highlighting/</guid><description>&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;These are just some personal notes, that I&amp;rsquo;ll surely forget unless I write them down.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The problem&lt;/h2&gt;
&lt;p&gt;As I am bloging for over a decade now and most of the time I am sharing code, I needed of a decent way to highlight my code and make it available to users.
In the beginning I was using &lt;a href="https://www.blogger.com/"&gt;blogger&lt;/a&gt; but later on I migrated to &lt;a href="https://wordpress.com/"&gt;wordpress&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So, I needed a syntax highlighting solution similar to what I was using for &lt;a href="https://www.blogger.com/"&gt;blogger&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Hackers guide to Jiu Jitsu: Markdown Wiki</title><link>https://iocanel.com/2021/08/hackers-guide-to-jiu-jitsu-markdown-wiki/</link><pubDate>Mon, 30 Aug 2021 21:48:00 +0300</pubDate><guid>https://iocanel.com/2021/08/hackers-guide-to-jiu-jitsu-markdown-wiki/</guid><description>&lt;figure&gt;&lt;img src="https://iocanel.com/2021/08/hackers-guide-to-jiu-jitsu-markdown-wiki/hackers-guide-to-jiu-jitsu.png"&gt;
&lt;/figure&gt;

&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;I am a 40+ software engineer and recreational Jiu Jitsu practitioner, struggling with vast amount of information related to the sport.
I decided to make use of my `computer` skills to aid me in the process of taming this new skill.&lt;/p&gt;
&lt;p&gt;In this section I am going to discuss why and how &lt;a href="https://en.wikipedia.org/wiki/Markdown"&gt;markdown&lt;/a&gt; is the ideal format for using for your notes. I am also going to conver how
to use &lt;a href="https://en.wikipedia.org/wiki/Markdown"&gt;markdown&lt;/a&gt; in order to maintain wiki/second brain for your Jiu Jitsu notes.&lt;/p&gt;</description></item><item><title>Hackers guide to Jiu Jitsu: mplayer</title><link>https://iocanel.com/2021/08/hackers-guide-to-jiu-jitsu-mplayer/</link><pubDate>Mon, 30 Aug 2021 21:48:00 +0300</pubDate><guid>https://iocanel.com/2021/08/hackers-guide-to-jiu-jitsu-mplayer/</guid><description>&lt;figure&gt;&lt;img src="https://iocanel.com/2021/08/hackers-guide-to-jiu-jitsu-mplayer/hackers-guide-to-jiu-jitsu.png"&gt;
&lt;/figure&gt;

&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;I am a 40+ software engineer and recreational Jiu Jitsu practitioner, struggling with vast amount of information related to the sport.
I decided to make use of my `computer` skills to aid me in the process of taming this new skill.&lt;/p&gt;
&lt;p&gt;This post is going to demonstrate how to use &lt;a href="http://www.mplayerhq.hu/"&gt;mplayer&lt;/a&gt; for watching Jiu Jitsu instructionals, in order to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Capture notes&lt;/li&gt;
&lt;li&gt;Create bookmarks&lt;/li&gt;
&lt;li&gt;Create animated gifs demonstrating techniques&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This post will cover the fundamentals and will be the base for future posts that will demonstrate integrations with ohter tools.&lt;/p&gt;</description></item><item><title>Hackers guide to Jiu Jitsu: ffmpeg</title><link>https://iocanel.com/2021/08/hackers-guide-to-jiu-jitsu-ffmpeg/</link><pubDate>Wed, 11 Aug 2021 23:20:00 +0300</pubDate><guid>https://iocanel.com/2021/08/hackers-guide-to-jiu-jitsu-ffmpeg/</guid><description>&lt;figure&gt;&lt;img src="https://iocanel.com/2021/08/hackers-guide-to-jiu-jitsu-ffmpeg/hackers-guide-to-jiu-jitsu.png"&gt;
&lt;/figure&gt;

&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;I am a 40+ software engineer and recreational Jiu Jitsu practitioner, struggling with vast amount of information related to the sport.
I decided to make use of my `computer` skills to aid me in the process of taming this new skill.&lt;/p&gt;
&lt;p&gt;This post is going to demonstrate how to use &lt;a href="https://www.ffmpeg.org/"&gt;ffmpeg&lt;/a&gt; in order to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Split long insturctions into logical chapters&lt;/li&gt;
&lt;li&gt;Capture screenshots&lt;/li&gt;
&lt;li&gt;Create animated gifs demonstrating techniques&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This post will cover the fundamentals and will be the base for future posts that will demonstrate integrations with ohter tools.&lt;/p&gt;</description></item><item><title>Hackers guide to Jiu Jitsu</title><link>https://iocanel.com/2021/08/hackers-guide-to-jiu-jitsu/</link><pubDate>Wed, 11 Aug 2021 22:46:00 +0300</pubDate><guid>https://iocanel.com/2021/08/hackers-guide-to-jiu-jitsu/</guid><description>&lt;figure&gt;&lt;img src="https://iocanel.com/2021/08/hackers-guide-to-jiu-jitsu/hackers-guide-to-jiu-jitsu.png"&gt;
&lt;/figure&gt;

&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;I am a 40+ software engineer and recreational Jiu Jitsu practitioner, strugglying with vast amount of information related to the sport.
I decided to make use of my `computer` skills to aid me in the process of taming this new skill.&lt;/p&gt;
&lt;p&gt;This is the first post in a series of posts, documenting the process.&lt;/p&gt;
&lt;h2 id="who-is-this-series-of-posts-for"&gt;Who is this series of posts for ?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jiu Jitsu practitioners with decent computer skills&lt;/p&gt;</description></item><item><title>Sundrio: A framework for generating code that no one wants to write</title><link>https://iocanel.com/2021/08/sundrio-a-framework-for-generating-code-that-no-one-wants-to-write/</link><pubDate>Thu, 05 Aug 2021 09:19:00 +0300</pubDate><guid>https://iocanel.com/2021/08/sundrio-a-framework-for-generating-code-that-no-one-wants-to-write/</guid><description>&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;I used to be pretty vocal about things I work on. I used to write blogs, give conference talks or occasionally create short vlog kind of videos. If there is one topic I&amp;rsquo;ve completely missed, that is &lt;a href="https://github.com/sundrio/sundrio"&gt;sundrio&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So, what is &lt;a href="https://github.com/sundrio/sundrio"&gt;sundrio&lt;/a&gt; ?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/sundrio/sundrio"&gt;sundrio&lt;/a&gt; is a code generation toolkit for generating code that no one wants to write by hand and everyone enjoys using.
Besides the code generation frameworks, it also comes with modules (they are actually framework applications) for generating things like:&lt;/p&gt;</description></item><item><title>Nutrition tracking using Emacs</title><link>https://iocanel.com/2020/04/nutrition-tracking-using-emacs/</link><pubDate>Fri, 03 Apr 2020 18:39:00 +0300</pubDate><guid>https://iocanel.com/2020/04/nutrition-tracking-using-emacs/</guid><description>&lt;p&gt;This is not a blog post. This is my Emacs powered nutrition tracker!&lt;/p&gt;
&lt;p&gt;No, I mean it!&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s the one file that contains all the code, templates and data of my tracker,
exported in html.&lt;/p&gt;
&lt;p&gt;Keep reading, to see how you can harness the power of emacs and org mode to track your nutrition
and even generate cool graphs like:&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://iocanel.com/2020/04/nutrition-tracking-using-emacs/nutrition-table.png"&gt;
&lt;/figure&gt;

&lt;p&gt;For quick demo you can check this short &lt;a href="https://www.youtube.com/watch?v=GAhBFFLBJww"&gt;Youtube demo: Nutrition tracking using Emacs&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Introducing Ap4K</title><link>https://iocanel.com/2019/01/introducing-ap4k/</link><pubDate>Mon, 07 Jan 2019 17:39:00 +0200</pubDate><guid>https://iocanel.com/2019/01/introducing-ap4k/</guid><description>&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/ap4k/ap4k"&gt;ap4k&lt;/a&gt; is a collection of java annotations and processors for generating, customizing and testing &lt;a href="https://kubernetes.io"&gt;kubernetes&lt;/a&gt; and &lt;a href="https://openshift.com"&gt;openshift&lt;/a&gt; manifests.&lt;/p&gt;
&lt;p&gt;The idea of using java annotations for customizing &lt;a href="https://kubernetes.io"&gt;kubernetes&lt;/a&gt; and &lt;a href="https://openshift.com"&gt;openshift&lt;/a&gt; manifests is not something entirely new.
In 2015 &lt;a href="https://fabric8.io"&gt;fabric8&lt;/a&gt; provided an artifact called `kubernetes-generator` (not to be confused with other generators under the &lt;a href="https://fabric8.io"&gt;fabric8&lt;/a&gt; umbrella) that allowed developers to hook into the compilation process code that customized these manifests.
The way the code was hooked into the compilation processors was via java annotations. The idea was nice but did required developers to write actual code, and thus was soon abandoned as in favor of the &lt;a href="https://maven.fabric8.io"&gt;fabric8-maven-plugin&lt;/a&gt; which was rewritten at the same time by &lt;a href="https://ro14nd.de/about"&gt;Rolland Huss&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Micronaut: Introduction</title><link>https://iocanel.com/2018/10/micronaut-introduction/</link><pubDate>Thu, 25 Oct 2018 14:39:00 +0300</pubDate><guid>https://iocanel.com/2018/10/micronaut-introduction/</guid><description>&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;As I am approaching my 40s its becoming harder and harder to get really excited with a new framework. There are of course some exception to this rule and &lt;a href="http://micronaut.io"&gt;micronaut&lt;/a&gt; is such an exception.
I won&amp;rsquo;t get into details here, but in many ways I feel that &lt;a href="http://micronaut.io"&gt;micronaut&lt;/a&gt; is a framework I would like to have written myself&amp;hellip;&lt;/p&gt;
&lt;p&gt;So, this post is going to be a first look at &lt;a href="http://micronaut.io"&gt;micronaut&lt;/a&gt;. It will include:&lt;/p&gt;</description></item><item><title>A quick look at sdkman</title><link>https://iocanel.com/2018/10/a-quick-look-at-sdkman/</link><pubDate>Tue, 16 Oct 2018 15:57:00 +0300</pubDate><guid>https://iocanel.com/2018/10/a-quick-look-at-sdkman/</guid><description>&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;I recently came across &lt;a href="http://micronaut.io"&gt;micronaut&lt;/a&gt; one of the many java micro-frameworks that gain a lot of interest lately.
This particular framework was being installed locally using a tool that I haven&amp;rsquo;t come accross before: &lt;a href="https://sdkman.io"&gt;sdkman&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This will be a really short post about sdkman.&lt;/p&gt;
&lt;h2 id="what-is-sdkman"&gt;What is sdkman?&lt;/h2&gt;
&lt;p&gt;Even if you only use a computer for playing games, sooner or later you are going to have to manage multiple versions of the same piece of software.
Now, if you are into development then its possible that you&amp;rsquo;ve either have a handcrafted solution or using one provided by the operating system.&lt;/p&gt;</description></item><item><title>Service Catalog: Connector</title><link>https://iocanel.com/2018/09/service-catalog-connector/</link><pubDate>Thu, 13 Sep 2018 09:50:00 +0300</pubDate><guid>https://iocanel.com/2018/09/service-catalog-connector/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This is the second post in my series about the &lt;a href="https://svc-cat.io"&gt;service catalog&lt;/a&gt;. If you haven&amp;rsquo;t done already please read the first post: &lt;a href="http://iocanel.com/2018/09/service-catalog-part-1/"&gt;service catalog: introduction&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this second post I&amp;rsquo;ll create from scratch a &lt;a href="https://spring.io/projects/spring-boot"&gt;spring boot&lt;/a&gt; application that exposes a JPA crud via rest.
This application will use a &lt;a href="https://svc-cat.io"&gt;service catalog&lt;/a&gt; managed &lt;a href="https://www.microsoft.com/en-us/sql-server/sql-server-2017"&gt;microsoft sql server&lt;/a&gt; database and I will demonstrate how you can automagically connect to it using the &lt;a href="https://github.com/snowdrop/servicecatalog-connector"&gt;service catalog connector&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="the-spring-cloud-connector"&gt;The spring cloud connector&lt;/h2&gt;
&lt;p&gt;There is a &lt;a href="https://cloud.spring.io"&gt;spring cloud&lt;/a&gt; project called &lt;a href="https://cloud.spring.io/spring-cloud-connectors"&gt;spring cloud connectors&lt;/a&gt;. This project is all about connecting to cloud managed services. I have been working on an implementation specific to the &lt;a href="https://svc-cat.io"&gt;service catalog&lt;/a&gt;.
The idea is that you can use the &lt;a href="https://svc-cat.io"&gt;service catalog&lt;/a&gt; to manage the services and use the &lt;a href="https://github.com/snowdrop/servicecatalog-connector"&gt;service catalog connector&lt;/a&gt; to transparently connect to it.&lt;/p&gt;</description></item><item><title>Service Catalog: Introduction</title><link>https://iocanel.com/2018/09/service-catalog-introduction/</link><pubDate>Wed, 12 Sep 2018 12:22:00 +0300</pubDate><guid>https://iocanel.com/2018/09/service-catalog-introduction/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;This is the first of a series of posts around the &lt;a href="https://svc-cat.io"&gt;service catalog&lt;/a&gt;. The end goal is to demonstrate how the &lt;a href="https://svc-cat.io"&gt;service catalog&lt;/a&gt;
can simplify building apps on &lt;a href="https://kubernetes.io"&gt;kubernetes&lt;/a&gt; and &lt;a href="https://openshift.com"&gt;openshift&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The first part will cover:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;why&lt;/li&gt;
&lt;li&gt;how to install&lt;/li&gt;
&lt;li&gt;how to use&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The target environment will be &lt;a href="https://openshift.com"&gt;openshift&lt;/a&gt; 3.10 on Linux using `oc cluster up` for development purposes.&lt;/p&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Working with &lt;a href="https://kubernetes.io"&gt;kubernetes&lt;/a&gt; since its early days, there are countless of times where I had to go into creating manifests for the services my application is using.
By services I am referring to things like databases, messaging systems, or any other pieces of third party software my application might need.&lt;/p&gt;</description></item><item><title>Quickmarks</title><link>https://iocanel.com/2018/09/quickmarks/</link><pubDate>Wed, 05 Sep 2018 18:52:00 +0300</pubDate><guid>https://iocanel.com/2018/09/quickmarks/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;This is a small post that describes how I made authoring &lt;a href="https://en.wikipedia.org/wiki/Markdown"&gt;markdown&lt;/a&gt;, &lt;a href="https://orgmode.org"&gt;org-mode&lt;/a&gt; etc easier by using snippets that help me handle links like a pro.&lt;/p&gt;
&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;I am a heavy user of &lt;a href="https://orgmode.org"&gt;org-mode&lt;/a&gt;. I use it for taking notes, writing blogs, presentations and so on.
As a software developer I often use markdown too. In both cases at some point I have to deal with links.&lt;/p&gt;
&lt;p&gt;Embarrassingly enough, I used to rely on my browsers bookmarks to handle links, so my workflow looked a little like:&lt;/p&gt;</description></item><item><title>Reusing shell libraries</title><link>https://iocanel.com/2018/07/reusing-shell-libraries/</link><pubDate>Sun, 08 Jul 2018 21:58:00 +0300</pubDate><guid>https://iocanel.com/2018/07/reusing-shell-libraries/</guid><description>&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;Every now then I see on social media people sharing the same old story: &amp;ldquo;Using shell scripting to workaround the limitations of their DevOps tools&amp;rdquo;.
I&amp;rsquo;ve done it, my colleagues are doing it and most likely you have done it yourself.&lt;/p&gt;
&lt;p&gt;So it seems that shell scripting is used to do the dirty work, yet its often considered by many the last resort.
If you search on the web about popular &amp;lsquo;DevOps&amp;rsquo; tools and skills, you&amp;rsquo;ll probably find:&lt;/p&gt;</description></item><item><title>Language Server Protocol, Java and Emacs</title><link>https://iocanel.com/2018/06/language-server-protocol-java-and-emacs/</link><pubDate>Wed, 20 Jun 2018 19:00:00 +0300</pubDate><guid>https://iocanel.com/2018/06/language-server-protocol-java-and-emacs/</guid><description>&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;Lately I keep hearing about &amp;ldquo;how much software development has changed over the last half of the decade&amp;rdquo;.
This usually refers to the adoption of containers, cloud etc. I would like to focus on an other factor of the change and that is the plethora of development related systems and services.&lt;/p&gt;
&lt;p&gt;So its typical for a team to have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;version control&lt;/li&gt;
&lt;li&gt;code review systems&lt;/li&gt;
&lt;li&gt;code analysis systems&lt;/li&gt;
&lt;li&gt;project management&lt;/li&gt;
&lt;li&gt;issue trackers&lt;/li&gt;
&lt;li&gt;continuous integration&lt;/li&gt;
&lt;li&gt;chat / messaging&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Add email to that and you realize that most of development related tasks now days take place in the browser.
Unfortunately, browsers by nature are unaware of the content they serve, so its not trivial to automate your workflow in the browser.
So, if the browser is not going to play the role of &amp;lsquo;Swiss army knife&amp;rsquo; for development then what?&lt;/p&gt;</description></item><item><title>Jenkins setups for Kubernetes and Docker Workflow</title><link>https://iocanel.com/2018/02/jenkins-setups-for-kubernetes-and-docker-workflow/</link><pubDate>Wed, 28 Feb 2018 22:24:00 +0200</pubDate><guid>https://iocanel.com/2018/02/jenkins-setups-for-kubernetes-and-docker-workflow/</guid><description>&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;During the summer I had the chance to play a little bit with &lt;a href="https://jenkins.io"&gt;Jenkins&lt;/a&gt; inside &lt;a href="https://kubernetes.io"&gt;Kubernetes&lt;/a&gt;. More specifically I wanted to see what’s the best way to get the &lt;a href="https://github.com/jenkinsci/docker-workflow-plugin"&gt;Docker Workflow Plugin&lt;/a&gt; running.
So, the idea was to have a Pod running &lt;a href="https://jenkins.io"&gt;Jenkins&lt;/a&gt; and use it to run builds that are defined using &lt;a href="https://github.com/jenkinsci/docker-workflow-plugin"&gt;Docker Workflow Plugin&lt;/a&gt;. After a lot of reading and a lot more experimenting I found out that there are many ways of doing this, with different pros and different cons each.
This post goes through all the available options. More specifically:&lt;/p&gt;</description></item><item><title>Using init containers to handle Openshift’s arbitrary user ids</title><link>https://iocanel.com/2017/09/using-init-containers-to-handle-openshifts-arbitrary-user-ids/</link><pubDate>Fri, 29 Sep 2017 00:00:00 +0300</pubDate><guid>https://iocanel.com/2017/09/using-init-containers-to-handle-openshifts-arbitrary-user-ids/</guid><description>&lt;h2 id="intro"&gt;intro&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/openshift/orgin"&gt;openshift&lt;/a&gt; takes security seriously. Sometimes more seriously than I’d like (mostly cause I am lazy). One such example is the fact that containers run using arbitrary users. This is done as an extra measure to control damages, should a process somehow escapes its container boundaries.&lt;/p&gt;
&lt;p&gt;But how does it affect users?&lt;/p&gt;
&lt;h2 id="the-problem"&gt;the problem&lt;/h2&gt;
&lt;p&gt;Users need to follow certain guidelines when creating container images.&lt;/p&gt;
&lt;h4 id="don-t-assume-a-user"&gt;don’t assume a user&lt;/h4&gt;
&lt;p&gt;you don’t have a known uid
The uid of the user is not known in advnace. Also there is no way of controlling it.&lt;/p&gt;</description></item><item><title>Cloud notifications with Apache Camel and jclouds</title><link>https://iocanel.com/2011/11/cloud-notifications-with-apache-camel-and-jclouds/</link><pubDate>Sat, 05 Nov 2011 00:00:00 +0200</pubDate><guid>https://iocanel.com/2011/11/cloud-notifications-with-apache-camel-and-jclouds/</guid><description>&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;Yesterday I was having a talk with Adrian Cole and during our talk he had an unpleasant surprise. He found out that he forgot a node running on his Amazon EC2 for a couple of days and that it would cost him a several bucks.&lt;/p&gt;
&lt;p&gt;This morning I was thinking about his problem and I was thinking of ways that would help you avoid situations like this.&lt;/p&gt;
&lt;p&gt;My idea was to build a simple project that would notify you of your running nodes in the cloud via email at a given interval.&lt;/p&gt;</description></item><item><title>My JavaOne talk about Cellar</title><link>https://iocanel.com/2011/10/my-javaone-talk-about-cellar/</link><pubDate>Mon, 10 Oct 2011 00:00:00 +0300</pubDate><guid>https://iocanel.com/2011/10/my-javaone-talk-about-cellar/</guid><description>&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;I am currently returning home from JavaOne 2011. I am at the airport of Munich waiting for my connecting flight to Athens. Once again the flight my flight is delayed and its a great chance to blog a bit about JavaOne.&lt;/p&gt;
&lt;h2 id="apache-karaf-cellar-at-javaone-2011"&gt;Apache Karaf Cellar at JavaOne 2011&lt;/h2&gt;
&lt;p&gt;I had the chance to make a BOF about Karaf Cellar last Tuesday night. Even though the presentation was really late (20:30) and there were a lot of parties going on at this time (actually I was at the Jboss party right before my presentation) there were quite a few people that attended. The best part was that most of the people who attended were really eager to hear about Karaf &amp;amp; Cellar and I received a lot of great “straight to the point” questions. So I really enjoyed the talk and had a lot of fun.&lt;/p&gt;</description></item><item><title>Apache Karaf Cellar</title><link>https://iocanel.com/2011/05/apache-karaf-cellar/</link><pubDate>Sat, 07 May 2011 00:00:00 +0300</pubDate><guid>https://iocanel.com/2011/05/apache-karaf-cellar/</guid><description>&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;In some previous blog &lt;a href="http://iocanel.com/2011/03/karaf-clustering-using-hazelcast.html"&gt;post&lt;/a&gt;, I designed and implemented Cellar (a small clustering engine for Apache Karaf powered by Hazelcast). Since then Cellar grew in features and eventually was accepted inside Karaf as a subproject.&lt;/p&gt;
&lt;p&gt;This post will provide a brief description of Cellar as it is today.&lt;/p&gt;
&lt;h2 id="cellar-overview"&gt;Cellar Overview&lt;/h2&gt;
&lt;p&gt;Cellar is designed so that it can provide Karaf the following high level features&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;strong&gt;Discovery&lt;/strong&gt;&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Multicast&lt;/li&gt;
&lt;li&gt;Unicast&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;strong&gt;Cluster Group Management&lt;/strong&gt;&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Node Grouping&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;strong&gt;Distributed Configuration Admin&lt;/strong&gt;&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;per Group distributed configuration data&lt;/li&gt;
&lt;li&gt;event driven distributed / local bridge&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;strong&gt;Distributed Features Service&lt;/strong&gt;&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;per Group distributed features/repos info&lt;/li&gt;
&lt;li&gt;event driven distributed / local bridge&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;strong&gt;Provisioning Tools&lt;/strong&gt;&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Shell commands for cluster provisioning&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The core concept behind cellar is that each node can be a part of one ore more groups, that provide the node distributed memory for keeping data (e.g. configuration, features information, other) and a topic which is used to exchange events with the rest group members.&lt;/p&gt;</description></item><item><title>jclouds &amp; OSGi</title><link>https://iocanel.com/2011/05/jclouds-osgi/</link><pubDate>Sat, 07 May 2011 00:00:00 +0300</pubDate><guid>https://iocanel.com/2011/05/jclouds-osgi/</guid><description>&lt;h2 id="osgi-in-the-clouds"&gt;OSGi in the clouds&lt;/h2&gt;
&lt;p&gt;The last couple of years OSGi and Cloud Computing are two buzz words, that you don’t see go hand in hand that often. JClouds is going to change that, since 1.0.0 release is OSGi ready and it also provide direct integration with Apache Karaf.&lt;/p&gt;
&lt;h2 id="jclouds-in-the-karaf"&gt;jclouds in the Karaf&lt;/h2&gt;
&lt;p&gt;The last couple of weeks I have been working with the jclouds team in order to improve the OSGification of jclouds and also to provide integration with Apache Karaf.
I will not go into much detail in this post, since there is a [[wiki. I will add however a small demo that shows how easy it is.
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/SIvSaGEKrkM?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
 &lt;/div&gt;
&lt;/p&gt;</description></item><item><title>Introduction to OSGi and Karaf at JHUG</title><link>https://iocanel.com/2011/04/introduction-to-osgi-and-karaf-at-jhug/</link><pubDate>Tue, 19 Apr 2011 00:00:00 +0300</pubDate><guid>https://iocanel.com/2011/04/introduction-to-osgi-and-karaf-at-jhug/</guid><description>&lt;figure&gt;&lt;img src="https://iocanel.com/2011/04/introduction-to-osgi-and-karaf-at-jhug/event.jpg"&gt;
&lt;/figure&gt;

&lt;p&gt;Presented on OSGi and Apache Karaf on Java Hellenic User Group.&lt;/p&gt;
&lt;p&gt;It was a great event with very interesting presentations. The full list of presentations can be found here.&lt;/p&gt;
&lt;p&gt;Regarding my presentation, I was a bit nervous at first, since I hadn’t practiced my “presentation” skills for a while, but things got better as time went by. I’ve had the chance to meet a lot of interesting people and discuss about OSGi, Apache Karaf &amp;amp; Apache ServiceMix.
The slides of the presentation can be found at: &lt;a href="http://www.slideshare.net/iocanel/introduction-toosgi"&gt;Slide Share&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Karaf clustering using Hazelcast</title><link>https://iocanel.com/2011/03/karaf-clustering-using-hazelcast/</link><pubDate>Fri, 11 Mar 2011 00:00:00 +0200</pubDate><guid>https://iocanel.com/2011/03/karaf-clustering-using-hazelcast/</guid><description>&lt;p&gt;&lt;strong&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/strong&gt;: The project “cellar” has been upgraded with a lot new features, which are not described by this post. A new post will be added soon.&lt;/p&gt;
&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;I have been playing a lot with &lt;a href="https://hazelcast.com/"&gt;Hazelcast&lt;/a&gt; lately, especially pairing it with Karaf. If you haven’t done already you can read my previous post on using Hazelcast on Karaf.&lt;/p&gt;
&lt;p&gt;In this post I am going to take things one step further and use Hazelcast to build a simple clustering engine on Karaf.&lt;/p&gt;</description></item><item><title>Hazelcast on Karaf</title><link>https://iocanel.com/2011/02/hazelcast-on-karaf/</link><pubDate>Mon, 28 Feb 2011 00:00:00 +0200</pubDate><guid>https://iocanel.com/2011/02/hazelcast-on-karaf/</guid><description>&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;The last months &lt;a href="https://hazelcast.com"&gt;Hazelcast&lt;/a&gt; caught my attention. I first saw the JIRA of the &lt;a href="http://camel.apache.org/hazelcast-component.html"&gt;camel-hazelcast&lt;/a&gt; component, then I read about it, I run some examples and eventually I fell in love with it.&lt;/p&gt;
&lt;p&gt;If you are not already familiar with it, &lt;a href="https://hazelcast.com"&gt;Hazelcast&lt;/a&gt; is an opensource clustering platform, which provdies a lot of features such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Auto discovery&lt;/li&gt;
&lt;li&gt;Distributed Collection&lt;/li&gt;
&lt;li&gt;Transactions&lt;/li&gt;
&lt;li&gt;Data Partitioning&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can visit the &lt;a href="https://hazelcast.com"&gt;Hazelcast&lt;/a&gt; Documentation for more information.
In this blog post I will show how to run hazelcast on &lt;a href="http://karaf.apache.org"&gt;Apache Karaf&lt;/a&gt; or &lt;a href="http://servicemix.apache.org"&gt;Apache ServiceMix&lt;/a&gt; and I will provide an example application that creates a hazelcast instance, deploys the hazelcast monitoring web application and adds a couple of shell commands on &lt;a href="http://karaf.apache.org"&gt;Apache Karaf&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>ServiceMix committer</title><link>https://iocanel.com/2010/12/servicemix-committer/</link><pubDate>Mon, 27 Dec 2010 00:00:00 +0200</pubDate><guid>https://iocanel.com/2010/12/servicemix-committer/</guid><description>&lt;p&gt;I am currently in the middle of my Xmas vacation and I was just about to download a movie for tonight.
While downloading, I checked my emails, which I haven’t really checked since Christmas Eve.&lt;/p&gt;
&lt;p&gt;An invitation to join the &lt;a href="https://servicemix.apache.org"&gt;Apache ServiceMix&lt;/a&gt; project as a committer was waiting for me on the top of my Inbox.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://iocanel.com/2010/12/servicemix-committer/servicemix-box.jpg"&gt;
&lt;/figure&gt;

&lt;p&gt;Of course I accepted the invitation and I immediately started blogging about it…
That’s a great ending for 2010 but its also a serious indication that I am going to need a time trasplant for 2011!&lt;/p&gt;</description></item><item><title>JavaOne and Oracle Develop 2010</title><link>https://iocanel.com/2010/09/javaone-and-oracle-develop-2010/</link><pubDate>Sat, 25 Sep 2010 00:00:00 +0300</pubDate><guid>https://iocanel.com/2010/09/javaone-and-oracle-develop-2010/</guid><description>&lt;p&gt;I just returned home from &lt;strong&gt;&lt;strong&gt;Java ONE&lt;/strong&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;strong&gt;Oracle Develop&lt;/strong&gt;&lt;/strong&gt; 2010 (which was also my first ONE) and I thought that it would be a good idea to take 5 minutes and share the experience.&lt;/p&gt;
&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;The city of San Francisco was awesome and I couldn’t find any other place in the world that could be best for the job. The weather, the size and the facilities where exactly what such event required. The organization was good enough and there were tons of sessions that I found exciting.&lt;/p&gt;</description></item><item><title>Karaf JAAS modules in action</title><link>https://iocanel.com/2010/09/karaf-jaas-modules-in-action/</link><pubDate>Sat, 25 Sep 2010 00:00:00 +0300</pubDate><guid>https://iocanel.com/2010/09/karaf-jaas-modules-in-action/</guid><description>&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;Karaf 2.1.0 has been just released! Among other new features, it includes a major revamp in the JAAS module support:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Encryption support&lt;/li&gt;
&lt;li&gt;Database Login Module&lt;/li&gt;
&lt;li&gt;Role Policies&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This post will use all 3 features, in order to create a secured Wicket application on Karaf, using Karaf’s JAAS modules and Wicket’s auth-roles module.&lt;/p&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The application that we are going to build is a simple wicket application. It will be deployed on Karaf and the user credentials will be stored in a mysql database. For encrypting the password we will use Karaf’s Jasypt encryption service implementation, to encrypt passwords using MD5 algorithm in hexadecimal format.&lt;/p&gt;</description></item><item><title>Apache Karaf committer</title><link>https://iocanel.com/2010/08/apache-karaf-committer/</link><pubDate>Mon, 30 Aug 2010 00:00:00 +0300</pubDate><guid>https://iocanel.com/2010/08/apache-karaf-committer/</guid><description>&lt;p&gt;1 week after my vacation and still suffering from “post vacation depression”, this Monday seemed like a nightmare.&lt;/p&gt;
&lt;p&gt;I went to the office and I was feeling the urge to go get my self a huge Carafe of coffee (cups have long been proven inefficient), when an icoming email draw my attention.&lt;/p&gt;
&lt;p&gt;It was an invitation to join &lt;a href="https://karaf.apache.org"&gt;Apache Karaf&lt;/a&gt; team as a committer.&lt;/p&gt;
&lt;p&gt;This is the first open source project I join and I’m very thrilled (if not overreacting) about it and that’s why I decided to blog about it.&lt;/p&gt;</description></item><item><title>Wicket with Spring 3 and Hibernate on Apache Karaf</title><link>https://iocanel.com/2010/07/wicket-with-spring-3-and-hibernate-on-apache-karaf/</link><pubDate>Mon, 12 Jul 2010 00:00:00 +0300</pubDate><guid>https://iocanel.com/2010/07/wicket-with-spring-3-and-hibernate-on-apache-karaf/</guid><description>&lt;p&gt;EDIT: Hibernate is now OSGi ready so most of those stuff are now completely outdated.&lt;/p&gt;
&lt;p&gt;The full source for this post has moved to github under my blog project on branch: &lt;a href="https://github.com/iocanel/blog/tree/wicket-spring-3-jpa2-hibernate-osgi-application-on-apache-karaf"&gt;wicket-spring-3-jpa2-hibernate-osgi-application-on-apache-karaf&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;Recently I attempted to modify an existing crud web application for OSGi deployment. During the process I encountered a lot of issues such as&lt;/p&gt;
&lt;p&gt;Lack of OSGi bundles.
Troubles wiring the tiers of the application together.
Issues on the OSGi container configuration.
Lack of detailed examples on the web.
So, I decided to create such a guide &amp;amp; provide full source for a working example (A very simple person crud application).&lt;/p&gt;</description></item><item><title>Creating custom Hibernate OSGI bundles for JPA 2.0</title><link>https://iocanel.com/2010/07/creating-custom-hibernate-osgi-bundles-for-jpa-2.0/</link><pubDate>Sat, 10 Jul 2010 00:00:00 +0300</pubDate><guid>https://iocanel.com/2010/07/creating-custom-hibernate-osgi-bundles-for-jpa-2.0/</guid><description>&lt;p&gt;&lt;strong&gt;&lt;strong&gt;EDIT&lt;/strong&gt;&lt;/strong&gt;: I am more than happy that this post is now completely obsolete. Hibernate is now OSGi ready, Yay!&lt;/p&gt;
&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;I was trying to migrate an application that uses JPA 2.0 / Hibernate to OSGi. I found out that hibernate does not provide OSGi bundles. There are some Hibernate bundles provided in the Spring Enterprise Bundle repository, however they are none available for Hibernate 3.5.x which implements JPA 2.0. So I decided to create them myself and share the experience with you.&lt;/p&gt;</description></item><item><title>Spring AOP and Refleciton pitfalls</title><link>https://iocanel.com/2010/06/spring-aop-and-refleciton-pitfalls/</link><pubDate>Sat, 05 Jun 2010 00:00:00 +0300</pubDate><guid>https://iocanel.com/2010/06/spring-aop-and-refleciton-pitfalls/</guid><description>&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;This post intents to point out some pitfalls when using spring aop and reflection on the same objects. Moreover, it provides some examples of these pitfalls when combining ServiceMix &amp;amp; Camel with Spring JPA/Hibernate.&lt;/p&gt;
&lt;p&gt;The two most common uses of aspect oriented programming with spring are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Transation Handling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I found myself having issues when applying those 2 on beans that are accessed using reflection (not in all cases) and below I am going to dig into those issues.&lt;/p&gt;</description></item><item><title>Extending ServiceMix management features using Spring - Part 1</title><link>https://iocanel.com/2010/05/extending-servicemix-management-features-using-spring-part-1/</link><pubDate>Sat, 15 May 2010 00:00:00 +0300</pubDate><guid>https://iocanel.com/2010/05/extending-servicemix-management-features-using-spring-part-1/</guid><description>&lt;h2 id="prologue"&gt;Prologue&lt;/h2&gt;
&lt;p&gt;This is the first from a series of posts that demonstrate how to extend ServiceMix management using Spring’s jmx and aop features. The version of SerivceMix that is going to be used will be 3.3.3-SNAPSHOT but I’ve been using this technique since 3.3 and it will probably can be applied to 4.x.&lt;/p&gt;
&lt;h2 id="problem"&gt;Problem&lt;/h2&gt;
&lt;p&gt;One of the most common problems I had with servicemix was that even the most simple changes in the configuration (e.g. changing the name of the destination in a jms endpoint) required editing the xbean.xml of the service unit and redeployment. Moreover this affected the rest of the service units contained in the service assemblies, which would be restarted too.&lt;/p&gt;</description></item><item><title>Extending ServiceMix management features using Spring - Part 2</title><link>https://iocanel.com/2010/05/extending-servicemix-management-features-using-spring-part-2/</link><pubDate>Sat, 15 May 2010 00:00:00 +0300</pubDate><guid>https://iocanel.com/2010/05/extending-servicemix-management-features-using-spring-part-2/</guid><description>&lt;p&gt;In the previous post &lt;a href="http://iocanel.com/2010/05/extend-servicemix-management-features-using-spring-part-1/"&gt;Extend ServiceMix Management features using Spring – Part 1&lt;/a&gt; I demonstrated a very simple technique that allows you to expose endpoint lifecycle operations via jmx. Now I am going to take it one step further and expose the endpoint configuration via jmx.&lt;/p&gt;
&lt;p&gt;If you haven’t done already please catch up by reading &lt;a href="http://iocanel.com/2010/05/extend-servicemix-management-features-using-spring-part-1/"&gt;Part 1&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="part-ii-modifying-the-configuration-of-a-live-endpoint"&gt;Part II: Modifying the configuration of a live endpoint&lt;/h2&gt;
&lt;p&gt;I am going to use the wsdl-first servicemix sample as modified in the previous post and expose the property locationURI of the HttpEndpoint to jmx using Spring’s @ManagedAttribute annotation.&lt;/p&gt;</description></item><item><title>Extending ServiceMix management features using Spring - Part 3</title><link>https://iocanel.com/2010/05/extending-servicemix-management-features-using-spring-part-3/</link><pubDate>Sat, 15 May 2010 00:00:00 +0300</pubDate><guid>https://iocanel.com/2010/05/extending-servicemix-management-features-using-spring-part-3/</guid><description>&lt;p&gt;In the previous post &lt;a href="http://iocanel.com/2010/05/extend-servicemix-management-features-using-spring-part-2/"&gt;Extend ServiceMix Management features using Spring – Part 2&lt;/a&gt; I demonstrated how to use spring to gain control over endpoint lifecycle and configuration via jmx. You might wonder till now “what happens to those custom changes if I have to redeploy the assembly, restart servicemix or even worse restart the server?”. The short answer is that these changes are lost. The long answer is in this blog post, which explains how to persist those changes and how to make the endpoint reload them each time it starts.&lt;/p&gt;</description></item><item><title>Extend ServiceMix Management features using Spring – Part 1</title><link>https://iocanel.com/2010/05/extend-servicemix-management-features-using-spring-part-1/</link><pubDate>Thu, 13 May 2010 17:14:00 +0000</pubDate><guid>https://iocanel.com/2010/05/extend-servicemix-management-features-using-spring-part-1/</guid><description>&lt;p&gt;&lt;span style="font-size: x-large;"&gt;Prologue&lt;/span&gt;&lt;br&gt;
This is the first from a series of posts that demonstrate how to extend ServiceMix management using Spring’s jmx and aop features. The version of SerivceMix that is going to be used will be 3.3.3-SNAPSHOT but I’ve been using this technique since 3.3 and it will probably can be applied to 4.x.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: x-large;"&gt;Problem&lt;/span&gt;&lt;br&gt;
One of the most common problems I had with servicemix was that even the most simple changes in the configuration _(e.g. changing the name of the destination in a jms endpoint)  _required editing the xbean.xml of the service unit and redeployment. Moreover this affected the rest of the service units contained in the service assemblies, which would be restarted too.&lt;/p&gt;</description></item></channel></rss>