<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java on ilikeorangutans</title><link>https://kuelzer.ca/tags/java/</link><description>Recent content in Java on ilikeorangutans</description><generator>Hugo</generator><language>en</language><copyright>© 2026 Jakob Külzer</copyright><lastBuildDate>Sun, 12 Apr 2026 14:27:24 -0400</lastBuildDate><atom:link href="https://kuelzer.ca/tags/java/index.xml" rel="self" type="application/rss+xml"/><item><title>JSR-269 Annotation Processing</title><link>https://kuelzer.ca/posts/2013/08/13/jsr-269-annotation-processing/</link><pubDate>Tue, 13 Aug 2013 13:59:40 -0400</pubDate><guid>https://kuelzer.ca/posts/2013/08/13/jsr-269-annotation-processing/</guid><description>&lt;p&gt;I&amp;rsquo;ve been contemplating compile time bytecode manipulation for the &lt;a href="http://www.objectmapper.org/"&gt;Object Mapper Framework&lt;/a&gt; for a while now. Compile time instrumentation of classes seems to be a better approach and does away a whole lot of class loading issues, especially in OSGI environments. In any case, I remembered &lt;a href="http://projectlombok.org/"&gt;Project Lombok&lt;/a&gt; and reading about &lt;a href="http://jcp.org/en/jsr/detail?id=269"&gt;JSR-269&lt;/a&gt;, which was introduced with Java 1.6. It&amp;rsquo;s an API that allows you to plug custom annotation processors into javac.&lt;/p&gt;
&lt;p&gt;After experimenting and reading a bit, here is my reading list:&lt;/p&gt;</description></item><item><title>Making Eclipse's Method Stubs Better and other things</title><link>https://kuelzer.ca/posts/2013/06/26/making-eclipses-method-stubs-better-and-other-things/</link><pubDate>Wed, 26 Jun 2013 13:59:40 -0400</pubDate><guid>https://kuelzer.ca/posts/2013/06/26/making-eclipses-method-stubs-better-and-other-things/</guid><description>&lt;p&gt;Just downloaded &lt;a href="http://www.eclipse.org/kepler/"&gt;Eclipse Kepler&lt;/a&gt; and I&amp;rsquo;m quite happy with it. It appears fast and stable so far, but that could be just that it&amp;rsquo;s a brand new install. Anyways, I re-added some of my usual code templates and while doing so, I discovered a few useful things. And because I keep doing this on every Eclipse installation, I decided to write this down here. On a related note, an Eclipse plugin to share your Eclipse templates would be pretty rad. But I digress.&lt;/p&gt;</description></item><item><title>OSGI, Guice, and Peaberry: first steps</title><link>https://kuelzer.ca/posts/2013/02/27/osgi-guice-and-peaberry-first-steps/</link><pubDate>Wed, 27 Feb 2013 13:59:40 -0400</pubDate><guid>https://kuelzer.ca/posts/2013/02/27/osgi-guice-and-peaberry-first-steps/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve been trying to get &lt;a href="https://code.google.com/p/google-guice/"&gt;Google Guice&lt;/a&gt; and &lt;a href="https://code.google.com/p/peaberry/"&gt;Peaberry&lt;/a&gt; to work in my OSGI projects for a while. Google Guice is a great dependency injection framework, and Peaberry promises to bridge the gap between OSGI services and dependency injection.&lt;/p&gt;
&lt;p&gt;However, getting Peaberry to work was not trivial, mostly because there aren&amp;rsquo;t many docs and the quality of the docs is somewhat lacking. The best piece is still this pdf &lt;a href="https://code.google.com/p/peaberry/downloads/detail?name=peaberry%20-%20blending%20services%20and%20extensions.pdf"&gt;Peaberry - blending services and extensions&lt;/a&gt;, but it&amp;rsquo;s a lot of information in very little space.&lt;/p&gt;</description></item><item><title>Google Guice and Scope Mixing</title><link>https://kuelzer.ca/posts/2012/12/11/google-guice-and-scope-mixing/</link><pubDate>Tue, 11 Dec 2012 13:59:40 -0400</pubDate><guid>https://kuelzer.ca/posts/2012/12/11/google-guice-and-scope-mixing/</guid><description>&lt;p&gt;I&amp;rsquo;ve been working on a small Java application I wrote a few years ago for some bug fixes and in the process of making it better, I introduced &lt;a href="https://code.google.com/p/google-guice/"&gt;Google Guice&lt;/a&gt;, my favourite dependency injection framework. On of the great features of Guice is that it supports different &lt;a href="https://code.google.com/p/google-guice/wiki/Scopes"&gt;scopes for injection&lt;/a&gt;. Per default, Guice will return a new object for every request. But sometimes you want to objects to be created a bit less liberally, for example, you want a certain object to be created only once. Guice has a &lt;code&gt;@Singleton&lt;/code&gt; scope for that. Want an object to be created once for a request? Guice and &lt;a href="https://code.google.com/p/google-guice/wiki/Servlets"&gt;guice-servlet&lt;/a&gt; offers &lt;code&gt;@RequestScoped&lt;/code&gt; and &lt;code&gt;SessionScoped&lt;/code&gt;. But there&amp;rsquo;s more, need JUnit per test scope? &lt;a href="https://code.google.com/p/guiceberry/"&gt;Guiceberry&lt;/a&gt; has exactly that: &lt;code&gt;@TestScoped&lt;/code&gt; that will make sure every test gets exactly one object.&lt;/p&gt;</description></item><item><title>Reading List: JVM Internals, Rugged Software, and 12 Factor Apps</title><link>https://kuelzer.ca/posts/2012/12/04/reading-list-jvm-internals-rugged-software-and-12-factor-apps/</link><pubDate>Tue, 04 Dec 2012 13:59:40 -0400</pubDate><guid>https://kuelzer.ca/posts/2012/12/04/reading-list-jvm-internals-rugged-software-and-12-factor-apps/</guid><description>&lt;p&gt;Recently I&amp;rsquo;ve been reading a lot about software development and philosophies on how to write better software. I really enjoyed the &lt;a href="https://www.ruggedsoftware.org/"&gt;Rugged Manifesto&lt;/a&gt; as it emphasizes how software is crucial in our world and the responsibilities that come with it.
Another great guide is &lt;a href="http://www.12factor.net/"&gt;Twelve-Factor App&lt;/a&gt;, a list of 12 principles on how to effectively implement and operate applications.
And last but not least, &lt;a href="http://www.cubrid.org/blog/dev-platform/understanding-jvm-internals"&gt;Understanding JVM Internals&lt;/a&gt;, a really well written cross cut through the JVM, including class file format, JVM structure and stack memory layouts.&lt;/p&gt;</description></item><item><title>commons-logging in OSGI Environments</title><link>https://kuelzer.ca/posts/2012/11/14/commons-logging-in-osgi-environments/</link><pubDate>Wed, 14 Nov 2012 13:59:40 -0400</pubDate><guid>https://kuelzer.ca/posts/2012/11/14/commons-logging-in-osgi-environments/</guid><description>&lt;p&gt;While working on a small toy project using Apache Felix and commons-httpclient, I kept running into the issue that there is no official OSGI bundle for Apache commons-logging out there. While most Apache commons projects either provide simple bundles or full blown OSGI implementations with Activators and Services, commons-logging is an interesting exception. If you scan the &lt;a href="http://wiki.apache.org/commons/CommonsOsgi"&gt;Commons OSGI status page&lt;/a&gt;, you will notice that there is no OSGI version for commons-logging available, and a separate section to explain why. I haven&amp;rsquo;t dug into why and how it conflicts with the OSGI classloading scheme, but I can see that being a problem. Be it as it may, there is no official OSGI bundle for commons logging.&lt;/p&gt;</description></item><item><title>OSGI Bootstrapping</title><link>https://kuelzer.ca/posts/2012/10/23/osgi-bootstrapping/</link><pubDate>Tue, 23 Oct 2012 13:59:40 -0400</pubDate><guid>https://kuelzer.ca/posts/2012/10/23/osgi-bootstrapping/</guid><description>&lt;p&gt;I&amp;rsquo;ve been working with OSGI based technology for a while now and it&amp;rsquo;s a great piece of technology. However, so far I&amp;rsquo;ve only worked with OSGI technology that runs in existing instances of the framework. A running framework is easy to deal with, but how do you get to this point? I spent some time today playing with that, and it took me a while to put it all together. So naturally, I&amp;rsquo;ll have to record my findings here.&lt;/p&gt;</description></item><item><title>OSGI Classloading Reading List</title><link>https://kuelzer.ca/posts/2012/10/12/osgi-classloading-reading-list/</link><pubDate>Fri, 12 Oct 2012 13:59:40 -0400</pubDate><guid>https://kuelzer.ca/posts/2012/10/12/osgi-classloading-reading-list/</guid><description>&lt;p&gt;I&amp;rsquo;ve been doing a lot of reading on how OSGI handles class loading. I&amp;rsquo;m starting to fully understand and leverage OSGI and I&amp;rsquo;m trying to keep my framework &lt;a href="https://github.com/ilikeorangutans/omf"&gt;Object Mapper&lt;/a&gt; as compatible with OSGI as I can.&lt;/p&gt;
&lt;p&gt;In OSGI classloading is very restricted, similar to what happens in enterprisy Java application servers, and completely unlike traditional Java applications where everything shares a single classloader. In OSGI each bundle has its own classloader and what is visible accross the bundle boundaries is subject to strict export rules. In order to use a class outside of a bundle you&amp;rsquo;ll have to explicitly declare its package as exported. There are many benefits to this strict architecture, clean architectures, reusable components and the ability to update bundles at runtime are probably the most important ones.&lt;/p&gt;</description></item></channel></rss>