<?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>Xebia Blog &#187; Middleware</title>
	<atom:link href="http://blog.xebia.com/category/middleware/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xebia.com</link>
	<description>Software development done right!</description>
	<lastBuildDate>Wed, 01 Feb 2012 00:30:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Why Application Release Automation needs a Release and an Operations view</title>
		<link>http://blog.xebia.com/2012/02/01/why-application-release-automation-needs-a-release-and-an-operations-view/</link>
		<comments>http://blog.xebia.com/2012/02/01/why-application-release-automation-needs-a-release-and-an-operations-view/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 00:30:00 +0000</pubDate>
		<dc:creator>Andrew Phillips</dc:creator>
				<category><![CDATA[Continuous Delivery]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Methodology]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Xebia Labs]]></category>
		<category><![CDATA[application release automation]]></category>
		<category><![CDATA[continuous delivery]]></category>
		<category><![CDATA[devops]]></category>

	<!-- AutoMeta Start -->
	<category>myapplication</category>
	<category>myapplication</category>
	<category>perspectives</category>
	<category>prod</category>
	<category>devops</category>
	<category>delivery</category>
	<category>owned</category>
	<category>pipeline</category>
	<category>myapplication</category>
	<category>myapplication</category>
	<category>perspectives</category>
	<category>prod</category>
	<category>devops</category>
	<category>delivery</category>
	<category>owned</category>
	<category>pipeline</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8559</guid>
		<description><![CDATA[As the interface between Development and Operations, Application Release Management1 handles information that is highly relevant to your Release and Operations teams. Selecting an Application Release Automation solution that provides insight and analytics from both perspectives is thus a key component of an effective DevOps strategy. Here, we explain how Deployit&#8216;s Infrastructure and new Release [...]]]></description>
			<content:encoded><![CDATA[<p>As the interface between Development and Operations, Application Release Management<sup>1</sup> handles information that is highly relevant to your Release and Operations teams. Selecting an Application Release Automation solution that provides insight and analytics from <em>both</em> perspectives is thus a key component of an effective DevOps strategy.</p>
<p>Here, we explain how <a href="http://www.xebialabs.com/tour" target="_new">Deployit</a>&#8216;s Infrastructure and new Release Overview features help you achieve this goal.<br />
<span id="more-8559"></span></p>
<h3>Continuous Delivery &#038; the Release Perspective</h3>
<p>In today&#8217;s highly competitive economic environment, the need to bring new features to market quickly, flexibly and reliably is paramount &#8211; a goal that is ultimately the aim of the main IT trends Cloud, Agile and DevOps.</p>
<p>Continuous Delivery &#8211; extending <a href="/2010/10/12/deployment-automation-vs-build-automation/" target="_new">Continuous Integration</a> to  automatically transition applications down the <em>Dev-Test-Acc-Prod</em> delivery pipeline &#8211; is a key component of this strategy. In order to be able to effectively implement this, your ARA solution needs to allow your developers &#8211; or, in larger organisations, release or DevOps teams, to quickly and efficiently answer questions such as:</p>
<ul>
<li><strong>How far is <em>MyApplication</em> down the road to Production?</strong></li>
<li><strong>When will <em>MyApplication</em> take the next step down the road?</strong></li>
<li><strong>What do I still need to do before that next step can be taken<sup>2</sup>?</strong></li>
</ul>
<p><img src="http://blog.xebialabs.com/wp-content/uploads/2012/01/two-perspectives-release1.png" alt="" title="two-perspectives-release" class="aligncenter size-full wp-image-8347" /></p>
<p>Ideally, this dashboard would also allow you to plan <em>MyApplication</em>&#8216;s next step and calculate the estimated go-live data, perhaps even based on an analysis of previews versions of <em>MyApplication</em>.</p>
<h3>(Virtual) Environment Management &#038; the Operations Perspective</h3>
<p>From an Operations point of view, an individual application is only a small part of the picture. Across your <em>Dev-Test-Acc-Prod</em> landscape, you will need to track <em>all</em> applications vying for these environments, to manage potentially conflicting resource requests, plan environment maintenance activities and the like.</p>
<p>Since these environments are often owned and managed by different teams and certainly have varying service levels, you will also want to limit your view to one or a subset of these environments at a time.</p>
<p>Your Operations or DevOps teams need to know:</p>
<ul>
<li><strong>Which application versions are currently deployed to my environment(s), or were deployed at a certain point in time?</strong></li>
<li><strong>Which components do these applications consist of? On which middleware and infrastructure systems are these components deployed?</strong></li>
<li><strong>What are the current values of any properties or settings for these components? Which environment-specific customizations have been applied?</strong></li>
</ul>
<p><img src="http://blog.xebialabs.com/wp-content/uploads/2012/01/two-perspectives-ops1.png" alt="" title="two-perspectives-release" class="aligncenter" /></p>
<p>Cloud and the on-demand environments it enables will eventually replace the rigid <em>Dev-Test-Acc-Prod</em> distinction<sup>3</sup>. Nevertheless, the ability to present an environment-centric view will still be required, since virtual environments will still be owned by different groups or teams. Indeed, such a perspective will be even <em>more</em> important if you want to effectively combat &#8220;virtual sprawl&#8221;.</p>
<p>While the coming generations of &#8220;true&#8221; cloud architectures will hopefully reduce the shared resource conflicts that greatly complicate much of today&#8217;s <em>Dev-Test-Acc-Prod</em> management, databases, legacy systems and external payment providers are not likely to disappear anytime soon.</p>
<p>In fact, Facebook, Twitter and other social elements of your future business services may even <em>increase</em> the number of shared resources you need to manage!</p>
<h3>Incorporating ARA Data in the Service Delivery Picture</h3>
<p>Whilst your ARA solution should be your &#8220;go-to&#8221; platform for answers about how your applications and environments relate, it is equally important to consider when this data might be more effectively embedded in a broader service delivery picture. </p>
<p>For example, your ARA platform is not a good candidate for providing a release calendar, since it is not aware of much of the information that is relevant in this context, such as CAB<sup>4</sup> meeting schedules, business sign-off dates or operational maintenance windows.</p>
<p>It is thus important to ensure that your ARA solution can make its data accessible via APIs such as RSS feeds, iCal calendars and other APIs, to enable effective integrations with the rest of your service delivery tooling.</p>
<h3>Conclusion</h3>
<p>The right Application Release Automation platform gives your Delivery and Operations teams fast, accurate insight into your application environments and delivery pipeline. </p>
<p>Choosing a solution like <a href="http://www.xebialabs.com/tour" target="_new">Deployit</a> with focused Operations and Delivery overviews as well as open APIs for easy integration into your overall Service Delivery dashboards and reports greatly enhances the accessibility and effectiveness of your application release management.</p>
<div style="background-color: #efeeea; border: 1px solid #AAAAAA; margin: 0.8em; padding: 0.4em; font-size: 85%;"><strong>Footnotes</strong></p>
<ol>
<li>a.k.a. <em>Deployment Automation</em> &#8211; choose your favourite <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li>For instance, certain blocking release conditions, such as test sign-off, may still need to be met.</li>
<li>and have long done so in many forward-looking organisations</li>
<li><a href="http://en.wikipedia.org/wiki/Change_Advisory_Board" target="_new"><strong>C</strong>hange <strong>A</strong>dvisory <strong>B</strong>oard</a></li>
</ol>
</div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2012/02/01/why-application-release-automation-needs-a-release-and-an-operations-view/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2012%2F02%2F01%2Fwhy-application-release-automation-needs-a-release-and-an-operations-view%2F&amp;title=Why%20Application%20Release%20Automation%20needs%20a%20Release%20%3Cem%3Eand%3C%2Fem%3E%20an%20Operations%20view" id="wpa2a_2"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2012/02/01/why-application-release-automation-needs-a-release-and-an-operations-view/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On cloud 3&#215;3</title>
		<link>http://blog.xebia.com/2011/12/29/on-cloud-3x3/</link>
		<comments>http://blog.xebia.com/2011/12/29/on-cloud-3x3/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 13:50:06 +0000</pubDate>
		<dc:creator>Adé Mochtar</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Virtualization]]></category>

	<!-- AutoMeta Start -->
	<category>paas</category>
	<category>cloudfoundry</category>
	<category>dropbox</category>
	<category>openstack</category>
	<category>iaas</category>
	<category>heroku</category>
	<category>jclouds</category>
	<category>openshift</category>
	<category>paas</category>
	<category>cloudfoundry</category>
	<category>dropbox</category>
	<category>openstack</category>
	<category>iaas</category>
	<category>heroku</category>
	<category>jclouds</category>
	<category>openshift</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8339</guid>
		<description><![CDATA[2011 has been an interesting year for cloud computing. Traditionally, cloud computing can be divided into three categories: Software-as-a-Service (SaaS) Platform-as-a-Service (PaaS) Infrastructure-as-a-Service (IaaS) While SaaS has been around for some time (Salesforce.com started in 1999!), we are seeing an increase in adoption of IaaS and some heavy development in the PaaS world. Now that [...]]]></description>
			<content:encoded><![CDATA[<p>2011 has been an interesting year for cloud computing. Traditionally, cloud computing can be divided into three categories:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Software_as_a_service" target="_blank">Software-as-a-Service</a> (SaaS)</li>
<li><a href="http://en.wikipedia.org/wiki/Platform_as_a_service" target="_blank">Platform-as-a-Service</a> (PaaS)</li>
<li><a href="http://en.wikipedia.org/wiki/Infrastructure_as_a_service" target="_blank">Infrastructure-as-a-Service</a> (IaaS)</li>
</ul>
<p>While SaaS has been around for some time (Salesforce.com started in 1999!), we are seeing an increase in adoption of IaaS and some heavy development in the PaaS world.</p>
<p>Now that 2011 is coming to an end, this is also the time for lists. So here are my 3 top 3’s of cloud computing.</p>
<p><span id="more-8339"></span><strong></strong></p>
<p><strong>Software-as-a-Service</strong></p>
<p><img class="size-medium wp-image-8344 alignright" style="border-style: initial; border-color: initial;" title="GitHub Social Coding" src="http://blog.xebia.com/wp-content/uploads/2011/12/github-social-300x145.png" alt="" width="300" height="145" align="right" />3. GitHub</p>
<p>Distributed version control systems are gaining track rapidly, with Git leading the way. <a title="GitHub" href="http://github.com/" target="_blank">GitHub</a> provides Git as a service, and offers unlimited repositories for open source software. It provides an excellent interface that stimulates social coding. This means it is a great incentive for open source development.</p>
<p>2. Dropbox</p>
<p>Well, who doesn’t use <a title="Dropbox" href="http://www.dropbox.com/" target="_blank">Dropbox</a>? Dropbox offers a filesharing service that is easy to use. There are two reasons for the success of Dropbox; it is easy to start with 2GB of free space, and it provides clients for almost all platforms.</p>
<p>1. Google Apps</p>
<p>Google is trying hard to get us all to work in the cloud, and their <a href="http://www.google.com/apps" target="_blank">Google Apps</a> service is their way to do so. They even have a free service for private use. Google Apps provides a full application suite including e-mail, calendar and docs. GMail is massively adopted and has been a game-changer since introduction in 2004.</p>
<p><strong>Infrastructure-as-a-Service</strong></p>
<p><strong></strong>3. OpenStack</p>
<p>When talking about IaaS, people immediately think about the Amazon AWS platform. But what if you don’t like their terms-of-service, or simply want to create something similar in your own data center? Enter <a href="http://www.openstack.org" target="_blank">OpenStack</a>. If there is one DIY IaaS framework that has momentum, it is OpenStack. It is backed by no less than <a href="http://openstack.org/community/companies/" target="_blank">144 companies</a>, and best of all, it’s open source.</p>
<p>2. jclouds</p>
<p>If all the IaaS frameworks and providers and all their different APIs are giving you an headache, <a href="http://www.jclouds.org/" target="_blank">jclouds</a> is the framework for you. The jclouds API provides an abstraction of the different cloud-specific implementations. Currently over 30 providers are supported, including all the usual suspects (Amazon AWS, OpenStack, Azure, etc).</p>
<p><img class="alignright size-medium wp-image-8345" style="border-style: initial; border-color: initial;" title="Amazon AWS Monkey" src="http://blog.xebia.com/wp-content/uploads/2011/12/AWS-monkey-300x225.jpg" alt="" width="200" height="150" align="right" />1. Amazon AWS</p>
<p>The undisputed number 1 of IaaS is of course <a href="http://aws.amazon.com/" target="_blank">Amazon AWS</a>. Ever since the introduction in 2002, Amazon AWS is the reference implementation for IaaS. It sets the standard and the rest of the IaaS providers are merely trying to catch up. Amazon also doesn’t sit still, it constantly adds new services to its platform (and is slowly growing into a PaaS). It is available around the globe, with data centers in almost every continent.</p>
<p><strong>Platform-as-a-Service</strong></p>
<p><strong></strong>3. Heroku</p>
<p><a href="http://www.heroku.com/" target="_blank">Heroku</a> is a fully hosted PaaS platform. It supports lots of languages, and it completely hides the infrastructure (servers, instances, etc) from your applications. It has a partnership with Facebook, creating the Heroku Facebook App Package, which enables quick development of Facebook apps. I think it is one of the best examples of a public PaaS.</p>
<p><img class="alignright size-medium wp-image-8347" title="cloud-foundry" src="http://blog.xebia.com/wp-content/uploads/2011/12/cloud-foundry-300x211.jpg" alt="" width="300" height="211" align="right" />2. CloudFoundry</p>
<p>CloudFoundry is being developed by VMware. After acquiring SpringSource back in 2009, this is the next logical step for them. CloudFoundy is positioned as the Open PaaS. While most PaaS solutions limit the choice of frameworks and infrastructure services, CloudFoundry tries to be open and extensible. And best of all, you can use the <a href="https://my.cloudfoundry.com/micro" target="_blank">micro edition</a> for development, the <a href="http://cloudfoundry.org/" target="_blank">private (open source) edition</a> in your own data center and the <a href="http://www.cloudfoundry.com/" target="_blank">hosted edition</a> as a public PaaS (or even a hybrid setup).</p>
<p>1. ???</p>
<p>We are seeing <a title="Ever growing list of PaaS" href="http://upon2020.com/2011/04/the-ever-growing-list-of-paas-companies-and-paas-projects/" target="_blank">lots of development</a> in this area with all different flavors of PaaS platforms and services. We have even built custom PaaS platforms for our customers based on the traditional application servers (JBoss, WebLogic, etc). But there is still lots of work to be done, before full stack solutions will be readily available. So, I think there is no number 1… yet.</p>
<p><strong>And beyond&#8230;</strong></p>
<p>2012 looks like it will be a good year for the cloud. I am very curious to see what the PaaS providers are going to bring to the table. Projects like <a href="https://openshift.redhat.com" target="_blank">OpenShift</a>, <a href="http://www.cloudfoundry.org" target="_blank">CloudFoundry</a> and <a href="http://wso2.com/cloud/stratos/" target="_blank">Stratos</a> are looking very promising, and I can’t wait to dive into them.</p>
<p>What are your top cloud services? Or which ones do you think that will become the next best thing? Feel free to add them to the comments below.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/12/29/on-cloud-3x3/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F12%2F29%2Fon-cloud-3x3%2F&amp;title=On%20cloud%203%26%23215%3B3" id="wpa2a_4"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/12/29/on-cloud-3x3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How to walk with spacewalk</title>
		<link>http://blog.xebia.com/2011/12/19/how-to-walk-with-spacewalk/</link>
		<comments>http://blog.xebia.com/2011/12/19/how-to-walk-with-spacewalk/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 02:20:16 +0000</pubDate>
		<dc:creator>Maarten Kennis</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Middleware]]></category>

	<!-- AutoMeta Start -->
	<category></category>
	<category></category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8234</guid>
		<description><![CDATA[Introduction One of the most common challenges of managing the configuration of servers in your typical DTAP environment is, in my opinion, keeping all the involved hosts at the same level of configuration in terms of installed operating system packages and their configuration files. It really can be a pain to keep all the systems [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.xebia.com/wp-content/uploads/2011/12/spacewalk-logo.png"/></p>
<h3>Introduction</h3>
<p>One of the most common challenges of managing the configuration of servers in your typical DTAP environment is, in my opinion, keeping all the involved hosts at the same level of configuration in terms of installed operating system packages and their configuration files. It really can be a pain to keep all the systems at the same configuration level. Faillure to do so can lead to interesting situations where software produced by the project team does not run or perform on the acceptance and/or production environment while it was running perfectly on the development and/or test servers.<br />
<span id="more-8234"></span><br />
Ofcourse, there is the possibility of creating one golden virtualized image and pass it around your DTAP environment. However, this can introduce serious issues. For example, when the company hosting your acceptance or production environment does not accept, for obvious reasons, an alien virtualized image to be installed on their precious server farm. By that time, the project has already been running for several months, the engineer who developed the golden virtualized images has left the project and the documentation turned out to be not sufficient to reproduce the golden image.</p>
<p>This is where a Linux systems management solution like Red Hat Satellite can help you out. Since you need a Red Hat subscription for Satellite, this article will discuss the open source alternative called Spacewalk. Spacewalk is an open source Linux systems management solution. It is the upstream community project from which the Red Hat Network Satellite product is derived. Spacewalk manages software content updates for Red Hat derived distributions such as Fedora, CentOS, and Scientific Linux.</p>
<p>With spacewalk you can deploy linux systems, over and over again and always the same way (using kickstart). Centrally manage the packages to be installed on a system and last but not least centrally manage configuration files for each deployed system.</p>
<h3>Sounds cool, i want this too!</h3>
<p>So, enough about the theory, how does this actually work? To demonstrate this, i have compiled the following cookbook. At the end of this cookbook you will have:</p>
<ul>
<li>A 64 bit CentOS 5.7 server running spacewalk 1.5</li>
<li>Deployed a base 64 bit CentOS 6.1 vm using spacewalk</li>
<li>Deployed packages on the deployed system using spacewalk</li>
<li>Deployed configuration files managed by spacewalk to the deployed server</li>
</ul>
<h4>Prerequisites</h4>
<ul>
<li>Create a vm with the following properties:</li>
<ul>
<li>1 cpu</li>
<li>1 GB of memory</li>
<li>Size of harddisk = 6 GB (excluding swap) + (number of distributions x 6 GB)</li>
<li>vm must have internet access during installation</li>
</ul>
<li>Make sure you have the following installation binaries available:</li>
<ul>
<li><a href="http://centos.org/" target="_blank">CentOS-5.7-x86_64-netinstall.iso</a></li>
<li><a href="http://oracle.com/technetwork/database/express-edition/downloads/" target="_blank">oracle-xe-11.2.0-1.0.x86_64.rpm</a></li>
<li><a href="http://oracle.com/technetwork/database/features/instant-client/" target="_blank">oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm</a></li>
<li><a href="http://oracle.com/technetwork/database/features/instant-client/" target="_blank">oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64.rpm</a></li>
</ul>
</ul>
<h3>Getting the VM up and running</h3>
<p>I prefer to keep things lean and mean. For this blogpost a minimal 64 bit CentOS 5.7 will be installed using the net-installer. The following walkthrough provides you with vm ready for spacewalk to be installed.</p>
<p>Start your empty vm booting from the attached CentOS net installer iso. During installation select the defaults or change it to whatever suits your environment for language and keyboard-type. The installation-method is, of course, http. tcp/ip configuration: whatever suits your local network needs for internet access.</p>
<p>Select a mirror service from <a title="the centos website" href="http://www.centos.org/modules/tinycontent/index.php?id=30" target="_blank">the CentOS website</a>.</p>
<p>Provide the web site name: my.fast.mirror.com<br />
CentOS directory: path/to/5.7/os/x86_64</p>
<p>Click next on the welcome screen, choose to do a fresh install of CentOS.</p>
<p>Partition your disk to suit your needs. <strong>Important note regarding partitioning</strong>: This blog article assumes some defaults, based on those defaults you should be aware that there are two locations which need sufficient disk space, you may want to keep this in mind while partitioning:</p>
<ul>
<li>/var/satellite (5GB per distro)</li>
<li>/u01/app/oracle/oradata/XE (1GB per distro)</li>
</ul>
<p>Network setup: configure as needed for your vm to fit in your network and to have internet connection.</p>
<p>Finalize the installation by selecting your timezone, entering your root password and unselecting all installation tasks including the default selected &#8220;Desktop – Gnome&#8221;. Let the installer do it&#8217;s job, once the system is rebooted you have a fresh base 64 bit centos 5.7 vm available.</p>
<h3>Preparing the system for Spacewalk</h3>
<p>Spacewalk uses a database for it&#8217;s back-end administration, this can be eighter a Oracle (XE) or PostgreSQL database. In this article we are going to use the Oracle 11g Express Edition (XE) database together with the Oracle 11g instant client. Transfer the rpm&#8217;s to your vm and install them (as user root) using the following commands:<br />
<code>yum install --nogpgcheck oracle-xe-11.2.0-1.0.x86_64.rpm<br />
yum install --nogpgcheck oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm<br />
yum install --nogpgcheck oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64.rpm</code><br />
After installation start configuration by:<br />
<code>/etc/init.d/oracle-xe configure</code><br />
After accepting the defaults (to avoid port conflicts later on in the article, it may be a good idea to specify an other http port then suggested by default. This article assumes you use port 8888), choosing passwords and specifing oracle-xe to start at boot you should have a running oracle XE available. This can be checked by executing the following command:<br />
<code>ps -ef | grep pmon</code><br />
which should be returning something like this:<br />
<code>[root@spacewalk ~]# ps -ef | grep pmon<br />
oracle    1763     1  0 16:21 ?        00:00:00 xe_pmon_XE<br />
root      3739  1957  0 16:56 pts/0    00:00:00 grep pmon<br />
[root@spacewalk ~]#</code><br />
Next step is to create a tablespace for spacewalk to store it&#8217;s data. Start by loading the Oracle XE environment settings (note the space between th &#8216;.&#8217; and &#8216;/&#8217;):<br />
<code>. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh</code><br />
Next, start an sqlplus session.<br />
<code>sqlplus sys as sysdba</code><br />
Create a tablespace as follows:<br />
<code>create bigfile tablespace spacewalk datafile '/u01/app/oracle/oradata/XE/spacewalk.dbf' size 1G autoextend on;</code><br />
Create a spacewalk database user and grant it the required privileges:<br />
<code>create user spacewalk identified by spacewalk default tablespace spacewalk;<br />
grant dba to spacewalk;</code><br />
Oracle XE comes with an apex based management console which can be reached at:<br />
<code>http://hostnameOfYourSpacewalkServer:8888/apex/f?p=4950</code><br />
Navigate your browser to the url mentioned above and check if management console shows up. For future reference: Oracle XE can be stopped or started using the following command:<br />
<code>service oracle-xe stop<br />
service oracle-xe start</code></p>
<h3>Install Spacewalk</h3>
<p>Finally we have arrived at the point where Spacewalk is going to be installed. As user root, perform the following commands to acquire the required repositories:<br />
<code>rpm -Uvh http://spacewalk.redhat.com/yum/1.5/RHEL/5/x86_64/spacewalk-repo-1.5-1.el5.noarch.rpm<br />
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm<br />
rpm -Uvh http://spacewalk.redhat.com/yum/1.5-client/RHEL/5/x86_64/spacewalk-client-repo-1.5-1.el5.noarch.rpm</code><br />
Next step is to actually install spacewalk (note: due to the speed of the spacewalk repo&#8217;s this step may take up to 30 minutes to complete).<br />
<code>yum install spacewalk-oracle</code><br />
Next, configure spacewalk by issuing the following command:<br />
<code>spacewalk-setup -disconnected</code><br />
After providing the setup program with the Oracle SID (XE), spacewalk db username en password the database is populated. Mostly the defaults can be accepted and/or obvious data can be provided during the rest of the setup program.</p>
<p>For future reference: Spacewalk can be started and stopped using the following commands:<br />
<code>/usr/sbin/spacewalk-service stop<br />
/usr/sbin/spacewalk-service start</code><br />
Check if the spacewalk server is up and running using the following url (note: you may get a certificate exception upon opening this page):<br />
<code>https://hostnameOfYourSpacewalkServer/</code><br />
The first time this url is selected the following screen appears allowing you to create an administrative user.</p>
<p><img title="spacewalk-opening-screen" src="http://blog.xebia.com/wp-content/uploads/2011/12/spacewalk-opening-screen.png" width="600"/></p>
<h3>Populate Spacewalk</h3>
<p>The goal is to deploy a new machine with an os, this means the obvious next step is to populate spacewalk with a Red Hat derived Linux distribution of your choice. In this article the 64 bit version of CentOS 6.1 is used.</p>
<p>First step is to mount the CentOS 6.1 iso&#8217;s somewhere on your spacewalk server. Make sure to get a full distro iso, this means that required directories like, for example, images/pxeboot do exist. A minimal or netinst iso of a distribution, in general, does not contain these directories. These directories are used later on in this article, most important at this stage is the content and location of the Packages directory of your distribution&#8217;s iso.</p>
<p>The packages which belong to a distribution are administered in Spacewalk as software channels, so we first have to create a software channel before we can add/upload packages to it.</p>
<p>Create a new software channel by opening the spacewalk console and navigate to:</p>
<p>&#8220;Channels&#8221; -&gt; &#8220;Manage Software Channels&#8221; -&gt; &#8220;Create New Channel&#8221;</p>
<p>Enter a reasonable channel name (this is for display only, this article uses: &#8220;CentOS 6.1 &#8211; 64 Bit&#8221;), a channel label (remember this name for later use, this article uses: &#8220;centos6.1-x86_64&#8243;) and select the correct architecture (x86_64).</p>
<p>Next step is to populate spacewalk with the CentOS packages, this proces is started by issuing the following command:</p>
<p><code>rhnpush -v --channel=centos6.1-x86_64 --server=http://localhost –dir=/path/to/Packages</code></p>
<p>where &#8220;/path/to/Packages&#8221; is the absolute path of the Packages directory of the mounted iso.</p>
<p>CentOS 6.1 consists of two dvd&#8217;s, execute above step for both dvd&#8217;s.</p>
<p>The rhnpush process uploads all packages and registers them in spacewalk. On average, rhnpush processes packages at a rate of around 2000 packages per 30 minutes (ofcourse depending on the configuration of your host and vm). CentOS 6.1 contains almost 6200 packages so, it will take around one and a half hour to upload all packages from dvd1 and dvd2 to spacewalk.</p>
<p>Since we want the deployed linux system to be able to connect to the spacewalk server and use it&#8217;s package and configuration management facilities it is recommended to include the spacewalk client packages in a spacewalk channel as well. In this article we will upload the packages directly from the online repository into a child channel of the just created CentOS channel.</p>
<p>In the spacewalk console navigate to:</p>
<p>&#8220;Channels&#8221; -> &#8220;Manage Software Channels&#8221; -> &#8220;Create New Channel&#8221;</p>
<p>Enter a reasonable channel name (this is for display only, this article uses: &#8220;Spacewalk Client 1.5 &#8211; el6 &#8211; 64 Bit&#8221;), a channel label (remember this name for later use, this article uses: &#8220;swclnt1.5-el6-x86_64&#8243;), the correct architecture (x86_64) <u>and the correct parent channel</u> (this article uses: &#8220;CentOS 6.1 &#8211; 64 Bit&#8221;).</p>
<p>Populating spacewalk with the spacewalk client packages directly from the online repository is started by issuing the following command:</p>
<p><code>spacewalk-repo-sync -c swclnt1.5-el6-x86_64 --url http://spacewalk.redhat.com/yum/1.5-client/RHEL/6/x86_64</code></p>
<p>The spacewalk client has a dependency on the python-hwdata-1.2-1.el6.noarch.rpm package from the epel repository. Download the python-hwdata-1.2-1.el6.noarch.rpm package from the epel repository ( http://download.fedora.redhat.com/pub/epel/6/x86_64/ ) and upload it to the spacewalk client child channel using the command (assuming you downloaded the rpm to a folder named epel):</p>
<p><code>rhnpush -v --channel=swclnt1.5-el6-x86_64 --server=http://localhost -dir=epel</code></p>
<h3>Create a distribution</h3>
<p>For automating the installation of a Linux system a method called <a href="http://en.wikipedia.org/wiki/Kickstart_%28Linux%29" target="_blank">kickstart</a> can be used. First, we have to setup a directory structure on the spacewalk server based on content of the CentOS dvd1 iso. From your CentOS 6.1 dvd1, copy the following directories:</p>
<ul>
<li>images</li>
<li>isolinux</li>
<li>repodata</li>
</ul>
<p>to:<br />
<code>/var/distro-trees/centos6.1-x86_64</code></p>
<p>Next, open the spacewalk console and navigate to the following location:</p>
<p>systems -> kickstart -> distributions -> new distribution</p>
<p>Enter the following parameters for the new distribution:</p>
<ul>
<li>Distribution label: centos6.1-x86_64</li>
<li>tree path: /var/distro-trees/centos6.1-x86_64</li>
<li>Base Channel: CentOS 6.1 &#8211; 64 Bit</li>
<li>Installer Generation: Red Hat Enterprise Linux 6</li>
</ul>
<p>Next step is to create a kickstart profile for the channel and distribution. Open the spacewalk console and navigate to the following location:</p>
<p>systems -> kickstart -> create new kickstart profile</p>
<p>Enter the following parameters for the new kickstart profile:</p>
<ul>
<li>Label: centos61-minimal
</li>
<li>Base channel: CentOS 6.1 &#8211; 64 Bit
</li>
<li>Kickstartable tree: centos6.1-x86_64
</li>
<li>Virtualization type: none
</li>
</ul>
<p>To make sure the spacewalk client repository is used during kickstart, navigate to the following location:</p>
<p>systems -> kickstart -> profiles -> centos61-minimal -> operating system</p>
<p>Make sure the child channel swclnt1.5-el6-x86_64 is checked.</p>
<p>Also, have a look at the other tabs to have an idea of the configuration options which are available. Possible interesting area&#8217;s are:</p>
<ul>
<li><b>Software</b>: Adding extra packages or package groups in addition to the base installation. Add the package just by adding it on a new line, package groups can be added by an @-sign followed by the group name. A package can be excluded by an hyphen (-) followed by the package name</li>
<li><b>Kickstart details -> Details -> Kernel options</b>: Adding and removing kernel options. You can add a kernel option, just by adding it&#8217;s key/value pair to the input field. Removal is done by just mentioning the kernel option preceded by an ! and giving it ~ as a value. For example, the value &#8220;!text=~ resolution=800&#215;600&#8243; in the kernel option box forces the use of the graphical installer (remove the text kernel option) and sets screen resolution to 800&#215;600.</li>
<li><b>Kickstart details -> Advanced options</b>: Allows detailed configuration of the kickstarted system. For example, to add an user,during installation, named weblogic with password weblogic01, tick the &#8220;user&#8221; checkbox and add the value &#8220;&#8211;name=weblogic &#8211;password=weblogic01 &#8211;plaintext&#8221; to the input field.</li>
<li><b>Kickstart details -> Variables</b>: the usage of variables can be done by adding a key/value pair and refer to it in another tab. For example (might be a bad example but it is just to demonstrate the usage), to define the hostname during kickstart, add a key/value pair (hostname=appsrvr1) in the variables tab and refer to it in the Advanced options by adding &#8220;&#8211;hostname $hostname&#8221; to the network text box.</li>
</ul>
<h3>Let&#8217;s cobbler</h3>
<p>Next step is to create an iso image to boot a new vm from. <b>Important note:</b> In the next couple of steps we are going to deploy a new linux virtual machine. If your virtualization network setup supports a dns where the spacewalk server can be found by it&#8217;s hostname you can skip the next step. In other words, your newly created vm must be able to find the spacewalk server using it&#8217;s hostname during boot/initial setup. If this is not the case or if you are unsure, please perform the following step to change the spacewalk hostname to it&#8217;s ip-address, if you are sure dns is in place you can skip this step:</p>
<p><code>In <b>/etc/rhn/rhn.conf</b> change the value of the parameter <b>cobbler.host</b> to the ip address of the spacewalk server.<br />
In <b>/etc/cobbler/settings</b> change the value of the parameters <b>server</b> and <b>redhat_management_server</b> to the ip-address of the spacewalk server.</code></p>
<p>On the spacewalk server, run the command (this only needs to be done once):</p>
<p><code>cobbler get-loaders</code></p>
<p>Next, start building the iso using the command:</p>
<p><code>cobbler buildiso</code></p>
<p>The result of the buildiso command is a file named <b>generated.iso</b> in the directory from where you issued the command.</p>
<h3>Let&#8217;s kickstart</h3>
<p>On your host, create a new virtual machine and provide it with the generated.iso file to boot from. Upon boot you will see a menu allowing you to specify the centos61-minimal setup to be installed.</p>
<p><img src="http://blog.xebia.com/wp-content/uploads/2011/12/iso-boot.png" width="600"/></p>
<p>Select this entry and the setup will install a base 64 bit CentOS 6.1 Linux system. If all goes well, this will happen completely automated, without any user intervention whatsoever. If, during install, you receive messages like &#8220;Error downloading kickstart file&#8221;, this probably means you have to look into dns issues as described earlier in the article.</p>
<p>Verify that the system registered itself in spacewalk, it should appear in the system tab on the main screen of the spacewalk web console.</p>
<h3>Configuring the client</h3>
<p>Now that we have installed a fresh 64 bit CentOS 6.1 Linux vm we have to configure it as a client for spacewalk. Open an ssh session to the newly deployed CentOS 6.1 vm and install the packages rhncfg-client and rhn-check using yum.<br />
<code>yum install -y --nogpgcheck rhncfg-client rhn-check</code></p>
<p>Managing the configuration of this newly created vm can be done in the following two ways:</p>
<ul>
<li>Deploy new packages to the client</li>
<li>Deploy (configuration) files to the client</li>
</ul>
<h4>Deploy new packages to the client</h4>
<p>To install a new package from the repository to the new server, go to the spacewalk web console and navigate to the following location:</p>
<p>system -> &#8220;your system&#8221; -> Software -> Packages -> Install </p>
<p>Select the required package from the repository (for example xauth) and click on &#8220;Install Selected Packages&#8221;</p>
<p>Next, select &#8220;Schedule action as soon as possible&#8221; at the confirmation screen and click on &#8220;Confirm&#8221;</p>
<p>Now, log on to the client and verify the software channels it is subscribed to by executing:</p>
<p><code>rhn-channel --list</code></p>
<p>Check if the channel where you made the pending change is in the list. Next, verify if the selected package is not installed yet by executing, on the client:</p>
<p><code>[root@appsrvr1 ~]# rpm -qa | grep -i xauth<br />
[root@appsrvr1 ~]#</code></p>
<p>If the package is not installed yet, apply the pending change (installation of the package) by executing:</p>
<p><code>rhn_check</code></p>
<p>The server will check for any pending actions (in this case installing the selected package) and execute (install the package) them. Now, check again to verify that the (xauth) package was installed by executing:</p>
<p><code>[root@appsrvr1 ~]# rpm -qa | grep -i xauth<br />
xorg-x11-xauth-1.0.2-7.1.el6.x86_64<br />
[root@appsrvr1 ~]#</code></p>
<h4>Deploy (configuration) files to the client</h4>
<p>In case of managing the configuration files of a linux system through spacewalk, this can be done through configuration channels.</p>
<p>First of all, create a new configuration channel. Open the spacewalk web console and navigate to the following location:</p>
<p>Configuration -> Configuration channels -> create new config channel</p>
<p>Enter information to identify the config channel:</p>
<p><code>Name: My Config Channel<br />
Label: myConfigChannel<br />
Description: My Config Channel</code></p>
<p>Next step is to populate this channel with files and directories by navigating to the following location:</p>
<p>Select the configuration channel -> add files -> create file</p>
<p>Now you can create files, directories and symlinks, set ownerships and file permissions. In case of creating a file it is possible to add the actual content of the file in the inline editor. Click on &#8220;Create Configuration File&#8221; to finalize this action.</p>
<p>To deploy this file to the managed linux system, this system must first be subscribed to the config channel. In the spacewalk web console, navigate to the following location:</p>
<p>systems -> &#8220;your system&#8221; -> configuration -> manage configuration channels -> subscribe to channels</p>
<p>Next, verify if the client is successfully subscribed to the newly created config channel by executing the following command on the client:<br />
<code>[root@appsrvr1 ~]# rhncfg-client channels<br />
Using server name spacewalk<br />
Config channels:<br />
Label                           Name<br />
-----                           ----<br />
myConfigChannel                 My Config Channel<br />
[root@appsrvr1 ~]# </code></p>
<p>If the channel appears in the output of the  previous command you can get those files (or directories) by issuing:</p>
<p><code>[root@appsrvr1 ~]# rhncfg-client get<br />
Using server name spacewalk<br />
Deploying /opt/oracle<br />
Deploying /opt/oracle/middleware<br />
Deploying /opt/oracle/middleware/jrockit<br />
[root@appsrvr1 ~]#<br />
</code></p>
<p>If you want to verify if there is a delta between your system and the config channel you can do so by executing<br />
<code>rhncfg-client diff</code></p>
<h3>Conclusion</h3>
<p>As usual with this kind of systems, it takes a lot of effort upfront to set it all up. With this article i hope i will help the reader by setting up a spacewalk system relatively easy and fast. Hopefully, the reader will realize pretty soon that managing Linux systems now really is a breeze and all effort for setting it up was worth it. In my opinion, as of version 1.5, which is current at the time of writing this article, stability and functionality has increased a lot since I started working with Spacewalk. If you’re looking for a way to manage your Red Hat derived Linux systems, i highly recommend taking a look at Spacewalk.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/12/19/how-to-walk-with-spacewalk/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F12%2F19%2Fhow-to-walk-with-spacewalk%2F&amp;title=How%20to%20walk%20with%20spacewalk" id="wpa2a_6"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/12/19/how-to-walk-with-spacewalk/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Continuous Delivery for Enterprise Java Applications</title>
		<link>http://blog.xebia.com/2011/12/14/continuous-delivery-for-enterprise-java-applications/</link>
		<comments>http://blog.xebia.com/2011/12/14/continuous-delivery-for-enterprise-java-applications/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 12:00:41 +0000</pubDate>
		<dc:creator>Mark van Holsteijn</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Continuous Delivery]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Virtualization]]></category>

	<!-- AutoMeta Start -->
	<category>puppet</category>
	<category>layer7</category>
	<category>balancer</category>
	<category>puppet</category>
	<category>layer7</category>
	<category>balancer</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8202</guid>
		<description><![CDATA[How do you setup a environment that support the continuous deliver of enterprise Java applications? How do you manage the large number of machines that are involved? How do you enable self-service, continuous delivery of applications onto the platform? In this blog post we will give a description of an open source Java Application Platform [...]]]></description>
			<content:encoded><![CDATA[<p>How do you setup a environment that support the continuous deliver of enterprise Java applications? How do you manage the large number of machines that are involved? How do you enable self-service, continuous delivery of applications onto the platform?</p>
<p>In this blog post we will give a description of an open source Java Application Platform as a Service that we created for our customer, using VMware, Redhat Enterprise Linux, Apache WebServer, JBoss Enterprise Application Platform, JBoss Operations Network, Puppet, Deployit,  F5 Load Balancer and  a Layer7 SecureSpan gateway.</p>
<p><span id="more-8202"></span></p>
<h1>Data Center Quality Platform</h1>
<p>The customer wanted a data center quality Java Application Platform with the following features:</p>
<ul>
<li>Standard configuration</li>
<li>Standardized provisioning</li>
<li>Standardized deployment</li>
<li>Centralized monitoring</li>
<li>Centralized access control</li>
<li>Virtual environment</li>
<li>Proving technology</li>
</ul>
<h2>Current situation</h2>
<p>As the current Java application platform was based on HP-UX on Itanium, the customer was facing high cost for hardware, software licenses and fading support from software vendors.  As all applications ran on a HP Superdome, it was very difficult to add resources to individual applications. In addition, development teams spend too much time taking their software through the development, test and acceptance environments, resulting in slow delivery of software into production. Finally, it was difficult to provide 24&#215;7 availability because all applications are running on a single machine.</p>
<h1><strong><span style="font-family: helvetica;">Java Application Platform </span></strong></h1>
<p>The following figure illustrate the solution architecture of the java application platform.</p>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/jap-solution-overview.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="jap solution overview" src="http://blog.xebia.com/wp-content/uploads/2011/12/jap-solution-overview_thumb.jpg" alt="jap solution overview" width="668" height="375" border="0" /></a></p>
<p>In the following paragraphs we will describe the purpose of the most important components.</p>
<h2>Dual Data Center – HP</h2>
<p>Not shown in the figure, is the hardware setup of the platform. It consists of <a href="http://h18004.www1.hp.com/products/blades/bladesystem/index.html" target="_blank">HP</a> blades setup in two data centers on two different locations. This provides the basic infrastructure for 24&#215;7 availability and fault tolerance.</p>
<h2>VMware ESX</h2>
<p><a href="http://www.vmware.com" target="_blank">VMware</a> ESX is deployed on top of the hardware in the dual data center. This provides us with the ability to create virtual machines and provide high availability in case of single server of single site failures. It also allows us the quickly scale up virtual machines and increase the resources assigned to individual virtual machines.</p>
<p>For all machines in the platform we use a single VMware template image. This image is installed with RedHat Enterprise Linux and a puppet client.</p>
<h2>Puppet</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/vm-template1.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="vm-template" src="http://blog.xebia.com/wp-content/uploads/2011/12/vm-template_thumb1.jpg" alt="vm-template" width="308" height="142" border="0" /></a></p>
<p><a href="http://www.puppetlabs.com" target="_blank">Puppet</a> fully automates system management. It is used for the installation of software packages, conformity tests and day to day system administration tasks.  For every type of node, we have a puppet plan. When the machines boots, the puppet agent provisions the machine with all the necessary software and configuration according to the plan for that machine.</p>
<p>The use of Puppet completely automates and standardizes the configuration, ensures 100% reproducibility of the configuration and is fast. Provisioning of a new machine from the template to full operational mode is done in a matter of minutes.</p>
<h2>JBoss EAP</h2>
<p><a href="http://www.jboss.com/products/platforms/application/" target="_blank">JBoss Enterprise Application Platform</a> is the Enterprise Java applications server for all java applications.  The installation and configuration is done by Puppet and uses the official RedHat RPMs.  Puppet configures JBoss to ensure that :</p>
<ul>
<li>JBoss management applications authenticate users against Active Directory, providing a single point of authorization for operations.</li>
<li>A JBoss Oracle database schema is automatically provisioned for that specific instance of JBoss, providing persistence for the JBoss server system state.</li>
<li>All Business Applications can authenticate users using SAML against the Layer7 Identity provider, providing a single point of authentication and authorization for their customers.</li>
<li>The JBoss instance is added to the pool in the F5 Load balancer</li>
<li>The application server is added to the Deployit infrastructure inventory, providing the tenants of the platform with the ability to deploy applications to the server.</li>
</ul>
<p>JBoss application servers are always deployed in multiples of two, where each server of a pair is assigned to a physically different data center location by VMware.</p>
<p>The use of puppet provides us with a fast and reproducible way of provisioning JBoss application servers, allowing for a fast and reliable scale out mechanism for the applications.</p>
<h2>JBoss Operations Network</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/image.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.xebia.com/wp-content/uploads/2011/12/image_thumb.png" alt="image" border="0" /></a></p>
<p><a href="http://www.redhat.com/jboss_on/" target="_blank">JBoss Operations Network (</a>JON) is used for monitoring all the resources in the platform.   By default, Puppet installs a JON agent on every machine. This agent scans the inventory of the machine and reports it to the JON server.</p>
<p>JON has a very good support for high availability and fail over. By simply adding a JON server machine, agents will automatically distribute themselves across the servers and failover if necessary. Each JON server also runs a JON agent, making sure that unavailability of a JON server is also covered.</p>
<p>In JON we created a number of alert templates for different resource types (os, apache, jboss, jon, puppet, etc.)  that will monitor and report critical conditions on the system.  All error messages from the JBoss servers logs are reported as incidents.</p>
<p>All alerts and clearing conditions from JBoss Operations network are reported via SNMP to TNG Unicenter.</p>
<p>Through the  use of JBoss Operations Network all machines, servers and resources in the platform are automatically added to the centralize monitoring system.</p>
<h2>Deployit</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/image1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.xebia.com/wp-content/uploads/2011/12/image_thumb1.png" alt="image" width="244" height="148" border="0" /></a></p>
<p><a title="Deployit" href="http://www.xebialabs.com" target="_blank">Deployit</a> is used for the automated deployment of applications onto the platform. It automatically deploys all the application components in a stack to the appropriate containers.  Deployit :</p>
<ul>
<li>deploys static content and proxy configuration to the apache webservers,</li>
<li>deploys enterprise java application components to all individual JBoss servers in the farm,</li>
<li>executes SQL scripts to the database,</li>
<li>configures the F5 loadbalancers to add or remove servers or applications to the pool,</li>
<li>applies environment specific changes to the application configuration.</li>
</ul>
<p>The deployment plan for a specific application is prepared in close cooperation between the application developer and platform management staff. When the deployment plan is finished, developers can deploy new versions of the application themselves, directly from a build tool or manually.This ensures solving any installation or configuration problem isn&#8217;t postponed until the application is installed for production use, but rather is solved at the early stage of any development.</p>
<p>The same deployment plan is used for all environments. Authorization can be configured per enviroment and per application. LDAP is used to authorize software developers to deploy and configure an application for development and testing purposes, while integration specialist can deploy the application in production.</p>
<p>The use of Deployit provides the platform with a fully automated and standardized deployment mechanism, improving the speed of deployment of applications through the development, test and acceptance environments while reducing the number of staff involved and lowering the number of configuration errors.</p>
<h2>F5 Load Balancer</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/image2.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.xebia.com/wp-content/uploads/2011/12/image_thumb2.png" alt="image" width="244" height="229" border="0" /></a></p>
<p>The<a title="F5 Load balancers" href="http://www.f5.com/products/big-ip/" target="_blank"> F5 Load balancers</a> is used to support scalability and fail over for the JBoss Application Server farm.</p>
<p>The pools are configured to use a sticky session protocol based upon the JSESSIONID session cookie. If the cookie is not present, round-robin load balancing of the HTTP requests is performed.</p>
<p>Puppet adds the JBoss servers to the  pool in the F5 Load Balancer.</p>
<p>When a server is scheduled for a restart, the server is taken out of the pool. This ensures that this server does not get any new request, but will still be servicing existing sessions. When the session count in JBoss drops to zero, the server is restarted and restored to the pool.</p>
<p>The use of the F5 Load Balancer provides us with the ability to increase and decrease the number of servers in the farm, provide load balancing, fail over and graceful decommissioning of servers in the farm.</p>
<h2>Layer7 XML Gateway / Identity Provider</h2>
<p><a href="http://blog.xebia.com/wp-content/uploads/2011/12/image3.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="image" src="http://blog.xebia.com/wp-content/uploads/2011/12/image_thumb3.png" alt="image" width="244" height="149" border="0" /></a></p>
<p>The<a href="http://www.layer7tech.com/products/soa-gateway" target="_blank"> Layer7 SecureSpan Gateway</a> is used as centralized security policy enforcement point and SAML identity provider.</p>
<p>Layer7 supports multiple authentication methods, Kerberos, digital certificates, username+password and is able to use multiple identity stores.</p>
<p>Puppet configures all JBoss application servers with SAML support and configures Layer7 as the identity provider: JBoss receives authentication (identity) and authorization (roles) information as a SAML-token. The information contained in the token is translated to a standard JEE-principal user (using a tiny layer of custom code), so all JEE applications can access the authentication and authorization information in a standard way.  Whether the JEE application is a web application or provides webservices, from a security there&#8217;s no distinction. All application designers have to do is declare the application security roles conform the JEE standard.</p>
<p>The use of Layer7 standardizes the authentication and authorization for all business applications and centralizes access control.</p>
<h1>Conclusion</h1>
<p>The customer wanted a modern data center quality Java Application Platform to ensure that java applications could be deployed with lower cost and with high availability and easy scalability.</p>
<p>VMware, the dual data center, Layer7, the F5 Load balancer and JBoss provide the infrastructure for a  high availability and scalability for any java application. The combination of VMware, Puppet and Deployit are the fabric to enable continuous delivery of enterprise java applications.</p>
<p>Through virtualization and automated provisioning and deployment it has become possible to add a completely new, correctly configured machine to a cluster in a matter of minutes, completely secure and under full monitoring.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/12/14/continuous-delivery-for-enterprise-java-applications/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F12%2F14%2Fcontinuous-delivery-for-enterprise-java-applications%2F&amp;title=Continuous%20Delivery%20for%20Enterprise%20Java%20Applications" id="wpa2a_8"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/12/14/continuous-delivery-for-enterprise-java-applications/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Taking Application Release Automation to the Next Level</title>
		<link>http://blog.xebia.com/2011/11/29/taking-application-release-automation-to-the-next-level/</link>
		<comments>http://blog.xebia.com/2011/11/29/taking-application-release-automation-to-the-next-level/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 18:54:29 +0000</pubDate>
		<dc:creator>Andrew Phillips</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Xebia Labs]]></category>
		<category><![CDATA[application release automation]]></category>
		<category><![CDATA[continuous deployment]]></category>
		<category><![CDATA[deployment automation]]></category>

	<!-- AutoMeta Start -->
	<category>standardisation</category>
	<category>outs</category>
	<category>intelligence</category>
	<category>adopters</category>
	<category>generation</category>
	<category>standardisation</category>
	<category>outs</category>
	<category>intelligence</category>
	<category>adopters</category>
	<category>generation</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8147</guid>
		<description><![CDATA[Whether the driver is Agile, Cloud or DevOps1, or a &#8220;plain old&#8221; efficiency drive or process improvement initiative, forward-thinking organisations are currently looking for ways to improve their application release processes through automation. In an area where manual activities are still all too common, it&#8217;s unsurprising that the initial focus has been on automating the [...]]]></description>
			<content:encoded><![CDATA[<p>Whether the driver is Agile, Cloud or DevOps<sup>1</sup>, or a &#8220;plain old&#8221; efficiency drive or process improvement initiative, forward-thinking organisations are currently looking for ways to improve their application release processes through automation. In an area where manual activities are still all too common, it&#8217;s unsurprising that the initial focus has been on automating the deployment <em>execution</em> &#8211; moving all the bits to the right places.</p>
<p>What early adopters have learnt is that, at the enterprise scale, automating release execution quickly introduces a new bottleneck in today&#8217;s dynamic IT environments: continuous management of the deployment plan definition. A new generation of application release automation (ARA) tooling avoids this pitfall by leveraging intelligence to automate deployment <em>planning</em> as well as execution.<br />
<span id="more-8147"></span></p>
<h3>The State of ARA</h3>
<div style="padding: 5px; float: right;">
<img src="http://blog.xebialabs.com/wp-content/uploads/2011/11/ara_next_level-11.jpg" alt="" title="ara_next_level-1" width="200" height="159" class="alignnone size-full wp-image-6003" />
</div>
<p>Given how strongly our IT industry is dedicated to the automation of processes, it is nothing short of amazing how much of the deployment of <em>our own solutions</em> depends on manual actions coordinated more or less effectively between large groups of people.<br />
Indeed, a recent analyst report noted that the majority of large enterprises were still relying on manual application release processes or on in-house scripting understood by only a small number of specialists, operated as a black box that &#8211; hopefully &#8211; will do its job and will most likely necessitate a painful troubleshooting session if it doesn&#8217;t.</p>
<p>With key IT trends such as Agile, Cloud and DevOps dramatically ramping up the frequency of application releases in order to increase responsiveness to business needs and provide more and better services to customers, it&#8217;s clear that this situation cannot continue. </p>
<p>Thinking of today&#8217;s common release processes, it is also hardly surprising that the initial drive has been to automate the actual <a href="http://blog.xebialabs.com/2010/12/20/deployment-automation-vs-server-provisioning/" target="_new">rollout of the application</a> itself: copying the files to the target machines, restarting the servers, running the SQL against the DB etc. Using a defined workflow to organise these activities makes lots of sense: fewer failures, no more missing steps or steps executed in the wrong order, no more typos, better visualization etc.</p>
<h3>Lessons from the First Generation</h3>
<div style="padding: 5px; float: right;">
<img src="http://blog.xebialabs.com/wp-content/uploads/2011/11/ara_next_level-2.png" alt="" title="ara_next_level-2" width="200" height="143" class="alignnone size-full wp-image-6001" />
</div>
<p>Ironically, using one of these first generation ARA tools at an enterprise scale quickly made it obvious to early adopters how much effort is required to maintain the substantial number of workflow definitions that quickly accumulate to support full deployments, partial upgrades, rollbacks, environment scale-outs etc. across an enterprise application portfolio.</p>
<p>Of course, this is not a new challenge: ask anyone who has had to update 100 build job definitions in a continuous integration tool to change a compilation parameter, or 100 test plans in an automated testing setup to accommodate a different target browser, just how time-consuming and error-prone this type of maintenance is.</p>
<p>It&#8217;s not as though these modifications are <em>unique per process</em>. They tend to be <u>systematic</u> changes that reflect changes to the overall deployment strategy and/or context. The issue is that these first-generation tools, where all the deployment <em>intelligence</em> is stored in the power user&#8217;s brain, simply do not have enough internal <em>knowledge</em> of the structure of deployment to assist effectively.</p>
<h3>The Next Level of Application Release Automation</h3>
<div style="padding: 5px; float: right;">
<img src="http://blog.xebialabs.com/wp-content/uploads/2011/11/ara_next_level-3.jpg" alt="" title="ara_next_level-3" width="200" height="189" class="alignnone size-full wp-image-6004" />
</div>
<p>A new generation of Application Release Automation includes this intelligence. These advanced tools<sup>2</sup> no longer require hand-holding by your power users every step of the way, and encode knowledge of deployment best practices and strategies to automate the planning <em>and</em> execution of deployments.<sup>3</sup></p>
<p>No pre-provided strategy can be a 100% fit in an enterprise environment, so the strategies must be configurable, of course. Once your power users have fine-tuned them, however, all the individual deployment plans &#8211; initial installations, full and partial upgrades, downgrades, undeployments, scale-outs etc&#8230;easily hundreds across an application portfolio &#8211; are automatically tailored to your scenario.</p>
<p>This becomes even more efficient the fewer deployment strategies are in play, so these tools also motivate and reward increased standardisation of deployment procedures, in itself a valuable business goal. In fact, with a suitable interface and integrations into the development pipeline you essentially have an enterprise <a href="http://en.wikipedia.org/wiki/Cloud_computing#Platform" target="_new">Platform as a Service</a>, potentially on a private or hybrid cloud.</p>
<h3>Conclusions</h3>
<p>With adoption of Application Release Automation rapidly on the increase, a new generation of solutions are appearing that automate deployment planning as well as execution.<br />
Based on the challenges experienced in scaling the first generation of ARA tools to enterprise levels, these next generation solutions are designed to eliminate &#8220;continuous expert hand-holding&#8221;, promote standardisation and allow organisations to create a &#8220;software factory&#8221; that continuously delivers business value.</p>
<div style="background-color: #efeeea; border: 1px solid #AAAAAA; margin: 0.8em; padding: 0.4em; font-size: 85%;"><strong>Footnotes</strong></p>
<ol>
<li>My spelling preference is <u>still</u> for &#8220;Devops&#8221; since the whole point is, after all, that Dev and Ops are <em>no longer</em> regarded as separate, but hey&#8230; <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li>like XebiaLabs&#8217; <a href="http://www.xebialabs.com/tour" target="_new">Deployit</a></li>
<li><a href="http://blog.xebialabs.com/2011/05/03/deployment-is-the-new-build-part-1/" target="_new">This advance</a> closely mirrors the development of build frameworks from tools like <a href="https://ant.apache.org/" target="_new">Ant</a> to today&#8217;s industry standards like <a href="https://maven.apache.org/" target="_new">Maven</a> and on to the next generation of <a href="http://www.gradle.org/" target="_new">Gradle</a>, <a href="https://github.com/harrah/xsbt/wiki/" target="_new">SBT</a> and others.</li>
</ol>
</div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/11/29/taking-application-release-automation-to-the-next-level/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F11%2F29%2Ftaking-application-release-automation-to-the-next-level%2F&amp;title=Taking%20Application%20Release%20Automation%20to%20the%20Next%20Level" id="wpa2a_10"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/11/29/taking-application-release-automation-to-the-next-level/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Package Synergy</title>
		<link>http://blog.xebia.com/2011/11/14/android-package-synergy/</link>
		<comments>http://blog.xebia.com/2011/11/14/android-package-synergy/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 18:43:52 +0000</pubDate>
		<dc:creator>Arno den Hond</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[SOA]]></category>

	<!-- AutoMeta Start -->
	<category>synergy</category>
	<category>broadcast</category>
	<category>extras</category>
	<category>android</category>
	<category>intents</category>
	<category>shortcut</category>
	<category>intent</category>
	<category>activity</category>
	<category>synergy</category>
	<category>broadcast</category>
	<category>extras</category>
	<category>android</category>
	<category>intents</category>
	<category>shortcut</category>
	<category>intent</category>
	<category>activity</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=8005</guid>
		<description><![CDATA[Unlike announced in my previous post this one is neither soon nor on a surprise topic. It is about a general aspect of Android that is, to my opinion, very powerful but often under utilized. Android apps are not monolithic but rather a collection of components of different kinds. I suspect android took inspiration from [...]]]></description>
			<content:encoded><![CDATA[<p>Unlike announced in <a title="my previous post" href="http://blog.xebia.com/2011/07/06/robotium-black-box-testing-for-android-apps/">my previous post</a> this one is neither soon nor on a surprise topic. It is about a general aspect of Android that is, to my opinion, very powerful but often under utilized.</p>
<p>Android apps are not monolithic but rather a collection of components of different kinds. I suspect android took inspiration from the concept of midlet suites in j2me and believe it expanded on that quite well.<br />
These components (except for provider) can be exposed through intent filters in the package&#8217;s manifest and can be used by other components in different packages. This allows apps to accomplish tasks together which a single app could never do.<br />
<span id="more-8005"></span><br />
The most important type of component is the <a title="Activity" href="http://android-developers.blogspot.com/2009/11/integrating-application-with-intents.html">Activity</a> and it can be used in several ways:</p>
<ul>
<li>Leaf: view data specified or referred to in the extras of the calling intent.</li>
<li>Put: a pre-filled form with data from the extras. performs an action then stops or returns.</li>
<li>Pick: select data from a source owned by another app and return it (or a reference to it) to the calling activity.</li>
</ul>
<p>As activities might start other activities in other tasks, care must be taken to maintain a consistent <a title="activity back stack" href="http://developer.android.com/guide/practices/ui_guidelines/activity_task_design.html">activity back stack</a>.<br />
<a title="Image Shortcut" href="http://code.google.com/p/image-shortcut/"> Image Shortcut</a> and <a title="Send Text" href="http://code.google.com/p/send-text/">Send Text</a> demonstrate usage of these intents (but an abnormal use of content provider)</p>
<p>The type of component most suitable for increasing synergy is perhaps the <a title="Content Provider" href="http://developer.android.com/guide/topics/providers/content-providers.html">Content Provider</a>.<br />
A Content Provider is accessed through a content resolver and can be used to search, read and update data belonging to a different package. A component can also register to the Content Provider to be notified of changes to its data set.</p>
<p>To send a message to a different package, a <a title="Broadcast Receiver" href="http://developer.android.com/reference/android/content/BroadcastReceiver.html">Broadcast Receiver</a> is used.<br />
The system also sends a number of messages which apps can listen to.<br />
Sending a broadcast intent can be done asynchronously or synchronously so you can get a result for each matching receiver and have them called in order of priority.<br />
In either case a Broadcast Receiver is not the place to do a lot of processing. Usually either a service is started to handle any data or a notification is raised so the user can take action.</p>
<p>The final type of component is a <a title="Service" href="http://developer.android.com/guide/topics/fundamentals/services.html">Service</a>. As the name suggests it runs in the background, and comes in the varieties &#8220;run once and die&#8221; and &#8220;create once then run as demanded&#8221;. A service can be bound to through a Binder and communicates through aidl.</p>
<p>I think that, apart from selfishness, fear of abuse is a factor holding back synergy.<br />
Although you can create permissions and set those on your components so other apps need to request those permissions before they can use your components, some users might not review the requested permissions when installing a potentially malicious app.</p>
<p>I am currently developing an Android app at a bank which has a component (currently not exposed) that allows a user to transfer money from his account.<br />
If the activity was exposed it could be used as part of the payment process in any shopping app. The transfer activity would receive the amount and the destination account pre-filled through intent extras set by the shopping app. The transfer activity could return a cookie to the shopping app (similar to pick) which it can verify against the bank&#8217;s server independently.</p>
<p>Of course the shopping app shouldn&#8217;t have to scan the phone for each banking app so there needs to be defined a common profile of supported component interactions for each type of task. This would allow the shopping app to show an iDeal button calling an intent that matches the filter of any installed banking app&#8217;s transfer component in drive-through mode.</p>
<p>&#8216;The whole is greater than the sum of its parts&#8217; Aristotle, Metaphysica</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/11/14/android-package-synergy/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F11%2F14%2Fandroid-package-synergy%2F&amp;title=Android%20Package%20Synergy" id="wpa2a_12"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/11/14/android-package-synergy/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Continuous deployment with Atlassian Bamboo and XebiaLabs Deployit</title>
		<link>http://blog.xebia.com/2011/10/20/continuous-deployment-with-atlassian-bamboo-and-xebialabs-deployit/</link>
		<comments>http://blog.xebia.com/2011/10/20/continuous-deployment-with-atlassian-bamboo-and-xebialabs-deployit/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 08:48:42 +0000</pubDate>
		<dc:creator>Vincent Partington</dc:creator>
				<category><![CDATA[Build tools]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Xebia Labs]]></category>

	<!-- AutoMeta Start -->
	<category>bamboo</category>
	<category>atlassian</category>
	<category>continuous</category>
	<category>incompatibility</category>
	<category>push</category>
	<category>xebialabs</category>
	<category>deployit</category>
	<category>scale</category>
	<category>bamboo</category>
	<category>atlassian</category>
	<category>continuous</category>
	<category>incompatibility</category>
	<category>push</category>
	<category>xebialabs</category>
	<category>deployit</category>
	<category>scale</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=7935</guid>
		<description><![CDATA[Over the past five to ten years, continuous integration has become a no-brainer for every medium to large scale software development project. It&#8217;s hard to imagine going back to not having every commit (or push) automatically trigger a build of the code and, most importantly, a test run of of the code. That test run [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.xebialabs.com/wp-content/uploads/2011/10/LOGO_Bamboo_Transparent_Half_Size.png" alt="" title="LOGO_Bamboo_Transparent_Half_Size" width="332" height="98" align="right" /><br />
Over the past five to ten years, <a href="http://martinfowler.com/articles/continuousIntegration.html">continuous integration</a> has become a no-brainer for every medium to large scale software development project. It&#8217;s hard to imagine going back to <em>not</em> having every commit (or <a href="http://gitref.org/remotes/#push">push</a>) automatically trigger a build of the code and, most importantly, a test run of of the code. That test run will surely include <a href="http://www.extremeprogramming.org/rules/unittests.html">unit tests</a>, but setting it up to also run <a href="http://c2.com/cgi/wiki?IntegrationTest">integration tests</a> used to be harder. You&#8217;ll need to automatically deploy the application to the target middleware environment and then run the integration tests against that environment.</p>
<p>The Deployit plugin for the new 3.3 release of <a href="http://www.atlassian.com/software/bamboo/">Atlassian Bamboo</a> adds the enterprise-scale deployment capabilities of <a href="http://www.xebialabs.com/">XebiaLabs Deployit</a> to Bamboo. This allows you to speed up your development process by adding automated deployment to your continuous integration setup and make the the first step towards <a href="http://timothyfitz.wordpress.com/2009/02/08/continuous-deployment/">continuous deployment</a> and <a href="http://continuousdelivery.com/">continuous delivery</a>. Instead of deployment being a bottleneck to your development process, it will be be an integrated part of it. You can test your application on the target platform as soon as possible, find any platform incompatibility and deployment issues early on, and, when it&#8217;s time to deploy to the production environment, your deployment will be quick and reliable.</p>
<p> <a href="http://blog.xebialabs.com/2011/10/20/continuous-deployment-with-atlassian-bamboo-and-xebialabs-deployit/#more-5882" class="more-link">read more</a></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/10/20/continuous-deployment-with-atlassian-bamboo-and-xebialabs-deployit/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F10%2F20%2Fcontinuous-deployment-with-atlassian-bamboo-and-xebialabs-deployit%2F&amp;title=Continuous%20deployment%20with%20Atlassian%20Bamboo%20and%20XebiaLabs%20Deployit" id="wpa2a_14"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/10/20/continuous-deployment-with-atlassian-bamboo-and-xebialabs-deployit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Leveraging the IBM Workload Deployer CLI to automate WebSphere application deployment</title>
		<link>http://blog.xebia.com/2011/08/15/leveraging-the-ibm-workload-deployer-cli-to-automate-websphere-application-deployment/</link>
		<comments>http://blog.xebia.com/2011/08/15/leveraging-the-ibm-workload-deployer-cli-to-automate-websphere-application-deployment/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 07:43:53 +0000</pubDate>
		<dc:creator>Vincent Partington</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Xebia Labs]]></category>

	<!-- AutoMeta Start -->
	<category>workload</category>
	<category>cloudburst</category>
	<category>cloudburst</category>
	<category>workloads</category>
	<category>deployer</category>
	<category>deploys</category>
	<category>appliance</category>
	<category>websphere</category>
	<category>workload</category>
	<category>cloudburst</category>
	<category>cloudburst</category>
	<category>workloads</category>
	<category>deployer</category>
	<category>deploys</category>
	<category>appliance</category>
	<category>websphere</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=7265</guid>
		<description><![CDATA[A few months ago I blogged about the integration between Deployit and IBM WebSphere CloudBurst (since renamed to IBM Workload Deployer). While that article gave an overview of the integration and included some nice screenshots, it did not really go into the details. Now is the time to explore the implementation of this integration.. Workload [...]]]></description>
			<content:encoded><![CDATA[<p><em>A few months ago I <a href="http://blog.xebialabs.com/2011/05/08/deployit-integrated-with-websphere-cloudburst-appliance-for-applications-on-demand/">blogged about the integration between Deployit and IBM WebSphere CloudBurst</a> (since renamed to IBM Workload Deployer). While that article gave an overview of the integration and included some nice screenshots, it did not really go into the details. Now is the time to explore the implementation of this integration.</em>.</p>
<p>
Workload Deployer V3</a> and <a href="http://www.xebialabs.com/features">Deployit</a> from <a href="http://www.xebialabs.com/">XebiaLabs</a> both &#8220;deploy&#8221; things, but they deploy different things.  Deployit deploys application artifacts and resources, such as EAR files and data sources, to middleware systems like IBM WebSphere Application Server (but also HTML to web servers, IBM WebSphere MQ configurations to queue managers, and so on). IBM Workload Deployer, on the other hand, deploys patterns (or topologies) of virtual images to hypervisors &#8212; but not just any kind of virtual images. IBM Workload Deployer is especially geared toward deploying middleware topologies.</p>
<p>
IBM Workload Deployer V3 is an updated and enhanced version of the  WebSphere CloudBurst Appliance, renamed to reflect the expanded scope of workloads it can deploy, which are no longer limited to only WebSphere workloads.  The content for this article (including screen captures) was created using a WebSphere CloudBurst Appliance, but everything noted here is equally applicable to IBM Workload Deployer V3.  However, for the sake of consistency with the images presented, &#8220;WebSphere CloudBurst&#8221; is used throughout this article to refer to both products.</p>
<p>
In other words, IBM Workload Deployer deploys the middleware systems and Deployit deploys applications to those middleware systems &#8212; complementary functionalities that form a perfect fit.</p>
<p>
At XebiaLabs, we have been working on two exciting new integrations for Deployit. We created a Deployit plugin that enables you to deploy EAR files directly to virtual systems created by IBM Workload Deployer V3 or its predecessor, IBM WebSphere CloudBurst Appliance V2. We also created a WebSphere CloudBurst script package to deploy application artifacts and resources on newly created virtual systems.</p>
<p>
This article explores two integrations between WebSphere CloudBurst and Deployit as a way of showing how you can leverage the WebSphere CloudBurst command line interface and script packages to integrate cloud deployment with your application deployment automation solution.</p>
<p>
<a href=http://www.ibm.com/developerworks/websphere/techjournal/1108_inreach/1108_inreach.html?ca=drs-" class="more-link">(more&#8230;)</a></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/08/15/leveraging-the-ibm-workload-deployer-cli-to-automate-websphere-application-deployment/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F08%2F15%2Fleveraging-the-ibm-workload-deployer-cli-to-automate-websphere-application-deployment%2F&amp;title=Leveraging%20the%20IBM%20Workload%20Deployer%20CLI%20to%20automate%20WebSphere%20application%20deployment" id="wpa2a_16"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/08/15/leveraging-the-ibm-workload-deployer-cli-to-automate-websphere-application-deployment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Release Automation: The Missing Step in Release Management</title>
		<link>http://blog.xebia.com/2011/08/03/release-automation-the-missing-step-in-release-management/</link>
		<comments>http://blog.xebia.com/2011/08/03/release-automation-the-missing-step-in-release-management/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 05:31:10 +0000</pubDate>
		<dc:creator>Andrew Phillips</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Xebia Labs]]></category>
		<category><![CDATA[release automation]]></category>
		<category><![CDATA[release management]]></category>

	<!-- AutoMeta Start -->
	<category>8230</category>
	<category>industries</category>
	<category>release</category>
	<category>automation</category>
	<category>critical</category>
	<category>considerations</category>
	<category>scalability</category>
	<category>outline</category>
	<category>8230</category>
	<category>industries</category>
	<category>release</category>
	<category>automation</category>
	<category>critical</category>
	<category>considerations</category>
	<category>scalability</category>
	<category>outline</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=7243</guid>
		<description><![CDATA[Across all industries, the services delivered by business applications have become an essential part of an enterprise&#8217;s customer offering. Bringing new features to market quickly is thus a critical factor in determining a company&#8217;s success. In this post (an extended version of which is available as a whitepaper), we will outline today&#8217;s Release Management challenges [...]]]></description>
			<content:encoded><![CDATA[<p>Across all industries, the services delivered by business applications have become an essential part of an enterprise&#8217;s customer offering. Bringing new features to market quickly is thus a critical factor in determining a company&#8217;s success.</p>
<p>In this post (an extended version of which is <a href="http://www.xebialabs.com/DeploymentAutomation_Whitepaper" target="_new">available as a whitepaper</a>), we will outline today&#8217;s Release Management challenges and discuss the need for Release Automation. </p>
<p>We&#8217;ll identify key considerations for successful solutions and highlight why &#8220;Zero-Maintenance&#8221; is a critical requirement for Release Automation that provides the scalability required in an agile landscape and enables the delivery of continuous business value.</p>
<p><a href="http://blog.xebialabs.com/2011/08/03/release-automation-the-missing-step-in-release-management/" class="more-link">(more&#8230;)</a></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/08/03/release-automation-the-missing-step-in-release-management/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F08%2F03%2Frelease-automation-the-missing-step-in-release-management%2F&amp;title=Release%20Automation%3A%20The%20Missing%20Step%20in%20Release%20Management" id="wpa2a_18"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/08/03/release-automation-the-missing-step-in-release-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integration testing CloudBees&#8217; RUN@cloud</title>
		<link>http://blog.xebia.com/2011/08/03/integration-testing-cloudbees-runcloud/</link>
		<comments>http://blog.xebia.com/2011/08/03/integration-testing-cloudbees-runcloud/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 05:30:50 +0000</pubDate>
		<dc:creator>Andrew Phillips</dc:creator>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Google AppEngine]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[jclouds]]></category>

	<!-- AutoMeta Start -->
	<category>tweetstore</category>
	<category>cloudbees</category>
	<category>cloudbees</category>
	<category>jclouds</category>
	<category>idletimer</category>
	<category>staxsdkappserver</category>
	<category>googledevserver</category>
	<category>timer</category>
	<category>tweetstore</category>
	<category>cloudbees</category>
	<category>cloudbees</category>
	<category>jclouds</category>
	<category>idletimer</category>
	<category>staxsdkappserver</category>
	<category>googledevserver</category>
	<category>timer</category>
	<!-- AutoMeta End -->
	
		<guid isPermaLink="false">http://blog.xebia.com/?p=7040</guid>
		<description><![CDATA[As part of the preparations for the recent 1.0.0 release of jclouds, I was tidying up the existing Tweetstore demo application as well as porting it to CloudBees&#8217; Tomcat-based RUN@cloud platform. A key part of the test harness for the original versions of Tweetstore that run on the Google App Engine is the neat GoogleDevServer [...]]]></description>
			<content:encoded><![CDATA[<p>As part of the preparations for the recent <a href="http://anyweight.blogspot.com/2011/06/jclouds-100-is-out.html" target="_new">1.0.0 release</a> of <a href="http://www.jclouds.org/" target="_new">jclouds</a>, I was tidying up the existing <a href="http://anyweight.blogspot.com/2009/10/save-your-tweets-forever-with-jclouds.html" target="_new">Tweetstore</a> demo application as well as <a href="http://tweetstore.jclouds.cloudbees.net" target="_new">porting it</a> to CloudBees&#8217; Tomcat-based <a href="http://www.cloudbees.com/run.cb" target="_new">RUN@cloud</a> platform.</p>
<p>A key part of the test harness for the <a href="https://jclouds-tweetstore.appspot.com/" target="_new">original</a> <a href="https://jclouds-tweetstore-spring.appspot.com/" target="_new">versions</a> of Tweetstore that run on the <a href="https://code.google.com/appengine/docs/whatisgoogleappengine.html" target="_new">Google App Engine</a> is the neat <a href="https://github.com/jclouds/jclouds/blob/master/demos/tweetstore/gae-tweetstore/src/test/java/org/jclouds/demo/tweetstore/integration/GoogleDevServer.java" target="_new">GoogleDevServer</a> class. Basically, it&#8217;s a clever wrapper around the <tt>KickStart</tt> class used under the covers by the <a href="https://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Java" target="_new">GAE SDK tools</a> that allows you to specify the SDK location, address, port and WAR file (or expanded WAR directory) to run.<br />
Better still, it can programmatically be shut down cleanly, making it ideal for integration test runs<sup>1</sup>.</p>
<p>For CloudBees, I was thus looking to put together a similar <a href="https://github.com/jclouds/jclouds/blob/master/demos/tweetstore/runatcloud-tweetstore/src/test/java/org/jclouds/demo/tweetstore/integration/RunAtCloudServer.java" target="_new">RunAtCloudServer</a>. It proved more challenging than expected&#8230;<sup>2</sup><br />
<span id="more-7040"></span></p>
<h3>Just spawn a container already?</h3>
<p>Both the <a href="http://www.kindleit.net/maven_gae_plugin/" target="_new">maven-gae-plugin</a> and the <a href="https://cloudbees.zendesk.com/entries/421064-maven-guide" target="_new">bees-maven-plugin</a> allow you to spawn a local GAE or RUN@cloud server simulation, of course. These can easily be integrated into your Maven build, for instance as part of your <tt>pre-integration-test</tt> setup. So why not just stick with that?</p>
<p>Well, for some scenarios that can be perfectly sufficient. For Tweetstore, having an inline server that cleanly shuts down allows us to:</p>
<ul>
<li>run integration tests alongside unit tests from an IDE without having to remember to start an external process</li>
<li>debug the application running in the server on demand, without having to mess with remote debuggers or figure out a way to <em>sometimes</em> get the Maven plugins to start in debug mode</li>
<li>work some conditional magic with the server arguments</li>
</ul>
<p>If your project&#8217;s requirements are similar, an inline server might be a good option. And luckily, the code&#8217;s already been written!</p>
<h3>Hangin&#8217; around</h3>
<div style="padding: 5px; float: right;"><img src="http://blog.xebia.com/wp-content/uploads/2011/06/zombies.png" alt="" title="zombies" width="266" height="173" class="alignnone size-full wp-image-7044" /></div>
<p>The <a href="https://cloudbees.zendesk.com/entries/414109-cloudbees-sdk" target="_new">RUN@cloud SDK&#8217;s</a> version of <tt>KickStart</tt> is the <tt>StaxSdkAppServer</tt><sup>3</sup>. Figuring out the correct arguments for the <tt>launchServer</tt> factory method wasn&#8217;t too hard, so I hooked up a <tt>StaxSdkAppServer</tt> and kicked off the test. </p>
<p>Started like a charm! Then the test finished and&#8230;just hung on in there. Over in the trusty debugger<sup>4</sup>, I could see not one, but <em>two</em> zombie threads still running. The design was based on a &#8220;shutdown-by-JVM-kill&#8221; scenario, I guess.</p>
<h3>Assassins and other Ninja Tricks</h3>
<p>The first of the two threads is a <a href="http://download.oracle.com/javase/6/docs/api/java/util/Timer.html" target="_new">Timer</a> that something called the <tt>WebAppEngine</tt> uses to do&#8230;well, who knows? In any case, we can get a reference to it with a decent handful of reflection and <a href="http://download.oracle.com/javase/6/docs/api/java/util/Timer.html#cancel()" target="_new">cancel</a> it. Easy enough.</p>
<p>Our remaining zombie is a bit more elusive, unfortunately. It&#8217;s a thread spawned by an instance of the <tt>RequestMonitorValve</tt> class in a manner analogous to</p>
<pre class="brush: java; title: ; notranslate">
new Thread(idleTimer, &quot;requestMonitor&quot;).start();
</pre>
<p>So no reference, and no way of interrupting it. However, the <tt>idleTimer</tt> <a href="http://download.oracle.com/javase/6/docs/api/java/lang/Runnable.html" target="_new">Runnable</a> <em>is</em> referenced <em><u>and</u></em> repeatedly calls a handler as part of its execution. How about injecting a handler that throws an exception to end the thread?</p>
<p>Nice idea, but it turns out the thread really doesn&#8217;t want to die that way:</p>
<pre class="brush: java; title: ; notranslate">
while(true) {
    try {
        // do stuff
        if(callbackClient != null)
            callbackClient.updateStatus(state);
    } catch(Exception e) {
        // increment some error counters
    }

    try {
        Thread.sleep(statusIntervalSecs * 1000);
    } catch(InterruptedException interruptedexception) { }
}
</pre>
<p>So I&#8217;ve had to go one better and throw a <a href="http://download.oracle.com/javase/6/docs/api/java/lang/ThreadDeath.html" target="_new">ThreadDeath</a> <a href="http://download.oracle.com/javase/6/docs/api/java/lang/Error.html" target="_new">error</a> instead. Urgh.</p>
<h3>Now you see it, now you don&#8217;t?</h3>
<p>The remaining gotcha involves injecting the catchily-named <tt>KillerCallback</tt> into the <tt>idleTimer</tt>. Even using reflection, this is a elementary concurrency failure because without a <a href="http://java.sun.com/docs/books/jls/third_edition/html/memory.html#64058" target="_new">synchronized-with relationship</a><sup>5</sup> between injecting the new handler and invocation of the handler by <tt>idleTimer</tt>, there is no guarantee the new handler will actually be visible to the thread we&#8217;re trying to stop.</p>
<p>Such a relationship <em>could</em> be established if the &#8220;assassin&#8221; was injected <em>before</em> the thread that runs <tt>idleTimer</tt> starts. Unless we want to override library classes, that would mean setting it after creating but before starting the <tt>StaxSdkAppServer</tt><sup>6</sup>&#8230;which unfortunately doesn&#8217;t work either because the instances referencing <tt>idleTimer</tt> are only created when the server starts.</p>
<h3>So?</h3>
<p>So, for now the potential concurrency issue is documented and we hope for the best <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  No problems observered so far&#8230;</p>
<div style="background-color: #EFEEEA; border: 1px solid #AAAAAA; margin: 0.8em; padding: 0.4em; font-size: 85%;">
<strong>Footnotes</strong></p>
<ol>
<li>The <a href="http://www.kindleit.net/maven_gae_plugin/" target="_new">maven-gae-plugin</a> is another nice option for <em>starting</em> the SDK&#8217;s local GAE simulation. The advantage of <tt>GoogleDevServer</tt> is that it also <em>stops</em> cleanly, can be run from your IDE and also allows you to add additional files to the WAR before starting. Tweetstore uses that to include login credentials to various cloud storage providers &#8211; not the kind of thing you&#8217;re likely to want to store in Github <img src='http://blog.xebia.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li>but see <a href="http://www.youtube.com/watch?v=cKO0RrM7LvI" target="_new"><strong>here</strong></a></li>
<li>CloudBees <a href="http://www.cloudbees.com/acquisitions/stax/" target="_new">acquired Stax</a> in December 2010</li>
<li><em>This</em> is when being able to run from an IDE really comes into its own!</li>
<li>as provided e.g. by <strong><tt>volatile</tt></strong></li>
<li>Actually, the code uses an almost exact clone called <a href="https://github.com/jclouds/jclouds/blob/master/demos/tweetstore/runatcloud-tweetstore/src/test/java/org/jclouds/demo/tweetstore/integration/StaxSdkAppServer2.java" target="_new">StaxSdkAppServer2</a> that simply splits creating the server instance from starting it.</li>
</ol>
</div>
<div name="googleone_share_1" style="position:relative;z-index:5;float: right; margin-left: 10px;"><g:plusone size="small" count="1" href="http://blog.xebia.com/2011/08/03/integration-testing-cloudbees-runcloud/"></g:plusone></div><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.xebia.com%2F2011%2F08%2F03%2Fintegration-testing-cloudbees-runcloud%2F&amp;title=Integration%20testing%20CloudBees%26%238217%3B%20RUN%40cloud" id="wpa2a_20"><img src="http://blog.xebia.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.com/2011/08/03/integration-testing-cloudbees-runcloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  blog.xebia.com/category/middleware/feed/ ) in 0.94056 seconds, on Feb 9th, 2012 at 5:38 pm UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 9th, 2012 at 6:38 pm UTC -->
