<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>[digital:meditation] &#187; tools</title>
	<atom:link href="http://dm.zimmer428.net/category/tools/feed/" rel="self" type="application/rss+xml" />
	<link>http://dm.zimmer428.net</link>
	<description>...</description>
	<lastBuildDate>Wed, 16 Jun 2010 06:31:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>C# and mono: getting some feet wet&#8230;</title>
		<link>http://dm.zimmer428.net/2010/04/c-and-mono-getting-some-feet-wet/</link>
		<comments>http://dm.zimmer428.net/2010/04/c-and-mono-getting-some-feet-wet/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 07:15:06 +0000</pubDate>
		<dc:creator>kr</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[thoughts]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[void]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[net]]></category>

		<guid isPermaLink="false">http://dm.zimmer428.net/?p=701</guid>
		<description><![CDATA[Well, some of the readers of these pages will have noticed that, carefully speaking, my enthusiasm for Microsoft technology is pretty limited. &#8220;Limited&#8221; indeed is the right way of putting it: While I have a clear opinion about most of Microsofts monopoly regarding desktop and office software (which, in the end, makes me avoid both [...]]]></description>
			<content:encoded><![CDATA[<p>Well, some of the readers of these pages will have noticed that, carefully speaking, my enthusiasm for Microsoft technology is pretty limited. &#8220;Limited&#8221; indeed is the right way of putting it: While I have a clear opinion about most of Microsofts monopoly regarding desktop and office software (which, in the end, makes me avoid both as good as I can, and thanks at the very least to Ubuntu GNU/Linux, right now I can do that pretty well&#8230; ;) ), I then and now always considered Microsoft .NET, as a development and runtime platform, a pretty good thing, maybe the best technology the Redmond folks came up with to date, and definitely a technology that could have offer wholly new options to both Microsoft and the rest of the world if licensed and distributed a little more openly. Anyway, leaving licensing and personal considerations related to this aspect aside: These days I earn a living mainly off working with Java and overally am pleased with this as an environment. However, as &#8220;integration&#8221; is what I mostly deal with, I finally had the chance of dealing with Microsoft .NET and C#, and had a rather pleasant trip&#8230;</p>
<p><span id="more-701"></span></p>
<p><strong>Getting the tools ready</strong></p>
<p>Given the fact that I&#8217;m on Ubuntu 10.04 beta on my everyday working notebook, though, running &#8220;Microsoft&#8221; .NET was not an option. Fortunately, there&#8217;s <a href="http://www.mono-project.com/Main_Page">Mono</a>, an open source / software libre project aiming to provide a compatible, portable implementation of .NET for platforms not supported by Microsoft (which is any platform other than Windows, actually). In my Ubuntu installation, as well as in most other GNU/Linux distributions out there these days, one is just a few moments of package manager interaction away from having Mono installed; I personally did so in a rather rude way &#8211; by installing <a href="http://monodevelop.com/">MonoDevelop</a>, an open-source IDE for Mono / C#, which subsequently pulls in most of the relevant core mono packages as dependencies. A few dozens of megabytes of package downloading later, things are there, set up and ready to go. So far, so good.</p>
<p><strong>Solving a real-world problem, part 1: integration client</strong></p>
<p>In order to, in our environment, make a legacy (and highly proprietary) document management platform behave well and communicate bidirectionally with other applications / platforms around, we ended up hand-crafting a small &#8220;middleware&#8221; structure to get this job done. Well, &#8220;middleware&#8221; is quite an exaggeration for something which basically is HTTP-POST along with a data transfer encoding resembling a lite, stripped-down version of JSON. It&#8217;s a pretty bare-bone and rather archaic kind of approach, but then again, it works, it is easy to handle even in this very DMS platform (written in an obscure language in which a more-or-less working TCP socket implementation is the best you probably can get for such a task), and it is a way to easily link many different platforms without having to worry too much about whether or not this approach is supported in the target platform (actually, even unix-shell and netcat eventually would do here&#8230; :) ). So doing a few proof-of-concept implementations on top of various languages / frameworks is a good excuse to try the same using C# / .NET. First things first, the easier thing: Building a client posting some data structure via HTTP and dumping the response recieved to STDOUT&#8230; Firing up MonoDevelop, if one is used to a Java IDE it takes some time getting acquainted to things, but then again, world&#8217;s not all too different here. Creating an initial runnable class is simple, core syntax just slightly different to what one&#8217;s used in Java. </p>
<p>So now how to deal with the client side of HTTP? Fortunately, there&#8217;s documentation at hand: Along with Mono, there comes &#8220;monodoc&#8221; which allows for easily browsing pre-installed Mono documentation, mainly of course API reference. monodoc offers a rather good search facility so figuring out that <code>System.Net.WebRequest</code> is what I need. Adding to that, there&#8217;s a vast load of documentation available as part of the <a href="http://msdn.microsoft.com/en-us/library/ff361664%28v=VS.100%29.aspx">Microsoft Developers Network (MSDN) library</a>, which, in this special case, offers an almost fool-proof <a href="http://msdn.microsoft.com/en-us/library/debx8sh9.aspx">step-by-step guide</a> on how to resolve exactly the kind of problem I need. So overally, getting the C# client to talk to both the DMS and the Java server side of our integration structure took about ten minutes, including figuring out how to, in C#, convert a String object into a byte array. Not bad, and pretty intuitive given the documentation and a good deal of Java experience at hand.</p>
<p><strong>Solving a real-world problem, part 2: integration server</strong></p>
<p>So far, so good &#8211; running the client code from within MonoDevelop, or even from the command line, wasn&#8217;t a job too tough (even though it feels strange running a .exe file in a GNU/Linux environment&#8230; :) ). Now, however, for the server part of things. Given quite a range of servlet containers or application servers (we use <a href="https://glassfish.dev.java.net">Glassfish</a> and <a href="http://tomcat.apache.org">apache tomcat</a> for our internal purposes) at hand, a Java developer has quite a concise kind of environment in which to expose HTTP(-POST) services: Extend <a href="http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpServlet.html">javax.servlet.http.HttpServlet</a>, override the <code>doPost</code> method, add your code, package a .war file, deploy things to your application server &#8211; done. The good thing about Java EE, in my opinion, is that this general workflow does <em>always</em> apply, no matter which application server, development environment, &#8230; you are running. But how to do that in Mono/.NET? </p>
<p>So far, I haven&#8217;t come across the idea of something like a &#8220;generic .NET application server&#8221;, akin to what an application server in Java EE is. However, I quickly found out about <a href="http://www.mono-project.com/ASP.NET">ASP.NET and mono-xsp(2)</a> server, which I installed using my package management. Fine. Reading the tutorial was rather straightforward, now for some code. </p>
<p>To cut things short: It turned out to be not much more complicated than building the client. Browsing the Mono documentation, and from there the MSDN articles, I quickly came across <a href="http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx">System.Web.IHttpHandler</a>, implemented it, filled its <code>ProcessRequest</code> method with meaningful code (using code completion in MonoDevelop prove to be a rather good way of exploring the &#8211; at least to me &#8211; unfamiliar C#/.NET API), running stuff with xsp. Done. </p>
<p><strong>Conclusions&#8230;</strong></p>
<p>What to learn from this little trip? </p>
<ul>
<li>Well, first off, working with C#, Mono and MonoDevelop is not that much of a pain if you&#8217;re used to Java and, given at least this very use case, know what you&#8217;re about to want to do. There are tons of documentation available out there, and overally, I guess in most situations getting started with these things should be straightforward.</li>
<li>As always, learning something new is a good thing, and in case of C#/.NET, I see a strong advantage in linking our existing server-sided environment with desktop-based clients &#8211; so far, Java unfortunately doesn&#8217;t do that good in terms of deep desktop integration (registering global desktop hotkeys, opening standard applications, &#8230;). Throwing in a little bit of local .NET code could ease this at the very least for Windows clients.</li>
<li>I still have to see how to build a portable, self-containing application server using Mono/C#: Given the nature of .war deployment and the way application servers and JREs can be deployed, it is possible to simply make .zip file of JDK, preconfigured application server along with the applications deployed to it, unzip this file on a server machine, start the application server and have things running as desired &#8211; without the need to install additional software, configure system-wide services (apache and mod_mono?) and the like. Comparing this kind of deployment, Java EE still is way ahead of .NET/C#, Python and any other platforms I played with so far.</li>
</ul>
<p>In the end, that&#8217;s what is left: I enjoyed my ride and liked what I saw. I still will be doing most of my work using Java, I still will enjoy working with P/Jython for most scripting things, but I figured out that, in practical use, C#/.NET/Mono is a rather smooth environment to work with, and, as pointed out, there surely are some problems I already imagine for using it&#8230; More to come.</p>
]]></content:encoded>
			<wfw:commentRss>http://dm.zimmer428.net/2010/04/c-and-mono-getting-some-feet-wet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UI tooling and beyond in NetBeans and Eclipse(4)</title>
		<link>http://dm.zimmer428.net/2010/02/ui-tooling-and-beyond-in-netbeans-and-eclipse4/</link>
		<comments>http://dm.zimmer428.net/2010/02/ui-tooling-and-beyond-in-netbeans-and-eclipse4/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 21:09:20 +0000</pubDate>
		<dc:creator>kr</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://dm.zimmer428.net/?p=697</guid>
		<description><![CDATA[Whoever is reading this weblog more or less regularly will have noticed that I am an enthusiastic user of NetBeans for most of my development needs, and this holds true even now that, given a current project of ours, I have to switch IDE at least once daily, as we do a project based on [...]]]></description>
			<content:encoded><![CDATA[<p>Whoever is reading this weblog more or less regularly will have noticed that I am an enthusiastic user of <a href="http://www.netbeans.org">NetBeans</a> for most of my development needs, and this holds true even now that, given a current project of ours, I have to switch IDE at least once daily, as we do a project based on <a href="http://www.eclipse.org/rap/">Eclipse Rich Ajax Platform</a> and NetBeans, as comes as no surprise, is not too good a tool for building applications which are more or less built atop the Eclipse RCP core (well, getting deeper into things and especially talking about RAP application deployment, you&#8217;ll figure out that Eclipse itself also leaves a lot to be desired here, but that eventually is another story).</p>
<p><span id="more-697"></span></p>
<p>Anyway: One of many fields in which NetBeans these days still does excel compared to Eclipse is building graphical user interfaces using the GUI builder that comes pre-installed with every NetBeans package and even from this point of view is way ahead of the Visual Editor available to Eclipse users, in case of which even <a href="http://wiki.eclipse.org/VE/Update">installing and getting the bits to work</a> seems an adventure of its own. And here, we&#8217;re not even talking about R<em>A</em>P (based upon RWT) which is the &#8220;web alternative&#8221; and, though pretty complete (and getting better with each release), always lagging a bit behind the &#8220;desktop RCP&#8221; (based upon SWT) in terms of technology, widgets, &#8230; . However, Eclipse then again is a bit ahead from our current projects point of view: The &#8220;single sourcing&#8221; approach the RAP people are trying to push forth &#8211; the idea of having <em>one</em> codebase and run this both &#8220;on desktop&#8221; and &#8220;in a web browser&#8221; without too much ado &#8211; is <em>really</em> a good approach, well, if you need to cater for both web users who still want a good feature set and to internal users to which using a browser based interface eventually is not an option. Yes, there are quite some drawbacks about the way the Eclipse runtime environment does work and scale when deployed to an application server (in example talking about one dedicated &#8220;UIThread&#8221; per user session which definitely is not the way people think of doing server-sided Java applications&#8230; :) ), but overally, it&#8217;s more than so far you can do with Netbeans unfortunately, where you&#8217;re left with either doing a desktop (Swing based) application <em>or</em> a web application using some framework for this purpose (JSF, Wicket, &#8230;). Works, but one of the ideas you want to address when considering single-sourcing (having programming models as well as user interfaces as close to each other as somewhat possible for web <em>and</em> desktop) falls short here. There have been <a href="http://www.google.de/search?q=swing+web&#038;ie=utf-8&#038;oe=utf-8&#038;aq=t">numerous projects trying to make Swing a web application platform</a> too, but most of them seem discontinued, and none of them integrate well with the tooling one is used to (and enthusiastic about :) ) in NetBeans.</p>
<p>And, talking about e4, the next major version of Eclipse IDE/platform, the current status quo might become even more apparent: e4 comes with <a href="http://wiki.eclipse.org/E4/XWT">XWT</a>, a technology to allow for declarative UI description using XML file definitions rather than writing code, allowing for, well, &#8220;declaration&#8221; rather than coding of user interfaces, which has a bunch of more or less obvious advantages. Not that this idea is generally all new (just consider <a href="https://developer.mozilla.org/En/XUL">XUL</a> used by the Mozilla applications), but along with the &#8220;usual tooling&#8221; to be found in an IDE like Eclipse, this might turn out to be a rather impressive feature. First demonstrations, like <a href="http://dev.eclipse.org/blogs/yvesyang/2010/02/19/getting-started-of-e4-application-using-visual-designer/">this screencast showing the visual editor for XWT</a>, leave one end up with expectations rather high. So let&#8217;s wait and see&#8230;</p>
<p>&#8230; both what Eclipse people will keep on doing related to XWT until e4 is to be released, and what Oracle is likely to do to Java technologies like Swing <a href="http://java.sun.com/javafx/">or maybe JavaFX</a>. Maybe the latter one might be an interesting alternative if integrated with web and desktop environments and the appropriate tooling. I am curious to see things proceed, talking about both technologies&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://dm.zimmer428.net/2010/02/ui-tooling-and-beyond-in-netbeans-and-eclipse4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java EE &#8220;bulk update&#8221;: NetBeans 6.8, Glassfish V3, Java EE 6</title>
		<link>http://dm.zimmer428.net/2009/12/java-ee-bulk-update-netbeans-6-8-glassfish-v3-java-ee-6/</link>
		<comments>http://dm.zimmer428.net/2009/12/java-ee-bulk-update-netbeans-6-8-glassfish-v3-java-ee-6/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 20:26:18 +0000</pubDate>
		<dc:creator>kr</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[thoughts]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://dm.zimmer428.net/?p=604</guid>
		<description><![CDATA[&#8220;Get Tomorrow Today&#8221; is what, these days, one can read while visiting the NetBeans web site. Well. Indeed. Today, a major update of Suns Java (Enterprise) environment for development, deployment, runtime has been released:

First of all, NetBeans IDE has bumped up its version number to 6.8, including (not too much of a surprise, I guess&#8230;) [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Get Tomorrow Today&#8221; is what, these days, one can read while visiting the <a href="http://www.netbeans.org">NetBeans</a> web site. Well. Indeed. Today, a <a href="http://www.sun.com/featured-articles/2009-1210/feature/index.jsp">major update</a> of Suns Java (Enterprise) environment for development, deployment, runtime has been released:</p>
<ul>
<li>First of all, <a href="http://netbeans.org/community/news/show/1449.html">NetBeans IDE</a> has bumped up its version number to 6.8, including (not too much of a surprise, I guess&#8230;) seamless and production-ready support for Java EE 6 and Glassfish v3, along with improved or newly added toolings and plugins for <a href="http://maven.apache.org">maven2</a> (very impressive), Project Kenai, JavaFX, PHP and a whole bunch of other technologies. Adding to that, asides &#8220;just&#8221; being another multi-language/-technology IDE, NetBeans RCP also is likely to <a href="http://blogs.sun.com/jpblog/entry/netbeans_6_8_and_the">get more support as an RC platform</a>, which surely is a good thing.</li>
<li>Then, <a href="http://java.sun.com/javaee/technologies/javaee6.jsp">Java Enterprise Edition</a> is available in version 6 (JSR-316), aiming at making Java EE development more slim, more easy and, thanks to the newly added &#8220;profiles&#8221;, more adaptable to given use cases than ever before. Along with this, there are a bunch of improvements in technologies such as Java Servlets (3.0), EJB (3.1), persistence (JPA 2.0), JCA and, especially notable from my point of view, support for RESTful web services (JAX-RS 1.1).</li>
<li>Finally, in addition to that, along with Java EE 6 comes <a href="http://www.sun.com/software/products/glassfishv3/">Glassfish v3</a> as <a href="http://blogs.sun.com/theaquarium/entry/glassfish_v3_is_now_available">its reference implementation and the &#8220;open source&#8221; platform</a> Suns Java System Application Server is based upon. Along with (obvious) support for all the Java EE technologies, just the last couple of weeks <a href="http://blogs.sun.com/judy/entry/meet_glassfish_v3_fishcat_team">I experienced during FishCAT</a> that GFv3 is a pretty good platform, providing all the strengths so far provided by its predecessors, yet being updated to reflect the changes in Java EE 6 and also providing hosting for in example JRuby applications out of the box. Adding to that, <a href="http://www.adam-bien.com/roller/abien/entry/glassfish_v3_the_killer_java">Adam has a more in-depth list</a> of goodnesses that come with GFv3.</li>
</ul>
<p>So, overally, a lot of great technologies and tools to play (or eventually work :) ) with, but also a moment of thought: Maybe not for NetBeans, but I am pretty sure at the very least for Java EE and maybe Glassfish, this could be the last release made by Sun as an independent business entity, the last releases related to these technology before Sun gets acquired by / gets merged with Oracle, leaving their products end up in the ever-growing Oracle product and services portfolio, some driven forth maybe more enthusiastically, others maybe left out in the cold and eventually discontinued. No matter how, I guess the next year might be crucial to all of these technologies: It will show how Java EE 6 can come up against or side-by-side with latest and upcoming <a href="http://www.springframework.org">Spring releases</a>, with the whole <a href="http://www.osgi.org">OSGi</a> movement in general and, especially, the environment to be set up by <a href="http://www.eclipse.org/rt/">Eclipse RT project</a>. And it also will show what NetBeans, as an IDE, as a platform, as a community, can come up with to provide viable alternatives and approaches to a load of (unquestionably good) features provided by Eclipse ecosystem, like the whole <a href="http://www.eclipse.org/modeling/">Eclipse Modeling</a> toolbox or the upcoming <a href="http://dev.eclipse.org/blogs/yvesyang/category/declarative-ui/">XWT and declarative UI</a> technologies in e4. Or maybe (which eventually could be the best of all outcomes) it might show that there is a good reason for different alternatives existing to address different requirements and use cases. </p>
<p>And, overally, no matter how things will move on: At the moment, congratulations to all the engineers, writers, tech people behind these three releases! You did a rather great job again&#8230; </p>
]]></content:encoded>
			<wfw:commentRss>http://dm.zimmer428.net/2009/12/java-ee-bulk-update-netbeans-6-8-glassfish-v3-java-ee-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SAP, open-ness and moving to Oracle?</title>
		<link>http://dm.zimmer428.net/2009/11/sap-open-ness-and-moving-to-oracle/</link>
		<comments>http://dm.zimmer428.net/2009/11/sap-open-ness-and-moving-to-oracle/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 07:45:15 +0000</pubDate>
		<dc:creator>kr</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[thoughts]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[licensing]]></category>
		<category><![CDATA[maxdb]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[sap]]></category>

		<guid isPermaLink="false">http://dm.zimmer428.net/?p=600</guid>
		<description><![CDATA[There have been a couple of  different posts in various SAP related blogs recently, as well as some responses by non-SAP(?) folks, dealing with Java technology (especially in light of the ongoing acquisition of Sun Microsoystems by Oracle), open standards and &#8220;open-ness&#8221; in general, it seems. Looking at this through the eyes of someone [...]]]></description>
			<content:encoded><![CDATA[<p>There have been a <a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16648">couple of </a> <a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16815">different posts</a> in <a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/16469">various SAP related blogs</a> recently, as well as <a href="http://opendotdotdot.blogspot.com/2009/11/why-sap-is-sap.html">some responses</a> by <a href="http://news.cnet.com/8301-13505_3-10394123-16.html">non-SAP(?) folks</a>, dealing with Java technology (especially in light of the ongoing acquisition of Sun Microsoystems by Oracle), open standards and &#8220;open-ness&#8221; in general, it seems. Looking at this through the eyes of someone who is professionally using a dedicated piece of SAP technology (its database environment <a href="http://maxdb.sap.com/events/">SAP MaxDB</a>), a few thoughts come to my mind here&#8230;</p>
<p><span id="more-600"></span></p>
<p><strong>Open-ness and uncertainty</strong></p>
<p>We, as a company, migrated to SAP MaxDB back in 2005 after finally dumping an old installation of MS SQL Server 97 on top of MS Windows NT 4.0 in favor of, well, an SAP MaxDB 7.5 installation on top of a <a href="http://www.debian.org">Debian GNU/Linux</a> operating system. Reasons for this decision:</p>
<ul>
<li>Comparing initial installation, configuration and maintaineance effort, we had to figure out that in many respects SAP MaxDB was the most simple RDBMS we could get our hands on: Straightforward installation, deployment, backup, migration, a set of <em>rather</em> well thought-out, well-working tools, extensive documentation and a friendly user group &#8211; what else would you expect?</li>
<li>Of course, compared to Oracle 9i or a more up-to-date MSSQL, these days SAP MaxDB simply was an affordable solution, given then and now it was provided free-of-charge for use along with open-source and/or non-SAP technology.</li>
<li>Wearing the label SAP, we thought that eventually there might be some way of getting &#8220;high-value&#8221; support by SAP on that given we offer some sort of MaxDB use case that justifies doing so without being into any other SAP technologies / products (as so far we simply haven&#8217;t found one in there to suit our use cases).</li>
</ul>
<p>Getting into MaxDB, we quickly came to a rather stable and reliable environment. Subsequently, we spent a couple of money to have the manufacturer of our &#8220;old&#8221; system infrastructure to add support for MaxDB to their product for our specific environment. And we&#8217;ve been working on top of a heterogenous system built on top of SAP MaxDB for a couple of years, evaluating to buy professional support and licensing right from mySQL AB (who, by then, did offer SAP MaxDB along with mySQL as a &#8220;professional, enterprise-grade RDBMS&#8221;), until eventually: <a href="http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/7514">&#8220;MaxDB back under the SAP roof!&#8221;</a> So no more licensing by mySQL AB, and a little later, there <a href="http://maxdb.sap.com/license/MaxDB_Community_License_2007.pdf">also happened to be a change in licensing</a>, basically coming down to a construction like this, as far as I understand it:</p>
<ul>
<li>SAP customers to get professional, paid support for SAP MaxDB used along with any other SAP applications according to a given licensing model.</li>
<li>SAP customers using SAP MaxDB along with non-SAP applications may order some sort of support contract addition to their SAP software contract specially made up for this kind of purpose.</li>
<li>Non-SAP customers may use SAP MaxDB for free according to the terms of the Community License. No commercial support offerings are available to those it seems.</li>
</ul>
<p><strong>More uncertainty</strong><br />
In the end, after the licensing scheme (proprietary -> GPL/proprietary dual-licensing -> &#8220;proprietary community license&#8221;) has changed a couple of times and, now, an <a href="https://wiki.sdn.sap.com/wiki/display/MaxDB/FAQ">extensive FAQ collection</a> outlining that the core strategy of SAP obviously is making MaxDB more suitable, more well-integrated, more &#8220;usable&#8221; along with other SAP applications (which is an obvious thing to do, no doubt about that), we are evaluating migrating our database backend to a recent Oracle release altogether. Why?</p>
<p>Even while we tried so, we failed managing to become an SAP customer with SAP MaxDB being the only SAP product we use. So, looking at our relation to SAP, we always will end up being the &#8220;community user&#8221; using something we get free-of-charge in an environment unknown to SAP.</p>
<p>Consequently, as we do not use any other SAP applications, I don&#8217;t really see where things are heading in near future. Where will SAP MaxDB development go? Could it be that, eventually, one day the &#8220;community license&#8221; will be terminated as well, making SAP MaxDB (and patches/updates) completely unavailable to anyone outside SAP again? Could it be that, in course of making the database more suitable for use with other SAP applications, one day it simply won&#8217;t be a feasible solution for our environment anymore as, this way, it is obviously not aiming at being a &#8220;general purpose RDBMS&#8221; anymore? In the past, it seems a lot of features we thought of as being pretty interesting (WebDAV/WebSQL, Synchronization tools) have either been removed altogether or aren&#8217;t maintained anymore &#8211; can we be sure this is not eventually, one day, to hit some other part of database administration tooling?</p>
<p>There used to be an <a href="http://www.open-maxdb-group.org/">Open MaxDB Group</a> a while ago which, it seems, has quietly come to a halt. This makes me think that, for a &#8220;community license&#8221; user, there is next to no way of having ones interests related to MaxDB tooling, development, stragety, &#8230; represented to and eventually being recognized by SAP. Looking back at some discussions in the (kind and <em>very</em> helpful) MaxDB users forum, I once read a message outlining SAP not wanting to be a &#8220;general purpose DBMS seller&#8221;, which surely seems true here. But given in our situation a &#8220;general purpose DBMS&#8221; is right what we want / need, maybe SAP MaxDB is not the right strategy anymore, at least at the moment&#8230;</p>
<p>&#8230; and this is where, somehow, I&#8217;ll get back to the initial thoughts on open-ness and open source: In my opinion, the current state of &#8220;MaxDB open-ness&#8221; is, rudely speaking, next to useless to most customers not using SAP applications but looking for a long-term RDMBS strategy as there simply seem too many questions relating to development, long-term availability of updates, &#8230; unanswered. Having a &#8220;commercial database license&#8221; option provided by SAP would help easing these problems. If this is not possible / unwanted, having an &#8220;open-source&#8221; MaxDB at hand, along with support by external providers (so far we get MaxDB support by <a href="http://www.infolytics.com/home">infolytics AG</a> which is pretty good) would ease the pain of strategy uncertainties. Maybe the &#8220;new open-ness&#8221;(?) at SAP might change this thing for the better, somehow &#8211; I still hope for this as SAP MaxDB, after all, still is a really good database platform and really fun working with&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://dm.zimmer428.net/2009/11/sap-open-ness-and-moving-to-oracle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eclipse+maven2: still a rough ride&#8230;</title>
		<link>http://dm.zimmer428.net/2009/11/eclipsemaven2-still-a-rough-ride/</link>
		<comments>http://dm.zimmer428.net/2009/11/eclipsemaven2-still-a-rough-ride/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 09:15:30 +0000</pubDate>
		<dc:creator>kr</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://dm.zimmer428.net/?p=593</guid>
		<description><![CDATA[Once you get back to trying&#8230; After using NetBeans IDE for the past couple of years mainly (even though not only) for its excellent support of projects based upon the maven2 build tool, right now I am into developing an Eclipse RAP based user interface, thus using (obviously) Eclipse IDE for this purpose. As running [...]]]></description>
			<content:encoded><![CDATA[<p>Once you get back to trying&#8230; After using <a href="http://www.netbeans.org">NetBeans IDE</a> for the past couple of years mainly (even though not only) for its excellent support of projects based upon the <a href="http://maven.apache.org">maven2</a> build tool, right now I am into developing an <a href="http://rap.eclipse.org">Eclipse RAP</a> based user interface, thus using (obviously) Eclipse IDE for this purpose. As running two IDEs in parallel has some drawbacks (the code you need always is in &#8220;the other tool&#8221;), I wanted to figure out whether, by now, it makes sense to use Eclipse altogether exclusively just for this project, thus being back to maven2 tooling again. Oh well, let&#8217;s see&#8230;</p>
<p><span id="more-593"></span></p>
<p><strong>First impressions</strong></p>
<p>Starting with the good things&#8230; By now, using <a href="http://m2eclipse.sonatype.org/">Sonatype m2eclipse</a>, Eclipse maven2 support has somewhat improved the last couple of years:</p>
<ul>
<li>Asides &#8220;Run as&#8221; -> &#8220;maven &#8230;&#8221;, Eclipse now seems to be able to build maven2 projects along with a straightforward workspace build / cleanup, which is really rather helpful (and actually something one would expect&#8230; :) ).</li>
<li>There now is a quite powerful editor for maven2 <code>pom.xml</code> files which, as I have to admit, in some situations even outperforms the tooling provided by NetBeans especially when it comes to displaying dependency graphs and dependency hierarchies. The various visual editor pages also help getting closer to the full maven2 feature set if you do not want to dive all too deep into the <code>pom.xml</code> syntax and/or are just learning&#8230;</li>
</ul>
<p>Likewise, there is a whole bunch of features how to &#8220;import&#8221; maven2 projects into Eclipse, also (as I think) partly due to the fact that Eclipse, unlike NetBeans, can&#8217;t simply &#8220;open&#8221; a maven2 project simply using <code>pom.xml</code> as the only piece of relevant information but rather requiring its custom configuration files in the project structure to be happy. So, I tried to import and get started with my maven2 projects&#8230; So far, this is an SVN trunk consisting of about 55 mvn2 jar/war/pom artifacts, which I was about to check out and import into Eclipse. </p>
<p><strong>Second impressions</strong></p>
<p>And this prove to be fun, for sure. First shot, most straightforward, using &#8220;Import&#8221; -> &#8220;Maven&#8221; -> &#8220;Check out Maven2 projects from SCM&#8221;. Browsed to the repository trunk, let it check out all the project, and they&#8217;re here&#8230; and they&#8217;re all red? Well. It seemed that, with checking them out of SVN, Eclipse did for each project assume to enable project specific Java Compiler settings, thus forcing them to be Java 1.4 compliant each (and ignoring what&#8217;s stated in <code>pom.xml</code> explicitely). Fine. Resolving this was work no less than manually changing this setting for each of the projects in question. Following this, at least some of the projects didn&#8217;t have problems anymore. The whole mess built until I eventually trashed one of the project. Well, no problem &#8211; delete it, check it out again &#8211; and see the main project failing to build?</p>
<p>It took a few moments to resolve what happened: My main project is a maven2 pom project containing modules like this:</p>
<p><code><br />
  &lt;modules&gt;<br />
     &lt;module&gt;../moduleA&lt;/module&gt;<br />
     &lt;module&gt;../moduleB&lt;/module&gt;<br />
     &lt;module&gt;../moduleC&lt;/module&gt;<br />
  &lt;/modules&gt;<br />
</code></p>
<p>and is referring to modules living in the same folder on the same level as this core / build pom. However, Eclipse maven2 tooling did check out all the projects initially to a folder like <code>workspace/maven.1259135232603</code>, thus having them all in one place. Deleting the project (not much of a surprise) removed it from this folder. Checking it out again, however, created a new folder in workspace (<code>workspace/maven.1259151842736</code>) and checked the project out to there. Well&#8230; I have no real understanding why this happens, and so I wouldn&#8217;t want to say it simply dumb, but at the very least in this situation it&#8217;s a behaviour highly undesirable, and I really would want to at least be capable of having this configurable. Yet, so far I fail doing so. Did, however, commit the changed projects to at least hope to have the Eclipse metadata relating to the Java Compiler settings stored along with the project.</p>
<p>Anyway, so let&#8217;s test another stragety: Eclipse also allows for importing existing maven2 projects, which basically just does create project related metadata in the workspace but keeps the project code wherever it is. So, manually checked out the SVN trunk to some arbitrary folder, used Eclipse to import things, saw my projects, did the same settings as above (setting Java Compiler to not be project specific&#8230; &#8211; so obviously they are kept elsewhere but in the actual project itself), built. Worked. Tried to commit the projects to SVN &#8211; to see that, this way, even though there are <code>.svn</code> metainformation in any of these project folders, Eclipse fails to recognize these projects as &#8220;versioned&#8221; so the only thing to be found in &#8220;Team&#8221; menu is the usual standard (&#8220;share projects&#8221; / &#8220;apply patch&#8221;). No way of reconnecting, no way of committing. Of h***. :/ So back to the initial approach, let&#8217;s just hope we don&#8217;t have to delete and checkout any project anew&#8230;</p>
<p>A few hours later, I am frustrated beyond belief as many features one simply takes as granted in NetBeans don&#8217;t seem to work in Eclipse:</p>
<ul>
<li>Even though some of the maven2 artifacts are war applications, Eclipse WTP obviously fails recognizing this out of the box, i.e. without fiddling with the project metadata, so all the code in <code>src/main/webapp</code> is just available via generic folder browsing and there is no real meaningful webapp tooling available to these projects.</li>
<li>Classpath detection seems somewhat broken: In many situations, maven2 projects (and Java classes inside) are marked as broken because classes can&#8217;t be found, yet running a maven2 build on these projects works flawlessly and the project also has the required dependencies at hand.</li>
<li>In some situations, even though I am not sure who&#8217;s to blame for that, projects checked out of SVN were listed as &#8220;unversioned&#8221; in the project explorer, yet the SVN metadata were there and trying to share them ended in a reconnect (no surprise).</li>
<li>In another peculiar situation, the <code>pom.xml</code> editor kept me from deleting a dependency &#8211; no matter how often I tried to cut the corresponding &lt;dependency&gt; section &#8211; it always got back inserted into things. Resolved this by deleting and checking out the project again, see above.</li>
<li>Having some projects that generate code off WSDL (JAX-WS) or XSD (JAXB) using corresponding maven2 plugins, it seems even though after adding the folder where the generated sources ended to the list of project source folders in Eclipse, the IDE seemed unable to actually find the generated classes on the classpath.</li>
<li>There seems to be a general problem in redundancy of Eclipse metadata vs. <code>pom.xml</code>, ending up in information (Java Compiler level, &#8220;Java Project Facet&#8221; level, &#8230;) being entered more than once where, actually, <code>pom.xml</code> itself should suffice&#8230; </li>
</ul>
<p>So here I am&#8230; my maven2 projects all in Eclipse, a bunch of them marked red, the whole mess building regardless of this but (obviously) code editing being somewhat difficult with not all classes correctly found on the classpath, and I know things feel somewhat non-deterministic. Maybe I have not completely understood how m2eclipse does a bunch of things. Maybe I&#8217;ll take a dive deeper to learn more about how it works, later&#8230; but now, and first off, I need to get work done, and by now I know the dissatisfactions arising from using two different IDEs are easier to address than the various troubles and issues arising from importing a complex maven2 project structure into Eclipse. Agreed, maybe most of my project structure could be set up more straightforward and &#8220;better&#8221;&#8230; but it works flawless in maven2 (which is at the core of it), and it works flawless in NetBeans maven2 tooling (which is on top of it), so it can&#8217;t be all that bad. And, in maven2, I just don&#8217;t want any more essential information (like Java Compiler version, &#8230;) placed anywhere but in the <code>pom.xml</code>, no matter which IDE in use&#8230; I&#8217;m off now to get all these <code>.project</code> files out of my SVN trunk&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://dm.zimmer428.net/2009/11/eclipsemaven2-still-a-rough-ride/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>stunned: CentOS 5.3 VNC installation</title>
		<link>http://dm.zimmer428.net/2009/10/stunned-centos-5-3-vnc-installation/</link>
		<comments>http://dm.zimmer428.net/2009/10/stunned-centos-5-3-vnc-installation/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 06:03:25 +0000</pubDate>
		<dc:creator>kr</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://dm.zimmer428.net/?p=531</guid>
		<description><![CDATA[Having been a merry Ubuntu GNU/Linux user for a couple of years now and, lately, kind of &#8220;flirting&#8221; with OpenSolaris for some reasons, these days once again I experienced what I like about technology, once in a while &#8211; the feeling of simply being stunned by the presence of a feature which might be obvious [...]]]></description>
			<content:encoded><![CDATA[<p>Having been a merry <a href="http://www.ubuntu.com">Ubuntu GNU/Linux</a> user for a couple of years now and, lately, kind of &#8220;flirting&#8221; with <a href="http://www.opensolaris.org">OpenSolaris</a> for some reasons, these days once again I experienced what I like about technology, once in a while &#8211; the feeling of simply being stunned by the presence of a feature which might be obvious yet maybe not obvious enough to see wide-spread adoption: About to set up a server based upon the <a href="http://www.centos.org">CentOS 5.3</a> GNU/Linux operating system (which, basically, is a &#8220;community rebuild&#8221; of <a href="http://www.redhat.com">RedHat Enterprise Linux</a>), I fired up the network boot CD (dang, these old IBM xSeries machines didn&#8217;t yet come with a DVD drive&#8230;), chose to do the &#8220;text based installation&#8221; (as I usually dislike GUI based operating system installers and try avoiding them as good as somehow possible), made my way through configuring the base system, networking and mirror access&#8230; to, then, be asked whether I might want to continue installation using the &#8220;graphical installer&#8221; via <a href="http://en.wikipedia.org/wiki/Virtual_Network_Computing">VNC</a>.</p>
<p>VNC? Well, why not&#8230; Accepted this, so it just took a couple of seconds until the installer provided me with the IP address and port of the VNC server running on this host, and, back to my notebook, connecting there I indeed was capable of performing the server installation completely from the comfortable environment of my office rather than standing in front of the machine in the loud and cold server room. So&#8230; I have to admit that this has somehow changed my mind about &#8220;GUI based installers&#8221;, and this definitely is a &#8216;killer feature&#8217; from my point of view. Hope other distributions to come up with something like this (maybe an installer via <code>ssh</code>?) sooner or later, as well&#8230; ever even thought about doing a Windows Server System remote installation via RDP? Wonder whether this even would be possible&#8230; ;)</p>
<p>Some evidence screenshots, just because: Network and disk configuration using CentOS VNC installer. Pretty neat. :)</p>

<a href='http://dm.zimmer428.net/2009/10/stunned-centos-5-3-vnc-installation/centos-vnc-2/' title='centos-vnc-2'><img width="150" height="150" src="http://dm.zimmer428.net/wp-content/uploads/2009/10/centos-vnc-2-150x150.jpg" class="attachment-thumbnail" alt="" title="centos-vnc-2" /></a>
<a href='http://dm.zimmer428.net/2009/10/stunned-centos-5-3-vnc-installation/centos-vnc-1/' title='centos-vnc-1'><img width="150" height="150" src="http://dm.zimmer428.net/wp-content/uploads/2009/10/centos-vnc-1-150x150.jpg" class="attachment-thumbnail" alt="" title="centos-vnc-1" /></a>

]]></content:encoded>
			<wfw:commentRss>http://dm.zimmer428.net/2009/10/stunned-centos-5-3-vnc-installation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cyrus imapd: shared folder hierarchy recovery</title>
		<link>http://dm.zimmer428.net/2009/07/cyrus-imapd-shared-folders-are-evil/</link>
		<comments>http://dm.zimmer428.net/2009/07/cyrus-imapd-shared-folders-are-evil/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 14:10:10 +0000</pubDate>
		<dc:creator>kr</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[cyrus]]></category>
		<category><![CDATA[mc]]></category>
		<category><![CDATA[recovery]]></category>

		<guid isPermaLink="false">http://dm.zimmer428.net/?p=509</guid>
		<description><![CDATA[Fought a half-day fight battling with our local Cyrus IMAPd installment. And talking complexity again: We&#8217;re using right this mail server implementation because it provides extensive support for shared folders and per-folder access control lists allowing for pretty fine-grained, well, control of user access to shared mail folders. ACLs indeed do add complexity to that, [...]]]></description>
			<content:encoded><![CDATA[<p>Fought a half-day fight battling with our local <a href="http://cyrusimap.web.cmu.edu/">Cyrus IMAPd</a> installment. And talking complexity again: We&#8217;re using right this mail server implementation because it provides extensive support for shared folders and <a href="http://www.oreilly.de/catalog/mimap/chapter/ch09.html">per-folder access control lists</a> allowing for pretty fine-grained, well, control of user access to shared mail folders. ACLs indeed <em>do</em> add complexity to that, however, and this is what, in the end, seems to have enabled one of our internal user to move part of our IMAP folder tree to her personal <code>Trash</code> folder. Gone?</p>
<p>Fortunately not, given the <a href="http://www.mozillamessaging.com/en-US/">Mozilla Thunderbird</a> client involved here did just move things there and mark them as &#8216;deleted&#8217; but not actually expunge them. Copying things manually out using a shell or some other file manager was pretty easy, and figuring out what <a href="http://www.oreilly.de/catalog/mimap/chapter/ch09.html#89986">(cyr)reconstruct</a> is supposed to do also wasn&#8217;t a job that though&#8230; to overally end up with most of the folders restored but most of them empty?!</p>
<p>Googling around and looking deeper into things, however, quickly did resolve this issue as well: Cyrus uses to store all its stuff in <code>/var/spool/cyrus/mail/</code>, sorted in a more or less straightforward hierarchy. And this is where my problem finally resolved:</p>
<ul>
<li>Mailbox <code>Storage</code> lives in <code>/var/spool/cyrus/mail/s/Storage</code>. So far, so good.</li>
<li>Mailbox <code>Storage.Contacts</code>, however, lives in <code>/var/spool/cyrus/mail/<b>c</b>/Storage/Contacts</code>&#8230; which I missed paying attention to, in this situation.</li>
<li>After having the mess moved to Trash manually, all the hierarchy was stored in <code>/var/spool/cyrus/i/user/involvedUser/Trash/</code>, including all subfolders. So just copying it back to its most obvious place (<code>.../mail/s/Storage</code>) didn&#8217;t work out as expected&#8230;</li>
</ul>
<p>So after another examine-and-move session (copying all the folders starting with &#8220;A&#8221; from the deleted storage hierarchy to <code>/var/spool/cyrus/mail/a/Storage/</code>, all the &#8220;B&#8221; folders to <code>/var/spool/cyrus/mail/b/Storage/</code> and so forth and finally running a <code>cyrreconstruct -rfx Storage.*</code>, both the hierarchy <em>and</em> the mail folder content seem to be back. And I am pondering a more sane mechanism of backing these things up&#8230; at the moment, without a good file manager I surely would have been doomed, so looking back at this match: Cyrus 0, <a href="http://en.wikipedia.org/wiki/Midnight_Commander">gnu mc</a> 1. Been there, done that. :)</p>
]]></content:encoded>
			<wfw:commentRss>http://dm.zimmer428.net/2009/07/cyrus-imapd-shared-folders-are-evil/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>jvisualvm: analyzing NetBeans and beyond&#8230;</title>
		<link>http://dm.zimmer428.net/2009/04/jvisualvm-analyzing-netbeans-and-beyond/</link>
		<comments>http://dm.zimmer428.net/2009/04/jvisualvm-analyzing-netbeans-and-beyond/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 06:39:27 +0000</pubDate>
		<dc:creator>kr</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://dm.zimmer428.net/index.php/archives/452</guid>
		<description><![CDATA[As I am usually doing day-to-day work using daily builds of the NetBeans IDE, then and now I happen to run into, let&#8217;s say, peculiar situations in which figuring out what actually happens is pretty difficult. My very special friend #162706 is one of these cases &#8211; the IDE just seems busy for quite a [...]]]></description>
			<content:encoded><![CDATA[<p>As I am usually doing day-to-day work using <a href="http://bits.netbeans.org/download/trunk/nightly/latest/zip/">daily builds of the NetBeans IDE</a>, then and now I happen to run into, let&#8217;s say, peculiar situations in which figuring out what actually happens is pretty difficult. My <a href="http://www.netbeans.org/issues/show_bug.cgi?id=162706">very special friend #162706</a> is one of these cases &#8211; the IDE just seems busy for quite a while without obvious reasons, and you&#8217;re not really sure whether there still is something goin&#8217; on worth waiting for it to come to an end&#8230;</p>
<p>After more or less loosely following <a href="http://blogs.sun.com/geertjan/">Geertjans blog</a> I rather early found out about the <a href="https://visualvm.dev.java.net/download.html">jvisualvm tool</a> that comes with recent versions of Sun JDK 6, but so far I haven&#8217;t really seen any use cases for it in my environment. However, at the very least now I have figured out that this is rather good a solution for tracking down weird NetBeans behaviour by providing more reliable information, i.e. thread dumps. And there&#8217;s even more&#8230;</p>
<p><span id="more-452"></span></p>
<p><strong>Dealing with NetBeans&#8230;</strong><br />
Indeed, my first obvious idea was trying to figure out what&#8217;s goin&#8217; on inside a running NetBeans environment. Doing thread dumps is also possible in other ways, but at least the jvisualvm approach is pretty straightforward. On Unix systems, <code>jvisualvm</code> is found in the same place your <code>java</code> binary lives, so if you&#8217;re capable of running <code>java -version</code> from within a terminal, you&#8217;ll also be capable of running <code>jvisualvm</code> from there.</p>
<p><code><br />
<strong>[kr@n428 7:56:18] ~> java -version</strong><br />
java version "1.6.0_13"<br />
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)<br />
Java HotSpot(TM) Server VM (build 11.3-b02, mixed mode)<br />
<strong>[kr@n428 7:56:23] ~> which jvisualvm</strong><br />
/home/kr/kontext/runtime/linux/java/bin/jvisualvm<br />
<strong>[kr@n428 7:56:26] ~> which java</strong><br />
/home/kr/kontext/runtime/linux/java/bin/java<br />
</code></p>
<p>Once you started the application simply using the <code>jvisualvm</code> command, you&#8217;ll end up with a main application screen like this:</p>
<p><a href='http://dm.zimmer428.net/wp-content/uploads/2009/04/jvisualvm-01-main.jpg' title='jvisualvm-01-main.jpg'><img src='http://dm.zimmer428.net/wp-content/uploads/2009/04/jvisualvm-01-main.thumbnail.jpg' alt='jvisualvm-01-main.jpg' /></a></p>
<p>If you are a NetBeans user, the user interface pretty quickly will look familiar to you as jvisualvm basically &#8220;just&#8221; is an application based upon <a href="http://platform.netbeans.org/">NetBeans RCP</a>. Asides this, you will see an &#8220;Applications&#8221; window. In my case, the NetBeans I want to debug being already running, I can see the NetBeans process (pid 4974, in this example) below the &#8220;Local&#8221; node, so by now I am ready to get going:</p>
<p><img src='http://dm.zimmer428.net/wp-content/uploads/2009/04/jvisualvm-02-appselection.jpg' alt='jvisualvm-02-appselection.jpg' /></p>
<p>Double-clicking the &#8220;NetBeans 6.7&#8243; icon in &#8220;Local&#8221; will make jvisualvm connect to this process which might take some time but in the end provide me with a brief diagnostics overview showing basic information about the NetBeans process and its environment:</p>
<p><img src='http://dm.zimmer428.net/wp-content/uploads/2009/04/jvisualvm-03-attached.jpg' alt='jvisualvm-03-attached.jpg' /></p>
<p>Right now, you have quite an amount of helpful tools at hand trying to figure out where your problem is, like doing CPU or memory profiling (analogous to the feature set already offered in NetBeans for developing Java applications), analyzing memory consumption and garbage collection, and, as desired in my situation, looking at threads and doing a thread dump. For that, the &#8220;Threads&#8221; window is what you want:</p>
<p><img src='http://dm.zimmer428.net/wp-content/uploads/2009/04/jvisualvm-04-threads.jpg' alt='jvisualvm-04-threads.jpg' /></p>
<p>By now, there&#8217;s a button labeled &#8220;Thread dump&#8221; (the same can be achieved by right-clicking the application in the &#8220;Applications&#8221; window and choosing &#8220;Thread dump&#8221; from the context menu). Doing so will result in, obviously, jvisualvm generating a thread dump for the running application. As soon as this is finished, it both will appear opened in a new editor on the right side of the window and, as a child node below the application (NetBeans, in my case) in the &#8220;Applications&#8221; window:</p>
<p><img src='http://dm.zimmer428.net/wp-content/uploads/2009/04/jvisualvm-05-dump.jpg' alt='jvisualvm-05-dump.jpg' /></p>
<p>By now, you can merrily browse through the dump and see what might be flaky in your current situation. Another good option, if required: In case you are about to file an <a href="http://www.netbeans.org/issues">issue against NetBeans</a> regarding this behaviour and/or want to attach yourself to an existing issue, you might want to add this thread dump simply to provide developers with additional information to track down the problem. To do so, right-click the &#8220;[threaddump]&#8230;&#8221; node in the &#8220;Applications&#8221; window, choose &#8220;Save as&#8230;&#8221; and enter an appropriate name. This will result in generating a plain text file ending in &#8220;.tdump&#8221; containing the full thread dump as displayed in the jvisualvm window. This file, by then, might be attached to an issue filed against any application you&#8217;re likely to debug, or it might be sent to your application developer helping them getting your tool improved. The same procedure can be used i.e. for generating heap dumps or application snapshots, which all in itself is rather valuable while knee-deep into debugging work.</p>
<p><strong>&#8230;and beyond.</strong></p>
<p>So far, we&#8217;ve been looking at a Java application running on the same host jvisualvm runs on. While this is fine for desktop and overall development debugging, in a real-world environment your applications might run on some sort of application server, Glassfish in our case. Fortunately, jvisualvm also allows for working with remote applications i.e. making use of JMX. <a href="http://weblogs.java.net/blog/kalali/archive/2009/03/monitoring_glas.html">Masoud Kalali has written a quick guide on how to set up jvisualvm to work with Glassfish</a> and, after goin&#8217; through this procedure, indeed I am capable of doing more or less the same I previously did dealing with a local application now interacting with my remote production Glassfish:</p>
<p><img src='http://dm.zimmer428.net/wp-content/uploads/2009/04/jvisualvm-06-remote.jpg' alt='jvisualvm-06-remote.jpg' /></p>
<p>So, overall conclusions and hints:</p>
<ul>
<li>If you ever filed an issue against NetBeans, eventually were asked to attach a thread or heap dump and have absolutely no clue how to do so, jvisualvm is a very helpful friend helping you getting this done.</li>
<li>I like the chance of doing application debugging, but the capabilities in dealing with remote servers surely will make jvisualvm a tool I do not want to miss in my everyday tool box.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://dm.zimmer428.net/2009/04/jvisualvm-analyzing-netbeans-and-beyond/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>small-time SOA: lessons learnt so far&#8230;</title>
		<link>http://dm.zimmer428.net/2009/03/small-time-soa-lessons-learnt-so-far/</link>
		<comments>http://dm.zimmer428.net/2009/03/small-time-soa-lessons-learnt-so-far/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 21:17:42 +0000</pubDate>
		<dc:creator>kr</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[thoughts]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://dm.zimmer428.net/index.php/archives/447</guid>
		<description><![CDATA[Some time ago, in the midst of migrating at least parts of our application from an all-integrated proprietary monolith to a more &#8220;open&#8221; approach, we quickly came to embracing at least parts of the SOA architectural model to do so, as, these days, it just seemed to fit. Now, few years later, it seems we [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago, in the midst of migrating at least parts of our application from an all-integrated proprietary monolith to a more &#8220;open&#8221; approach, we quickly came to embracing at least parts of the <a href="http://en.wikipedia.org/wiki/Service-oriented_architecture">SOA architectural model</a> to do so, as, these days, it just seemed to fit. Now, few years later, it seems we already learnt something from that, a few things, to be accurate, which I want to share here for the sake of it &#8211; maybe they will provide a good subject of discussion or eventually also help others gain insights into that matter&#8230;</p>
<p><span id="more-447"></span></p>
<p><strong>Lesson #1: Reconsider why you actually wanted to go for services&#8230;</strong></p>
<p>Well&#8230; it might sound obvious, but personally I learnt that, actually, it isn&#8217;t. We used to get started with two different applications, both based upon Java EE web tier and <a href="http://www.springframework.org">Spring</a>, implementing the notion of a &#8220;backend&#8221; to provide data access and a &#8220;frontend&#8221; to provide user interaction with these data, with just a small layer of business logic mixed into both of them (complexity of this application was pretty much limited initially). A lot of this &#8220;frontend/backend&#8221; separation, these days, arose out of the requirement to have the data access &#8220;hidden&#8221; somewhere in a well-protected, restricted environment whereas the environment available to end users needed to be publicly available. The backend system offering services to the frontend system (actually stateless beans exposed via Spring remoting) was our first take on SOA and, so, actually born out of the demand to have a distributed application (in terms of being distributed across several machines mainly for administrative reasons).</p>
<p>It changed. While our initial environment was running on several <a href="http://tomcat.apache.org">Apache Tomcat</a> servers, we got away from that pretty soon, as it showed that the administrative effort caused by maintaining a couple of servlet containers, partly in cluster configuration, for front- and backend communicating with each other by far exceed the benefit gained from this structural approach. So, the next logical step was to &#8220;consolidate&#8221; this environment, which we simply did by moving all the stuff to one big (<a href="http://glassfish.dev.java.net">glassfishv2</a>) Java EE application server in a clustered operation mode fronted by a fast web proxy restricting external user access. Our application, by then, still had this &#8220;frontend/backend&#8221; structure and also did still use the kind of remoting involved here (at this time mainly based upon <a href="http://hessian.caucho.com/">Hessian</a> web services) but not distributed anymore but on the same machine and in the same application server. So, the original reason to go for the system structure we chose had disappeared all of a sudden&#8230; and, adding to that, we realized that by now our requirements were somewhat different, even though we kind of &#8220;expected&#8221; our application structure to be up to this: We wanted parts of our application to be maintainable / redeployable independent upon each other as far as possible, so ideally being capable of deploying a new version of part of our system without having the whole application taken off-line or affected by this. </p>
<p>It prove that, overally, our architecture was not up for that requirement: Though we were capable of deploying &#8220;frontend&#8221; and &#8220;backend&#8221; separately, deploying &#8220;backend&#8221; (and, subsequently, having it offline for a couple of moments) involuntarily would cause &#8220;frontend&#8221; to fail simply because most of the functionality it required wasn&#8217;t around. Worse than that, we figured out that &#8220;backend&#8221; actually had grown to provide a lot of different service components that generally would do rather well on their own but, right now, just were to be separated with quite some effort because sharing a lot of common code. Bottom line, resolving this issue, was completely restructuring the whole &#8220;backend&#8221; module, extracting several services to modules of their own, extracting common code to shared libraries or other services, without breaking the overall structure, some glue code included. Which immediately gets me to&#8230;</p>
<p><strong>Lesson #2: Careful with hierarchies of interdependent services!</strong></p>
<p>I think this is a point where your mileage basically might vary, depending upon why you want to go for a service-oriented approach. In an environment like ours however, having the ability of maintaining services seperately without affecting the system as a whole all too much, services depending upon each other all too much tend to successfully break things in worst case. In our scenario in example, initially we were tempted to restructure &#8220;backend&#8221; by ripping out most of the common code and putting it to a &#8220;generic&#8221; database access service pulling data off tables (we can&#8217;t make meaningful use of an O/R mapper in our structure so this is the most comfortable way to do database access) and making all other services providing access to &#8220;special&#8221; kinds of data use this &#8220;databaseAccessService&#8221;. </p>
<p>Well&#8230; it didn&#8217;t take a prototype, just a second look to see this is not a good idea: Having this kind of structure immediately would make the &#8220;databaseAccessService&#8221; module the one not to be maintainable / redeployable easily without shutting most of the rest of the system down (most of what the system does is actually database access work). It wouldn&#8217;t lock all the system so generally this would have been an improvement compared to the global &#8220;backend&#8221; after all, but still it was bad enough not to use it. So, shared code again: Instead of building a custom &#8220;databaseAccessService&#8221; most of the shared code to deal with the database backend was extracted to a .jar project and used to create a bunch of specialized data access services providing access to special kinds of data, yet raising another caveat which is interesting in my opinion:</p>
<p><strong>Lesson #3: Actually <em>keep</em> thinking on a service level throughout the project.</strong></p>
<p>So, we do have these shiny new services, all featuring well-defined, (hopefully) well-documented interfaces to access them, along with (if required &#8211; EJB or Spring remoting) client stub libraries required to interact with them. And, along with this, we do have the service implementation code available in the same workspace / project group (as we&#8217;re using NetBeans for this kind of work)&#8230; so, while creating a new service module from scratch, one is always tempted to &#8220;directly&#8221; integrate, configure, use functionality and classes usually exposed in another service rather than using / developing against the services external interface. Asides contracts and conventions, I haven&#8217;t yet found a more convenient way of working against this than just creating a project structure which tries to make this approach difficult, but it&#8217;s not yet that convenient. </p>
<p><strong>Lesson #4: Reduce the amount of shared code.</strong></p>
<p>In some ways, this is a different facet of #3 in my opinion, looking at it from a different point of view and outlining other problems: Sure, library code shared between services might be a good thing while solving the same issues (generic frameworks come to mind), but asides the issue of not thinking on the service level anymore, in my opinion there is another pain arising from that: As soon as library or framework code written to be used in one service will be re-used to implement another one, chances are good to, while tweaking the framework in some aspects to better suit the needs of one service using it, make any other service depending upon the same code cease working in strange ways when being redeployed simply because, even if your API didn&#8217;t change, maybe a small yet important aspect of this shared code changed in a small way without <em>all</em> services depending upon this code being modified to know about (and honour) these changes. Simply put: Loads of shared code seem likely to make your everyday development life incredibly more difficult because, once you do changes in shared code, you&#8217;ll have to ensure all services to cleanly work with those as well sooner or later (or you utilize different SVN branches or different versions of maven2 artifacts which, however, still doesn&#8217;t eliminate but just postpone the problem of dealing with this).</p>
<p><strong>Lesson #5: Try keeping extensibility at a sane level.</strong></p>
<p>While working in a semi-agile process, starting with a small set of specified requirements, trying to get them worked out to a more fine-grained state following several iterations and prototypes, I have seen (or, better: followed) two different approaches: </p>
<p>The first, &#8220;dirty&#8221; one is a quick &#8220;front-to-back hack&#8221; of what is intended to happen: Starting with the user interface (after all, that&#8217;s the only part of the application the customer is likely to see&#8230;), introduce the functionality demanded / requested, and then hack up any services around to provide data needed to make this functionality work (which includes both external service interface, service implementation and anything &#8220;beyond&#8221; this). Do so carefully, try not to break the service interface defined so far, and try as well to keep a given semantic view on the interface throughout all the functionality added. The other one, seeming more &#8220;clean&#8221; at first sight, is trying to keep things as &#8220;generic&#8221; and extensible as possible, trying to predict any modification or requirement likely to appear in advance. This includes building &#8220;generic&#8221; service interfaces providing &#8220;generic&#8221; data, along with eventually introducing vast loads of (redundant?) transformation logic in order to get actual &#8220;non-generic&#8221; data off the service and ready to work with. </p>
<p>To me, both ways seem diametral and exactly opposite. The first one has proven to end up in, indeed, &#8220;hacked-up&#8221; code which is hard to refactor and hard to get straight simply because, in worst case, we did end up with a whole bunch of different views on the same service, with completely different understandings of what the service should be doing. The second one, however, ended up in the service actually doing nothing except for passing data around, which would render the service itself useless and again move most of the &#8220;essential&#8221; code to some processing layer inside, say, the user interface or frontend. Probably it&#8217;s a matter indeed of finding a balance between the two approaches&#8230;</p>
<p><strong>Conclusions</strong></p>
<p>Finding to an end on that: We learnt that, using a service-oriented approach, there are good chances of cleaning up a &#8220;grown&#8221;, heterogenous software infrastructure in a way pretty good in terms of modularization, independency of components, reuse of shared functions and so on. We also learnt, however, that there are indeed some more or less obvious pitfalls to take care of, and that some of the benefit provided by this kind of approach might on the long run be compensated by additional complexity arising from other unique aspects of the service-oriented way of doing things (like administering a bunch of loosely coupled services to actually <em>make up</em> the system they are intended to make up, in the end). Was it worth it? From a short term point of view &#8211; definitely yes, and be that just for the sake of having clarity in some of the points listed here. From a long term point of view&#8230; we still will have to learn, I guess. :) So, other experiences, thoughts, ideas on that welcome&#8230; </p>
]]></content:encoded>
			<wfw:commentRss>http://dm.zimmer428.net/2009/03/small-time-soa-lessons-learnt-so-far/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Dafür zahl ich nicht!&#8221;</title>
		<link>http://dm.zimmer428.net/2009/03/dafur-zahl-ich-nicht/</link>
		<comments>http://dm.zimmer428.net/2009/03/dafur-zahl-ich-nicht/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 08:45:14 +0000</pubDate>
		<dc:creator>kr</dc:creator>
				<category><![CDATA[german]]></category>
		<category><![CDATA[linkdump]]></category>
		<category><![CDATA[misc]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://dm.zimmer428.net/index.php/archives/443</guid>
		<description><![CDATA[An sich bin ich bekennender Unterstützer der Idee öffentlich-rechtlichen Rundfunkes, weil ich der Meinung bin, daß auch in der Welt von Radio und Fernsehen, die ja als Medium immer noch vorrangig die Masse der Menschen erreicht, neben dem allgegenwärtigen geisttötenden Schwachsinn zumindest im Hinblick auf Nachrichten noch ein Gegenpol existieren sollte, der Ansprüchen wie Seriösität, [...]]]></description>
			<content:encoded><![CDATA[<p>An sich bin ich bekennender Unterstützer der Idee öffentlich-rechtlichen Rundfunkes, weil ich der Meinung bin, daß auch in der Welt von Radio und Fernsehen, die ja als Medium immer noch vorrangig die Masse der Menschen erreicht, neben dem allgegenwärtigen geisttötenden Schwachsinn zumindest im Hinblick auf Nachrichten noch ein Gegenpol existieren sollte, der Ansprüchen wie Seriösität, Objektivität oder Vollständigkeit genügt. Trotzdem bekomme ich im Hinblick auf <a href="http://www.mdr.de">etwa &#8216;mein Drittes&#8217;</a> regelmäßig Krämpfe, wenn ich mir vergegenwärtige, mit welchen Inhalten der zahlende Nutzer die ganze Woche über bisweilen konfrontiert wird. Insofern finde ich die aktuelle Initiative von <a href="http://fernsehkritik.tv/">fernsehkritik.tv</a> voll und ganz unterstützenswert &#8211; <a href="http://www.dafuer-zahl-ich-nicht.de/">Dafür Zahl&#8217; ich nicht!</a> Aus der <a href="http://www.dafuer-zahl-ich-nicht.de/info.html">Infoseite</a>:</p>
<blockquote><p>
FRÜHER klärten die Öffentlich-Rechtlichen die Jugendlichen auf und sorgten für deren politische Bildung. HEUTE setzen sie ihnen, genauso wie die Privaten, eine Daily Soap nach der anderen vor.</p>
<p>FRÜHER war die Samstagabendunterhaltung geprägt von kreativen Ideen und Köpfen wie Rudi Carrell und Kulenkampff, HEUTE gibt es Schunkelshows mit Silbereisen &#038; Co. sowie unkreative Frage-Shows, vorgelesen von Jörg Pilawa.</p>
<p>FRÜHER faszinierten ARD und ZDF mit tollen Tierdokus von Heinz Sielmann und anderen, HEUTE werden in Deutschlands Zoos Kameras aufgestellt und weltbewegende Bilder gezeigt, wie etwa ein Elefantenkäfig ausgemistet wird.<br />
[...]</p>
<p>Deshalb:</p>
<p>* Schluss mit jeglicher Werbung und jeglichem Sponsoring bei ARD und ZDF.</p>
<p>* Schluss mit Quotenmessungen bei ARD und ZDF – öffentlich-rechtliches Fernsehen darf sich nicht nach Einschaltquoten richten</p>
<p>* Schluss mit Krawalljournalismus, Daily Soaps und hirnlosen Heimatschnulzen. Jedes Programm von ARD und ZDF muss einem Mindestmaß an Anspruch unterliegen. Anspruchsloses Fernsehen bieten uns die Privaten genug – und zwar kostenlos.</p>
<p>* Schluss mit immer mehr kostspieligen digitalen Sonderkanälen, in die Kultursendungen und Dokumentationen abgedrängelt werden. Wir zahlen dafür, dass ARD und ZDF selbst ein tiefsinniges Programm bringen.<br />
[...]
</p></blockquote>
<p>Kann ich nur kommentarlos unterschreiben. Hoffentlich genug andere auch&#8230; Mehr hierzu auch <a href="http://www.heise.de/tp/r4/artikel/29/29827/1.html">bei telepolis.de</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dm.zimmer428.net/2009/03/dafur-zahl-ich-nicht/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
