<?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>Alexander Holbreich</title> <atom:link href="http://alexander.holbreich.org/feed/" rel="self" type="application/rss+xml" /><link>http://alexander.holbreich.org</link> <description>Everything becomes a little different as soon as it is spoken out loud.  ~Hermann Hesse</description> <lastBuildDate>Sat, 07 Apr 2012 23:30:05 +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>Release your entities</title><link>http://alexander.holbreich.org/2012/02/release-your-entities/</link> <comments>http://alexander.holbreich.org/2012/02/release-your-entities/#comments</comments> <pubDate>Wed, 22 Feb 2012 22:22:29 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[java]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Software Engineering & Architecture]]></category> <category><![CDATA[cloning]]></category> <category><![CDATA[EJB]]></category> <category><![CDATA[Entity]]></category> <category><![CDATA[Entity Pruner]]></category> <category><![CDATA[hibernate]]></category> <category><![CDATA[Java]]></category> <category><![CDATA[jee]]></category> <category><![CDATA[jpa]]></category> <category><![CDATA[pruning]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=1170</guid> <description><![CDATA[This post shows how to clean JPA entities out of Persistence Context overhead when you need to use them outside of container, serialize them and send them over RMI,  SOAP and other protocols to another JVMs. The Problem You may found yourself  in a situation where  you don&#8217;t have DTO&#8217;s,  there existing object-graph  is a [...]]]></description> <content:encoded><![CDATA[<p>This post shows how to clean JPA entities out of Persistence Context overhead when you need to use them outside of container, serialize them and send them over RMI,  SOAP and other protocols to another JVMs.</p><h2>The Problem</h2><p>You may found yourself  in a situation where  you don&#8217;t have DTO&#8217;s,  there existing object-graph  is a bit wide-spreading  but you need to use entity objects outside of the managed scope. So where is a problem? In case of Hibernate first problem appears is huge  object footprint you&#8217;ll have to serialize by default  even if you send just one detached entity. I found that at some circumstances nearly the whole Hibernate Context is still connected to your detached entities. If you serializes such an huge but useless object graph every time, you  slows down your client,  last your  network, creates huge RMI/Web Service marshalling overhead,  wastes client memory which even can provokes out of memory problems.  All that you don&#8217;t need in your application.</p><h2>Different Solutions</h2><p><a href="http://alexander.holbreich.org/wp-content/uploads/2012/02/clone-java.gif?4c9b33"><img class="alignleft size-full wp-image-1189" style="margin: 10px;" title="clone-java" src="http://alexander.holbreich.org/wp-content/uploads/2012/02/clone-java.gif?4c9b33" alt="" width="200" height="124" /></a>So how to avoid this? <span style="text-decoration: underline;">We need a simple way to purify given entities at &#8220;low cost&#8221;.</span> Which means the solution  has to be simple for developers, with minimal boilerplate code and also performant at  run-time.  The output should contain  clearly detached and as much as possible purified entities. It&#8217;s very important to cut any possible references to technical baground object of (hibernate) persistent context.</p><p>Before you start you have to be clear about  that such cleaning makes sense only outside of  transaction scope. Then at the end of transaction all participated entities have to maintain their persistent state, so of course they cannot be detached before that point. Otherwise detached and pruned entities cannot be persist by entity manager anymore and have to be refreshed first.</p><p>However you don&#8217;t have to weak transactional behavior, just do cleaning outside of transactional scope. In container managed transaction environment it simply achieved by annotations. <span id="more-1170"></span></p><pre class="brush: java; title: ; notranslate">
@TransactionAttribute(NEVER)
pubic MyEtity updateMyEntityMethod(MyEntity entity){
return SomePruner.prune(updateMyEntityMethodTransactional(entity));
}

@TransactionAttribute(REQUIRED)
protected MyEtity updateMyEntityMethodTransactional(MyEntity entity){
...
return entityManager.merge(entity);
}
</pre><p>You can use your <em>updateMyEntityMethod()  </em>from outside, this is not transactional. The transaction only begins before <em>updateMyEntityMethodTransactional() </em> method is started and ends after <em>return</em>. <span style="text-decoration: underline;">Notify that the pruning of the entity is done outside of the transaction</span>. The only question is how to lowerage the real existing entity footprint  as usual several approaches may be used:</p><p><strong>Do it by yourself. Clone what you need.</strong></p><ul><li>This is really fast if you do it well. and flexible at all.</li><li>But blows your code up, and  is hard to maintain.</li><li>Would you clone even objects you never wrote?</li></ul><p><strong>Clone selective by reflection.</strong></p><ul><li>Can be performant.</li><li>but need reinvent the wheel, still need to maintain boilerplate code.</li></ul><p><strong>Serialize it selective by framework</strong></p><ul><li>Small footprint.</li><li>Tends to be less performantly.</li><li>Can lead to problems with complex graphs (try to serialize bidirectional references to  JSON).</li></ul><p><strong>Cloning (reflection based) libraries.</strong></p><ul><li>Small footprint, easy usage.</li><li>Very impressive performance</li><li>Can have restrictions on your design.</li></ul><p>I just want to  point out  libraries of the last approach (of course you  invited to discuss alternatives in the comments).</p><h2>Cloning</h2><p>The <a href="http://code.google.com/p/cloning/">cloning </a>library from Kostantinos Kougios is very small, fast configurable and extendable reflection based cloning library. So why not using it for our needs. It just not considered to be an entity pruner out of the box, but this is what i give you here.  Every simple cloner has to look similar:</p><pre class="brush: java; title: ; notranslate">
com.rits.cloning.Cloner cloner=new Cloner();
MyClass clonedObject=cloner.deepClone(sourceObject);
</pre><p>This will perform a deep copy of everything, very fast. But what about footprint you ask? You right we don&#8217;t need everything. Let&#8217;s tell cloner that we don&#8217;t want to have hibernate stuff in our clones. Here is an array of classes we don&#8217;t want to clone.</p><pre class="brush: java; title: ; notranslate">
private final static Class[] SKIPCLASSES = new Class[] {
SessionImplementor.class,
JDBCTransaction.class,
SessionImpl.class,
StatelessSessionImpl.class,
HibernateProxy.class,
JavassistLazyInitializer};

static {
cloner = new Cloner();
cloner.nullInsteadOfClone(SKIPCLASSES);
}
</pre><p>This will clone your entities without Hibernate context. You also encouraged to add additional user-defined classes to this list, if you don&#8217;t need them in your clones.<br /> The next tip is to use fast cloners. I would use them for top level entities, because you normally don&#8217;t need all the stuff in the cloned entity. Leaving it at null increases speed (of course we are already at milliseconds). and keep footprint pretty low.</p><pre class="brush: java; title: ; notranslate">
cloner.registerFastCloner(
MyServerSideEntity.class, new MyServersideEnitityFastCloner());
//Beware exact mach of class is used.
</pre><p>So even if cloner is pretty fast out of the box there are several approaches to adapt it to you needs or make it&#8217;s even more faster. But in the context of JPA entities we have to be more concerned about entity state than maybe about milliseconds of not high optimal cloning. Normally several paths on your object graph will be lazy initialized on transaction end. Let&#8217;s assume, when something is not initialized at the transaction end, that don&#8217;t need to be cloned as well. Let manifest this design decision in  the code:</p><pre class="brush: java; title: ; notranslate">
cloner = new Cloner() {
@Override
protected Object fastClone(Object o, Map&lt;Object, Object&gt; clones)
                   throws IllegalAccessException {
   //If hibernate proxy collection.
   if (PersistentCollection.class.isAssignableFrom(o.getClass())) {
       if (((PersistentCollection) o).wasInitialized()) {
           return super.fastClone(o,clones());
        }else {
           return null; // or other routine for new empty Object.
        }
    }
   //If hibernate Entityproxy.
   if (HibernateProxy.class.isAssignableFrom(o.getClass())) {
       LazyInitializer initializer = ((HibernateProxy) o).getHibernateLazyInitializer();
        if (!initializer.isUninitialized()) {
             return super.fastClone(initializer.getImplementation(), clones);
        } else {
          return null;
        }
     }
     return super.fastClone(o, clones); //default approach.
   }
};
</pre><p>That&#8217;s it! Cool isn&#8217;t?</p><h3>Entity Pruner</h3><p>Above solution utilizes general purpose cloning library for Entity pruning, where <a href="http://code.google.com/p/entity-pruner/">entity-pruner</a> seems to be more elaborated solution directly for entity pruning and &#8220;unpruning&#8221; which even deserves to be considered in the initial architecture of the future applications. The adoption of Entity Pruner begins when your entities implement <em>PrunableEntity </em> interface which is used to maintenance of entity prune state. Because of this restriction i downgrade this solution in context of my current problem. But if i would be able to implement such an interface, then i would get  the same performance as by cloning library out of the box.</p><pre class="brush: java; title: ; notranslate">
import com.saliman.entitypruner.EntityPruner;
..
@Stateless
SomeFassadeSessionBean
..
@EJB
EntityPruner pruner;

@TransactionAttribute(TransactionAttributeType.NEVER)
public MyEntity getSomeEntity(){
...
return pruner.prune((PrunableEntity)entity);
}
</pre><p>Abowe you see injected EntityPruner as an EJB. It works because EntityPruner library includes an implementation StatelesBean. It is e.g. hibernate aware implementation. The rest is like cloning library but in additional there is <em>unprune()</em> method which allows to reintegration of received entities to the current persistent context. That makes entity pruner as a complete solution and if you considering usage of entity pruning in the next application maybe it&#8217;s a best time to look closer on entity pruner now.</p><h3>DTO vs Entity Pruning</h3><p>However i can&#8217;t give you definitive guide to the general question whether DTO&#8217;s are must in every case or even DTO&#8217;s are dead since EJB 3.0.</p><p>I still think it depends on a situation. But in general usage of DTO&#8217;s introduces additional abstraction layer, clear and specific interfaces  and therefore increases separation of concerns and flexibility. In opposite to this you have to implement the transformation and maintain DTO&#8217;s. Let discuss your experiences on this.<br /> Thank you if you read this!</p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2012/02/release-your-entities/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Samba configuration</title><link>http://alexander.holbreich.org/2012/02/samba-configuration/</link> <comments>http://alexander.holbreich.org/2012/02/samba-configuration/#comments</comments> <pubDate>Sun, 12 Feb 2012 20:09:38 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[linux]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[configuration]]></category> <category><![CDATA[samba]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=568</guid> <description><![CDATA[This post was began for more than a 2 years ago and because i was to busy to finish it. But now here is it, better late than never. The Goal The goal is simple. There is a need of having a central storage of shared and private documents for small (rarely changing) user group. [...]]]></description> <content:encoded><![CDATA[<p><em>This post was began for more than a 2 years ago and because i was to busy to finish it. But now here is it, better late than never.</em></p><h2>The Goal</h2><p><a href="http://alexander.holbreich.org/wp-content/uploads/2012/02/samba.png?4c9b33"><img class="alignright size-full wp-image-1164" style="margin: 5px;" title="samba" src="http://alexander.holbreich.org/wp-content/uploads/2012/02/samba.png?4c9b33" alt="" width="185" height="143" /></a>The goal is simple. There is a need of having a central storage of shared and private documents for small (rarely changing) user group. We have windows and Linux PC that have to access this centralized file storage. A user-friendly access as well minimum of maintenance are also goals here. Furthermore base level of security is a goal here as well.</p><p>However the peresented configuration as I think is quite suituable for private use, small working groups and even kinds of small businesses.</p><h2>The Solution</h2><h3>Abstract</h3><p>It think it&#8217;s not a bad idea to have two different data spaces: private and shared. An this separation leads to simple rules of usage:</p><ul><li>Every user can read own documents and documents of other users in the shared place.</li><li>write and delete is only permitted in user&#8217;s private directory.</li></ul><p><span id="more-568"></span></p><h3>Concrete</h3><p>Let&#8217;s get concrete and that is the point where Samba goes in to play. Configuration presented below where tested on Debian 5 (Lenny) and shortly on Debian 7 (Wheezy) and works from now on more than two years without any problems.</p><h4>1. Install samba.</h4><pre class="brush: bash; title: ; notranslate">
 apt-get install samba
</pre><h4>2. Backup initial configuration</h4><pre class="brush: bash; title: ; notranslate">
cp /etc/samba/smb.conf /etc/samba/smb.conf_original
</pre><h4>3. Create shared spaces</h4><pre class="brush: bash; title: ; notranslate">
 # Create new root.
mkdir /srv/samba
 # Create mount point for documents
mkdir /srv/samba/shared
 # Create mount point for personal
mkdir /srv/samba/private

 # Create general gorup of samba users
addgroup smbusers
 # giv 'em some rights.
chown root:smbusers /srv/samba/shared/
chown root:smbusers /srv/samba/private/
# define umask
chmod 2770 /srv/samba/shared/
chmod 770 /srv/samba/private/
</pre><h4>4. Change configuration file.</h4><p>Now edit /etc/samba/smb.conf file. Just replace the content with the following:</p><pre class="brush: bash; title: ; notranslate">
[global]
	server string = Samba server %v
	unix password sync = Yes
	pam password change = Yes
	passwd program = /usr/bin/passwd %u
	passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
	syslog = 0
	log file = /var/log/samba/log.%m
	max log size = 1000
	socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
	panic action = /usr/share/samba/panic-action %d
	idmap config * : backend = tdb

[homes]
	comment = Home Directories
	read only = No
	create mask = 0700
	directory mask = 0700
	browseable = No

[shared]
	comment = Freigabe documents
	path = /srv/samba/shared
	read only = No
	create mask = 0770
	directory mask = 0770

[private]
	comment = Freigabe privat
	path = /srv/samba/private
	read only = No
</pre><p>Test made configurations with:</p><pre class="brush: bash; title: ; notranslate">
testparm
</pre><h4>5. Add users</h4><p>Le&#8217;ts add two users with their private places and access to the shared place. So here are Alexander and Rebecca.</p><pre class="brush: bash; title: ; notranslate">
useradd -g smbusers -G users alexander
useradd -g smbusers -G users rebecca
mkdir /srv/samba/private/alexander
mkdir /srv/samba/private/rebecca

chmod 750 -R /srv/samba/private/
chown alexander:smbusers /srv/samba/private/alexander/
chown rebecca:smbusers/srv/samba/private/rebecca/
</pre><p>Now don&#8217;t forget to set password for Samba users with:</p><pre class="brush: bash; title: ; notranslate">
smbpasswd -a alexander
smbpasswd -a rebecca
</pre><p>Note the following directives in your smb.conf will cause automatically change of UNIX user password on smb password changes, So don&#8217;t say i didn&#8217;t warned you <img src="http://alexander.holbreich.org/wp-includes/images/smilies/icon_wink.gif?4c9b33" alt=';)' class='wp-smiley' /></p><pre class="brush: bash; title: ; notranslate">
	unix password sync = Yes
	pam password change = Yes
</pre><h3>More</h3><p>Please let me know about your issues and ideas on this topic.</p><p>Resources: <a title="Samba Man pages" href="http://www.samba.org/samba/docs/man/manpages-3/">Samba Man pages</a></p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2012/02/samba-configuration/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Building Eclipse Rich Client Application automatically (Tycho)</title><link>http://alexander.holbreich.org/2012/02/eclipse-tycho-build/</link> <comments>http://alexander.holbreich.org/2012/02/eclipse-tycho-build/#comments</comments> <pubDate>Wed, 01 Feb 2012 22:44:21 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[SCM]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Software Engineering & Architecture]]></category> <category><![CDATA[automation]]></category> <category><![CDATA[buildmanagement]]></category> <category><![CDATA[ci]]></category> <category><![CDATA[eclipse application]]></category> <category><![CDATA[jenkins]]></category> <category><![CDATA[life game]]></category> <category><![CDATA[maven]]></category> <category><![CDATA[rcp]]></category> <category><![CDATA[scm]]></category> <category><![CDATA[tycho]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=1083</guid> <description><![CDATA[This post is attended to everyone who is creating Java applications with Eclipse Rich Client Platform. This article describes a working tycho configuration on working project (demo) project. That project can be build fully automatically with tycho on your CI server e.g. Jenkins. If you have developed Eclipse RCP, you maybe also come to the [...]]]></description> <content:encoded><![CDATA[<p>This post is attended to everyone who is creating Java applications with Eclipse Rich Client Platform.<a href="http://alexander.holbreich.org/wp-content/uploads/2012/02/tycho-logo.png?4c9b33"><img src="http://alexander.holbreich.org/wp-content/uploads/2012/02/tycho-logo.png?4c9b33" alt="" title="tycho-logo" width="150" height="147" class="alignright size-full wp-image-1131" style="margin: 5px;"/></a> This article describes a working tycho configuration on working project (demo) project. That project can be build fully automatically with tycho on your CI server e.g. Jenkins.<br /> If you have developed Eclipse RCP, you maybe also come to the conclusion that PDE-Build out of Eclipse IDE is not really an apropriate and stable way to build serious, production ready applications. But also automatization of PDE Build was not straightforward task, and a such is still not well documented (IMHO).<br /> Furthermore maybe you heard about some alternatives like <a href="http://wiki.eclipse.org/Building_an_RCP_application_with_hudson_%28Buckminster%29" target="_blank">buckminister approach</a> or athena. There is also a couple more approaches, but my focus yet is on tycho because i believe it has bright feature.<br /> So again this post describe kick stat tycho approache the next topic may cover, artifact repository, CI Server or, advanced tycho tasks, fill fre to comment&#8230;</p><h2>Tycho</h2><p>Let me introduce <a href="http://www.eclipse.org/tycho/" target="_blank">tycho</a> in few words here. Technically tycho is a set of maven plugins. But let it be said at the beginning, tycho tries to use all the eclipse PDE/JDT metadata first, everywhere it&#8217;s possible and therefore one of the goals of tycho project is to minimise configuraton duplication in maven artefacts. I try to show how this works on a working example.</p><p>But first here is the self-speaking list of tychos packaging types, i will covers here some of them more detailed.</p><ul><li><strong>eclipse-plugin</strong> result in Eclipse Plug-In bundle</li><li><strong>eclipse-test-plugin</strong> result in a test Plugin</li><li><strong>eclipse-feature</strong> wich eclipse feature as Result</li><li><strong>eclipse-application</strong> builds Eclipse Applicaton</li><li><strong>eclipse-repository</strong> builds repository an executables</li><li><strong>eclipse-update-site</strong> responisble for update-sites</li></ul><p>Tycho current release is 0.13.0 and is used in my example.<br /> <span id="more-1083"></span></p><h2>Example Application.</h2><p>In this article used applicaton is Open source and can be cloned from GitHub (<a href="https://github.com/shuron/lfgm" target="_blank">Shuron&#8217;s RCP Life Game</a>). This app is a very basic but working implementation of Conways Life Game. Technically it consist of: one parent project, one plugin project, one feature, as well as one target and a one repository projects. If you check that out, you will be able to start the game out of eclipse IDE by klicking on the &#8220;Launch Eclipse Application&#8221; Button in open <em>org.holbreich.lfgm.eclipse-repository/example.product</em> file.<br /> As you know an RCP application &#8220;have to&#8221; be build with some set of the eclipse platform plugins &#8211; target platform. That is where we start.</p><h3>Target platform</h3><p>The definition of the target platform in eclipse can be stored in file with file-extension <strong>.target</strong>. So my example target platform definition looks like following.</p><pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
&lt;?pde version=&quot;3.6&quot;?&gt;
&lt;target name=&quot;eclipse 3.7.1 (indigo)&quot; sequenceNumber=&quot;16&quot;&gt;
 &lt;locations&gt;
  &lt;location includeAllPlatforms=&quot;false&quot; includeMode=&quot;planner&quot; includeSource=&quot;false&quot; type=&quot;InstallableUnit&quot;&gt;
  &lt;unit id=&quot;org.eclipse.rcp.source.feature.group&quot; version=&quot;3.7.1.r37x_v20110729-9DB5FmNFnFLSFCtLxnRfMqt15A4A&quot;/&gt;
  &lt;unit id=&quot;org.eclipse.equinox.sdk.feature.group&quot; version=&quot;3.7.1.R37x_v20110907-7M7W8h8eNV4Vrz-hz01A7SL_MhZP&quot;/&gt;
  &lt;unit id=&quot;org.eclipse.pde.feature.group&quot; version=&quot;3.7.1.r37x_v20110810-0800-7b7qFVtFEx2XnmZ4jlM5mjM&quot;/&gt;
  &lt;repository location=&quot;http://download.eclipse.org/releases/indigo&quot;/&gt;
 &lt;/location&gt;
&lt;/locations&gt;
&lt;/target&gt;
</pre><p>Maven&#8217;s central project configuration file is pom.xml. The Element <em>build</em> of the pom.xml is a central element where all the needed (plugin) declarations are placed, so that maven is able to get the knowlege about how to compile and build desired artefacts. Typically you&#8217;ll find here the definition of needed maven plugins with their configurations, executions and goals. Please see <a href="http://maven.apache.org/pom.html#Plugins">pom.xml Reference</a> on detailed information on how it works toghether in maven.</p><p>The target platfrom which was mentioned abow is introduced to maven through mavens&#8217;s <a href="http://mojo.codehaus.org/build-helper-maven-plugin/" target="_blank">build-helper-maven-plugin</a> as an artifact. See the configuration section of that plugin.</p><pre class="brush: xml; title: ; notranslate">
 &lt;build&gt;
    &lt;plugins&gt;
       &lt;plugin&gt;
        &lt;!-- Id and version of build helper plugin --&gt;
	&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
        &lt;artifactId&gt;build-helper-maven-plugin&lt;/artifactId&gt;
	&lt;version&gt;1.3&lt;/version&gt;
		&lt;executions&gt;
		&lt;execution&gt;
		  &lt;id&gt;attach-artifacts&lt;/id&gt;
		  &lt;phase&gt;package&lt;/phase&gt;
		  &lt;goals&gt;
			&lt;goal&gt;attach-artifact&lt;/goal&gt;
		  &lt;/goals&gt;
		  &lt;configuration&gt;
		        &lt;artifacts&gt;
                             &lt;artifact&gt;
				 &lt;file&gt;indigo.target&lt;/file&gt;
				 &lt;type&gt;target&lt;/type&gt;
				 &lt;classifier&gt;indigo&lt;/classifier&gt;
			     &lt;/artifact&gt;
		         &lt;/artifacts&gt;
		  &lt;/configuration&gt;
		&lt;/execution&gt;
		&lt;/executions&gt;
	&lt;/plugin&gt;
	&lt;/plugins&gt;
&lt;/build&gt;
</pre><p>Now our target platform can be used whenever we like and we would like to use it nearly everywhere, so that leads to the idea to provide this last configuration only once in the parent pom.xml of the maven parent project for the whole Life Game Application.</p><h3>Parent project</h3><p>A <em>parent project</em> is a maven way to handle a kind of configuration inheritance. My so called parent project defines some usefull and multiply used things for all of the modules used in the current application and also provides me the ability to build the whole application at once. Let me show you the whole file here, excuse me if it appears a bit unreadable now.</p><pre class="brush: xml; title: ; notranslate">
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;
xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 

http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;

  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  &lt;groupId&gt;org.holbreich.lfgm&lt;/groupId&gt;
  &lt;artifactId&gt;parent&lt;/artifactId&gt;
  &lt;version&gt;1.0.0-SNAPSHOT&lt;/version&gt;
  &lt;packaging&gt;pom&lt;/packaging&gt;
  &lt;name&gt;Shuron's Life Game Maven Parent Project&lt;/name&gt;

  &lt;properties&gt;
    &lt;!-- just some properties, tycho version and encoding --&gt;
  &lt;tycho-version&gt;0.13.0&lt;/tycho-version&gt;
		&lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt;
    &lt;/properties&gt;
&lt;!-- eclipse IDE flat project style. So parent project is only sibling folder
   therefore has to acces his modules by &quot;../&quot;. Here are all the child modules. --&gt;
	&lt;modules&gt;
		&lt;module&gt;../org.holbreich.lfgm&lt;/module&gt;
		&lt;module&gt;../org.holbreich.lfgm.target&lt;/module&gt;
		&lt;module&gt;../org.holbreich.lfgm.feature&lt;/module&gt;
		&lt;module&gt;../org.holbreich.lfgm.eclipse-repository&lt;/module&gt;
	&lt;/modules&gt;

	&lt;build&gt;
		&lt;plugins&gt;
                  &lt;!-- defintion of tychos target-platform-configuration plugin --&gt;
			&lt;plugin&gt;
				&lt;groupId&gt;org.eclipse.tycho&lt;/groupId&gt;
				&lt;artifactId&gt;target-platform-configuration&lt;/artifactId&gt;
				&lt;version&gt;${tycho-version}&lt;/version&gt;
				&lt;configuration&gt;
					&lt;resolver&gt;p2&lt;/resolver&gt;
					&lt;target&gt;
                            &lt;!--  A reference to target platform artefact: --&gt;
						&lt;artifact&gt;
							&lt;groupId&gt;org.holbreich.lfgm&lt;/groupId&gt;
							&lt;artifactId&gt;target-platform&lt;/artifactId&gt;
							&lt;version&gt;1.0.0-SNAPSHOT&lt;/version&gt;
							&lt;classifier&gt;indigo&lt;/classifier&gt;
						&lt;/artifact&gt;
					&lt;/target&gt;
					&lt;ignoreTychoRepositories&gt;true&lt;/ignoreTychoRepositories&gt;
                           &lt;!-- Environment configuration for the taget platform --&gt;
					&lt;environments&gt;
						&lt;environment&gt;
							&lt;os&gt;win32&lt;/os&gt;
							&lt;ws&gt;win32&lt;/ws&gt;
							&lt;arch&gt;x86&lt;/arch&gt;
						&lt;/environment&gt;
						&lt;environment&gt;
							&lt;os&gt;linux&lt;/os&gt;
							&lt;ws&gt;gtk&lt;/ws&gt;
							&lt;arch&gt;x86&lt;/arch&gt;
  						&lt;/environment&gt;
					&lt;/environments&gt;
				&lt;/configuration&gt;
			&lt;/plugin&gt;
                 &lt;!-- defintion of tycho-maven-plugin --&gt;
			&lt;plugin&gt;
				&lt;groupId&gt;org.eclipse.tycho&lt;/groupId&gt;
				&lt;artifactId&gt;tycho-maven-plugin&lt;/artifactId&gt;
				&lt;version&gt;${tycho-version}&lt;/version&gt;
				&lt;extensions&gt;true&lt;/extensions&gt;
			&lt;/plugin&gt;
		&lt;/plugins&gt;
	&lt;/build&gt;
&lt;/project&gt;
</pre><p>As already mentioned in the comments of the pom.xml that defines known modules and a set of plugins with their configuration, here actually two plugins:</p><ul><li>target-platform-configuraton &#8211; which refers to allready discussed target platform artifact and provides aditional environment configuration.</li><li>tycho-maven-plugin &#8211; which cdefines  addtional packaging types like eclipse-plugin and eclipse feature.</li></ul><p>That definition allows you to minimize pom.xml of the plugin&#8217;s and features self.</p><h3>Plug-in pom.xml</h3><p>As all used plugins are already defined in the parent, the actual the pom.xml file of the pluign project is pretty short and looks like this:</p><pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;project
	xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 

http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;

	xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;
        xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt;
	&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
	&lt;artifactId&gt;org.holbreich.lfgm&lt;/artifactId&gt;
	&lt;version&gt;1.0.0-SNAPSHOT&lt;/version&gt;
	&lt;packaging&gt;eclipse-plugin&lt;/packaging&gt;
	&lt;!-- Parent reference --&gt;
	&lt;parent&gt;
    	 &lt;artifactId&gt;parent&lt;/artifactId&gt;
    	 &lt;groupId&gt;org.holbreich.lfgm&lt;/groupId&gt;
    	 &lt;version&gt;1.0.0-SNAPSHOT&lt;/version&gt;
    	 &lt;relativePath&gt;../org.holbreich.lfgm.parent/pom.xml&lt;/relativePath&gt;
  	&lt;/parent&gt;
&lt;/project&gt;
</pre><p>And this is great, becuase in a larg application you will have much of the plugings with their simple pom files.<br /> You see the important moment is the reference to the parent and declaration of the packaging type <em>eclipse-plugin</em>. Eclipse Feature project uses <em>eclipse-feature</em> packaging target, but looks most the same, so i&#8217;m not showing it here.</p><h3>Repository</h3><p>And finally Repositoy Plugin come into play. It&#8217;s defines routines for the last assembly and packing of a product. Here i bring only the build element of the pom.xml file where the execution element of <strong>tycho-p2-director-plugin</strong> defines these two goals.</p><pre class="brush: xml; title: ; notranslate">
  &lt;build&gt;
	&lt;plugins&gt;
	&lt;plugin&gt;
		&lt;groupId&gt;org.eclipse.tycho&lt;/groupId&gt;
		&lt;artifactId&gt;tycho-p2-director-plugin&lt;/artifactId&gt;
		&lt;version&gt;${tycho-version}&lt;/version&gt;
		&lt;executions&gt;
			&lt;execution&gt;
				&lt;id&gt;materialize-products&lt;/id&gt;
				&lt;goals&gt;
					&lt;goal&gt;materialize-products&lt;/goal&gt;
				&lt;/goals&gt;
			&lt;/execution&gt;
			&lt;execution&gt;
				&lt;id&gt;archive-products&lt;/id&gt;
				&lt;goals&gt;
					&lt;goal&gt;archive-products&lt;/goal&gt;
				&lt;/goals&gt;
			&lt;/execution&gt;
		&lt;/executions&gt;
	&lt;/plugin&gt;
	&lt;/plugins&gt;
&lt;/build&gt;
</pre><p>Now here we are. I&#8217;v didn&#8217;t mentioned further eclipse artefacts like feature.xml or some.project, they stay as usual and musst work also whitout maven. You can start to buld your app by executing maven golas like <em>mvn clean install</em> or make this configuration in your CI.</p><h3>Build automatisation with Jenkins CI</h3><p>The showed configuration is ready for automation as it is. You can automate this e.g. very simple with a standard Jenkins maven job. Provide git chekout path, for all the projects and define e.g. <em>clean install</em> as maven goals for execution on parent project&#8217;s pom.xml in yout Jenkins Job.<br /> <a href="http://alexander.holbreich.org/wp-content/uploads/2012/01/jenkins1.gif?4c9b33"><br /> <img src="http://alexander.holbreich.org/wp-content/uploads/2012/01/jenkins1-150x150.gif?4c9b33" alt="" title="jenkins1" width="100" height="100" class="size-thumbnail wp-image-388 alignleft" style="margin: 5px; border-width:1px; border-style:solid;"/></a><a href="http://alexander.holbreich.org/wp-content/uploads/2012/01/jenkins.gif?4c9b33"><img src="http://alexander.holbreich.org/wp-content/uploads/2012/01/jenkins-150x150.gif?4c9b33" alt="" title="jenkins" width="100" height="100" class="aligncenter size-thumbnail wp-image-1120" style="margin: 5px; border-width:1px; border-style:solid;"/></a><a href="http://alexander.holbreich.org/wp-content/uploads/2012/02/jenkins2.gif?4c9b33"><img src="http://alexander.holbreich.org/wp-content/uploads/2012/02/jenkins2-150x150.gif?4c9b33" alt="" title="jenkins2" width="100" height="100" class="alignnone size-thumbnail wp-image-1135" style="margin: 5px; border-width:1px; border-style:solid;"/></a></p><p>However zipped standalone executables for Linux and Windows can be found under org.holbreich.lfgm.eclipse-repository/target/products/ in the project workspace after sucessfull build. Have fun and let me know if you missed something i this description.</p><h3>Further questions</h3><p>This post was supposed to give you first motivation to try tycho on your own project and of course not all the aspects of the tycho build are covered here. I think following aspects are good topics for a discussion and future articles:</p><ul><li> Release configuration and management is e.g. a topic for itsself and is straght-forward maven relase.</li><li> Eclipse  Test Plugin</li><li> Code qulity with maven: Ceckstyle, PMD, corbetrura &#038; Co</li><li> Eclipse repository and update-side management</li><li> More maven best practices</li></ul><p>Let me know if something of the abow topic is something of your interesst.<br /> <strong>As well you are invited to comment your solutions and best practices</strong>.</p><h4>Further Readings</h4><ul><li><a href="http://wiki.eclipse.org/Tycho/Reference_Card">Tycho reference card</a></li><li><a href="http://maven.apache.org/guides/getting-started/index.html">Maven getting started</a></li><li><a href="http://maven.apache.org/pom.html">Maven POM-file reference</a></li><li><a href="http://wiki.eclipse.org/Tycho/Packaging_Types">Tycho package Types</a></li></ul><p>Tank you for reading if you got here <img src="http://alexander.holbreich.org/wp-includes/images/smilies/icon_wink.gif?4c9b33" alt=';)' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2012/02/eclipse-tycho-build/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Packing with tar gzip, bzip2 and zip</title><link>http://alexander.holbreich.org/2011/12/packing-tar-gzip-bzip2-zip/</link> <comments>http://alexander.holbreich.org/2011/12/packing-tar-gzip-bzip2-zip/#comments</comments> <pubDate>Sat, 31 Dec 2011 13:35:18 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[linux]]></category> <category><![CDATA[bzip2]]></category> <category><![CDATA[gzip]]></category> <category><![CDATA[tar]]></category> <category><![CDATA[zip]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=1044</guid> <description><![CDATA[Looking on my block at the end of the year i see than nearly two years ago i wrote about extracting archives under Linux but not about putting files in to archives. Now a have some time to continue. Tar.gz Here are some common way to create your archives. Parameters explanation: c  or &#8211;create create [...]]]></description> <content:encoded><![CDATA[<p><a href="http://alexander.holbreich.org/wp-content/uploads/2009/02/tar-gzip.gif?4c9b33"><img class="size-full wp-image-388 alignleft" style="margin: 5px;" title="tar-gzip" src="http://alexander.holbreich.org/wp-content/uploads/2009/02/tar-gzip.gif?4c9b33" alt="" width="80" height="80" /></a>Looking on my block at the end of the year i see than nearly two years ago i wrote about <a title="Extracting tar, gzip, bzip2, z" href="http://alexander.holbreich.org/2009/02/tar-gzip/">extracting archives</a> under Linux but not about putting files in to archives. Now a have some time to continue.</p><h2>Tar.gz</h2><p>Here are some common way to create your archives.</p><pre class="brush: bash; title: ; notranslate">
#Creates simple targetfile.tar without compression.
tar cvf targetfile.tar sourcedir/*

#Zip everything beneath sourcedir to targetfile.tar.gz
tar cvzf targetfile.tar.gz sourcedir/*

#Bzip2 everything beneath sourcedir to targetfile.tar.bz2
tar cvjf targetfile.tar.bz2 sourcedir/*
</pre><p>Parameters explanation:</p><ul><li><em>c</em>  or <em>&#8211;create</em> create a new archive</li><li><em>v</em> or <em>&#8211;verbose</em>  verbosely list files processed</li><li><em>z</em> or <em>&#8211;gzip</em>  usage of gzip compression (or also decompression, context dependent)</li><li><em>j</em> or <em>&#8211;bzip2</em> usage of bzip2 compression</li><li>f or &#8211;<em>file</em>  use archive file</li></ul><p>Alternative with pipe usage:</p><pre class="brush: bash; title: ; notranslate">
tar -cf - sourcedir | gzip -c &gt; filename.tar.gz
</pre><h2>Zip</h2><p>Some examples</p><pre class="brush: bash; title: ; notranslate">
#Zip every file in current directroy to file.zip.
#But hidden files like (.htaccess) are not included.
zip file.zip sourcedir/*

#also includes hidden files.
zip file.zip sourcedir/* .*
</pre><p>The above examples include directories but still not their content recursively, -<em>r</em> option is required.</p><pre class="brush: bash; title: ; notranslate">
#Adds all files and directories recursivly.
zip file.zip -r /sourcedir/*

#Same as abowe with addtional enryption and password lock.
#Password is prompted on the terminal.
zip file.zip -re /sourcedir/*

#Splitts creted archive to parts not bigger than 2 Gigabytes.
zip -s 2g -r test.zip ./*
</pre><p>Hope that helps someone.</p><p>Happy new year!!!</p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2011/12/packing-tar-gzip-bzip2-zip/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Jboss 7 setup on debian linux</title><link>http://alexander.holbreich.org/2011/11/jboss-7-setup-linux/</link> <comments>http://alexander.holbreich.org/2011/11/jboss-7-setup-linux/#comments</comments> <pubDate>Thu, 10 Nov 2011 20:29:33 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[JBoss]]></category> <category><![CDATA[linux]]></category> <category><![CDATA[Personal]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[init.d]]></category> <category><![CDATA[open source]]></category> <category><![CDATA[setup]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=981</guid> <description><![CDATA[This is a short step by step explanation of the setup of JBoss 7.0.2 on your Linux (explicit debian). Nowadays there is still no official Debian package for JBoss 7 out there, so we have to do a couple of steps manually.  First i describe how to download and to prepare the jboss. Secondly we [...]]]></description> <content:encoded><![CDATA[<p><a href="http://alexander.holbreich.org/wp-content/uploads/2011/11/as7_logo.png?4c9b33"><img class="alignright size-full wp-image-1012" title="jboss7_logo" src="http://alexander.holbreich.org/wp-content/uploads/2011/11/as7_logo.png?4c9b33" alt="" width="128" height="150" /></a>This is a short step by step explanation of the setup of JBoss 7.0.2 on your Linux (explicit debian). Nowadays there is still no official Debian package for JBoss 7 out there, so we have to do a couple of steps manually.  First i describe how to download and to prepare the jboss. Secondly we do some basic configuration that you&#8217;ll be needed and at the end i will show you one of the ways to register JBoss as a service.</p><h3>1. download and prepare.</h3><p>Start by download  currently available version (7.0.2) of the JBoss 7.</p><pre class="brush: bash; title: ; notranslate">
#Web Profile version download.
wget http://download.jboss.org/jbossas/7.0/jboss-as-7.0.2.Final/jboss-as-web-7.0.2.Final.tar.gz
</pre><p>Extracting files to the final location <a title="Extracting tar, gzip, bzip2, z" href="http://alexander.holbreich.org/2009/02/tar-gzip/">using tar</a>.</p><p><span id="more-981"></span><pre class="brush: bash; title: ; notranslate">
&lt;pre&gt;tar zxvf jboss-as-web-7.0.2.Final.tar.gz -C /usr/local/
</pre><p>Now your JBoss 7 is placed inside /usr/local/jboss-as-web-7.0.2.Final/.I dont&#8217;t like that name.  It&#8217;s just cosmetics, but i prefer to rename the last part ot the path.</p><pre class="brush: bash; title: ; notranslate">
cd /usr/local/
mv jboss-as-web-7.0.2.Final/ jboss-7.0.2
</pre><p>Now important things. Some basic security and right management. I suppose  you don&#8217;t want to start your JBoss with root rights.<br /> Therefore we need to create new user and new group named  <em>jboss</em>. Make them owner of your JBoss stuff.</p><pre class="brush: bash; title: ; notranslate">
addgroup jboss
useradd -g jboss jboss
chown -R jboss:jboss /usr/local/jboss-7.0.2/
</pre><p>Your jboss 7 is almost installed now.</p><h3>2. Configuration and first test.</h3><p>Start your brand new  Jboss 7 server with:</p><pre class="brush: bash; title: ; notranslate">
sudo -u jboss sh /usr/local/jboss-7.0.2/bin/standalone.sh &amp;
</pre><p>Now it  is testable on your local machine with <em>http://localhost:8080.</em><br /> <strong>But!</strong> maybe you trying to install that jboss on remote machine and want to access this installation remotely. I that case you need to enable remote interface of your JBoss. I assume we start by standalone configuration, so  you have to edit <em>/usr/local/jboss-7.0.2/standalone/configuration/standalone.xml</em> file. The easiest way is to  find <em>&lt;interfaces&gt;</em> section and replace the 127.0.0.1 address with <em>&lt;any-address/&gt;</em></p><pre class="brush: xml; title: ; notranslate">
&lt;interfaces&gt;
   &lt;interface name=&quot;management&quot;&gt;
     &lt;any-address/&gt;
     &lt;/interface&gt;
   &lt;interface name=&quot;public&quot;&gt;
    &lt;any-address/&gt;
   &lt;/interface&gt;
 &lt;/interfaces&gt;
</pre><p>Beware with this configuration you expose also the management console to the public. The console is bounded to interface named=&#8221;management&#8221; by default.  In production environments you have to put more attention to this. but now you can access your jboss from anywhere.</p><h3>3. Jboss as Service</h3><p>Now we have a basic configured JBoss, but i want to maintain it as a service. Unfortunately Jboss archive has no predefined <em>init.d</em> scripts, so i have to to it on my own. But this is not a big problem, just straightforward following some Debian conventions and useful scripts.</p><p>Ok, let&#8217;s create jboss maintenance script.</p><pre class="brush: bash; title: ; notranslate">
touch /etc/init.d/jboss
chmod 755 /etc/init.d/jboss
</pre><p>Ready! Now put following inside.</p><pre class="brush: bash; title: ; notranslate">
#!/bin/sh
### BEGIN INIT INFO
# Provides: jboss
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Management of JBoss AS v7.x
### END INIT INFO

#Defining JBOSS_HOME
JBOSS_HOME=/usr/local/jboss-7.0.2

case &quot;$1&quot; in
start)
echo &quot;Starting JBoss AS7...&quot;
sudo -u jboss sh ${JBOSS_HOME}/bin/standalone.sh &amp;
;;
stop)
echo &quot;Stopping JBoss AS7...&quot;
sudo -u jboss sh ${JBOSS_HOME}/bin/jboss-admin.sh --connect command=:shutdown
;;
log)
echo &quot;Showing server.log...&quot;
tail -1000f ${JBOSS_HOME}/standalone/log/server.log
;;
*)
echo &quot;Usage: /etc/init.d/jboss {start|stop|log}&quot;
exit 1
;; esac
exit 0
</pre><p>This file is ready to use. You can use it self for manual start and stop of your jboss, you also can follow the server.log by using &#8220;log&#8221; parameter.<br /> But let&#8217;s make it to the end, as an automatic starting service. It&#8217;s easy with update-rc.d script:</p><pre class="brush: bash; title: ; notranslate">
update-rc.d jboss defaults
</pre><p>Now your ready and your JBoss will be shutdown on machine shutdown and it should start on machine start-up.</p><p>Of course this is not the only way to start using JBoss 7. Your ideas are welcome!</p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2011/11/jboss-7-setup-linux/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Installing Java 7 on Debian</title><link>http://alexander.holbreich.org/2011/11/java-7-on-debian/</link> <comments>http://alexander.holbreich.org/2011/11/java-7-on-debian/#comments</comments> <pubDate>Wed, 09 Nov 2011 20:15:44 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[java]]></category> <category><![CDATA[linux]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Java]]></category> <category><![CDATA[setup]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=962</guid> <description><![CDATA[Here is just an example of how to install java 7 on your linux. I use current Debian and oracle (former sun) java 7. First i had to download the latest java from oracle site and then extrat it. I have to do it because at the moment the is no official debain package for [...]]]></description> <content:encoded><![CDATA[<pre>Here is just an example of how to install java 7 on your linux.
I use current Debian and oracle (former sun) java 7.

First i had to download the latest java from oracle site and then extrat it. I have to do it because at the moment the is no official debain package for java 7.
So we are not able to do it with <em>apt-get</em> as we can it for <a href="http://alexander.holbreich.org/2010/01/java-jboss-debian-linux/">java 6</a>.</pre><p><span id="more-962"></span></p><pre class="brush: bash; title: ; notranslate">
wget http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-x64.tar.gz
tar zxvf jdk-7-linux-x64.tar.gz -C /usr/lib64/jvm/
</pre><p>Then we have to do some configuration.<br /> Debian Linux has useful script to maintain different version of one programs like <em>java</em> called <a href="http://linux.die.net/man/8/update-alternatives">update-altenatives</a>. So i simply use this.</p><pre class="brush: bash; title: ; notranslate">
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0/bin/java 1065
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.7.0/bin/javac 1065
</pre><p>Where <em>1065</em> is a given priority.</p><p>To check my installation i use <em>&#8211;config </em>paramter</p><pre class="brush: bash; title: ; notranslate">
update-alternatives --config java
#this prints:
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                      Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/jdk1.7.0/bin/java             1065      auto mode
  1            /usr/lib/jvm/java-6-openjdk/jre/bin/java   1061      manual mode
  2            /usr/lib/jvm/jdk1.7.0/bin/java             1065      manual mode&lt;/pre&gt;
</pre><p>And because 1065 is higher than 1061, the fresh installed java 7 will be used by default on my machine</p><pre class="brush: bash; title: ; notranslate">
java -version
#prints:
java version &quot;1.7.0&quot;
 Java(TM) SE Runtime Environment (build 1.7.0-b147)
 Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)
</pre><p>Hope this save somebody some setup time.</p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2011/11/java-7-on-debian/feed/</wfw:commentRss> <slash:comments>25</slash:comments> </item> <item><title>Favorite Eclipse UML Plugin</title><link>http://alexander.holbreich.org/2011/08/favorite-eclipse-uml-plugin/</link> <comments>http://alexander.holbreich.org/2011/08/favorite-eclipse-uml-plugin/#comments</comments> <pubDate>Sun, 21 Aug 2011 21:06:00 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[java]]></category> <category><![CDATA[Personal]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Software Engineering & Architecture]]></category> <category><![CDATA[architectural details]]></category> <category><![CDATA[class diagram]]></category> <category><![CDATA[eclipse]]></category> <category><![CDATA[eclipse ide]]></category> <category><![CDATA[ide]]></category> <category><![CDATA[Java]]></category> <category><![CDATA[Plugin]]></category> <category><![CDATA[reverse engineering]]></category> <category><![CDATA[uml]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=957</guid> <description><![CDATA[What is your favorite Free or Open-Source UML Plug-in? Every year i try some of them and  remove them after few hours. As i remember, they where resource-hungry or just bad in reverse engineering Some weeks ago i tried ObjectAid UML Explorer Class Diagram and liked it. It could quick and easy create simple class [...]]]></description> <content:encoded><![CDATA[<p>What is your favorite Free or Open-Source UML Plug-in?</p><p>Every year i try some of them and  remove them after few hours. As i remember, they where resource-hungry or just bad in reverse engineering</p><p>Some weeks ago i tried <a href="http://www.objectaid.com/class-diagram">ObjectAid UML Explorer Class Diagram</a> and liked it. It could quick and easy create simple class Diagrams &#8211; just by Drag &amp; Drop. And i had no problems with static constructors or inner classes and other stuff in the code which causes problems to another Plug-ins.</p><p>Unfortunately Object Aid Sequence Diagram are not free but cost not much for private usage. Maybe i&#8217;ll try it soon.</p><p><strong>But first i would ask you what is your favorite Eclipse IDE Plug-in for fast and easy (e.g. partly) revers engineered UML diagrams which can be used to show some architectural details to your colleagues?</strong></p><p>Thank you for comments!</p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2011/08/favorite-eclipse-uml-plugin/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Bootcharting</title><link>http://alexander.holbreich.org/2011/07/bootcharting/</link> <comments>http://alexander.holbreich.org/2011/07/bootcharting/#comments</comments> <pubDate>Sun, 10 Jul 2011 13:10:13 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[linux]]></category> <category><![CDATA[Personal]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[boot]]></category> <category><![CDATA[bootchart]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=931</guid> <description><![CDATA[The pictureon the right (klick to enrange)  shows  how Ubunto boot process is going on my 5 years old Thinkpad T60. Bootchart utility does such charts automatically. If you interestiong how easy it it to enable such bootcharting read below. Installing bootchart See how to install bootchart logger on ubuntu, and other linux distributions. Yo [...]]]></description> <content:encoded><![CDATA[<pre><a href="http://alexander.holbreich.org/wp-content/uploads/2011/07/aho-ThinkPad-T60-natty-20110707-1.png?4c9b33"><img class="size-large wp-image-932 alignright" title="aho-ThinkPad-T60-natty-20110707-1" src="http://alexander.holbreich.org/wp-content/uploads/2011/07/aho-ThinkPad-T60-natty-20110707-1-213x1024.png?4c9b33" alt="" width="213" height="200" /></a></pre><p>The pictureon the right (klick to enrange)  shows  how Ubunto boot process is going on my 5 years old Thinkpad T60. Bootchart utility does such charts automatically. If you interestiong how easy it it to enable such bootcharting read below.</p><h2>Installing bootchart</h2><p>See how to install bootchart logger <a href="https://wiki.ubuntu.com/BootCharting">on ubuntu</a>, and <a href="http://www.bootchart.org/download.html">other linux distributions</a>.</p><p>Yo need bootchart and, pybootchartgui</p><pre class="brush: bash; title: ; notranslate">
apt-get install bootchart

apt-get install pybootchartgui
</pre><p><span id="more-931"></span></p><pre></pre><p>That will automatically add bootchart logger to your grub configuration . Restart your machine and look for an image file in /var/log/bootchart directory.</p><h2>Disabling bootchart</h2><p>Someday you maybe wan&#8217;t to disable bootchart again.</p><p>To disable it just throw it out of your GRUB configuration. On GRUB 2  (which is default on ubuntu since v. 9.10) you have to change file <strong>/etc/default/grub. </strong></p><p>Change line</p><pre>GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
to
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash bootchart=disable"</pre><p>and then run:</p><pre class="brush: bash; title: ; notranslate">
sudo update-grub
</pre><p>You done.</p><p>On GRUB 1 you have to edit <strong>/boot/grub/menu.lst.</strong></p><p style="text-align: center;"><strong>Any comments?</strong></p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2011/07/bootcharting/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>GIT</title><link>http://alexander.holbreich.org/2011/02/git/</link> <comments>http://alexander.holbreich.org/2011/02/git/#comments</comments> <pubDate>Sat, 26 Feb 2011 12:12:20 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[linux]]></category> <category><![CDATA[Personal]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Software Engineering & Architecture]]></category> <category><![CDATA[git]]></category> <category><![CDATA[git-core]]></category> <category><![CDATA[setup]]></category> <category><![CDATA[source control]]></category> <category><![CDATA[source versioning]]></category> <category><![CDATA[tutorial]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=765</guid> <description><![CDATA[I want to share with you some thoughts on GIT because I think that was a right invention to the right time and place. (This article should be finished half year ago right after i wrote , but unfortunatelly i didn&#8217;t find any time to finish it untill now.) Motivation My first version control system [...]]]></description> <content:encoded><![CDATA[<p>I want to share with you some thoughts on GIT because I think that was a right invention to the right time and place.</p><p><em>(This article should be finished half year ago right after i wrote </em><a href="http://alexander.holbreich.org/2010/11/subversion-on-debian-linux/"><em>about svn server installation</em></a><em>, but unfortunatelly i didn&#8217;t find any time to finish it untill now.)</em></p><h2>Motivation</h2><p><img class="alignleft" style="margin: 10px 15px;" title="Git Logo by by Henrik Nyh" src="http://henrik.nyh.se/uploads/git-logo.png" alt="" width="97" height="188" />My first version control system (VCS) was CVS and i used it with eclipse 2.0 for programming in java. I found CVS quite impressive and liked it a lot. It was also quite reliable and moderatelly fast.<br /> Then someone at the university told us to use SVN, because it has &#8220;plenty&#8221; of advantages. Somehow i found SVN not bad even if the eclipse svn plugin quality was never quite good. However SVN matured  and became powerful source control system and many many people and companies started using it. I think it&#8217;s the most used version control system.</p><p>I like SVN for easy branching and tagging (with good eclipse plugin support), for global version numbers, for understanding &#8220;http://&#8221; (with Web-Dav) as well as for more comfortable managing tools and <a href="http://alexander.holbreich.org/2010/11/subversion-on-debian-linux/"> easy installation and configuration</a>.</p><p>But that&#8217;s all what i like&#8230; There is no more practical advantages over CVS and moreover there are even some disadvantages also in comparison to cvs.</p><ul><li>SVN is slow and double slow over HTTP. It may not be critical if you do your changes on several files and them commits &#8216;em. I&#8217;m doing so in my  java project and it&#8217;s ok. But there could be also other scenarios e.g. if you deal with such &#8220;monsters&#8221; like <a href="http://alexander.holbreich.org/tag/magento/">magento</a>, performance gain very fast on importance <img src="http://alexander.holbreich.org/wp-includes/images/smilies/icon_wink.gif?4c9b33" alt=';)' class='wp-smiley' /></li><li>Folder movement is a nightmare. With the subversion you have to know what you do when you start move around your folders. <img src="http://alexander.holbreich.org/wp-includes/images/smilies/icon_wink.gif?4c9b33" alt=';)' class='wp-smiley' /></li><li>Ugly <em>.svn</em> folders in the folder tree of your project. O course cvs had them too. But do we really need them? Sometimes i just wanna to copy my project tree without that stuff.</li><li>Not closed connection (don&#8217;t know if it is an server or eclipse plugin bug). Sometimes svn commits leave not closed connection. Eclipse hangs. <img src="http://alexander.holbreich.org/wp-includes/images/smilies/icon_sad.gif?4c9b33" alt=':(' class='wp-smiley' /></li><li>SVN consumesa lot of space, more than cvs local and on the server.</li><li>You need to be online if you want to commit.</li></ul><p>All of these disadvantages i mentioned above are fixed in GIT. Git is much faster, flexible. So let  install it!<span id="more-765"></span></p><h2>Installation</h2><p>We start with installing the git-core component from linux (debian in my case) public repositories.</p><pre class="brush: bash; title: ; notranslate">
$ apt-get update
$ apt-get install git-core
</pre><p>After executing of these commands, which takes only approx. 2 seconds. you have installed the git-core on your machine. So now you can test it by checking the version or common commands list</p><pre class="brush: bash; title: ; notranslate">
$ git --version
# Returns e.g.:  git version 1.5.6.5
$ git
# Returns usage options
</pre><p>First good thing to do after a fresh git installation is to define some global properties:</p><pre class="brush: bash; title: ; notranslate">
$ git config --global user.name &quot;Alexander Holbreich&quot;
$ git config --global user.email &quot;alexander@xxxxx.org&quot;
$ git config --global color.status auto
$ git config --global color.branch auto
</pre><p>There are also more properties and configuration possibilities for git. But for normal usage you will never need them. If you think different see <a href="http://www.kernel.org/pub/software/scm/git/docs/git-config.html">git config manual</a>.</p><p>Normally you will be ready with git installation now.</p><h2>Usage (Remote repositories)<img class="alignright" style="margin: 10px 15px;" title="GitWeb Logo" src="https://git.wiki.kernel.org/images-git/c/cc/Git-logo-jengelh.png" alt="" width="200" height="80" /></h2><p>First you should think about your branching model. Start by<a href="http://nvie.com/posts/a-successful-git-branching-model/"> nvie model</a>. It looks  a bit complicated, but it covers nearly every aspect in big project work.  In an agile team such an approach is very easy maintained by git. See also related <a href="http://stackoverflow.com/questions/2621610/what-git-branching-models-actually-work-the-final-question/dontfollow" target="_blank">Stackoverflow discussion</a>.</p><p>There is a lot of documentation <a href="http://gitref.org/" target="_blank">on git usage</a> on the internet so it makes not much sense to cover everything here again. But if you was interested in installing git, maybe you plan to maintain new reposity, so let&#8217;s look at them.</p><p>Small teams maybe would prefer to work with one central repository (<a href="http://progit.org/book/de/ch5-2.html" target="_blank">centralized workflow</a>) for it is a common approach we know from svn and cvs times.</p><p>Below a bare repository is created as a central one:</p><pre class="brush: bash; title: ; notranslate">
$ git init --bare
</pre><p>Then you can clone this (remote) repository to the local one</p><pre class="brush: bash; title: ; notranslate">
$ git clone git://originrepository.place/somedir/
</pre><p>Continue to work with local repository, <em>add</em>, <em>remove</em>, and <em>commit </em>files to local one.  If you decide to propagate your changes, say at the end of a day, to the central repository, use:</p><pre class="brush: bash; title: ; notranslate">
$ git push origin master
</pre><p>Cloned repositories know their origin repository automatically. &#8220;Origins&#8221;  have to be <em>bare repository</em> because they have no checked-out working trees. If you push to a repository which has a checked-out working tree (which is still allowed) the working tree will not be updated, and that may lead to unexpected results. To sum up, let your central repositories be created by <em>git init &#8211;bare</em>.</p><p>In git it is possible to have several remote repositories for one local. You can add them like this:</p><pre class="brush: bash; title: ; notranslate">
# here http is used as example
$ git remote add  somelib http://someremoteplace/lib/repo..
</pre><p>where &#8220;somelib&#8221; is the alias of repo. Next command shows known remote locations:</p><pre class="brush: bash; title: ; notranslate">
$ git remote -v # shows defined remote repositories aliases with URLs.
</pre><p>I hope this gives you a motivation to start using GIT. Hope also to see your questions or ideas in the comments.</p><h3>More Info and Tools<img class="alignright" style="margin: 10px 15px;" title="Git logo by Dylan Beattie" src="http://www.dylanbeattie.net/git_logo/git_logo_192x106.jpg" alt="" width="192" height="106" /></h3><ul><li><a href="http://gitref.org/" target="_blank">Git command reference</a></li><li><a href="http://www.vogella.de/articles/Git/article.html#remote">Usage tutorial</a></li><li><a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html">Git user manual</a></li><li><a href="http://progit.org/book/dontfollow" target="_blank">Git Pro Book </a>(Online)</li><li><a href="http://code.google.com/p/msysgit/">msysgit</a> git for windows</li></ul> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2011/02/git/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Java EE 5 vs Java EE 6</title><link>http://alexander.holbreich.org/2011/01/javaee5-vs-javaee6/</link> <comments>http://alexander.holbreich.org/2011/01/javaee5-vs-javaee6/#comments</comments> <pubDate>Sat, 29 Jan 2011 23:18:43 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[java]]></category> <category><![CDATA[Software Engineering & Architecture]]></category> <category><![CDATA[Bean Validation]]></category> <category><![CDATA[CDI]]></category> <category><![CDATA[EJB]]></category> <category><![CDATA[Java]]></category> <category><![CDATA[Java Servlet]]></category> <category><![CDATA[JAX-RS]]></category> <category><![CDATA[JAX-WS]]></category> <category><![CDATA[JAXB]]></category> <category><![CDATA[JEE5]]></category> <category><![CDATA[JEE6]]></category> <category><![CDATA[jpa]]></category> <category><![CDATA[JSR-252]]></category> <category><![CDATA[JSR-299]]></category> <category><![CDATA[JSR-315]]></category> <category><![CDATA[JSR-52]]></category> <category><![CDATA[web service]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=812</guid> <description><![CDATA[This post visualizes changes between Java EE Standards 5 and 6. The comparison of standards is listed in four sections Web-Services, Web-Container, Enterprise Application technologies and Maintenance. Hope this helps someone. Web Service related changes Java EE 5 (JSR-244) Java EE 6 (JSR-316) JAX-RPC 1.1 JSR 101 JAX-RPC 1.1 Enterprise Web Services 1.2 JSR 109 Enterprise Web Services 1.3 [...]]]></description> <content:encoded><![CDATA[<p>This post visualizes changes between Java EE Standards 5 and 6. The comparison of standards is listed in four sections Web-Services, Web-Container, Enterprise Application technologies and Maintenance. Hope this helps someone.</p><h2>Web Service related changes</h2><table style="border: 1px solid #555555; height: 267px;" width="545"><thead><tr><th>Java EE 5 (<a href="http://www.jcp.org/en/jsr/detail?id=244">JSR-244</a>)</th><th>Java EE 6 (<a href="http://www.jcp.org/en/jsr/detail?id=316">JSR-316</a>)</th></tr></thead><tbody><tr><td>JAX-RPC 1.1 <a href="http://jcp.org/en/jsr/detail?id=101" target="_blank">JSR 101</a></td><td>JAX-RPC 1.1</td></tr><tr><td>Enterprise Web Services 1.2 <a href="http://jcp.org/en/jsr/detail?id=109" target="_blank">JSR 109</a></td><td>Enterprise Web Services <strong>1.3 </strong><em>(new version)</em></td></tr><tr><td>Web Service Metadata 1.0 <a href="http://jcp.org/en/jsr/detail?id=181" target="_blank">JSR 181</a></td><td>Web Service Metadata 1.0</td></tr><tr><td>Streaming API for XML 1.0 <a href="http://jcp.org/en/jsr/detail?id=173" target="_blank">JSR 173</a></td><td>Streaming API for XML 1.0</td></tr><tr><td>JAX-WS 2.0  <a href="http://jcp.org/en/jsr/detail?id=224" target="_blank">JSR 224</a></td><td><em>JAX-WS</em> <em><strong>2.2 </strong>(<span style="color: #ff9900;">new version</span>)</em></td></tr><tr><td>JAXB 2.0 <a href="http://jcp.org/en/jsr/detail?id=222" target="_blank">JSR 222</a></td><td><em>JAXB</em> <em><strong>2.2</strong></em> <em>(<span style="color: #ff9900;">new version</span>)</em></td></tr><tr><td>SOAP with Attachments API for Java (SAAJ) <a href="http://jcp.org/en/jsr/detail?id=67" target="_blank">JSR 67</a></td><td>Java APIs for XML Messaging 1.3 <em>(</em><span style="color: #ff9900;"><em>new version</em></span><em>) <a href="http://java.sun.com/xml/downloads/jaxm.html">spec</a><br /> </em></td></tr><tr><td></td><td><span style="color: #ff0000;"><em>new! </em></span>JAX-RS 1.1 <a href="http://jcp.org/en/jsr/detail?id=311" target="_blank">JSR 311</a></td></tr><tr><td></td><td><em><span style="color: #ff0000;">new!</span> </em>Java API for XML Registries (JAXR 1.0) <a href="http://jcp.org/en/jsr/detail?id=93" target="_blank">JSR 93</a></td></tr></tbody></table><p><span id="more-812"></span>The new redesigned Java API for XML Web Services (JAX-WS) is the base or a middle part of a newly Java EE 6 Web service stack.  The new stack  includes JAX-WS 2.0, JAXB 2.0, and SAAJ 1.3. and is also called &#8220;integrated stack&#8221;.  JAX-WS was designed to take place of JAX-RPC. Due this also JSR-109 was updated because it describes run time architecture of JEE Web Services Stack. JAXB which provides an easy way to bind an XML schema to java and vice verse, was updated to.</p><p><em>The SOAP with Attachments API</em> <em>for Java</em> (SAAJ) (also known as Java APIs for XML Messaging (JAXM)) provides a standard way to send XML documents over the Internet from the Java platform and was updated slightly containing now other consolidated standard.</p><p>New are JAX-RS, which provides support for <a href="http://www.oracle.com/technetwork/articles/javase/index-137171.html">RESTful</a> Web services and JAXR which enables pull-parsing API for reading and writing XML documents. Also available in Java SE.</p><h2>Web Applications related changes</h2><table style="border: 1px solid #555555; height: 134px;" width="545"><thead><tr><th>Java EE 5</th><th>Java EE 6</th></tr></thead><tbody><tr><td>JSTL <a href="http://jcp.org/en/jsr/detail?id=52" target="_blank">JSR 52</a></td><td>JSTL</td></tr><tr><td>JavaServer Faces 1.2 <a href="http://jcp.org/en/jsr/detail?id=252" target="_blank">JSR 252</a></td><td>JavaServer Faces <strong>2.0 </strong><em>(<span style="color: #ff9900;">new version</span>)</em></td></tr><tr><td>JavaServer Pages 2.1 <a href="http://jcp.org/en/jsr/detail?id=245" target="_blank">JSR 245</a></td><td>JavaServer Pages <strong>2.2 /EL 2.2</strong><em><strong> </strong>(<span style="color: #ff9900;">new version</span>)</em></td></tr><tr><td>Java Servlet 2.5 <a href="http://jcp.org/en/jsr/detail?id=154" target="_blank">JSR 154</a></td><td>Java Servlet 3.0 <a href="http://jcp.org/en/jsr/detail?id=315" target="_blank">JSR 315</a> <em>(<span style="color: #ff9900;">new version</span>)</em></td></tr><tr><td></td><td><em><span style="color: #ff0000;">new!</span> </em>Debugging Support for Other Languages 1.0 <a href="http://jcp.org/en/jsr/detail?id=45" target="_blank">JSR 45</a> <em></em></td></tr></tbody></table><p>In Java EE 6 we have updates of all technologies of the Web Container except JSTL. So e.g. Servlet 3.0 improves Servlet concept in pluggability and some ease of development. It&#8217;s also introduces Async Servlet, and long waited File Uploading!. Also now configuration can be done by annotations.</p><p>New a specification of <em>Debugging Support for Other Languages</em> 1.0<br /> This describes standardized tools for correlating Java virtual machine byte code to source code of languages other than the Java programming language, so it would guarantee debugging possibility of everything what runs is JSR-45 certified container.</p><h2>Enterprise Technologies changes</h2><table style="border: 1px solid #555555; height: 342px;" width="545"><thead><tr><th>Java EE 5</th><th>Java EE 6</th></tr></thead><tbody><tr><td>Common Annotations <a href="http://jcp.org/en/jsr/detail?id=250" target="_blank">JSR 250</a></td><td>Common Annotations<strong> </strong><em></em></td></tr><tr><td>JCA 1.5 <a href="http://jcp.org/en/jsr/detail?id=112" target="_blank">JSR 112</a></td><td>JCA 1.6 <a href="http://jcp.org/en/jsr/detail?id=322" target="_blank">JSR 322</a> <em>(</em><span style="color: #ff9900;"><em>new version</em></span><em>)</em></td></tr><tr><td>JavaMail 1.4</td><td>JavaMail 1.4<em></em></td></tr><tr><td>JMS 1.1 <a href="http://jcp.org/en/jsr/detail?id=914" target="_blank">JSR 914</a></td><td>JMS 1.1</td></tr><tr><td>JTA 1.1 <a href="http://jcp.org/en/jsr/detail?id=907">JSR 907</a></td><td>JTA 1.1</td></tr><tr><td>Enterprise JavaBeans 3.0 <a href="http://jcp.org/en/jsr/detail?id=220">JSR 220</a></td><td>Enterprise JavaBeans <strong>3.1</strong> <a href="http://jcp.org/en/jsr/detail?id=318">JSR 318</a><br /> <em>(<span style="color: #ff9900;">new version</span>)</em></td></tr><tr><td>JPA 1.0 <a href="http://jcp.org/en/jsr/detail?id=220">JSR 220 </a>(together with EJB 3.0)</td><td>JPA 2.0 <a href="http://jcp.org/en/jsr/detail?id=317" target="_blank">JSR 317</a> (<span style="color: #ff9900;"><em>new version</em></span>)</td></tr><tr><td></td><td><em><span style="color: #ff0000;">new!</span> </em>Contexts and Dependency Injection for Java (Web Beans 1.0) <a href="http://jcp.org/en/jsr/detail?id=299" target="_blank">JSR 299</a></td></tr><tr><td></td><td><em><span style="color: #ff0000;">new!</span></em> Dependency Injection for Java 1.0 <a href="http://jcp.org/en/jsr/summary?id=330" target="_blank">JSR 330</a></td></tr><tr><td></td><td><em><span style="color: #ff0000;">new!</span></em> Bean Validation 1.0 <a href="http://jcp.org/en/jsr/detail?id=303" target="_blank">JSR 303</a></td></tr><tr><td></td><td><em><span style="color: #ff0000;">new!</span></em> Managed Beans 1.0 <a href="http://www.jcp.org/en/jsr/detail?id=316">JSR-316</a></td></tr></tbody></table><p>In Enterprise Application section we see some important changes and new specifications. Most famous and important is  JSR-299 Context and Dependency Injection (CDI) which is there to unify the JavaServer Faces-managed bean component model with the Enterprise JavaBeans component model to simplify the programming model and architecture of web-based applications. Look an <a href="http://www.seamframework.org/Weld" target="_blank">Weld Framework</a> as reference implementation to this.</p><p>The similar sounding Standard <em>Dependency Injection for Java</em> JSR-330 just define a standard and common known DI like in spring and other frameworks. Look at popular Guice DI-Framework from Google which <a href="http://code.google.com/p/google-guice/wiki/JSR330" target="_blank">implements JSR-330</a>.</p><p>Bean Validation  introduces a very cool annotation based and architecture layer independent Java Bean validation.</p><p>There are also some interesting improvements in EJBs. Singleton is a new type and can be only one per container, it is also possible to use @Local Beans (Same VM) without interface. Also JPA 2.0 has advanced query possibilities and validation.</p><h2>Management Technologies</h2><table style="border: 1px solid #555555; height: 247px;" width="545"><thead><tr><th>Java EE 5</th><th>Java EE 6</th></tr></thead><tbody><tr><td>J2EE Application Deployment 1.2 <a href="http://jcp.org/en/jsr/detail?id=88" target="_blank">JSR 88</a></td><td>J2EE Application Deployment 1.2<strong><br /> </strong></td></tr><tr><td>JavaBeans Activation Framework (JAF) 1.1 <a href="http://jcp.org/en/jsr/detail?id=925" target="_blank">JSR 925</a></td><td>JavaBeans Activation Framework (JAF) 1.1</td></tr><tr><td>J2EE Management 1.0  <a href="http://jcp.org/en/jsr/detail?id=077" target="_blank">JSR 77</a></td><td>J2EE Management 1.1<em> (<span style="color: #ff9900;">new version</span>)</em></td></tr><tr><td>Java Authorization Contract for Containers 1.1 <a href="http://jcp.org/en/jsr/detail?id=115" target="_blank">JSR 115</a></td><td>Java Authorization Contract for Containers 1.3<em>(</em><span style="color: #ff9900;"><em>new version</em></span><em>)</em></td></tr><tr><td></td><td><em><span style="color: #ff0000;">new!</span></em> Java Authentication Service Provider Interface for Containers <a href="http://jcp.org/en/jsr/detail?id=196" target="_blank">JSR 196</a></td></tr><tr><td></td><td><em><span style="color: #ff0000;">new!</span></em> [<span style="color: #666699;">JavaSE</span>] JAXP 1.3 <a href="http://jcp.org/en/jsr/detail?id=206" target="_blank">JSR 206</a></td></tr><tr><td></td><td><span style="color: #ff0000;"><em>new!</em> </span>[<span style="color: #666699;">JavaSE</span>] JDBC 4.0 <a href="http://jcp.org/en/jsr/detail?id=221" target="_blank">JSR 221</a></td></tr><tr><td></td><td><span style="color: #ff0000;"><em>new!</em> </span>[<span style="color: #666699;">JavaSE</span>] JMX 2.0 <a href="http://jcp.org/en/jsr/detail?id=255" target="_blank">JSR 255</a></td></tr></tbody></table><p>Nothing special to mention here.</p><h2>Java EE 6 Certified Application Server</h2><ul id="ibm-navigation-trail"><li>Oracle (former Sun) <a href="http://glassfish.java.net/downloads/3.0.1-final.html" rel="nofollow" target="_blank">GlassFish AS 3.0.1 </a>Full certified</li><li><a href="http://www.jboss.org/jbossas/downloads.html" rel="nofollow" target="_blank">JBoss AS 6.0.0</a> Web Profile certification</li><li>IBM <a href="https://www14.software.ibm.com/iwm/web/cc/earlyprograms/websphere/wsasoa/index.shtml" rel="nofollow" target="_blank">WebSphere Application Server V8.0</a> (in development, Beta available) should be full certified</li></ul><p>Please feel free to correct me or provide additional information.</p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2011/01/javaee5-vs-javaee6/feed/</wfw:commentRss> <slash:comments>12</slash:comments> </item> <item><title>Subversion on Debian Linux</title><link>http://alexander.holbreich.org/2010/11/subversion-on-debian-linux/</link> <comments>http://alexander.holbreich.org/2010/11/subversion-on-debian-linux/#comments</comments> <pubDate>Sun, 28 Nov 2010 23:58:15 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[linux]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[access control]]></category> <category><![CDATA[apache]]></category> <category><![CDATA[DAV]]></category> <category><![CDATA[mod_auth_svn]]></category> <category><![CDATA[mod_dav_svn]]></category> <category><![CDATA[repositories]]></category> <category><![CDATA[subversion]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=430</guid> <description><![CDATA[Today i describe the few steps of installation of subversion (with repository) on Linux (Debian lenny). That description show the installtion proccess in 5 steps. And the configuration of Apache Mod-DAV as additiona information. So let&#8217;s start. Step 1: Install subversion If subversion is not installed, install it with: Step 2: Create repository Prepare place [...]]]></description> <content:encoded><![CDATA[<p><a href="http://alexander.holbreich.org/wp-content/uploads/2010/11/svnbook-cover.jpg?4c9b33"><img class="alignright size-full wp-image-793" style="margin: 15px;" title="svnbook-cover" src="http://alexander.holbreich.org/wp-content/uploads/2010/11/svnbook-cover.jpg?4c9b33" alt="" width="140" height="184" /></a>Today i describe the few steps of installation of subversion (with repository) on Linux (Debian lenny). That description show the installtion proccess in 5 steps. And the configuration of Apache Mod-DAV as additiona information. So let&#8217;s start.</p><h3>Step 1: Install subversion</h3><p>If subversion is not installed, install it with:</p><pre class="brush: bash; title: ; notranslate">
$apt-get install subversion
</pre><p><span id="more-430"></span></p><h3>Step 2: Create repository</h3><p>Prepare place for repositories. Standard good palace is <em>/var/svn</em> but i personally prefer<em> /srv/svn</em>. <em>(What is your favorite? Why?)</em></p><pre class="brush: bash; title: ; notranslate">
#create directory
$ mkdir /srv/svn/
$ mkdir /srv/svn/java
</pre><p>Create File system based repository (FSFS) or DB based. Today state of the art are FSFS repositories.<br /> So just use FSFS based repositories, believe there are many advantages compared to Berkley DB.</p><pre class="brush: bash; title: ; notranslate">
#create FSFS repository
$ svnadmin create --fs-type fsfs /srv/svn/java
</pre><h3>Step 3: Access control</h3><p>At this point subversion is running and it&#8217;s best time to think about user access rights to repositories.<br /> First create new group for svn users and assign it to your repo. In my case I&#8217;ve defined one repository special for java projects so i wanna use special group for that.</p><pre class="brush: bash; title: ; notranslate">
$ addgroup svnjava     # create new group for java repository
#apply that group to the repository location
$ chgrp -R svnjava /srv/svn/java
</pre><p>Now change authorization of the group on desired repository.</p><pre class="brush: bash; title: ; notranslate">
$ chmod -R g+rw  /srv/svn/java       # group mebers my write
$ chmod -R o-rwx  /srv/svn/java      # other not.
$ chmod g+s /srv/svn/java/db         #  this ensures log-write
</pre><p>Create new linux users (if not ready) and him to the group</p><pre class="brush: bash; title: ; notranslate">
$ useradd aho #new user
$ adduser aho svnjava #assigning user to the group
</pre><p>Soon user aho will be able to access subversion repository, but first we have to proceed with the next step.</p><h3>Step 4: Additional configuration</h3><pre>Repository needs to be configured a little to be useful. Open conf/svnserve.conf in you new repository
<pre class="brush: bash; title: ; notranslate">
$ nano /srv/svn/java/conf/svnserve.conf
</pre><p>and remove comments (#) from these lines.:</p><pre class="brush: bash; title: ; notranslate">
anon-access = read
auth-access = write
realm = My Java Repository
</pre><p>save file.</pre><h3>Step 5: Umask!</h3><pre>
After previous steps we have an repository which is suitable for one user but concurrency usage by many users will run into problems by default <em>umask 022</em>.
So the common solution is to make a wrapper invocation of subversion. Let's create an wrapper step by step.
Find where you subversion i currently installed with the following command.
<pre class="brush: bash; title: ; notranslate">
$ which svnserve
#returnes me
#/usr/bin/svnserve
</pre><p>Now rename original svnserve to svnserve_orig, create new file named svnserve with following:</p><pre class="brush: bash; title: ; notranslate">
$ mv /usr/bin/svnserve /usr/bin/svnserve_orig #renamin' of orinignal svn
$ touch /usr/bin/svnserve # create new wrapper
$ chmod 755 /usr/bin/svnserve #set rights as original
</pre><p>Now add following to new wrapper script <em>svnserve</em></p><pre class="brush: plain; title: ; notranslate">
#!/bin/bash
umask 002
/usr/bin/svnserve_orig $*
</pre><p>So we're done!</p><p>P.S. See how easy you <a href="https://wiki.archlinux.org/index.php/Subversion_backup_and_restore" rel="nofollow">can move you repository or do backups</a></pre><h3>UPD! Subversion with Mod DAV</h3><pre>On default svn is not called by a superserver line xindet .d. But it does not matter if you prefer svn+ssh access. In this case you access the svn machine directly trough ssh and call svnserve commands virtually direct on remote machine, so don't need to configure anything more.

But, if you have problems with firewalls, witch clients software or just want to have more flexibility, you may be interested in accessing you repository through http:// or https://. In dies case mod_dav commes in to play.</pre><h4>Mod DAV step by step</h4><pre>
<a href="http://alexander.holbreich.org/wp-content/uploads/2010/11/feather-small.gif?4c9b33"><img class="size-full wp-image-792 alignnone" style="margin: 10px;" title="feather-small" src="http://alexander.holbreich.org/wp-content/uploads/2010/11/feather-small.gif?4c9b33" alt="" width="203" height="61" /></a></pre><h5>1) Install Apache server if not already done it.</h5><pre class="brush: bash; title: ; notranslate">
$ apt-get install apache2
</pre><h5>2) Configuration.</h5><pre>
Normally Apache package has all of the common mods including <strong>mod_dav_svn</strong>. Debian distribution has a package <a href="http://pdb.finkproject.org/pdb/package.php/libapache2-mod-svn?distribution=10.4&amp;version=1.6.15&amp;revision=1" rel="nofollow" target="_blank"><strong>libapache2-svn</strong></a>which registers needed modules for you.
So just install it:
<pre class="brush: bash; title: ; notranslate">
$ apt-get install subversion libapache2-svn
</pre><p>Now all needed modules are registered to Apache. You just have to provide a concrete configuration for your svn repository.<br /> Here is one simple example how i do it i my case. Works fine.</p><pre class="brush: bash; title: ; notranslate">
# Check the location of dav_svn.conf then just
# copy all following lines to your shell and hit enter.
#  conf will be appended to dav_svn.conf
echo &quot;
DAV svn
SVNPath /srv/svn/java

AuthType Basic
AuthName &quot;My Java Repository&quot;
AuthUserFile /etc/apache2/svn.pass
Require valid-user

&quot; &gt;&gt; /etc/apache2/mods-enabled/dav_svn.conf
</pre><p>This configuration is self-explainable.</pre><ul><li>SVNPath = Path to repository location,</li><li>&lt;location /svn/java&gt; = is path in acces URL, e.g. http://mydomain/svn/java/</li><li>AuthType Basic = means password based access</li><li>AuthUserFile point to a file with user and passwords.</li></ul><pre>
Red more about <a href="http://httpd.apache.org/docs/2.0/howto/auth.html" rel="nofollwo" target="_blank">Auth Modul</a>if interested in advanced configuration</pre><h5>3) Now you only need to create some user an passwords.</h5><pre class="brush: bash; title: ; notranslate">
# -c option is used to create new password file.
# Don't use it if create scond user.
$ htpasswd -cm /etc/apache2/svn.pass aho
</pre><p>If you try open it now, you&#8217;ll run in to an error. It&#8217;s because now the svn repository is accessed by a user of Apache server. Default it would be <em>www-data.</em></p><h5>4) So just give him some more rights.</h5><pre class="brush: bash; title: ; notranslate">
$ adduser www-data svnjava
</pre><p>5) reload apache configuration.</p><h5>Manual approach</h5><pre>
If you are not able to use  <em>libapache2-svn</em>, then you have to register required modules manually:
<pre class="brush: bash; title: ; notranslate">
#make sure your apache is ins /usr/lib64/apache2. adapt path otherways.
$ echo &quot;LoadModule dav_svn_module  /urs/lib64/apache2/modules/mod_dav_svn.so
LoadModule authz_svn_module  /urs/lib64/apache2/ modules/mod_authz_svn.so&quot;
&gt;&gt; /etc/apache2/conf.d/svn.conf
</pre><p>More information and examples can be found in SVN Book in <a href="http://svnbook.red-bean.com/en/1.4/svn.serverconfig.httpd.html">server-conf chapter</a>.</pre> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2010/11/subversion-on-debian-linux/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>lsof command (Linux)</title><link>http://alexander.holbreich.org/2010/11/lsof/</link> <comments>http://alexander.holbreich.org/2010/11/lsof/#comments</comments> <pubDate>Thu, 25 Nov 2010 17:00:41 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[Internet]]></category> <category><![CDATA[linux]]></category> <category><![CDATA[lsof]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=624</guid> <description><![CDATA[Today i&#8217;ll give you some interesting examples of using lsof command. lsof stands for &#8220;list open files&#8221;. So actually it shows all files used by some processes of a system. That command exist on most of and on different Linuxes and Unixes. It bases on architecture of a kernel which causes evety procces to hold it [...]]]></description> <content:encoded><![CDATA[<p><em>Today i&#8217;ll give you some interesting examples of using lsof command.</em></p><p>lsof stands for &#8220;list open files&#8221;. So actually it shows all files used by some processes of a system. That command exist on most of and on different Linuxes and Unixes.<br /> It bases on architecture of a kernel which causes evety procces to hold it used files in <em>/proc</em> &#8211; (a virtual file-system).  A typical hierarchy wold look like:</p><pre class="brush: plain; title: ; notranslate">
/proc/process id/fd/file descriptor
</pre><p>In the absence of any options,<em> lsof</em> lists all open files belonging to all active processes of a system. But that is to much for most cases, because many of cases are networkrelated. An if you consider that sockets are files in linux we can use lsof to search fo them.<span id="more-624"></span></p><h3>Examples lsof sockets</h3><p>The interesting option here is the <strong><em>-i</em></strong> option and it should be followed by the Internet address which is specified in the following form:</p><p>[<em>46</em>][<em>protocol</em>][@<em>hostname</em>|<em>hostaddr</em>][:<em>service</em>|<em>port</em>]</p><p>4 and 6 stand for ip protocol versions, the rest should be self expanded. So now i think is best time to provide some examples. Here they are:</p><p>Show all open connections</p><pre class="brush: bash; title: ; notranslate">
 lsof -i
</pre><p>Show all open TCP connections</p><pre class="brush: bash; title: ; notranslate">lsof -i TCP </pre><p>Show open TCP connection on on secure ldap port 636, http 80 and UDP protocol range</p><pre class="brush: bash; title: ; notranslate">
            lsof -i TCP:636
            lsof -i TCP:80
            lsof -i UDP:3000-3025
         </pre><p>Show LDAP incoming connections</p><pre class="brush: bash; title: ; notranslate">
lsof -i TCP@192.168.0.1:636 ()
#java  890 root  18u  IPv6 8332031
#TCP myserver.com:42936 myserver.com:ldaps (ESTABLISHED)
</pre><p>Who use SMTP?</p><pre class="brush: bash; title: ; notranslate">
         lsof -i :25
         #COMMAND  PID USER   FD   TYPE        DEVICE SIZE/OFF NODE NAME
         #sendmail 401 root    5u  IPv4 0x300023cc141      0t0  TCP *:smtp (LISTEN)
         #sendmail 401 root    6u  IPv6 0x3000243c200      0t0  TCP *:smtp (LISTEN)
</pre><h3>Further useful Examples of lsof</h3><p><strong><em> -c</em></strong> option allows to see what files are open by a particular command.</p><pre class="brush: bash; title: ; notranslate">
lsof -c mysq
lsof -c ruby
</pre><p>See what files are open by a particular device or a file</p><pre class="brush: bash; title: ; notranslate">
lsof /dev/cdrom
lsof /tmp/obscure.lock
</pre><p>See what files are opened by a user shuron</p><pre class="brush: bash; title: ; notranslate">
lsof –u shuron
#vi   5200 shuron txt REG 3,1   242601 245773 /bin/vi
</pre><h3>Additional info</h3><p>And at last use <strong><em>-r </em></strong>option for monitoring. Here is example of periodically (every 10 seconds) refresh of connection status for a concrete application started as <em>php</em>.</p><pre class="brush: bash; title: ; notranslate">
lsof -r 10 -c php -a -i :1521
</pre><p>It gives periodically all 1521 port connections. 1521 is typical Oracle DB connection port, so that example may serve you as base for script that monitors connection growing of your PHP applications.</p><p>So the last on is interesting also it uses the -t parameter which causes <em>lsof </em>return only a Processor id of a file using application. So following command allows you to kill all application that are using provided file.</p><pre class="brush: bash; title: ; notranslate">
kill -9 `lsof -t /tmp/obscure.lock`
</pre><p>References: <a href="http://www.netadmintools.com/html/lsof.man.html">Lsof Man</a></p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2010/11/lsof/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>102 Post so far</title><link>http://alexander.holbreich.org/2010/11/102-posts/</link> <comments>http://alexander.holbreich.org/2010/11/102-posts/#comments</comments> <pubDate>Tue, 23 Nov 2010 23:43:58 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[off topic]]></category> <category><![CDATA[Personal]]></category> <category><![CDATA[blog]]></category> <category><![CDATA[performance]]></category> <category><![CDATA[statistic]]></category> <category><![CDATA[visitors]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=705</guid> <description><![CDATA[I noticed that my was  a 101 post on this blog which is good occasion to do some self evaluation. I started to write here in January 2007 it&#8217;s nearly 4 years ago. You see I&#8217;m not very productive blogger. Nevertheless i wrote some interesting things which have attracted some people or comments. Here some [...]]]></description> <content:encoded><![CDATA[<p><em>I noticed that my <a href="http://alexander.holbreich.org/2010/11/ubuntu-vs-windows-xp/"> last post </a> was  a 101 post on this blog which is good occasion to do some self evaluation. </em></p><p>I started to write here in January 2007 it&#8217;s nearly 4 years ago. You see I&#8217;m not very productive blogger. Nevertheless i wrote some interesting things which have attracted some people or comments. Here some of them chronologically:</p><ul><li><a href="http://alexander.holbreich.org/2007/01/first-look-at-java-persistence-api/">First Look at Java Persistence API<br /> </a></li><li><a href="http://alexander.holbreich.org/2007/02/nofollow-considered-harmful/"> &#8220;No follow&#8221; considered harmful </a></li><li>First steps with <a href="http://alexander.holbreich.org/2007/12/magento/">Magento</a></li><li>My <a href="http://alexander.holbreich.org/2007/12/my-top-10-wordpress-plug-ins-i-wont-miss/">TOP 10 WordPress Plugins</a> in 2007. I think a have to make new version of it soon. <img src="http://alexander.holbreich.org/wp-includes/images/smilies/icon_wink.gif?4c9b33" alt=';)' class='wp-smiley' /></li><li>I&#8217;ve created a word <a href="http://alexander.holbreich.org/2007/12/socialolism/"><strong> socialolism</strong></a> and was cited on some link aggregaters relatively popular.</li><li>I was on of the  first hwo checked some <a href="http://alexander.holbreich.org/2008/01/geni/">new features</a> of Geni.com and gathered their attention, so they send me <a href="http://alexander.holbreich.org/2008/02/geni-t-short/">a T-shirt</a> <img src="http://alexander.holbreich.org/wp-includes/images/smilies/icon_wink.gif?4c9b33" alt=';)' class='wp-smiley' /></li><li>I&#8217;ve made an online  calendar of <a href="http://alexander.holbreich.org/2008/01/calender-of-beauties/">Russian beauties </a>which is unfortunately dessapeared with hosted site. However  i have a picture of it cover.</li><li>I wrote about my time with my son as my wive was away. <a href="http://alexander.holbreich.org/2008/02/father-and-son-adventures-day-one/">Part one</a> and <a href="http://alexander.holbreich.org/2008/02/father-son-adventures-234/">part two</a>.</li><li>I have introduced new <a href="http://alexander.holbreich.org/2008/02/wpopularity-plug-in/">Wordpress Plugin</a> which definitive need next update right now. I know, i know. I have it on my task list.</li><li>In 2008 we discussed <a href="http://alexander.holbreich.org/2008/05/little-story-about-school-education-in-germany/">school education in germany</a></li><li>Then many people found interesting my post about <a href="http://alexander.holbreich.org/2009/01/how-to-duplicate-magento-installation/">duplication of magento</a> installation. I plan to do new relese on this topic.</li><li>And Last but not least I wrote about <a href="http://alexander.holbreich.org/2010/01/software-raid-debian/">Software RAID</a> on linux, <a href="http://alexander.holbreich.org/2010/01/java-jboss-debian-linux/">installations of JBoss</a> and <a href="http://alexander.holbreich.org/2010/02/ssh-tunnel-without-password/">SSH tunels</a>.</li></ul><p>I&#8217;ve learned pretty much and i tried different themes. I think in the future i will write more and more technical stuff. So e.g. Java comes to short so far also web technologies where not covered while i have to do with them relatively often.<span id="more-705"></span></p><h3>User statistic</h3><p>My blog has humble user statistic. This is explainable. My blog has lot spread of themes and i has suffered from the movement to new domain a year ago.  However the number of visitors id growing. So i had 1548 unique visitors  in last 30 days here.</p><p style="text-align: center;"><a href="http://alexander.holbreich.org/wp-content/uploads/2010/11/visitors.gif?4c9b33"><img class="size-full wp-image-710  aligncenter" title="visitors" src="http://alexander.holbreich.org/wp-content/uploads/2010/11/visitors.gif?4c9b33" alt="" width="462" height="190" /></a></p><p>A maximum of visitior per day what this site experienced was 1500 per day. I believe it was post about Jboss installation (mentioned above) which passes pre-selection on some link composing site.<br /> And here is map which show where you maybe comes from.</p><p style="text-align: center;"><a href="http://alexander.holbreich.org/wp-content/uploads/2010/11/countries.gif?4c9b33"><img class="size-full wp-image-711  aligncenter" title="countries" src="http://alexander.holbreich.org/wp-content/uploads/2010/11/countries.gif?4c9b33" alt="" width="275" height="169" /></a></p><p>So stay whith me an you&#8217;ll be able to read next hundred of mega cool post very soon. <img src="http://alexander.holbreich.org/wp-includes/images/smilies/icon_wink.gif?4c9b33" alt=';)' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2010/11/102-posts/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Ubuntu vs. Windows XP on my Thinkpad</title><link>http://alexander.holbreich.org/2010/11/ubuntu-vs-windows-xp/</link> <comments>http://alexander.holbreich.org/2010/11/ubuntu-vs-windows-xp/#comments</comments> <pubDate>Sat, 20 Nov 2010 22:07:04 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[Hardware]]></category> <category><![CDATA[linux]]></category> <category><![CDATA[Personal]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[performance]]></category> <category><![CDATA[thinkpad]]></category> <category><![CDATA[ubunto]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=678</guid> <description><![CDATA[Yesterday i  installed Ubuntu (10) linux alongside of Windows XP (SP3) on my Lenovo Thinkpad T60 &#8211; meanwhile 4 years  Laptop. To be short  i observe only start-time of both system on the same machine in this post. Here some hardware details: Intel Core Duo (T2400 -1,83 Mghz) 1 Gb RAM 60 GB 5400rpm  hard [...]]]></description> <content:encoded><![CDATA[<p>Yesterday i  installed Ubuntu (10) linux alongside of Windows XP (SP3) on my Lenovo Thinkpad T60 &#8211; meanwhile 4 years  Laptop. To be short  i observe only start-time of both system on the same machine in this post.</p><p>Here some hardware details:</p><ul><li>Intel Core Duo (T2400 -1,83 Mghz)</li><li>1 Gb RAM</li><li>60 GB 5400rpm  hard drive</li></ul><p>An here are starttimes on two Systems (in seconds):</p><p style="text-align: center;"><a href="http://alexander.holbreich.org/wp-content/uploads/2010/11/windows_vs_ubuntu.gif?4c9b33"><img class="size-full wp-image-679 aligncenter" title="windows_vs_ubuntu" src="http://alexander.holbreich.org/wp-content/uploads/2010/11/windows_vs_ubuntu.gif?4c9b33" alt="Windows vs. Ubuntu startup times" width="465" height="294" /></a></p><p>As we see Windows takes 1 minute from OS-Selection dialog till User-login dialog, whereas Ubunto takes  only 24 sec. Ok, windows checks  &#8220;security chip&#8221; (what it exactly means and why it so good for me i don&#8217;t know)  and that takes considerable time and i&#8217;m unsure whether Ubunto do something like this, but however i can&#8217;t change it.</p><p>On a graph we see also, that for the rest of &#8220;loading work&#8221; from login till first page appears in firefox browser windows takes more time again. It takes 95 seconds whereas Ubunto need only 19!  I was clicking on browser Icon as soon it appeared and was &#8220;clickable&#8221; and waited till pre-selected starting page (google) appears.</p><p>Of cause tas is not very strict measurement so maybe I&#8217;ve lost one or two seconds somewhere, who cares if</p><ul><li>Ubunto takes 24+19 =<strong>43 sec</strong></li><li>Windows takes 60+95 = <strong>155 sec</strong></li></ul><p>till i can use my typical day by day application. So now i can save more than a one and halfe minute of my life on every start of a system.</p><p>Respect Ubuntu, keep on going!</p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2010/11/ubuntu-vs-windows-xp/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Java WebServices JSR overview</title><link>http://alexander.holbreich.org/2010/10/java-webservices-jsrs-overview/</link> <comments>http://alexander.holbreich.org/2010/10/java-webservices-jsrs-overview/#comments</comments> <pubDate>Wed, 20 Oct 2010 22:51:12 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[JBoss]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Software Engineering & Architecture]]></category> <category><![CDATA[community]]></category> <category><![CDATA[Java]]></category> <category><![CDATA[JAX-RS]]></category> <category><![CDATA[JAX-WS]]></category> <category><![CDATA[jcp]]></category> <category><![CDATA[jee]]></category> <category><![CDATA[JSR]]></category> <category><![CDATA[JSR-224]]></category> <category><![CDATA[JSR-311]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=596</guid> <description><![CDATA[Here give a short overview of important JSR of Java Community Process which define and standardises  WebServices development on Java Platform. JSR-175: A Metadata Facility for the JavaTMTM Programming Language. Also known as Java Annotations e.g. @Deprecated or @Override. JSR-181: Web ServiceMetadatata for the Java Platform. This is just a set of Annotations for using [...]]]></description> <content:encoded><![CDATA[<p><a href="http://alexander.holbreich.org/wp-content/uploads/2010/10/jcp.gif?4c9b33"><img class="size-full wp-image-600 alignright" style="margin: 10px;" title="jcp" src="http://alexander.holbreich.org/wp-content/uploads/2010/10/jcp.gif?4c9b33" alt="Java community process" width="112" height="59" /></a>Here give a short overview of important JSR of Java Community Process which define and standardises  WebServices development on Java Platform.</p><ul><li><a href="http://jcp.org/en/jsr/detail?id=175" target="_blank">JSR-175</a>: <em>A Metadata Facility for the JavaTM<sup>TM</sup> Programming Language</em>. Also known as Java Annotations e.g. @Deprecated or @Override.</li><li><a href="http://jcp.org/en/jsr/detail?id=181" target="_blank">JSR-181</a>: <em>Web ServiceMetadatata for the Java Platform. </em>This is just a set of Annotations for using with JAX-WS WebServiceses. Think of  Annotations @WebService, @WebMethod&#8230;</li><li><a href="http://jcp.org/en/jsr/detail?id=101">JSR-101</a>: <em>API for XML-based RPC: JAX-RPC 1.1. </em>Definiton of RCP call with SOAP Messages, Type Mapping between Java  and XML.<em><br /> </em></li><li><a href="http://jcp.org/en/jsr/detail?id=109" target="_blank">JSR-109:</a><em> Implementing Enterprise Web Services Definiton</em> of WebsServices based on JAX-RPC which is now accessed by JAX-WS. That early standard defined WebServiceses for J2EE 1.4. It enabled implementation of Web-Serviceses as Endpoints over Enterprise Session Bean&#8217;s (EJB 2 generation with awful  XML descriptors).</li><li><a href="http://jcp.org/en/jsr/detail?id=183" target="_blank">JSR 183</a>: <em>Web Services Message Security APIs<br /> </em></li><li><a href="http://jcp.org/en/jsr/detail?id=224" target="_blank">JSR-224:</a> <strong><em>The Java API for XML-Based Web Services (JAX-WS) 2.2</em></strong><ul><li>Final Release 05.2006 (Version 2.0 JEE 5) ,Last Maintenance 12.200Verisonon (2.2 JEE 6).</li><li>Current state of the art</li><li>Relies on its own Architecture for XML Binding <a href="http://jcp.org/en/jsr/detail?id=222" target="_blank">JSR -222</a></li><li>Of course supports Annotations JSR -181</li><li>Implementations: <a href="http://cxf.apache.org/">Apache CXF</a>, <a href="http://www.jboss.org/jbossws" target="_blank">JBoss WS</a>, <a href="https://jax-ws.dev.java.net/" target="_blank">JAX-WS</a> as Sun&#8217;s Ref. Implementation</li></ul></li><li><a href="http://jcp.org/en/jsr/detail?id=311" target="_blank">JSR-311</a>: <strong><em>JAX-RS: Java <sup>TM</sup> API RESTful Web Services</em></strong><ul><li>Final Release 10.2008</li><li>Part of JEE 6</li><li>AlWeb Servicesvices of REST Style jusPOJOsPOJOs</li><li>Mseen ssen such typical Annotations like: @Path , @GET，@PUT, @POST，@DELETE</li><li>Implementations: <a href="http://cxf.apache.org/">Apache CXF</a>, <a href="http://incubator.apache.org/wink/" target="_blank">Apache Wink</a>, <a href="http://www.jboss.org/resteasy" target="_blank">Resteasy</a> as part of JBoss/Tomcat,   <a href="https://jersey.dev.java.net/">Jersey</a> &#8211; Sun&#8217;s Ref. implementation.</li></ul></li></ul><p>Did I forgot something?</p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2010/10/java-webservices-jsrs-overview/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Get JIRA for 10$ only</title><link>http://alexander.holbreich.org/2010/05/use-jira/</link> <comments>http://alexander.holbreich.org/2010/05/use-jira/#comments</comments> <pubDate>Tue, 25 May 2010 21:44:45 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[CMS]]></category> <category><![CDATA[Internet]]></category> <category><![CDATA[linux]]></category> <category><![CDATA[Personal]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Software Engineering & Architecture]]></category> <category><![CDATA[Web Development]]></category> <category><![CDATA[best time]]></category> <category><![CDATA[developer tools]]></category> <category><![CDATA[jira]]></category> <category><![CDATA[project tracking system]]></category> <category><![CDATA[simplicity]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=588</guid> <description><![CDATA[Probably most of modern IT related people know Atlassian JIRA &#8211; issue and project tracking system. Maybe many of you know other popular tracking system like Bugzilla, GNATS, und many many others. Personally I like JIRA last but not least because i worked many years with it and I&#8217;m impressed of a simplicity of the [...]]]></description> <content:encoded><![CDATA[<p>Probably most of modern IT related people know Atlassian JIRA &#8211; issue and project tracking system. Maybe many of you know other popular tracking system like Bugzilla, GNATS, und <a href="http://en.wikipedia.org/wiki/Comparison_of_issue_tracking_systems" target="_blank">many many others</a>. Personally I like JIRA last but not least because i worked many years with it and I&#8217;m impressed of a simplicity of the work flow and the realisation of the concepts around it.</p><p>However this is not one post which should bring JIRA near to you. But if you know that you need it, now is best time to get it, because Atlassian started their &#8220;<a href="http://www.atlassian.com/software/jira/pricing.jsp" target="_blank">Get Startet</a>&#8221; Price, which now allows you to by full functional <span style="text-decoration: underline;">JIRA for 10$ for ever</span> even with one year support. All you need is a little bit of free CPU time, root access, 10$ and if you buy it outside of USA, you will need a credit card.</p><p>I installed it  for my private purposes and it works fine! I just followed Atlassian documentation (Read it carefully). Maybe, the easiest way is to install the &#8220;all in one&#8221; solution which comes with Apache Tomcat. I choosed that one. But don&#8217;t forget to switch to serious database before you start really using it. Take MySQL for example like I did.</p><p>I will not provide here step by step how to do it, because <a href="http://simon.zambrovski.org/2010/05/jira-home-improvement/" target="_blank">Simon has already</a> described some of the important configurations moments as he heard about new pricing <img src="http://alexander.holbreich.org/wp-includes/images/smilies/icon_smile.gif?4c9b33" alt=':)' class='wp-smiley' /> and as already mentioned the Atlassian installation guide is good and really answered all my questions.</p><p>Nevertheless feel free to ask questions here, about installation and configuration to.</p><p>Also i would like to discuss other Atlassian developer tools which also available for 10$. Is here outside someone experienced in bamboo?</p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2010/05/use-jira/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>The Queen and 11 Presidents!</title><link>http://alexander.holbreich.org/2010/03/the-queen-and-11-presidents/</link> <comments>http://alexander.holbreich.org/2010/03/the-queen-and-11-presidents/#comments</comments> <pubDate>Sun, 07 Mar 2010 23:16:40 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[Internet]]></category> <category><![CDATA[off topic]]></category> <category><![CDATA[history]]></category> <category><![CDATA[president]]></category> <category><![CDATA[queen]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=583</guid> <description><![CDATA[Queen Elizabeth II head of the Commonwealth and daugher of George VI. She was born on 21 April 1926 and have seen lot of politics and historical acts in her life, because now she is 84! As her father dies in 1952, she become the Queen regnant an met 11 Presidents of United States till [...]]]></description> <content:encoded><![CDATA[<p> Queen Elizabeth II head of the Commonwealth and daugher of George VI. She was born on 21 April 1926 and have seen lot of politics and historical acts in her life, because now she is 84!<br /> As her father dies in 1952, she become the Queen regnant an met 11 Presidents of United States till now:</p><p> <img class="size-full wp-image-584" title="queen" src="http://alexander.holbreich.org/wp-content/uploads/2010/03/queen.jpeg?4c9b33" alt="" width="354" height="4072" /></p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2010/03/the-queen-and-11-presidents/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Sending Mails with own Exim: Google account example.</title><link>http://alexander.holbreich.org/2010/02/exim-mail-google/</link> <comments>http://alexander.holbreich.org/2010/02/exim-mail-google/#comments</comments> <pubDate>Sun, 14 Feb 2010 23:22:52 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[linux]]></category> <category><![CDATA[exim]]></category> <category><![CDATA[googlemail]]></category> <category><![CDATA[smarthost]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=508</guid> <description><![CDATA[Today I&#8217;ll describe short, how to configure sending of emails with your Debian or other Linux distribution. The ability of sending mails is very useful feature for every long-running server machine, it&#8217;s easy and common way to notify the administrator on problems. Here are configurationsteps for mail-sending with Exim and Googlemail account (google Apps accounts [...]]]></description> <content:encoded><![CDATA[<p> <a href="http://alexander.holbreich.org/wp-content/uploads/2010/02/exim1-e1266189286432.png?4c9b33"><img class="size-full wp-image-560 alignright" style="margin: 5px;" title="exim" src="http://alexander.holbreich.org/wp-content/uploads/2010/02/exim1-e1266189286432.png?4c9b33" alt="" width="150" height="111" /></a>Today I&#8217;ll describe short, how to configure sending of emails with your Debian or other Linux distribution. The ability of sending mails is very useful feature for every long-running server machine, it&#8217;s easy and common way to notify the administrator on problems.</p><p> Here are configurationsteps for mail-sending with Exim and Googlemail account (google Apps accounts work the same way too).</p><ol><li>first of all we need working Exim. If not installed &#8211; install exim4.<pre class="brush: bash; title: ; notranslate">
$ apt-get update
$ apt-get install exim4
</pre></li><li> Configuration should start after the installation. However you can start configuration of exim every-time with<pre class="brush: bash; title: ; notranslate">
$ dpkg-reconfigure exim4-config
</pre></li><li> Answer the questions of configuration wizard. The important one is.<br /> a <strong>general type of mail configuration</strong>. Choose &#8220;sent by <strong>smarthost</strong>&#8221;<br /> if you wanna use the ability of e.g. Googlemail account. Then SMTP with dynamic IP would be difficult <img src="http://alexander.holbreich.org/wp-includes/images/smilies/icon_wink.gif?4c9b33" alt=';)' class='wp-smiley' /></li><li> answer other questions<ul><li> Provide a System Mail Name: e.g. mycompany.com</li><li> Provide IP addresses to listen on for incoming SMTP connections<br /> User 127.0.0.1 if you don&#8217;t want only send mail from local machine and nothing for all IP&#8217;s.</li><li> <strong>Provide Machine handling outgoing mail for this host (smarthost): smtp.gmail.com::587</strong></li></ul><p>Other parameter are not so important for a start. However read more about <a href="http://pkg-exim4.alioth.debian.org/README/README.Debian.html#id280581">debconf questions</a> and other configuration if you like.</li><li> Now it&#8217;s time to provide credentials information of your gmail account. Therefore you need edit <em>/etc/exim4/passwd.client</em> file with your favorite editor.<br /> Insert that for Standard or google app account but replace with valid mail and password.</p><pre class="brush: bash; title: ; notranslate">
gmail-smtp.l.google.com:yourYourMail@googlemail.com:yourPass
*.google.com:yourYourMail@googlemail.com:yourPass
smtp.gmail.com:yourYourMail@googlemail.com:yourPass
</pre></li><li> Make sure <em>/etc/exim4/passwd.client</em> belongs to user root and group Debian-exim which is normal so on my Debian. If not, run that command:<pre class="brush: bash; title: ; notranslate">
$ chown root:Debian-exim /etc/exim4/passwd.client
</pre></li><li> Actualize the whole configuration with:<pre class="brush: bash; title: ; notranslate">
$ update-exim4.conf
</pre><p>Your &#8216;re done!</li></ol><p>Now it&#8217;s test it with.</p><pre class="brush: bash; title: ; notranslate">
echo &quot;Server Mail Test Message &quot; | mail -s &quot;Just Test&quot; SomeMail@someDomain.org
</pre><p>Watch logs:</p><pre class="brush: bash; title: ; notranslate">
$ tail -1000f /var/log/exim4/mainlog
</pre><p>When you see something like this. Everything should vent perfect.</p><pre class="brush: bash; title: ; notranslate">
2010-02-14 23:00:26 1NgmVu-0007v8-Kt &lt; = root@mail-server1.mycompany.com U=root P=local S=424
2010-02-14 23:00:28 1NgmVu-0007v8-Kt =&gt; testMail@mycompany.org R=smarthost T=remote_smtp_smarthost H=gmail-smtp-msa.l.google.com [72.14.221.109] X=TLS1.0:RSA_ARCFOUR_MD5:16 DN=&quot;C=US,ST=California,L=Mountain View,O=Google Inc,CN=smtp.gmail.com&quot;
</pre></p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2010/02/exim-mail-google/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Winter amusement &#8211; the Russian way</title><link>http://alexander.holbreich.org/2010/02/winter-amusement/</link> <comments>http://alexander.holbreich.org/2010/02/winter-amusement/#comments</comments> <pubDate>Wed, 10 Feb 2010 23:32:11 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[Humour]]></category> <category><![CDATA[fun]]></category> <category><![CDATA[Russia]]></category> <category><![CDATA[video]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=543</guid> <description><![CDATA[What should young people do at a long, cold, rich of snow and boring winter. A winter like in Magadan town. Here the answer Never heard of Magadan? Magadan is associated with far far east of Russia. It is associated with cold and people-less places, taiga, beautiful nature and interesting people. Of course this Region [...]]]></description> <content:encoded><![CDATA[<p>What should young people do at a long, cold, rich of snow and boring winter. A winter like in Magadan town.<br /> Here the answer <img src="http://alexander.holbreich.org/wp-includes/images/smilies/icon_wink.gif?4c9b33" alt=';)' class='wp-smiley' /></p><p><object id="smotriComVideoPlayer" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="360"><param name="movie" value="http://pics.smotri.com/player.swf?file=v1336425b9cb&#038;bufferTime=3&#038;autoStart=false&#038;str_lang=rus&#038;xmlsource=http%3A%2F%2Fpics.smotri.com%2Fcskins%2Fblue%2Fskin_color.xml&#038;xmldatasource=http%3A%2F%2Fpics.smotri.com%2Fskin_ng.xml" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="bgcolor" value="#ffffff" /><embed src="http://pics.smotri.com/player.swf?file=v1336425b9cb&#038;bufferTime=3&#038;autoStart=false&#038;str_lang=rus&#038;xmlsource=http%3A%2F%2Fpics.smotri.com%2Fcskins%2Fblue%2Fskin_color.xml&#038;xmldatasource=http%3A%2F%2Fpics.smotri.com%2Fskin_ng.xml" quality="high" allowscriptaccess="always" allowfullscreen="true" wmode="opaque"  width="600" height="330" type="application/x-shockwave-flash"></embed></object></p><p>Never heard of Magadan?<br /> Magadan is associated with far far east of Russia. It is associated with cold and people-less places, taiga, beautiful nature and interesting people. Of course this Region is famous for former Soviet GULAGs too.</p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2010/02/winter-amusement/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>SSH tunnel without password</title><link>http://alexander.holbreich.org/2010/02/ssh-tunnel-without-password/</link> <comments>http://alexander.holbreich.org/2010/02/ssh-tunnel-without-password/#comments</comments> <pubDate>Mon, 08 Feb 2010 23:16:40 +0000</pubDate> <dc:creator>shuron</dc:creator> <category><![CDATA[linux]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[certificate]]></category> <category><![CDATA[debian]]></category> <category><![CDATA[encrypted]]></category> <category><![CDATA[public key]]></category> <category><![CDATA[remote server]]></category> <category><![CDATA[secure shell]]></category> <category><![CDATA[ssh]]></category><guid isPermaLink="false">http://alexander.holbreich.org/?p=517</guid> <description><![CDATA[SSH (Secure Shell) allows simple establishment of encrypted and authenticated connection between computers. Today i describe how easy it is do establish such SSH tunnels without using a password. You may need such connections when they have to be opened by daemons (e.g. Cron) without user interaction. Two words on theory. Password-less connections have to [...]]]></description> <content:encoded><![CDATA[<p><a href="http://alexander.holbreich.org/wp-content/uploads/2010/02/ssh.jpg?4c9b33"><img class="alignleft size-thumbnail wp-image-520" style="margin: 5px 10px;" title="ssh" src="http://alexander.holbreich.org/wp-content/uploads/2010/02/ssh-150x150.jpg?4c9b33" alt="" width="150" height="150" /></a> SSH (Secure Shell) allows simple establishment of encrypted and authenticated connection between computers. Today i describe how easy it is do establish such SSH tunnels without using a password. You may need such connections when they have to be opened by daemons (e.g. Cron) without user interaction.</p><p> Two words on theory. Password-less connections have to be authenticated at least so strong like the password enabled one, so asymmetric cryptography which enables certificates comes into play.  The clue is to have private and public keys and share your public key with domains which should be able identify you.</p><p> So therefore let&#8217;s start by generation a needed key-pair.</p><h2>Generating Keys</h2><p> It is possible to create key with pass-phrase and without (or empty pass-phrases). I prefer to not use pass phrase because it is asked every-time on later usage of a ssh.<br /> Even there are ways to gives the pass-phrase to ssh command, but it is more work, with no significant security benefits. So i do the following statement and do not enter any pass-phrase (just hit enter on question).</p><pre class="brush: bash; title: ; notranslate">
$ ssh-keygen -t rsa
</pre></p><p> This will create <a href="http://en.wikipedia.org/wiki/RSA">RSA</a> key-pair as following files in ~/.ssh directory:</p><ul><li>id_rsa</li><li>id_rsa.pub</li></ul><p>Now public key need to be copied to remote host and has to be added to end of <em>~/.ssh/authorized_keys</em> file.</p><h2>Transfer Public keys</h2><p>The best way to do it is to use <em>ssh-copy-id</em> program which is inside of many linux distributions.</p><pre class="brush: bash; title: ; notranslate">
$ ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-server.org
</pre><p>In that case everything is done automatically and you are ready after that.  But if <em>ssh-copy-id</em> is not available, you can copy keys manually e.g. like that.</p><pre class="brush: bash; title: ; notranslate">
$ cat ~/.ssh/*.pub | ssh remote-user@remote-server.org 'umask 077; cat &gt;&gt;.ssh/authorized_keys'
</pre><p><strong>Attention! </strong>On some linux distrs SSH2 searches for keys in <em>~/.ssh/authorized_keys2</em> . Not so in actual Debian (Lenny), but seems to be so in SuSe linux.</p><h2>Test</h2><p>Now remote login, scp and sftp can be used without password.<br /> Test it:</p><pre class="brush: bash; title: ; notranslate">
# establish connection
$ ssh remote-user@remote-server.org
#or copy files secure and password-less.
$ scp /home/user/some-file remote-user@remote-server.org:/some-path/dir/
</pre><p>More information on <a href="http://www.openssh.org/manual.html">SSH related man pages</a>.</p> ]]></content:encoded> <wfw:commentRss>http://alexander.holbreich.org/2010/02/ssh-tunnel-without-password/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 2/75 queries in 0.066 seconds using disk: basic
Object Caching 1611/1772 objects using disk: basic

Served from: alexander.holbreich.org @ 2012-05-20 13:43:22 -->
