<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-6868595312516376692</id><updated>2010-01-27T13:19:45.383+01:00</updated><title type='text'>Enterprise Software Development with Java</title><subtitle type='html'>This is a blog about developing software for the Enterprise. It focuses on Java Enterprise Edition (J2EE/JEE). Beside this, I blog about Oracle Weblogic Server and other technologies that hit my road during daily work.

"Architecture is frozen music" 
(Arthur Schoppenhauer)</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://feeds.feedburner.com/EnterpriseSoftwareDevelopmentWithJava'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>254</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-7180070073450267539</id><published>2010-01-27T13:19:00.000+01:00</published><updated>2010-01-27T13:19:45.391+01:00</updated><title type='text'>Switching to blog.eisele.net</title><content type='html'>As Google/Blogger will discontinue the ftp publishing I need to switch this blog, too.&lt;br /&gt;If you have problems accessing it, you know why. Will post, when it is back online :) Thanks for your patience!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-7180070073450267539?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/7180070073450267539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2010/01/switching-to-blogeiselenet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/7180070073450267539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/7180070073450267539'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2010/01/switching-to-blogeiselenet.html' title='Switching to blog.eisele.net'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-5100934494025087258</id><published>2010-01-21T12:44:00.002+01:00</published><updated>2010-01-22T09:37:18.392+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='merger'/><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='approved'/><title type='text'>EC approves Oracle and Sun merger</title><content type='html'>Only one hour before this post, it was finaly done :)&lt;br /&gt;The EC approves the Oracle/Sun merger.&lt;br /&gt;Oracle announced today that it had received regulatory approval from the European Commission for its acquisition of Sun Microsystems, Inc. Oracle expects unconditional approval from China and Russia and intends to close the transaction shortly.&lt;br /&gt;&lt;br /&gt;Here are some links:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.techcrunch.com/2010/01/21/eu-sun-oracle/"&gt;techcrunch.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/us/corporate/press/043873"&gt;oracle.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://europa.eu/rapid/pressReleasesAction.do?reference=IP/10/40&amp;format=HTML&amp;aged=0&amp;language=EN&amp;guiLanguage=en"&gt;europa.eu&lt;/a&gt;&lt;br /&gt;&lt;a href="http://online.wsj.com/article/SB10001424052748703699204575016561637563060.html?mod=WSJ_hpp_LEFTWhatsNewsCollection"&gt;online.wsj.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A warm welcome to all of the Sun people around! Happy to have you on board! Looking forward to a great new Java World!! See you on OOW10!&lt;br /&gt;&lt;br /&gt;Update (22/01/10):&lt;br /&gt;The _official_ page:&lt;br /&gt;&lt;a href="http://blogs.sun.com/jag/entry/so_long_old_friend"&gt;http://blogs.sun.com/jag/entry/so_long_old_friend&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-5100934494025087258?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/5100934494025087258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2010/01/ec-approves-oracle-and-sun-merger.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/5100934494025087258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/5100934494025087258'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2010/01/ec-approves-oracle-and-sun-merger.html' title='EC approves Oracle and Sun merger'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-6030516633130725482</id><published>2010-01-20T07:51:00.000+01:00</published><updated>2010-01-20T07:51:16.212+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSR-299'/><category scheme='http://www.blogger.com/atom/ns#' term='glassfishv3'/><category scheme='http://www.blogger.com/atom/ns#' term='jee6'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='Java EE 6'/><title type='text'>GlassFish v3, CDI, Maven, Eclipse</title><content type='html'>I am disaffected with NetBeans. It looks fancy, but I still can't get back the love I had using the 3.x version :) Seems as if I am converted to an Eclipse lover.&lt;br /&gt;This was the point where I started to try getting CDI examples to work with GlassFish v3, CDI/Weld, Maven and Eclipse.&lt;br /&gt;For those of you, haven't made it. Here is the how-to (I am using versions with the numbers in brackets):&lt;br /&gt;&lt;br /&gt;1) Get:&lt;br /&gt;- &lt;a href="http://maven.apache.org/" target="_blank"&gt;Maven &lt;/a&gt;(2.2.1)&lt;br /&gt;- &lt;a href="http://www.eclipse.org/" target="_blank"&gt;Eclipse &lt;/a&gt;(3.6M2)&lt;br /&gt;- &lt;a href="https://glassfish.dev.java.net/" target="_blank"&gt;GlassFish&lt;/a&gt; (v3 build 74.2)&lt;br /&gt;&lt;br /&gt;2) Create a maven project using:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=cditests -DarchetypeArtifactId=maven-archetype-webapp&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;3) Add a my-webapp\src\main\java folder to it&lt;br /&gt;4) Add the following dependencies to the my-webapp\pom.xml&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;javax.inject&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;javax.inject&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;1&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;javax.enterprise&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;cdi-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;javax.annotation&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;jsr250-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt; &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;5) Add an empty file named beans.xml to my-webapp\src\main\webapp\WEB-INF&lt;br /&gt;6) run mvn eclipse:eclipse for making this an eclipse based project&lt;br /&gt;7) add your code &lt;br /&gt;8) run mvn clean install (compile / package)&lt;br /&gt;9) deploy it to your GlassFish domain&lt;br /&gt;10) think about enhancing this with JSF 2.0 ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-6030516633130725482?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/6030516633130725482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2010/01/glassfish-v3-cdi-maven-eclipse.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/6030516633130725482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/6030516633130725482'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2010/01/glassfish-v3-cdi-maven-eclipse.html' title='GlassFish v3, CDI, Maven, Eclipse'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-8668373751725423164</id><published>2010-01-19T08:59:00.000+01:00</published><updated>2010-01-19T08:59:22.810+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSR-299'/><category scheme='http://www.blogger.com/atom/ns#' term='jee6'/><category scheme='http://www.blogger.com/atom/ns#' term='Java EE 6'/><title type='text'>JSR-299 CDI portable extensions</title><content type='html'>One of my fav features of the new CDI spec is the ability to integrate custom extensions. The &lt;a href="http://docs.jboss.org/cdi/api/1.0/javax/enterprise/inject/spi/package-summary.html" target="_blank"&gt;portable extensions spi&lt;/a&gt; is the place to start over with it.&lt;br /&gt;You can find some examples of portable extensions in &lt;a href="http://blog.hibernate.org/Bloggers/GavinsBlog/Tag/Portable+Extensions" target="_blank"&gt;gavins blog&lt;/a&gt;. The latest &lt;a href="http://seamframework.org/service/File/105766" target="_blank"&gt;weld reference documentation (weld-reference.pdf, 867 KiB, application/pdf)&lt;/a&gt; contains a chapter (16) with more details about the extension spi.&lt;br /&gt;&lt;blockquote&gt;CDI is intended to be a foundation for frameworks, extensions and integration with other technologies. Therefore,&lt;br /&gt;CDI exposes a set of SPIs for the use of developers of portable extensions to CDI.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Getting started is straight forward. (I was using NetBeans 6.8 with this example)&lt;br /&gt;Add a webproject and a separate java library project. Push whatever is needed to your webproject and don't forget to put an empty beans.xml in your WEB-INF/ folder.&lt;br /&gt;Now, start writing your extension. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;1) Create a java class&lt;/b&gt;&lt;br /&gt;that implements the marker interface javax.enterprise.inject.spi.Extension&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public class MyExtension implements Extension { &lt;br /&gt;//...&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;2) Register your extension&lt;/b&gt;&lt;br /&gt;as a provider by creating a folder named META-INF/services/ in your java library project and putt a file named javax.enterprise.inject.spi.Extension in it. This file has to contain the full qualified name of your extension class (in my case net.eisele.cdi.extensions.MyExtension))&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3) Implement the extension logic.&lt;/b&gt;&lt;br /&gt;Basically extensions listen to events fired by the CDI container and are able to modify the containers metamodel. The events fired are one or all of the following:&lt;br /&gt;javax.enterprise.inject.spi.BeforeBeanDiscovery&lt;br /&gt;javax.enterprise.inject.spi.ProcessAnnotatedType&lt;br /&gt;javax.enterprise.inject.spi.ProcessInjectionTarget and ProcessProducer&lt;br /&gt;javax.enterprise.inject.spi.ProcessBean and ProcessObserverMethod&lt;br /&gt;javax.enterprise.inject.spi.AfterBeanDiscovery&lt;br /&gt;javax.enterprise.inject.spi.AfterDeploymentValidation&lt;br /&gt;&lt;br /&gt;You have to add your business methods and declare an @Observes for every event you are willing to catch. Example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt; void beforeBeanDiscovery(@Observes BeforeBeanDiscovery bbd) {&lt;br /&gt;        log.info("Begin the scanning process");&lt;br /&gt;    }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4) You can have a BeanManager&lt;/b&gt;&lt;br /&gt;injected to your methods, too.&lt;br /&gt;&lt;code&gt;&lt;br /&gt; public void getBeanManager(@Observes BeanManager bm)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The nerve center for extending CDI is the BeanManager object. The BeanManager interface let you obtain beans, interceptors, decorators, observers and contexts programmatically.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5) You can inject your new extension&lt;/b&gt;&lt;br /&gt;even it is not really a bean.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;@Inject&lt;br /&gt;MyExtension ext;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;or &lt;br /&gt;&lt;code&gt;&lt;br /&gt;@Inject&lt;br /&gt;MyBean(MyExtension myExtension) {&lt;br /&gt;myExtension.doSomething();&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If you deploy your app to GlassFish v3 you see something like this in your logfile:&lt;br /&gt;&lt;blockquote&gt;INFO: Begin the scanning process&lt;/blockquote&gt;&lt;br /&gt;That was it. You got your first CDI extension up and running.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-8668373751725423164?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/8668373751725423164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2010/01/jsr-299-cdi-portable-extensions.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/8668373751725423164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/8668373751725423164'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2010/01/jsr-299-cdi-portable-extensions.html' title='JSR-299 CDI portable extensions'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-5702013930122715440</id><published>2010-01-18T06:51:00.001+01:00</published><updated>2010-01-18T07:22:05.491+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSR-299'/><category scheme='http://www.blogger.com/atom/ns#' term='jee6'/><category scheme='http://www.blogger.com/atom/ns#' term='Java EE 6'/><category scheme='http://www.blogger.com/atom/ns#' term='Interceptor'/><title type='text'>JSR-299 CDI Interceptors</title><content type='html'>Playing around with Java EE 6 these days, I came across some new features, I will blog about. Today I just want to give a short introduction to the enhancements made to &lt;a href="http://java.sun.com/javaee/6/docs/api/index.html?javax/interceptor/package-tree.html" target="_blank"&gt;javax.interceptor &lt;/a&gt; by the &lt;a href="http://docs.jboss.org/weld/reference/1.0.0/en-US/html/interceptors.html" target="_blank"&gt;CDI&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Interceptor functionality is allready defined by the Java Interceptors specification. CDI enhances this with a more sophisticated, annotation-based approach for binding interceptors to beans. Only four stepts to get to your new CDI interceptor.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1) Write the interceptor binding:&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;@InterceptorBinding&lt;br /&gt;@Target({METHOD, TYPE})&lt;br /&gt;@Retention(RUNTIME)&lt;br /&gt;public @interface Log {} &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2) Write the interceptor:&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;@LogTime&lt;br /&gt;@Interceptor&lt;br /&gt;public class LoggingInterceptor {&lt;br /&gt;&lt;br /&gt;@AroundInvoke&lt;br /&gt;public Object logExecutionTime(InvocationContext ic) throws Exception {&lt;br /&gt;long start = System.currentTimeMillis();&lt;br /&gt;try {&lt;br /&gt;return ic.proceed();&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;throw e;&lt;br /&gt;} finally {&lt;br /&gt;long time = System.currentTimeMillis() - start;&lt;br /&gt;String method = ic.getClass().getName();&lt;br /&gt;Logger.getLogger(&lt;br /&gt;LoggingInterceptor.class.getName())&lt;br /&gt;.log(Level.INFO, "*** Invocation of " &lt;br /&gt;+ method + " took " + time + "ms");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3) Declare the interceptor in beans.xml:&lt;/b&gt;&lt;br /&gt;&amp;lt;interceptors&amp;gt;&lt;br /&gt;&amp;lt;class&amp;gt;cdi.LoggingInterceptor&amp;lt;/class&amp;gt;&lt;br /&gt;&amp;lt;/interceptors&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4) Use the interceptor in your code:&lt;/b&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//...&lt;br /&gt;@LogTime&lt;br /&gt;public String getText() {&lt;br /&gt;//..&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;That is all. Have fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-5702013930122715440?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/5702013930122715440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2010/01/jsr-299-cdi-interceptors.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/5702013930122715440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/5702013930122715440'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2010/01/jsr-299-cdi-interceptors.html' title='JSR-299 CDI Interceptors'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-1693158400446274310</id><published>2010-01-13T07:27:00.000+01:00</published><updated>2010-01-13T07:27:46.516+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='weblogic server'/><category scheme='http://www.blogger.com/atom/ns#' term='jpa 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>JPA 2.0 and Oracle Weblogic 10.3.2.0 (11g)</title><content type='html'>Everything is about JEE 6 these days. And believe me, I really love the new spec. What I am really missing is the JEE 6 version of a Weblogic server. Anyway, I am still giving parts of the spec some tries on the latest version. Up to now, this was not too successfull. &lt;a href="http://www.eisele.net/blog/2009/07/jsf-20-beta-1-on-oracle-weblogic-10gr3.html"&gt;JSF 2.0 is not working.&lt;/a&gt; Next was to give JPA 2.0 a try. The guys from the EclipseLink project already did this for me. There is a complete analysis about the possible solutions online in the &lt;a href="http://wiki.eclipse.org/EclipseLink/Development/JPA_2.0/weblogic" target="_blank"&gt;EclipseLink wiki space&lt;/a&gt;. You basically have two differnt options available at the moment to use even parts of the new JPA 2.0.&lt;br /&gt;&lt;br /&gt;Change your server/domain install to use new versions of javax.persistence.* and org.eclipse.persistence.* or bundle the related libraries with your application. Both cases have some drawbacks at the moment. &lt;br /&gt;&lt;br /&gt;I decided to give it a try anyway and just wanted to give you a more detailed explanation, of what to do to make the second approach work.&lt;br /&gt;&lt;br /&gt;First is to get the latest EclipseLink 2.x and the JPA 2.0 API libraries. I was using javax.persistence_2.0.0.v200911041116.jar and  eclipselink.jar both taken from the eclipselink-2.0.0.v20091127-r5931.zip download.&lt;br /&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/project_structure-799706.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://www.eisele.net/blog/uploaded_images/project_structure-799704.png" width="200" /&gt;&lt;/a&gt; Now you have to setup an EAR and a WAR project within your favorite IDE. I am using the Oracle Enterprise Pack for Eclipse (OEPE) for this. Add both jars to the APP-INF/lib folder of your EAR project and change the weblogic-application.xml descriptor by adding the following lines to it:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;wls:prefer-application-packages&amp;gt;&lt;br /&gt;&amp;lt;wls:package-name&amp;gt;org.eclipse.persistence.*&amp;lt;/wls:package-name&amp;gt;&lt;br /&gt;&amp;lt;wls:package-name&amp;gt;javax.persistence.*&amp;lt;/wls:package-name&amp;gt;&lt;br /&gt;/wls:prefer-application-packages&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Now you have to add a src/META-INF folder to your WAR project. Create a MANIFEST.MF file with the following two lines:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Manifest-Version: 1.0&lt;br /&gt;Class-Path: javax.persistence_2.0.0.v200911041116.jar eclipselink.jar&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Place your persistence.xml in the same place. Mine looks like this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"&amp;gt;&lt;br /&gt;&amp;lt;persistence-unit name="example" transaction-type="JTA"&amp;gt;&lt;br /&gt;&amp;lt;provider&amp;gt;org.eclipse.persistence.jpa.PersistenceProvider&amp;lt;/provider&amp;gt;&lt;br /&gt;&amp;lt;jta-data-source&amp;gt;ds/localJTA&amp;lt;/jta-data-source&amp;gt;&lt;br /&gt;&amp;lt;class&amp;gt;...&amp;lt;/class&amp;gt;&lt;br /&gt;&amp;lt;properties&amp;gt;&lt;br /&gt;&amp;lt;property name="eclipselink.target-server" value="WebLogic_10"/&amp;gt;&lt;br /&gt;&amp;lt;property name="eclipselink.logging.level" value="FINEST"/&amp;gt;&lt;br /&gt;&amp;lt;property name="eclipselink.ddl-generation" value="drop-and-create-tables" /&amp;gt;&lt;br /&gt;&amp;lt;/properties&amp;gt;       &lt;br /&gt;&amp;lt;/persistence-unit&amp;gt;&lt;br /&gt;&amp;lt;/persistence&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;This is basically everything. Now you can start to put your Entities and business in your webapplication. But remeber to:&lt;br /&gt;- add every Entity as a &amp;lt;class&amp;gt;...&amp;lt;/class&amp;gt; entry to your persistence.xml as dynamic class weaving will not work with this approach. &lt;br /&gt;- Reorder the Java Build Path of your IDE to have the EAR libraries in front of any server libraries. Only this way, you will be able to use the new API features.&lt;br /&gt;- As the schema of the persistence.xml states, you are only able to use JPA 1.0 declarations in it. &lt;br /&gt;- Injecting the EntityManager will not work. You have to get it manually from  javax.persistence.Persistence like this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;EntityManagerFactory emf = Persistence.createEntityManagerFactory("example");&lt;br /&gt;EntityManager em = emf.createEntityManager();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;After all, this is not a full blown approach to JPA 2.0. But better than nothing. Let's hope for a early preview of EclipseLink 2.0 on Weblogic Server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-1693158400446274310?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/1693158400446274310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2010/01/jpa-20-and-oracle-weblogic-10320-11g.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/1693158400446274310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/1693158400446274310'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2010/01/jpa-20-and-oracle-weblogic-10320-11g.html' title='JPA 2.0 and Oracle Weblogic 10.3.2.0 (11g)'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-7649559539348771926</id><published>2010-01-11T07:44:00.000+01:00</published><updated>2010-01-11T07:44:20.935+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='v2.1.1'/><category scheme='http://www.blogger.com/atom/ns#' term='glassfish'/><category scheme='http://www.blogger.com/atom/ns#' term='2.0.2'/><category scheme='http://www.blogger.com/atom/ns#' term='Mojarra'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Running Mojarra 2.0.2 on GlassFish v2.1.1</title><content type='html'>First of all: Happy new year to all of my readers. I had a quite busy time during the start of the new year. But now, everything seems back to normal operation and I can start over blogging about my fav topics.&lt;br /&gt;&lt;br /&gt;A few days ago, a co-worker asked me, about running JSF 2.0 on GlassFish v2.x. I realy was not shure about this first. The JSF 2.0 spec is part of JEE 6 and should work with JDK 1.6. But what about JEE 5 and JDK 1.5? Reading the spec clearly states that it is based on Java 2 Platform, Standard Edition, version 5.0. Ok. This should work according to the spec. &lt;br /&gt;&lt;br /&gt;Let's start.&lt;br /&gt;Grep the latest Mojarra 2.0 Download from the &lt;a href="https://javaserverfaces.dev.java.net/servlets/ProjectDocumentList" target="_download"&gt;projects websites&lt;/a&gt;. If you are there already, also get the sources. We will need them later ;)&lt;br /&gt;Extract the binary distribution (mojarra-2.0.2-FCS-binary.zip/.tar) and setup the example build. I was trying to get the "guessNumber" example (mojarra-2.0.2-FCS\samples\guessNumber) working and will use this further on, too.&lt;br /&gt;If you have everything in place, switch to your favorite JDK 1.5 version (I was using the latest 1.5.0_22) and give it a try (mvn clean install).&lt;br /&gt;Without chaning anything, you will notice, that this will not work:&lt;br /&gt;&lt;br /&gt;[INFO] Compilation failure&lt;br /&gt;X:\mojarra-2.0.2-FCS\samples\guessNumber&lt;br /&gt;\src\main\java\guessnumber\ClientSideValidatorHandler.java:[42,-1] cannot access&lt;br /&gt;javax.faces.component.UIComponent&lt;br /&gt;bad class file: ~.m2\repository\javax\faces\jsf&lt;br /&gt;-api\2.0\jsf-api-2.0.jar(javax/faces/component/UIComponent.class)&lt;br /&gt;class file has wrong version 50.0, should be 49.0&lt;br /&gt;&lt;br /&gt;What does this version thing mean? It states, that the UIComponent.class was compiled with JDK 1.6 and you are trying to use it with JDK 1.5. Fail :|&lt;br /&gt;&lt;br /&gt;Lets correct this.&lt;br /&gt;Next is to extract the sources from the download (mojarra-2.0.2-FCS-source.zip/.tar) and compile a JDK 1.5 compliant jsf-api project. Thank god, the JSF guys know how to setup a build. Copy the build.properties.glassfish.orig to a build.properties file and add your jsf.build.home. Beeing behind a corp firewall forces you to add the needed proxy configurations to your ~/.m2/settings.xml file next. Now call ant and build Mojarra 2.0.2.&lt;br /&gt;&lt;br /&gt;Now we are going to use our two new jar files. Find&lt;br /&gt;the jsf-api.jar in \mojarra-2.0.2-FCS-source\jsf-api\build\lib and the &lt;br /&gt;the jsf-impl.jar in mojarra-2.0.2-FCS-source\jsf-ri\lib and install them to your local maven repository. I was using other version numbers but same group and artifact ids for testing.&lt;br /&gt;&lt;br /&gt;mvn install:install-file -DgroupId=javax.faces -DartifactId=jsf-api -Dversion=2.0.2 -Dpackaging=jar -Dfile=jsf-api.jar&lt;br /&gt;&lt;br /&gt;mvn install:install-file -DgroupId=javax.faces -DartifactId=jsf-impl -Dversion=2.0.2 -Dpackaging=jar -Dfile=jsf-impl.jar&lt;br /&gt;&lt;br /&gt;Now you have to change the pom.xml of your guessNumber example to reflect the changes. If you are not using a JEE5 SDK, you also have to add the javax.annotation dependency. &lt;br /&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;javax.faces&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;jsf-api&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;com.sun.faces&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;jsf-impl&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;2.0.2&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;Almost finished now. Next step is to add a sun-web.xml to the webapp (guessNumber\src\main\webapp\WEB-INF). It should contain:&lt;br /&gt;&lt;br /&gt;&amp;lt;class-loader delegate="false"/&amp;gt; &lt;br /&gt;&amp;lt;property name="useBundledJsf" value="true" /&amp;gt;&lt;br /&gt;&lt;br /&gt;Now you are ready to go. Call mvn clean install and deploy your guessNumber\target\guessNumber.war to your GlassFish v2.1.1 domain. And you are done!&lt;br /&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/guessNumber-734986.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.eisele.net/blog/uploaded_images/guessNumber-734984.png" width="320" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-7649559539348771926?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/7649559539348771926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2010/01/running-mojarra-202-on-glassfish-v211.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/7649559539348771926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/7649559539348771926'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2010/01/running-mojarra-202-on-glassfish-v211.html' title='Running Mojarra 2.0.2 on GlassFish v2.1.1'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-1606659014585355317</id><published>2009-12-17T10:14:00.000+01:00</published><updated>2009-12-17T10:14:04.225+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='foreign jndi'/><category scheme='http://www.blogger.com/atom/ns#' term='glassfishv3'/><category scheme='http://www.blogger.com/atom/ns#' term='weblogic server'/><category scheme='http://www.blogger.com/atom/ns#' term='ejb 3.x'/><category scheme='http://www.blogger.com/atom/ns#' term='rmi-iiop'/><category scheme='http://www.blogger.com/atom/ns#' term='ejb 2.x'/><title type='text'>Weblogic 11g calling GlassFish v3, Foreign JNDI Provider</title><content type='html'>And here is the second post about WLS/GF interoperability.&lt;br /&gt;After answering the question &lt;a href="http://www.eisele.net/blog/2009/12/glassfish-v3-calling-weblogic-11g.html"&gt;How to call an EJB deployed on Weblogic 11g (WLS 10.3.2.0) from GlassFish v3?&lt;/a&gt; I now wanted to know, how do it the other way around. &lt;br /&gt;&lt;br /&gt;Obvisously it would work the same way, I did on the GF side. Anyway, there is another feature build into Weblogic that makes this more easy for the developer. It is called &lt;a href="http://download.oracle.com/docs/cd/E12839_01/web.1111/e13730/toc.htm#i479016" target="_blank"&gt;Foreign JNDI&lt;/a&gt;. Foreign JNDI is an API that allows you to access objects on a remote JNDI tree without having to connect directly to the remote tree. It enables you to make links to a JNDI tree on another server or provider including, but not limited to, WebLogic Server, or a JNDI tree in a java program. Once you have configured Foreign JNDI, you can use an object that is somewhere else with the same ease that you would use an object bound in your WebLogic server instance. This is again using RMI-IIOP communication. Ok. Let's start.&lt;br /&gt;&lt;br /&gt;You need an EJB to deploy to GF. Of course, this has to be a EJB 3.x. I wrote a quite simple one called GFTest. It has one business method  public void sayHelloOnServer() which puts a text to stdout.&lt;br /&gt;And again, you need EJB 2.x style remote interfaces for this. &lt;br /&gt;That should look similar to this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;@Stateless(mappedName="GFTest")&lt;br /&gt;@Remote(GFTestRemote.class)&lt;br /&gt;@RemoteHome(GFTestRemoteHome.class)&lt;br /&gt;public class GFTest implements GFTestRemote&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;GFTest is the EJB 3.x business interface. GFTestRemoteHome is the EJB 2.x EJBHome which creates the GFTestRemoteObject EJBObject. it is best to put all interfaces into a separate client project.&lt;br /&gt;If everything is ready, deploy the ejb.  In my previous post I recommended to run the appc compiler to generate stubs and skeletons. As proven today, this is not realy needed. You only need the interface classes on your client project. Thats totally suffient.&lt;br /&gt;&lt;br /&gt;Now let's move over to the Weblogic administration console (http://localhost:7001/console) and configure the foreign JNDI Provider. The steps to take are described in the &lt;a href="http://download.oracle.com/docs/cd/E15523_01/apirefs.1111/e13952/taskhelp/jndi/ConfigureForeignJNDIProvider.html" target="_blank"&gt;admin console online help&lt;/a&gt;. &lt;br /&gt;First you have to create a foreign JNDI provider. (Summary of Services / Summary of Foreign JNDI Providers / New) and give it a name you like. Now click on the newly created provider and configure it. Settings are as follows:&lt;br /&gt;&lt;b&gt;Initial Context Factory:&lt;/b&gt; weblogic.jndi.WLInitialContextFactory&lt;br /&gt;&lt;b&gt;Provider URL:&lt;/b&gt; iiop://your_host:your_port (standard case is iiop://localhost:3700)&lt;br /&gt;&lt;br /&gt;Next is to create a foreign JNDI object link. Switch from the general to the links tab and click new. Give it a name, you like, it is for administrational proposes only. Then configure the following settings:&lt;br /&gt;&lt;b&gt;Local JNDI Name:&lt;/b&gt; The local binding name for the object (in my case GFTest2)&lt;br /&gt;&lt;b&gt;Remote JNDI Name:&lt;/b&gt; corbaname:iiop:your_host:your_port#remote_binding_name (in my case corbaname:iiop:localhost:3700#GFTest).&lt;br /&gt;&lt;br /&gt;After that, you have to restart the server instance.&lt;br /&gt;&lt;br /&gt;Start your favorite IDE for your Weblogic projects and setup a client project. Again, I am one of those webguys and therefore I setup a simple Dynamic Webproject with OEPE. The remote interfaces should be available to the project (client.jar, or classess folder).&lt;br /&gt;&lt;br /&gt;The only thing you have to do now, is to get an InitialContext and lookup your EJBHome.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;InitialContext context = new InitialContext();&lt;br /&gt;GFTestRemoteHome home = &lt;br /&gt;  (GFTestRemoteHome) context&lt;br /&gt;   .lookup("GFTest2");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The only thing left to do is to create your GFTestRemoteObject on which to call your business method.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;GFTestRemoteObject object = home.create();&lt;br /&gt;object.sayHelloOnServer();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Now you are done!Compared to the manual lookup this is extremely simple and does not force you to take care of the connection handling, urls and jndi names in the code at all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-1606659014585355317?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/1606659014585355317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/12/weblogic-11g-calling-glassfish-v3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/1606659014585355317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/1606659014585355317'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/12/weblogic-11g-calling-glassfish-v3.html' title='Weblogic 11g calling GlassFish v3, Foreign JNDI Provider'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-2216780969300817522</id><published>2009-12-17T07:48:00.000+01:00</published><updated>2009-12-17T07:48:42.412+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='glassfishv3'/><category scheme='http://www.blogger.com/atom/ns#' term='weblogic server'/><category scheme='http://www.blogger.com/atom/ns#' term='ejb 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='rmi-iiop'/><category scheme='http://www.blogger.com/atom/ns#' term='ejb 2.x'/><title type='text'>GlassFish v3 calling Weblogic 11g</title><content type='html'>I was playing around with interoperability problems lately. The question was: How to call an EJB deployed on Weblogic 11g (WLS 10.3.2.0) from GlassFish v3? What looks simple on the first hand, is not too easy.&lt;br /&gt;Here are the steps to take.&lt;br /&gt;&lt;br /&gt;First of all, it is not handy to put any wls libraries into GF's classloader. Therefore you should stick to the most basic communication method available. This is RMI-IIOP. Ok. Let's start.&lt;br /&gt;&lt;br /&gt;You need an EJB to deploy to WLS. Of course, this has to be a EJB 3.0. I wrote a quite simple one called Logger. It has one business method void logString(String message) which gets a string and puts it to stdout.&lt;br /&gt;If you are going to use RMI-IIOP, you have to have EJB 2.x style remote interfaces. &lt;br /&gt;That should look similar to this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;@Stateless(mappedName = "Logger")&lt;br /&gt;@Remote(LoggerRemote.class)&lt;br /&gt;@RemoteHome(LoggerRemoteHome.class)&lt;br /&gt;public class Logger implements LoggerRemote &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;LoggerRemote is the EJB 3.x business interface. LoggerRemoteHome is the EJB 2.x EJBHome which creates the LoggerRemoteObject EJBObject. Put all interfaces into a separate client project (ejb-client-jar). &lt;br /&gt;If everything is ready, deploy the ejb. Now it is time to compile the Stubs and Skeletons for your ejb-client-jar.&lt;br /&gt;Take your jar or ear and put it in weblogic.appc compiler. &lt;br /&gt;&lt;br /&gt;&lt;code&gt;java weblogic.appc ejbinteropEAR.ear&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This will generate the ejbinteropClient.jar with all needed additional classes. Start your favorite IDE for your GF projects and setup a client project. I badly needed to try some Servlet 3.0 features and wrote a small &lt;br /&gt;&lt;code&gt;@WebServlet(name = "InterobTest", urlPatterns = {"/InterobTest"})&lt;/code&gt; servlet for that.&lt;br /&gt;The ejbinteropClient.jar needs to be in your projects classpath.&lt;br /&gt;First thing to do is, to build an InitialContext.&lt;br /&gt;&lt;br /&gt;// Build Properties Object&lt;br /&gt;Properties h = new Properties();&lt;br /&gt;h.put(Context.INITIAL_CONTEXT_FACTORY,&lt;br /&gt;"com.sun.jndi.cosnaming.CNCtxFactory");&lt;br /&gt;h.put(Context.PROVIDER_URL, &lt;br /&gt;"iiop://localhost:7001");&lt;br /&gt;h.setProperty("org.omg.CORBA.ORBInitialHost", &lt;br /&gt;"localhost");&lt;br /&gt;h.setProperty("org.omg.CORBA.ORBInitialPort", &lt;br /&gt;"7001");&lt;br /&gt;// Get InitialContext with Properties&lt;br /&gt;InitialContext ic = new InitialContext(h);&lt;br /&gt;&lt;br /&gt;Now you are half way through. Now lookup your remote object&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Object home = ctx.lookup(JNDI_NAME);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This took some time. Ok, not having the java.net forums online since a few days did realy not speed this up.&lt;br /&gt;Anyway, the magic in this is the JNDI_NAME.&lt;br /&gt;It is constructed out of several parts:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;String JNDI_NAME = &lt;br /&gt;"corbaname:iiop:localhost:7001#"+&lt;br /&gt;"Logger#ejbinterop.LoggerRemoteHome";&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;First part is the static part containing your host and port of the target WLS instance. Second is the binding name for your RemoteHome interface in Weblogic Server's JNDI tree.&lt;br /&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/jndibrowser-774490.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.eisele.net/blog/uploaded_images/jndibrowser-774488.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The only thing left to do is to narrow your RemoteHome from the stubclass&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;LoggerRemoteHome home =(LoggerRemoteHome) &lt;br /&gt;PortableRemoteObject&lt;br /&gt;.narrow(home, &lt;br /&gt;LoggerRemoteHome.class);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and create your LoggerRemoteObject on which to call your business method on.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;LoggerRemoteObject obj= home.create();&lt;br /&gt;obj.logString("Testlog");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now you are done! A few simple lines of code, which could cause you to get grey hair if you are missing any part.&lt;br /&gt;For me it was quite helpfull, to turn on all related debug settings in WebLogic server. Go to Environment / Servers / Your Server / Debug and enable all needed scopes and attributes. If the call is successfull, you see some detailed debug information on the stdout (don't forget to change the log level!).&lt;br /&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/wls_debug_settings-793886.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.eisele.net/blog/uploaded_images/wls_debug_settings-793882.png" width="320" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-2216780969300817522?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/2216780969300817522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/12/glassfish-v3-calling-weblogic-11g.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/2216780969300817522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/2216780969300817522'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/12/glassfish-v3-calling-weblogic-11g.html' title='GlassFish v3 calling Weblogic 11g'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-7498851561914723542</id><published>2009-12-16T08:18:00.000+01:00</published><updated>2009-12-16T08:18:18.211+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='joy'/><category scheme='http://www.blogger.com/atom/ns#' term='season&apos;s greetings'/><category scheme='http://www.blogger.com/atom/ns#' term='peace'/><category scheme='http://www.blogger.com/atom/ns#' term='hope'/><category scheme='http://www.blogger.com/atom/ns#' term='happy holidays'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Oracle Season's Greetings -  Peace, Hope, Joy and Happy Holidays</title><content type='html'>Got a very nice eCard today. It contained a link to a small flash movie. And there were more to discover on Oracle.com. Just wanted to share them with you, cause I do love them soo much. Great art!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Have a perfect holiday and I wish you all the best for 2010!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/1-789974.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.eisele.net/blog/uploaded_images/1-789972.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/greeting_cards/swf/ecard1_english.html" target="_blank"&gt;View movie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/2-755793.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.eisele.net/blog/uploaded_images/2-755791.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/greeting_cards/swf/ecard2_english.html" target="_blank"&gt;View movie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eisele.net/blog/uploaded_images/3-788442.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.eisele.net/blog/uploaded_images/3-788439.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/greeting_cards/swf/ecard3_english.html" target="_blank"&gt;View movie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eisele.net/blog/uploaded_images/4-714509.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.eisele.net/blog/uploaded_images/4-714507.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/greeting_cards/swf/ecard4_english.html" target="_blank"&gt;View movie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eisele.net/blog/uploaded_images/5-738182.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.eisele.net/blog/uploaded_images/5-738179.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/greeting_cards/swf/ecard5_english.html" target="_blank"&gt;View movie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eisele.net/blog/uploaded_images/6-748580.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.eisele.net/blog/uploaded_images/6-748578.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/greeting_cards/swf/ecard6_english.html" target="_blank"&gt;View movie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eisele.net/blog/uploaded_images/7-760439.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.eisele.net/blog/uploaded_images/7-760437.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/greeting_cards/swf/ecard7_english.html" target="_blank"&gt;View movie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eisele.net/blog/uploaded_images/8-770932.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.eisele.net/blog/uploaded_images/8-770930.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/greeting_cards/swf/ecard8_english.html" target="_blank"&gt;View movie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eisele.net/blog/uploaded_images/9-779425.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.eisele.net/blog/uploaded_images/9-779422.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/greeting_cards/swf/ecard9_english.html" target="_blank"&gt;View movie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eisele.net/blog/uploaded_images/10-790342.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.eisele.net/blog/uploaded_images/10-790339.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/greeting_cards/swf/ecard10_english.html" target="_blank"&gt;View movie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eisele.net/blog/uploaded_images/11-799349.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.eisele.net/blog/uploaded_images/11-799346.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/greeting_cards/swf/ecard11_english.html" target="_blank"&gt;View movie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eisele.net/blog/uploaded_images/12-709280.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.eisele.net/blog/uploaded_images/12-709278.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oracle.com/greeting_cards/swf/ecard12_english.html" target="_blank"&gt;View movie&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-7498851561914723542?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/7498851561914723542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/12/oracle-seasons-greetings-peace-hope-joy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/7498851561914723542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/7498851561914723542'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/12/oracle-seasons-greetings-peace-hope-joy.html' title='Oracle Season&apos;s Greetings -  Peace, Hope, Joy and Happy Holidays'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-4670264016193717674</id><published>2009-12-16T07:40:00.000+01:00</published><updated>2009-12-16T07:40:12.198+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='checkstyle'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><category scheme='http://www.blogger.com/atom/ns#' term='components'/><title type='text'>Software Quality: JSF Component Libraries - Checkstyle Results</title><content type='html'>This is part V of the software quality analysis series about common jsf component libraries. After a more detailed look at &lt;a href="http://www.eisele.net/blog/2009/12/software-quality-jsf-component_14.html"&gt;possible bugs (discovered by findbugs)&lt;/a&gt; we will take a deeper look at how the projects comply with coding conventions.&lt;br /&gt;The analysis was done with &lt;a href="http://checkstyle.sourceforge.net/" target="_blank"&gt;Checkstyle 5.0&lt;/a&gt;. Checkstyle is a development tool to help programmers write Java code that adheres to a coding standard. It automates the process of checking Java code to spare humans of this boring (but important) task.&lt;br /&gt;&lt;br /&gt;A note as preface: Checkstyle is highly configurable and can be made to support almost any coding standard. I did NOT look at any project settings. Checkstyle was configured to use the &lt;a href="http://checkstyle.sourceforge.net/checks.html" target="_blank"&gt;Standard Checks&lt;/a&gt; which do cover the Sun coding conventions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PrimeFaces&lt;/b&gt;&lt;br /&gt;With the small codebase, PrimeFaces has the smallest ammount of findings in general. 18762 places in 334 files. Only 61 of them are considered as an error. This makes 0,18 problems per file. &lt;br /&gt;The 61 errors occure within two categories (EmptyBlockCheck, IllegalCatchCheck). Looking randomly at the details for does not reveal any real issue. &lt;br /&gt;&lt;br /&gt;The classes with the highest number of findings can be found among the generated files (jsf-plugin). The handcrafted ones are:&lt;br /&gt;- org.primefaces.component.datatable.DataTableRenderer.java (265)&lt;br /&gt;- org.primefaces.component.calendar.CalendarRenderer.java (217)&lt;br /&gt;- org.primefaces.component.chart.UIChart.java (181)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;RichFaces&lt;/b&gt;&lt;br /&gt;The next biggest codebase is provided by the RichFaces. 713 files with 38.587 findings. 552 of them considered as an error. An average of 0,77 problems per file. This is the worst result of the three. The errors separate into three categories (EmptyBlockCheck, IllegalCatchCheck, IllegalThrowsCheck). Some spot tests on the results did not reveal any bigger problems, which is not surprising at all because findbugs would already have shown them. &lt;br /&gt;&lt;br /&gt;The classes with the highest number of findings are located in the ajax4jsf package.&lt;br /&gt;- org.ajax4jsf.org.w3c.tidy.TidyUtils.java (632)&lt;br /&gt;- org.ajax4jsf.renderkit.RendererUtils.java (593)&lt;br /&gt;- org.ajax4jsf.xml.serializer.ToStream.java (574)&lt;br /&gt;&lt;br /&gt;The hotspots from the RichFaces package:&lt;br /&gt;- java.org.richfaces.model.StackingTreeModel.java (207)&lt;br /&gt;- org.richfaces.json.JSONObject.java (189)&lt;br /&gt;- org.richfaces.json.JSContentHandler.java (159)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ICEFaces&lt;/b&gt;&lt;br /&gt;The biggest codebase is provided by ICEFaces. 877 files with a surprising low number of findings. "only" 22.959 with a total of 287 errors. That makes an average of 0,3 problems per file. &lt;br /&gt;The errors separate into the already known three categories (EmptyBlockCheck, IllegalCatchCheck, IllegalThrowsCheck). &lt;br /&gt;&lt;br /&gt;The hotspots from the ICEFaces package:&lt;br /&gt;- com\icesoft\faces\component\inputfile\InputFile.java (387)&lt;br /&gt;- com\icesoft\faces\component\selectinputdate\SelectInputDateRenderer.java (378)&lt;br /&gt;- com\icesoft\faces\component\paneltabset\PanelTabSet.java (357)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusion:&lt;/b&gt;&lt;br /&gt;With an average of 0,18 problems per file, this round goes to PrimeFaces. Even if the total number of warnings is quite high. Followed by ICEFaces and RichFaces. Even if the last one is the only project having codechecks in place. Somehow surprising results. The hot spots can be found within the components. This is true for every library except for RichFaces. What is also true is, that the most complex components are more likely the ones with the biggest problems. &lt;br /&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/jsfcheckstyle-776748.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.eisele.net/blog/uploaded_images/jsfcheckstyle-776746.png" width="320" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-4670264016193717674?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/4670264016193717674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/12/software-quality-jsf-component_16.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/4670264016193717674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/4670264016193717674'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/12/software-quality-jsf-component_16.html' title='Software Quality: JSF Component Libraries - Checkstyle Results'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-5828272046210274927</id><published>2009-12-14T12:51:00.000+01:00</published><updated>2009-12-14T12:51:28.878+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='findbugs'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><category scheme='http://www.blogger.com/atom/ns#' term='components'/><title type='text'>Software Quality: JSF Component Libraries - Findbugs Results</title><content type='html'>This is part IV of the software quality analysis series about common jsf component libraries.&lt;br /&gt;Today we are looking at the &lt;a href="http://findbugs.sourceforge.net/" target="_blank"&gt;findbugs&lt;/a&gt; results for them in more detail.&lt;br /&gt;To make this more transparent to you, I am running the &lt;a href="http://findbugs.cs.umd.edu/demo/jnlp/findbugs.jnlp"&gt;Java Webstart version of findbugs&lt;/a&gt;. Feel free to give it a try on your own version of the codebase of the projects.&lt;br /&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/findbugsgui-769524.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.eisele.net/blog/uploaded_images/findbugsgui-769522.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PrimeFaces&lt;/b&gt;&lt;br /&gt;You find a total of 126 errors within the PrimeFaces codebase. Eight of them are classified as high prio. 118 have a normal priority. If you look at the eight high prio errors you find one possible multithreading bug and seven malicious code vulnerabilities. The malicious code vularabilities araise from fields that are mutable arrays. This are final static field referencess to arrays which can be accessed by malicious code or by accident from another package. You find all occurences in the same utility class org.primefaces.util.HTML.&lt;br /&gt;The multithreading bug can be found in the  org.primefaces.component.media.player.MediaPlayerFactory. The static Map players is layzily initialized but not synchronized. After the field is set, the object stored into that location is further accessed. The setting of the field is visible to other threads as soon as it is set. If the futher accesses in the method that set the field serve to initialize the object, then you have a very serious multithreading bug, unless something else prevents any other thread from accessing the stored object until it is fully initialized.&lt;br /&gt;&lt;br /&gt;The normal prio bugs devide into all categories. Five bad practice warnings, 82 correctness warnings (all null pointer dereference in method on exception path, which could be a false warning), some more (3) malicious code vulnerabilities warnings (stored references, exposing internal representation), one performance bug in org.primefaces.component.messages.MessagesRenderer.encodeEnd(FacesContext, UIComponent) where the value of a Map entry is accessed using a key that was retrieved from a keySet iterator. It is more efficient to use an iterator on the entrySet of the map, to avoid the Map.get(key) lookup. Last but not least there are 19 dodgy stile warnings of which 18 are useless control flow statements. Which look like this for example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;if(resourceHolder != null) {&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Conclusion: &lt;br /&gt;That is not bad at all. Even if we take into account, that the codebase for PrimeFaces is the smallest one of the three, this is not the place to blame anyone about the results! And to remember, this is still a SNAPSHOT version! &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;RichFaces&lt;/b&gt;&lt;br /&gt;The Richfaces code base provides 291 errors. 15 classified as high prio. 261 normal priority. Seven high prio bugs fall into the bad practice category (possible problems around serialization). This most likely will only be seen in clustered failover scenarios. There are five correctnes warnings. (possible infinite loop, null pointer dereferences, problem with equals and a bad comparison of signed byte. There are also two malicious code vulnerabilities (mutable static fields) and one possible multithreading bug (wait() with two locks held). Things to look at and to remove. &lt;br /&gt;&lt;br /&gt;The normal prio bugs also devide into all categories. Hotspot are the 91 performance warnings. Most of the warnings result in unnecessary object creation and therefore memory consumption. Second on the list are the possible malicious code vulnerabilities with a count of 70. Followed by 47 bad practice warnings and 41 dodgy stlyle warnings. &lt;br /&gt;&lt;br /&gt;Conclusion: &lt;br /&gt;With hardly the same code size of PrimeFaces this is also a good result. Having seen more RichFaces projects lately, I would be happy if someone takes a deeper look at the performance warnings. Memory consumption seems to be an issue. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ICEFaces&lt;/b&gt;&lt;br /&gt;The biggest code base is provided by the ICEFaces. To have the most FindBugs warnings in it, no surprise at all. 373 in total. 106 High priority warnings followed by 267 normal priority warnings. &lt;br /&gt;Bad practice warnings (49) and malicious code vulnerabilities (47) cover the most bugs. As the only candidate, ICEFaces is ignoring exceptions in three places. That is bad.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;} catch (Exception e)  { }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;But you can also find some serialization issues. All malicious code vulnerability warnings relate to mutable static fields. The majority of them shoud be final but are not. Three correctness warnings, two possible multithreading issues and five dodgy style warnings make the rest of the high prio bugs. All more or less smaller things to change.&lt;br /&gt;&lt;br /&gt;The normal priority bugs are lead by the performance warnings (77) and followed by bad practices (44) and malicious code vulnerability warnings (46). What is impressive are the 80 dodgy style warnings. Last bigger category are the possible multithreaded correctness warnings (17). &lt;br /&gt;&lt;br /&gt;Conclusion:&lt;br /&gt;Compared with the other two candidates, this looks much on the first sight. But the codebase is by far the biggest and therefore it is not too bad at all. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Bottom line&lt;/b&gt;&lt;br /&gt;Compared with each other, all code bases look identically in terms of findbugs. You find more or less all categories in some lines of any candidate. What is to note is, that the bigger the code base gets, the more performance issues you can find. I expected the bigger frameworks to watch out for them more carefully. The bug density for all is nearly the same. &lt;br /&gt;Only looking at the metrics itsel does not give you a clue about the quality. You need to have a deeper look at every single warning and check the severity.&lt;br /&gt;What is interesting to some extend is, that it is hard to setup findbugs for the projects manually. The source folders are quite distributed along the development structure and you have to spend some time to set it up.&lt;br /&gt;Only RichFaces has included some  quality checks (PMD, Findbugs, Checkstyle) into their nightly builds. PrimeFaces and ICEFaces are still in need of this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-5828272046210274927?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/5828272046210274927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/12/software-quality-jsf-component_14.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/5828272046210274927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/5828272046210274927'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/12/software-quality-jsf-component_14.html' title='Software Quality: JSF Component Libraries - Findbugs Results'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-2710374123223984322</id><published>2009-12-10T15:00:00.002+01:00</published><updated>2009-12-10T15:00:01.044+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='glassfishv3'/><category scheme='http://www.blogger.com/atom/ns#' term='javaee6'/><category scheme='http://www.blogger.com/atom/ns#' term='glassfish'/><category scheme='http://www.blogger.com/atom/ns#' term='if there was only one GlassFish v3/Java EE 6 thing I&apos;d like to mention...'/><title type='text'>Celebrating GlassFish v3 final</title><content type='html'>Roberto Chinnici wrote about this on his &lt;a href="http://weblogs.java.net/blog/robc/archive/2009/12/01/java-ee-6-platform-approved-today" target="_blank"&gt;blog&lt;/a&gt; a few days ago. &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The final release will happen on December 10, when GlassFish v3 will be available. &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Today finaly is the day! What we all have been waiting for since so long is there.&lt;br /&gt;&lt;a href="https://glassfish.dev.java.net/public/downloadsindex.html#top" target="_blank"&gt;Download GlassFish v3 (the Java EE 6 referenz implementation)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;About Java EE 6:&lt;/b&gt;&lt;br /&gt;Java EE provides a standard for portable, robust, multi-tiered server side applications. Java EE 6, improves on the Java EE 5 developer productivity features, breaks the &amp;quot;one size fits all&amp;quot; approach with Web Profiles, adds extensibility, and more. GlassFish v3 delivers the modularity, extensibility and rightsizing capabilities of the new Java EE 6 platform and provides a lightweight, modular, and extensible platform for your Web and Enterprise applications.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Major new features:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Profiles&lt;/li&gt;&lt;li&gt;Pruning&lt;/li&gt;&lt;li&gt;Pluggability/Extensibility&lt;/li&gt;&lt;li&gt;Continuing push for ease of development&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;My Java EE 6 Articles:&lt;/b&gt;&lt;br /&gt;Watch out for the &lt;a href="http://www.ix.de"&gt;german iX magazin&lt;/a&gt; issue no.1/2010. It will contain my introductionary article about Java EE 6. Available from the 17.12.09.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Further links:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.eisele.net/blog/labels/glassfish.html"&gt;My blogposts about GlassFish&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sun.com/software/products/glassfishv3/GlassFish_Conference_Flyer.pdf"&gt;Virtual Conference on the 15th (PDF)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://javadoc.glassfish.org/javaee6/apidoc/"&gt;Glassfish Java EE 6 API&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://glassfish.org"&gt;GlassFish Community Home-page&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=" http://www.sun.com/glassfishv3"&gt;GlassFish Enterprise Home-page&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/javaee"&gt;Java EE 6 homepage (includes SDK download link)&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.sun.com/judy/entry/glassfish_v3_fishcat_survey_results"&gt;The FishCATs Quality Report&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-2710374123223984322?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/2710374123223984322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/12/celebrating-glassfish-v3-final.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/2710374123223984322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/2710374123223984322'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/12/celebrating-glassfish-v3-final.html' title='Celebrating GlassFish v3 final'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-3392746869740512089</id><published>2009-12-10T05:58:00.000+01:00</published><updated>2009-12-10T05:58:08.673+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='manifesto'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='computing'/><title type='text'>Manifesto for Cloud Computing published</title><content type='html'>Found this recently and what should I tell you: I love it! :-)&lt;br /&gt;&lt;br /&gt;Manifesto for Cloud Computing&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cloudy approach with any kind of process over foggy substance-driven rain &lt;/li&gt;&lt;li&gt;Warm front anticyclones over Agile SaaS &lt;/li&gt;&lt;li&gt;Extrinsic data-driven decoupling over bug-driven intrinsic minimalism&lt;/li&gt;&lt;li&gt;Extremely pragmatic cloud beans over generic security coffee beans&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Want to participate? Learn more? Visit &lt;a href="http://www.cloud-manifesto.org/" target="_blank"&gt;http://www.cloud-manifesto.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-3392746869740512089?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/3392746869740512089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/12/manifesto-for-cloud-computing-published.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/3392746869740512089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/3392746869740512089'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/12/manifesto-for-cloud-computing-published.html' title='Manifesto for Cloud Computing published'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-8474773469512677212</id><published>2009-12-09T12:19:00.000+01:00</published><updated>2009-12-09T12:19:37.583+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='xdepend'/><category scheme='http://www.blogger.com/atom/ns#' term='primefaces'/><category scheme='http://www.blogger.com/atom/ns#' term='richfaces'/><category scheme='http://www.blogger.com/atom/ns#' term='icefaces'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><category scheme='http://www.blogger.com/atom/ns#' term='components'/><title type='text'>Software Quality: JSF Component Libraries - The Candidates, #primefaces, #icefaces, #richfaces</title><content type='html'>We did a lot of theory about static code analysis in &lt;a href="http://www.eisele.net/blog/2009/12/software-quality-jsf-component.html"&gt;part I&lt;/a&gt; and &lt;a href="http://www.eisele.net/blog/2009/12/software-quality-basics-ii-ccd-acd-ca.html"&gt;part II&lt;/a&gt; of my software quality posts.&lt;br /&gt;Now it is time to start over with the real work. In this post (part III) we will look at the candidates in more details. I have choosen to examine three of the most popular JSF component libraries today. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Preparation and preface&lt;/b&gt;&lt;br /&gt;In preperation for the analysis I did a checkout from the project repositories. After that I setup the local build and made shure, that all projects could be compiled and packaged locally. &lt;br /&gt;The review itself was done by some tools. One is the already mentioned msg java measuring station (JMP). The second one is &lt;a href="http://www.xdepend.com/" target="_blank"&gt;XDepend&lt;/a&gt; which I was thankfully given a license from it's creator (thanks for that!!). I am not going to publish the complete reports (If the project leads are interested, I will hand them out to them, of course. Let me know!). The goal of this series is to provide a brief overview of the projects and highlight some hotspots. This is not going to be a beauty contest nor am I going to bash anybody with this. It should give my readers a brief understanding about static code analysis and the typical findings. &lt;br /&gt;The NCSS results from the JMP and XDepend vary a bit in some places. This is because of the fact, that XDepend does a more complete analysis than the JMP does. Further more the configuration of the JMP is not that straight forward. This gets even worser, if you have lot's of subprojects (e.g. RichFaces, one project per component...). Therefore I decided to focus on the core projects with the JMP analysis and do a complete analysis with XDepend.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PrimeFaces&lt;/b&gt;&lt;br /&gt;&lt;a href="http://primefaces.prime.com.tr/en/" target="_blank"&gt;PrimeFaces&lt;/a&gt; is an open source component suite for Java Server Faces featuring 70+ Ajax powered rich set of JSF components. Additional TouchFaces module features a UI kit for developing mobile web applications. &lt;br /&gt;It is a quite fresh and new library which grows very quickly. It caught my attention cause I am using FacesTrace since some time. &lt;br /&gt;With every result I publish here about primefaces, you should have in mind, that his is a SNAPSHOT release and not intendet for productive use. Therefore it may not be representative. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Basics:&lt;/i&gt;&lt;br /&gt;Version: 1.0.0-SNAPSHOT (readonly checkout at 27.11.09)&lt;br /&gt;Jar Name: primefaces-1.0.0-SNAPSHOT.jar&lt;br /&gt;Jar Size: 1,60 MB (1.682.956 Bytes)&lt;br /&gt;Dependent libraries: 30 with a total size of 7,56 MB (7.929.734 Bytes)&lt;br /&gt;JMP included subprojects: complete primefaces-read-only&lt;br /&gt;XDepend jars: primefaces-1.0.0-SNAPSHOT.jar&lt;br /&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/visualndependview-primefaces-701677.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.eisele.net/blog/uploaded_images/visualndependview-primefaces-701642.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Size (JMP):&lt;/i&gt;&lt;br /&gt;NCSS - Lines of code:   8340&lt;br /&gt;Number of packages:  86&lt;br /&gt;Number of classes (w/o inner classes):  160&lt;br /&gt;Number of functions:  796&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Metrics (Xdepend):&lt;/i&gt;&lt;br /&gt;Number of ByteCode instructions: 74741&lt;br /&gt;Number of lines of code: 15784&lt;br /&gt;Number of lines of comment: 245&lt;br /&gt;Percentage comment: 1%&lt;br /&gt;Number of jars: 1&lt;br /&gt;Number of classes: 306&lt;br /&gt;Number of types: 324&lt;br /&gt;Number of abstract classes: 3&lt;br /&gt;Number of interfaces: 17&lt;br /&gt;Number of value types: 0&lt;br /&gt;Number of exception classes: 0&lt;br /&gt;Number of annotation classes: 0&lt;br /&gt;Number of enumerations classes: 1&lt;br /&gt;Number of generic type definitions: 0&lt;br /&gt;Number of generic method definitions: 0&lt;br /&gt;Percentage of public types: 99,07% &lt;br /&gt;Percentage of public methods: 85,04% &lt;br /&gt;Percentage of classes with at least one public field: 26,54% &lt;br /&gt;&lt;br /&gt;&lt;b&gt;RichFaces&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.jboss.org/richfaces" target="_blank"&gt;RichFaces &lt;/a&gt; is a component library for JSF and an advanced framework for easily integrating AJAX capabilities into business applications. &lt;br /&gt;It is one of the more mature libraries around. Mature in terms of age. Have seen it in a couple of projects and it is the favorite implementation for some of my employer's customers.&lt;br /&gt;This is the latest GA version of RichFaces.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Basics:&lt;/i&gt;&lt;br /&gt;Version: 3.3.3 (readonly checkout at 27.11.09)&lt;br /&gt;Jar Name: richfaces-api-3.3.3-SNAPSHOT.jar and richfaces-impl-3.3.3-SNAPSHOT.jar&lt;br /&gt;Jar Size: 1,65 MB (1.737.826 Bytes)&lt;br /&gt;Dependent libraries: 20 with a total size of 4,50 MB (4.726.588 Bytes)&lt;br /&gt;JMP included subprojects: framework/impl and framework/api&lt;br /&gt;XDepend jars: richfaces-api-3.3.3-SNAPSHOT.jar and richfaces-impl-3.3.3-SNAPSHOT.jar&lt;br /&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/visualndependview-richfaces-763929.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.eisele.net/blog/uploaded_images/visualndependview-richfaces-763903.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Size (JMP):&lt;/i&gt;&lt;br /&gt;NCSS - Lines of code: 9186  &lt;br /&gt;Number of packages: 21 &lt;br /&gt;Number of classes (w/o inner classes): 225 &lt;br /&gt;Number of functions: 1526 &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Metrics (Xdepend):&lt;/i&gt;&lt;br /&gt;Number of ByteCode instructions: 166694&lt;br /&gt;Number of lines of code: 35227&lt;br /&gt;Number of lines of comment: 34938&lt;br /&gt;Percentage comment: 49%&lt;br /&gt;Number of jars: 2&lt;br /&gt;Number of classes: 790&lt;br /&gt;Number of types: 938&lt;br /&gt;Number of abstract classes: 69&lt;br /&gt;Number of interfaces: 133&lt;br /&gt;Number of value types: 0&lt;br /&gt;Number of exception classes: 11&lt;br /&gt;Number of annotation classes: 1&lt;br /&gt;Number of enumerations classes: 15&lt;br /&gt;Number of generic type definitions: 0&lt;br /&gt;Number of generic method definitions: 0&lt;br /&gt;Percentage of public types: 74,09% &lt;br /&gt;Percentage of public methods: 74,73% &lt;br /&gt;Percentage of classes with at least one public field: 9,49% &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ICEfaces&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.icefaces.org/" target="_blank"&gt;ICEfaces &lt;/a&gt; as a leading open source Ajax framework, ICEfaces is more than a Ajax JSF component library, it's an J2EE Ajax framework for developing and deploying rich enterprise applications (REAs).&lt;br /&gt;To be honest, I have not seen it in the wild too much. It was suggested to include this via a fellow twitter follower and I thought three is better than two :)&lt;br /&gt;This is the latest GA version of ICEFaces.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Basics:&lt;/i&gt;&lt;br /&gt;Version: 1.7.1 (readonly checkout at 27.11.09)&lt;br /&gt;Jar Name: icefaces.jar and icefaces-comps.jar&lt;br /&gt;Jar Size: 2,64 MB (2.770.861 Bytes)&lt;br /&gt;Dependent libraries: 42 with a total size of 10,4 MB (10.993.491 Bytes)&lt;br /&gt;JMP included subprojects: icefaces/core and icefaces/component&lt;br /&gt;XDepend jars: icefaces.jar and icefaces-comps.jar&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eisele.net/blog/uploaded_images/visualndependview-icefaces-700961.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.eisele.net/blog/uploaded_images/visualndependview-icefaces-700933.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Size (JMP):&lt;/i&gt;&lt;br /&gt;NCSS - Lines of code: 38109  &lt;br /&gt;Number of packages: 67 &lt;br /&gt;Number of classes (w/o inner classes): 521 &lt;br /&gt;Number of functions: 5606 &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Metrics (Xdepend):&lt;/i&gt;&lt;br /&gt;Number of ByteCode instructions: 177269&lt;br /&gt;Number of lines of code: 41710&lt;br /&gt;Number of lines of comment: 16161&lt;br /&gt;Percentage comment: 27%&lt;br /&gt;Number of jars: 2&lt;br /&gt;Number of classes: 664&lt;br /&gt;Number of types: 714&lt;br /&gt;Number of abstract classes: 29&lt;br /&gt;Number of interfaces: 50&lt;br /&gt;Number of value types: 0&lt;br /&gt;Number of exception classes: 5&lt;br /&gt;Number of annotation classes: 0&lt;br /&gt;Number of enumerations classes: 0&lt;br /&gt;Number of generic type definitions: 0&lt;br /&gt;Number of generic method definitions: 0&lt;br /&gt;Percentage of public types: 82,77% &lt;br /&gt;Percentage of public methods: 82,52% &lt;br /&gt;Percentage of classes with at least one public field: 14,15% &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is all for now. Part IV will cover the details for checkstyle, findbugs and simian for all candidates. Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-8474773469512677212?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/8474773469512677212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/12/software-quality-jsf-component_09.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/8474773469512677212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/8474773469512677212'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/12/software-quality-jsf-component_09.html' title='Software Quality: JSF Component Libraries - The Candidates, #primefaces, #icefaces, #richfaces'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-5784804724321405774</id><published>2009-12-09T08:28:00.001+01:00</published><updated>2009-12-09T08:30:39.267+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='metrics'/><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='basics'/><title type='text'>Software Quality: The Basics II - CCD, ACD, Ca, Ce, I, A, I/A and D</title><content type='html'>The second part of the theory behind static code analysis takes a more detailed look at the remaining metrics, not already covered in &lt;a href="http://www.eisele.net/blog/2009/12/software-quality-basics-i-preface-for.html"&gt;part I&lt;/a&gt;.&lt;br /&gt;I am not shure, if I bother you with all this theory at all. But to me it seems necessary to talk about the basics, before presenting the results for the individual JSF frameworks.&lt;br /&gt;&lt;br /&gt;Part I introduced the analysis results and metrics from quite popular developer tools like JavaNCSS, Checkstyle and Findbugs.&lt;br /&gt;These are usefull during development and can give you a brief idea about the code base in general in terms of implemented source quality. Up to now, we only know about how much the developers care about maintainability and readability of their sources. And we do possibly know a little about the general development skills of the teams, because we know, how many bug pattern they have been taken care of. &lt;br /&gt;What is still missing are metrics to judge about the software design. But of course you can analyze software with this scope, too. Even if the results are far less concrete than the already presented ones, they are not less important. This will only give you a very brief summary about it. If you want to know more about&lt;br /&gt;it, you have to take the time and take a look at all those great theory behind. And of course you have to look at many projects and findings to know, what the results are going to tell you!&lt;br /&gt;A good place to start is the &lt;a href="http://www.xdepend.com/" target="_blank"&gt;XDepend Homepage&lt;/a&gt;. Beside the fact, that they deliver an awesome tool, you also find many details about the &lt;a href="http://www.xdepend.com/features#Metrics" target="_blank"&gt;collected metrics&lt;/a&gt;.&lt;br /&gt;Some of the analysis I am going to do with the JSF Frameworks are generated by XDepend.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Cumulative Component Dependency (CCD)&lt;/b&gt;&lt;br /&gt;The metric of the metrics itself. CCD, is the sum over all components Ci in a subsystem of the number of components needed in order to test each Ci incrementally. This is true for direct and indirect dependencies. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Impact:&lt;/i&gt;&lt;br /&gt;If you try to change code which has a high CCD, you probably have to change a lot of other dependend classes too.&lt;br /&gt;This is error-prone and will generate new bugs in your software.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Threshold:&lt;/i&gt;&lt;br /&gt;The major design goal is to keep the CCD low in general.&lt;br /&gt;&lt;br /&gt;Derived metrics are the avarage component dependency ACD and the normalized cumulative component dependency, NCCD, which is the CCD devided by the CCD of a perfectly balanced binary dependency tree with the same number of components. The CCD of a perfectly balanced binary dependency tree of n components is (n+1) * log2(n+1) - n.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Average Component Dependency (ACD)&lt;/b&gt;&lt;br /&gt;Expresses the average component (equivalent to 'compilation unit') coupling. It is the sum of all component depedencies divided by the number of components (SIZE). &lt;br /&gt;Average Component Dependency = CCD(N)/N (N is # of components).&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Impact:&lt;/i&gt;&lt;br /&gt;An ACD of 20 indicates for example, that on an average the component depends directly and indirectly &lt;br /&gt;(transitively) upon 19 other components +1 for itself.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Threshold:&lt;/i&gt;&lt;br /&gt;The major design goal is to keep the ACD low in general. it should not exceed 20.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Afferent Coupling (Ca) &lt;/b&gt;&lt;br /&gt;There are a number of coupling metrics available. Two of the well know ones are Afferent Coupling (Ca) and &lt;br /&gt;Efferent Coupling (Ce). These integer based metrics represent a count of related objects. &lt;br /&gt;Ca counts how many classes are using another package to compile sucessfully.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Impact:&lt;/i&gt;&lt;br /&gt;Afferent Coupling signify an architectural maintenance issue, that an object has too much responsibility &lt;br /&gt;(high Afferent Coupling). &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Threshold:&lt;/i&gt;&lt;br /&gt;There is no treshold for Ca in general. Using other packages is not bad in general. But you should keep in mind, &lt;br /&gt;who is using what.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Efferent Coupling (Ce)&lt;/b&gt;&lt;br /&gt;Ce counts how many classes used by the other package are needed to compile sucessfully.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Impact:&lt;/i&gt;&lt;br /&gt;Afferent Coupling signify an architectural maintenance issue, that the object is not independent &lt;br /&gt;enough (high Efferent Coupling). &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Threshold:&lt;/i&gt;&lt;br /&gt;There is no treshold for Ce in general. Beeing used by other packages is not bad in general. &lt;br /&gt;But you should keep in mind, who is using what.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Instability (I)&lt;/b&gt;&lt;br /&gt;The ratio of efferent coupling (Ce) to total coupling. I = Ce / (Ce + Ca). &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Impact:&lt;/i&gt;&lt;br /&gt;This metric is an indicator of the package's resilience to change. If I is near 1 it means the package&lt;br /&gt;is instable. You can change it with nearly any effect on dependenc classes. If I is near 0 the package&lt;br /&gt;is stable. Changes will have a big impact on other packages.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Threshold:&lt;/i&gt;&lt;br /&gt;The range for this metric is 0 to 1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Abstractness (A)&lt;/b&gt;&lt;br /&gt;The ratio of the number of internal abstract types (i.e abstract classes and interfaces) to the number &lt;br /&gt;of internal types. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Impact:&lt;/i&gt;&lt;br /&gt;This metric is an indicator of the package's abstractness. If A is near =, you have a complete concrete&lt;br /&gt;package without any abstract types. If A is near 1 you only have abstract types.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Threshold:&lt;/i&gt;&lt;br /&gt;The range for this metric is 0 to 1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Distance (D)&lt;/b&gt; and &lt;b&gt;I/A-Diagrams &lt;/b&gt;&lt;br /&gt;D stands for Distance from main sequence. The perpendicular normalized distance of an assembly &lt;br /&gt;from the idealized line A + I = 1 (called main sequence). &lt;br /&gt;This metric is an indicator of the assembly's balance between abstractness and stability. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Impact:&lt;/i&gt;&lt;br /&gt;An assembly squarely on the main sequence is optimally balanced with respect to its abstractness and &lt;br /&gt;stability. Ideal assemblies are either completely abstract and stable (I=0, A=1) or completely &lt;br /&gt;concrete and instable (I=1, A=0). &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Threshold:&lt;/i&gt;&lt;br /&gt;The range for this metric is 0 to 1, with D=0 indicating an assembly that is coincident with the &lt;br /&gt;main sequence and D=1 indicating an assembly that is as far from the main sequence as possible. &lt;br /&gt;D should have a value between -0.6 and 0.7.&lt;br /&gt;&lt;br /&gt;If you draw a diagram from this, you can see if an assembly is in the zone of pain (I and A both close to 0) &lt;br /&gt;or in the zone of uselessness (I and A both close to 1). &lt;br /&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/a-i-d-749894.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.eisele.net/blog/uploaded_images/a-i-d-749890.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That's all theory for now. The third part will start delivering the results of the code analysis for PrimeFaces, RichFaces and ICEFaces.Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-5784804724321405774?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/5784804724321405774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/12/software-quality-basics-ii-ccd-acd-ca.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/5784804724321405774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/5784804724321405774'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/12/software-quality-basics-ii-ccd-acd-ca.html' title='Software Quality: The Basics II - CCD, ACD, Ca, Ce, I, A, I/A and D'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-4934392212096389421</id><published>2009-12-08T10:21:00.002+01:00</published><updated>2009-12-09T08:30:16.585+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='metrics'/><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='basics'/><title type='text'>Software Quality: The Basics I - preface for looking at primefaces, richfaces and icefaces</title><content type='html'>As &lt;a href="http://www.eisele.net/blog/2009/12/software-quality-jsf-component.html"&gt;announced in my previous post&lt;/a&gt;, I am going to take a deeper look at some of the most popular JSF Frameworks these days. A deeper look means, I am going to do some static code analysis with it. Before publishing the details, I have to give you a brief introduction into what static code analysis is, and what to expect from the results.&lt;br /&gt;&lt;br /&gt;Wikipedia defines &lt;a href="http://en.wikipedia.org/wiki/Static_code_analysis"&gt;static code analysis&lt;/a&gt; like this: &lt;br /&gt;&lt;blockquote&gt;Static code analysis is the analysis of computer software that is performed without actually executing programs built from that software [...]. &lt;br /&gt;In most cases the analysis is performed on some version of the source code [...]. &lt;br /&gt;The term is usually applied to the analysis performed by an automated tool, &lt;br /&gt;with human analysis being called program understanding, program comprehension or code review.&lt;br /&gt;&lt;/blockquote&gt;To make it short: Static analysis typically finds mistakes. But but some of the mistakes don't matter at all.&lt;br /&gt;What is most important is to find the intersection of stupid and important. Further on, it highly depends on the context, if bugs matter or not. Static code analysis, at best, might catch 5-10% of the software quality problems in code. This may extend to 80+% for certain specific defects but overall it ist not the the magic bullet you are looking for. Anyway, using static analysis is cheaper and more&lt;br /&gt;effective than any other techniques for catching bugs. If you want to catch more bugs, you need to take  a fullblown approach on testing (see picture one, taken from a &lt;a href="http://www.cs.umd.edu/%7Epugh/MistakesThatMatter.pdf%29"&gt;JavaOne presentation&lt;/a&gt; by William Pugh (findbugs lead). &lt;br /&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/mistakes_that_matter-711409.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.eisele.net/blog/uploaded_images/mistakes_that_matter-711407.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;My employer has kindly given me the permission to use the msg java measuring station (lets call it JMP for short) to do the analysis (Thanks Rainer!). And a co-worker of mine is kindly supporting me in hunting bugs in it and doing configurations (Thanks Jochen!).&lt;br /&gt;The JMP is a collection of popular code analysis tools. Three tools focus on static code analysis. One on architectural compliance and one tries to find out about test coverage. &lt;br /&gt;Beside the simple results from the tools, I also try to add some expert views (code review :-)). &lt;br /&gt;&lt;br /&gt;&lt;b&gt;What metrics are covered?&lt;/b&gt;&lt;br /&gt;The JMP covers all metrics generated by the individual tools. This is the enormous count of about 52 different numbers to interpret. To make this more convenient for the readers, I picked the most common ones. &lt;br /&gt;Having a part I available indicates, that there will be a part II :) If you are looking for CCD, ACD, Ca, Ce, I, A, I/A and D you have to wait for the next post.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Non Commenting Source Statements (NCSS)&lt;/b&gt;&lt;br /&gt;Determines complexity of methods, classes and files by counting the Non Commenting Source Statements (NCSS).  Statements for NCSS are not statements as specified in the Java Language Specification but include all kinds of declarations too.&lt;br /&gt;Roughly spoken, NCSS is approximately equivalent to counting ';' and '{' characters in Java source files. &lt;br /&gt;The NCSS for a class is summarized from the NCSS of all its methods, the NCSS of its nested classes and the number of member variable declarations.&lt;br /&gt;The NCSS for a file is summarized from the ncss of all its top level classes, the number of imports and the package declaration. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Impact:&lt;/i&gt;&lt;br /&gt;Too large methods and classes are hard to read and costly to maintain. A large NCSS number often means that a method or class has too many responsabilities and/or functionalities which should be decomposed into smaller units. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Threshold:&lt;/i&gt;&lt;br /&gt;Derived from this you can set some default values from experiences that define tresholds like the following.&lt;br /&gt;&lt;br /&gt;The maximum count of classes per package must not exceed 40.&lt;br /&gt;The maximum count of functions per class must not exceed 20.&lt;br /&gt;The maximum ncss per function must not exceed 25.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Cyclomatic Complexity Number (CCN)&lt;/b&gt;&lt;br /&gt;CCN is also know as McCabe Metric. It defines the complexity of classes and files by counting the control flow statements like 'if', 'for', 'while, etc. in methods. Whenever the control flow of a method splits, the "CCN counter" gets incremented by one. Each method has a minimum value of 1 per default.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Impact:&lt;/i&gt;&lt;br /&gt;Too complex methods and classes are hard to understand and test and costly to maintain. A high CCN often stands for methods or classes that respond to too many responsabilities and possibly wrong design.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Threshold&lt;/i&gt;&lt;i&gt;:&lt;/i&gt;&lt;br /&gt;Having a CNN below 10 is quite normal. The maximum count must not exceed 25.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Findbugs total warnings and density&lt;/b&gt;&lt;br /&gt;FindBugs is a program to find bugs in Java programs. It looks for instances of "bug patterns". This are code instances that are likely to be errors. A complete list of Bugpattern is available http://findbugs.sourceforge.net/bugDescriptions.html.&lt;br /&gt;The metric itself is the density. It refers to the Defects per Thousand lines of non-commenting source statements.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Impact:&lt;/i&gt;&lt;br /&gt;The total density sums up the overall code impression. Code which has a high density most probably has many errors in it.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Threshold&lt;/i&gt;&lt;i&gt;:&lt;/i&gt;&lt;br /&gt;The quality of this metric depends on the distribution of the bugs along the categories. Most projects allign around a density of 10. &lt;br /&gt;&lt;br /&gt;There are several categories of bugs reported by this tool. Therefore it is not only the metric that makes it but every single bug. Only looking at the metric is not enough. With this tool you should do a deeper look at the reported bugs.&lt;br /&gt;First, review the correctness warnings. Developers would want to fix most of the high and medium priority correctness warnings reported. Once you've reviewed those, you might want to look at some of the other categories. &lt;br /&gt;Next on with the bad practice  warnings which are violations of recommended and essential coding practice. Examples include hash code and equals problems, cloneable idiom, dropped exceptions, serializable problems, etc. &lt;br /&gt;Dodgy warnings summarize code that is confusing, anomalous, or written in a way that leads itself to errors. Examples include dead local stores, switch fall through, unconfirmed casts, and redundant null check of value known to be &lt;br /&gt;null. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;CheckStyle Errors&lt;/b&gt;&lt;br /&gt;Checkstyle reviews Java code for it's compliance to coding standards. The &lt;a href="http://checkstyle.sourceforge.net/4.4/checks.html"&gt;standard checks &lt;/a&gt; are applicable to general Java coding style. The &lt;a href="http://checkstyle.sourceforge.net/4.4/optional.html"&gt;optional checks&lt;/a&gt; are available for JEE artifacts.&lt;br /&gt;&lt;br /&gt;The single metric generated here is the number of errors the tool finds. This is highly dependent on the configuration used with checkstyle. The config used for analyzing the JSF libraries are based on the complete set of &lt;a href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html"&gt;Sun's Java Coding Standards&lt;/a&gt; whithout any tailoring. This is not practical to follow all of them, but for a comparison this should be a good place to start. Even if some projects tailored some of the checks, it should be visible, if and how&lt;br /&gt;the projects care about code style.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Impact:&lt;/i&gt;&lt;br /&gt;Code conventions are important to programmers for a number of reasons. 80% of the lifetime cost of a piece of software goes to maintenance. Hardly any software is maintained for its whole life by the original author. &lt;br /&gt;Following coding conventions improves the readability of the software, allowing engineers to understand new code more quickly and thoroughly. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Threshold&lt;/i&gt;&lt;i&gt;:&lt;/i&gt;&lt;br /&gt;Depending on the real project setting and it's commitment to the set of checks, this should find no errors at all. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The second part will cover CCD, ACD, Ca, Ce, I, A, I/A and D. Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-4934392212096389421?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/4934392212096389421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/12/software-quality-basics-i-preface-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/4934392212096389421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/4934392212096389421'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/12/software-quality-basics-i-preface-for.html' title='Software Quality: The Basics I - preface for looking at primefaces, richfaces and icefaces'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-1505556737698223831</id><published>2009-12-07T12:19:00.000+01:00</published><updated>2009-12-07T12:19:21.129+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software quality'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><category scheme='http://www.blogger.com/atom/ns#' term='components'/><title type='text'>Software Quality: JSF Component Libraries</title><content type='html'>Working for a larger sofware company has some advantages. One of them is, to have a software quality checker at hand, which can be easily configured to run on any java project. What is called "msgJavaMessplatz" (Java measuring station) depends on quite popular tools. &lt;br /&gt;&lt;br /&gt;- &lt;a href="http://www.kclee.de/clemens/java/javancss/" target="_blank"&gt;JavaNCSS &lt;/a&gt;- A Source Measurement Suite for Java&lt;br /&gt;JavaNCSS is a simple command line utility which measures two standard source code metrics for the Java programming language. The metrics are collected globally, for each class and/or for each function. &lt;br /&gt;&lt;br /&gt;- &lt;a href="http://checkstyle.sourceforge.net/4.4/index.html" target="_blank"&gt;Checkstyle 4.4&lt;/a&gt;&lt;br /&gt;Checkstyle is a development tool to help programmers write Java code that adheres to a coding standard. &lt;br /&gt;&lt;br /&gt;- &lt;a href="http://findbugs.sourceforge.net/" target="_blank"&gt;FindBugs&lt;/a&gt;&lt;br /&gt;Is a program which uses static analysis to look for bugs in Java code.&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://www.redhillconsulting.com.au/products/simian/" target="_blank"&gt;Simian v 2.2.17&lt;/a&gt;&lt;br /&gt;Simian (Similarity Analyser) identifies duplication in Java Code.&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://source.valtech.com/display/dpm/Dependometer" target="_blank"&gt;Dependometer&lt;/a&gt;&lt;br /&gt;Dependometer performs a static analysis of physical dependencies within a software system.&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://cobertura.sourceforge.net/" target="_blank"&gt;Cobertura&lt;/a&gt;&lt;br /&gt;Cobertura is a tool that calculates the percentage of code accessed by tests.&lt;br /&gt;&lt;br /&gt;This was planned for quite some time now. Today, I finaly managed to setup the testing environment and run a few quality checks with the first candidates.&lt;br /&gt;To give you a brief overview of the candidates, here are the basic metrics in terms of size and quality. I will compile more detailed results during the week and publish selected results. So stay tuned for more ....&lt;br /&gt;&lt;br /&gt;&lt;a href="http://primefaces.prime.com.tr/en/"&gt;PrimeFaces 1.0.0-SNAPSHOT&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.jboss.org/richfaces"&gt;RichFaces 3.3.X&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.icefaces.org/"&gt;ICEfaces 1.7.1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; table-layout: fixed; width: 393px;"&gt;&lt;col style="width: 115pt;" width="153"&gt;&lt;/col&gt;  &lt;col span="3" style="width: 60pt;" width="80"&gt;&lt;/col&gt;  &lt;tbody&gt;&lt;tr height="20" style="height: 15pt;"&gt;   &lt;td height="20" style="height: 15pt; width: 115pt;" width="153"&gt;&lt;/td&gt;   &lt;td style="width: 60pt;" width="80"&gt;ICEfaces&lt;br /&gt;&lt;/td&gt;   &lt;td style="width: 60pt;" width="80"&gt;RichFaces&lt;br /&gt;&lt;/td&gt;   &lt;td style="width: 60pt;" width="80"&gt;PrimeFaces&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="20" style="height: 15pt;"&gt;   &lt;td height="20" style="height: 15pt;"&gt;Package Depth&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;7&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;5&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;5&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="20" style="height: 15pt;"&gt;   &lt;td height="20" style="height: 15pt;"&gt;Type Inheritance&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;6&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;4&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;3&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="20" style="height: 15pt;"&gt;   &lt;td height="20" style="height: 15pt;"&gt;NCSS&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;38087&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;9186&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;8340&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="20" style="height: 15pt;"&gt;   &lt;td height="20" style="height: 15pt;"&gt;# Classes&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;520&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;225&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;160&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="20" style="height: 15pt;"&gt;   &lt;td height="20" style="height: 15pt;"&gt;# of Functions&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;5601&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;1526&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;796&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="20" style="height: 15pt;"&gt;   &lt;td height="20" style="height: 15pt;"&gt;# Packages&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;66&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;21&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;86&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="20" style="height: 15pt;"&gt;   &lt;td height="20" style="height: 15pt;"&gt;# design rule violations&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;243&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;39&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;25&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="20" style="height: 15pt;"&gt;   &lt;td height="20" style="height: 15pt;"&gt;# import rule violations&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;127&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;15&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;6&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="20" style="height: 15pt;"&gt;   &lt;td height="20" style="height: 15pt;"&gt;Findbugs Total Warnings&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;760&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;173&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;217&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr height="20" style="height: 15pt;"&gt;   &lt;td height="20" style="height: 15pt;"&gt;Findbugs Density&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;13,2&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;3,69&lt;br /&gt;&lt;/td&gt;   &lt;td align="right"&gt;9,13&lt;br /&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Screenshot of the "msgJavaMessplatz".&lt;br /&gt;..oO(you can not buy the tool ... )&lt;br /&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/msgjmp-710159.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.eisele.net/blog/uploaded_images/msgjmp-710157.png" width="320" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-1505556737698223831?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/1505556737698223831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/12/software-quality-jsf-component.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/1505556737698223831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/1505556737698223831'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/12/software-quality-jsf-component.html' title='Software Quality: JSF Component Libraries'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-5157609445694383129</id><published>2009-12-04T08:41:00.002+01:00</published><updated>2009-12-14T06:48:49.753+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='weblogic server'/><category scheme='http://www.blogger.com/atom/ns#' term='JScaLite'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='sca'/><title type='text'>WLS 10.3.2.0, JScaLite TechPreview .. examples ... working :)!</title><content type='html'>I had some quite &lt;a href="http://www.eisele.net/blog/2009/11/wls-10320-jscalite-techpreview-examples.html"&gt;dissapointing trials&lt;/a&gt; running the new JScaLite examples, shipped with the Oracle WebLogic Server 11g R1 Patch Set 1 (WLS 10.3.2.0).&lt;br /&gt;Seems as if my calls were heared at Oracle and they started to write some blogposts about the new Weblogic SCA container tech preview. &lt;br /&gt;Raghav Srinivasan posted &lt;a href="http://blogs.oracle.com/WebLogicServer/2009/12/getting_started_with_weblogic.html" target="_blank"&gt;"Getting Started with SCA"&lt;/a&gt; and this finaly gave me the missing hints about what to do, getting the examples running.&lt;br /&gt;&lt;br /&gt;Here is the complete HowTo:&lt;br /&gt;&lt;br /&gt;Follow the steps, already described in my &lt;a href="http://www.eisele.net/blog/2009/11/wls-10320-jscalite-techpreview-examples.html"&gt;previous post&lt;/a&gt;&lt;br /&gt;1) Install WLS 10.3.2.0 (with examples)&lt;br /&gt;2) setup environment variables&lt;br /&gt;3) change example.properties&lt;br /&gt;4) deploy the weblogic-sca-1.0.war&lt;br /&gt;5) point the war files to the library (weblogic.xml)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Now, here comes the music:&lt;/b&gt;&lt;br /&gt;6) Change the spring-context.xml files&lt;br /&gt;one located in both example war files:&lt;br /&gt;- JSca_GetTotQty_EAR\JSca_GetTotQty_WAR\WEB-INF\classes\META-INF\jsca&lt;br /&gt;- JSca_GetTotPrice_EAR\JSca_GetTotPrice_WAR\WEB-INF\classes\META-INF\jsca&lt;br /&gt;&lt;br /&gt;Replace the &amp;lt;beans tag at the beginning with the following:&lt;br /&gt;&lt;br /&gt;&amp;lt;beans xmlns="http://www.springframework.org/schema/beans"&lt;br /&gt;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;xmlns:sca="http://xmlns.oracle.com/weblogic/weblogic-sca"&lt;br /&gt;xmlns:wlsb="http://xmlns.oracle.com/weblogic/weblogic-sca-binding"&lt;br /&gt;xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"&lt;br /&gt;xsi:schemaLocation="http://www.springframework.org/schema/beans&lt;br /&gt;http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&lt;br /&gt;http://xmlns.oracle.com/weblogic/weblogic-sca&lt;br /&gt;http://xmlns.oracle.com/weblogic/weblogic-sca/1.0/weblogic-sca.xsd&lt;br /&gt;http://xmlns.oracle.com/weblogic/weblogic-sca-binding&lt;br /&gt;http://xmlns.oracle.com/weblogic/weblogic-sca-binding/1.0/weblogic-sca-binding.xsd"&amp;gt;&lt;br /&gt;&lt;br /&gt;replace all &amp;lt;binding with &amp;lt;wlsb:binding&lt;br /&gt;&lt;br /&gt;7) Now your are ready to build the examples (ant build)&lt;br /&gt;8) and deploy them (ant deploy)&lt;br /&gt;&lt;br /&gt;Working behind a corporate proxy leads to a fancy warning:&lt;br /&gt;&lt;br /&gt;&amp;lt;Warning&amp;gt; &amp;lt;org.springframework.beans.factory.xml.XmlB&lt;br /&gt;eanDefinitionReader&amp;gt; &amp;lt;BEA-000000&amp;gt; &amp;lt;Ignored XML validation warning&lt;br /&gt;org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema documen&lt;br /&gt;t 'http://xmlns.oracle.com/weblogic/weblogic-sca-binding/1.0/weblogic-sca-wlsb:b&lt;br /&gt;inding.xsd', because 1) could not find the document; 2) the document could not b&lt;br /&gt;e read; 3) the root element of the document is not &amp;lt;xsd:schema&amp;gt;.&lt;br /&gt;&lt;br /&gt;This is because of the fact, the the WLS does not have access to the needed schema files. Therefore the deployment takes quite some time until the timeouts appear.&lt;br /&gt;&lt;br /&gt;Anyhow, if you switch your configuration and use a proxy in your setDomainEnv.bat/.sh JAVA_PROPERTIES&lt;br /&gt;like this: -Dhttp.proxyHost=myproxyserver.com  -Dhttp.proxyPort=80&lt;br /&gt;&lt;br /&gt;you run into another problem, a SAX Parser exception:&lt;br /&gt;&lt;br /&gt;org.xml.sax.SAXParseException: White spaces are required between publicId and systemId&lt;br /&gt;&lt;br /&gt;That is not too funny, as the deployment will fail with this. Therefore, you better accept the warnings and get the app deployed :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9) You can run the examples from the command line (ant run) this opens up your favorite browser and&lt;br /&gt;points it to the URL http://&amp;lt;host&amp;amp;gt;:&amp;lt;port&amp;amp;gt;/ShoppingCartCtx/ShoppingCart&lt;br /&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/jscalite-714747.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.eisele.net/blog/uploaded_images/jscalite-714745.png" width="320" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-5157609445694383129?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/5157609445694383129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/12/wls-10320-jscalite-techpreview-examples.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/5157609445694383129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/5157609445694383129'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/12/wls-10320-jscalite-techpreview-examples.html' title='WLS 10.3.2.0, JScaLite TechPreview .. examples ... working :)!'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-5246763351954174414</id><published>2009-12-01T11:53:00.001+01:00</published><updated>2009-12-01T11:55:11.290+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jee6'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR-316'/><category scheme='http://www.blogger.com/atom/ns#' term='specifications'/><title type='text'>Java EE 6 Specification summary -  Zoom Text</title><content type='html'>Having the final Java EE 6 in place it is time for a nice presentation of all included technologies. Here you are. This is done with a little help of the "&lt;a href="http://www.sapweb20.com/blog/2009/11/auto-tweet-directly-from-powerpoint-and-other-twitter-tool-updates/" target="_blank"&gt;ZoomText Tool&lt;/a&gt;" provided by &lt;a href="http://twitter.com/sapweb20" target="_blank"&gt;Timo Elliott&lt;/a&gt;. Navigate and have fun. Java EE 6 includes 38 JSRs. &lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codebase="http://fpdownload.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" WIDTH="400" HEIGHT="400" id="PowerPointZoomText"&gt; &lt;param NAME=FlashVars VALUE="mywords='eisele.net; Java Platform, Enterprise Edition 6;Managed Beans 1.0;Java EE Web Profile (Web Profile) 1.0;Java API for RESTful Web Services (JAX-RS)  1.1;Implementing Enterprise Web Services  1.3 ;Java API for XML-Based Web Services (JAX-WS) 2.2;Java Architecture for XML Binding (JAXB) 2.2;Web Services Metadata for the Java Platform 2.0;Java API for XML-Based RPC (JAX-RPC) 1.1;Java APIs for XML Messaging  (JAXM) 1.3;Java API for XML Registries (JAXR) 1.0; Servlet 3.0;JavaServer Faces  (JSF) 2.0;JavaServer Pages (JSP) 2.2;JavaServer Pages Expression Language (EL) 2.2;A Standard Tag Library for JavaServer Pages (JSTL) 1.2;Debugging Support for Other Languages  1.0;Contexts and Dependency Injection for the Java EE Platform (CDI) 1.0;Dependency Injection for Java (DI) 1.0;Bean Validation  1.0;Enterprise JavaBeans  (EJB) 3.1;Java EE Connector Architecture (JCA) 1.6;Java Persistence (JPA) 2.0;Common Annotations for the Java Platform 1.1;Java Message Service API (JMS) 1.1;Java Transaction API (JTA)  1.1;JavaMail  1.4;Java Authentication Service Provider Interface for Containers  1.0;Java Authorization Contract for Containers (Java ACC)  1.3;Java EE Application Deployment  1.2;J2EE Management 1.1;Java API for XML Processing (JAXP)  1.3;Java Database Connectivity (JDBC) 4.0;Java Management Extensions (JMX)  2.0;JavaBeans Activation Framework (JAF)  1.1;Streaming API for XML (StAX)  1.0;Java Authentication and Authorization Service (JAAS) 1.0;Interceptors 1.1'"&gt;&lt;param NAME="movie" VALUE="http://www.sapweb20.com/blog/ppttools/zoomtextanimation.swf.swf"&gt;&lt;param NAME="quality" VALUE="high"&gt;&lt;param NAME="bgcolor" VALUE="#1B1012"&gt;&lt;param NAME="play" VALUE="true"&gt;&lt;param NAME="loop" VALUE="true"&gt;&lt;param NAME=bgcolor VALUE="#1B1012"&gt;&lt;embed src="http://www.sapweb20.com/blog/ppttools/zoomtextanimation.swf" quality=high bgcolor=#1B1012 WIDTH="400" HEIGHT="400" NAME="PowerPointZoomText" ALIGN="" TYPE="application/x-shockwave-flash" play="true" loop="true" FlashVars="mywords='eisele.net; Java Platform, Enterprise Edition 6;Managed Beans 1.0;Java EE Web Profile (Web Profile) 1.0;Java API for RESTful Web Services (JAX-RS)  1.1;Implementing Enterprise Web Services  1.3 ;Java API for XML-Based Web Services (JAX-WS) 2.2;Java Architecture for XML Binding (JAXB) 2.2;Web Services Metadata for the Java Platform 2.0;Java API for XML-Based RPC (JAX-RPC) 1.1;Java APIs for XML Messaging  (JAXM) 1.3;Java API for XML Registries (JAXR) 1.0; Servlet 3.0;JavaServer Faces  (JSF) 2.0;JavaServer Pages (JSP) 2.2;JavaServer Pages Expression Language (EL) 2.2;A Standard Tag Library for JavaServer Pages (JSTL) 1.2;Debugging Support for Other Languages  1.0;Contexts and Dependency Injection for the Java EE Platform (CDI) 1.0;Dependency Injection for Java (DI) 1.0;Bean Validation  1.0;Enterprise JavaBeans  (EJB) 3.1;Java EE Connector Architecture (JCA) 1.6;Java Persistence (JPA) 2.0;Common Annotations for the Java Platform 1.1;Java Message Service API (JMS) 1.1;Java Transaction API (JTA)  1.1;JavaMail  1.4;Java Authentication Service Provider Interface for Containers  1.0;Java Authorization Contract for Containers (Java ACC)  1.3;Java EE Application Deployment  1.2;J2EE Management 1.1;Java API for XML Processing (JAXP)  1.3;Java Database Connectivity (JDBC) 4.0;Java Management Extensions (JMX)  2.0;JavaBeans Activation Framework (JAF)  1.1;Streaming API for XML (StAX)  1.0;Java Authentication and Authorization Service (JAAS) 1.0;Interceptors 1.1'" PLUGINSPAGE="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"&gt; &lt;/EMBED&gt;  &lt;/OBJECT&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-5246763351954174414?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/5246763351954174414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/12/java-ee-6-specification-summary-zoom.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/5246763351954174414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/5246763351954174414'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/12/java-ee-6-specification-summary-zoom.html' title='Java EE 6 Specification summary -  Zoom Text'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-3307526038963604499</id><published>2009-12-01T09:51:00.000+01:00</published><updated>2009-12-01T09:51:29.389+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='final'/><category scheme='http://www.blogger.com/atom/ns#' term='jee6'/><category scheme='http://www.blogger.com/atom/ns#' term='JSR-316'/><category scheme='http://www.blogger.com/atom/ns#' term='approved'/><title type='text'>Breaking news: Java EE 6 is done!</title><content type='html'>As posted 30 minutes ago by Roberto, the JEE 6 spec is finaly done!&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Breaking news: Java EE 6 is done! The final approval ballot closed 9 minutes ago. &lt;br /&gt;http://jcp.org/en/jsr/results?id=5025&lt;br /&gt;(source: http://twitter.com/robc2/status/6229390753)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Intel and SAP abstained from the vote. SpringSource did not vote at all.&lt;br /&gt;The Apache Software Foundation voted with no. All others voted yes. Therefore the   Executive Committee for SE/EE has approved the final approval ballot. &lt;br /&gt;&lt;br /&gt;As usual, there are many complaints about the licensing model (missing &amp;quot;full license terms&amp;quot;) . This is also the base for the ASF vote.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;On 2009-11-30 Apache Software Foundation voted No with the following comment:&lt;br /&gt;The Apache Software Foundation's vote is based on the point of view that this spec lead - Sun - is in violation of the JSPA &lt;br /&gt;&lt;br /&gt;http://www.apache.org/jcp/sunopenletter.html&lt;br /&gt;&lt;br /&gt;and therefore shouldn't be allowed to lead other JSRs until the above matter is resolved. &lt;br /&gt;&lt;br /&gt;This vote is not a comment on the technical merits of the JSR.  If not for the issue of the spec lead, the ASF would have otherwise voted "yes".&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;IBM complained about the newest JSRs included very late into the umbrella specification. &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;With the exception of the JSR 330 and JSR 299 injection support defined by the EE 6 platform, we believe that this new specification brings value to the industry. We remain concerned that the injection support defined by the platform will create unnecessary difficulties for the community. IBM will continue to support both expert groups in the development of a single integrated and extensible injection programming model. &lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-3307526038963604499?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/3307526038963604499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/12/breaking-news-java-ee-6-is-done.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/3307526038963604499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/3307526038963604499'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/12/breaking-news-java-ee-6-is-done.html' title='Breaking news: Java EE 6 is done!'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-1993549745884975216</id><published>2009-11-30T03:52:00.000+01:00</published><updated>2009-11-30T03:52:33.531+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><title type='text'>myfear's  tweet cloud</title><content type='html'>I just created my first &lt;a href="http://tweetcloud.icodeforlove.com/myfear/133905" target="_blank"&gt;tweet cloud&lt;/a&gt;. Interesting to see, what I am talking about since one year :) &lt;br /&gt;&lt;br /&gt;&lt;b&gt;words (ordered by most used)&lt;/b&gt;&lt;br /&gt;oracle, java, glassfish, blog, server, weblogic, primefaces, 2009, enterprise, news, software, love, time, post, thanks, code, germany, keynote, openworld, jee6, hope, sessions, available,coffee,meet,running,google,moment,days,project,cloud&lt;br /&gt;&lt;br /&gt;&lt;b&gt;cloud&lt;/b&gt;&lt;br /&gt;&lt;a class="lightbox" href="http://www.eisele.net/blog/uploaded_images/tweetcloud-735519.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.eisele.net/blog/uploaded_images/tweetcloud-735516.png" width="320" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-1993549745884975216?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/1993549745884975216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/11/myfears-tweet-cloud.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/1993549745884975216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/1993549745884975216'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/11/myfears-tweet-cloud.html' title='myfear&apos;s  tweet cloud'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-7197045921219084522</id><published>2009-11-23T12:54:00.000+01:00</published><updated>2009-11-23T12:54:01.372+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OSGi'/><category scheme='http://www.blogger.com/atom/ns#' term='weblogic server'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Enterprise Modules Project (Gemini), oracle, springsource and weblogic server</title><content type='html'>This happened three days ago. &lt;a href="http://www.springsource.org/" target="_blank"&gt;SpringSource&lt;/a&gt; and &lt;a href="http://www.oracle.com" target="_blank"&gt;Oracle &lt;/a&gt;proposed the &lt;a href="http://eclipse.org/proposals/gemini/" target="_blank"&gt;Enterprise Modules Project (Gemini)&lt;/a&gt; to the Eclipse community, whose primary goal is to provide access to standard enterprise technology implementations within a modular framework. The project will include important  &lt;a href="http://www.osgi.org/EEG/HomePage" target="_blank"&gt;OSGi EEG&lt;/a&gt; implementations (Blueprint Service Implementation and Web Container Integration) contributed by SpringSource as well as contributed code by Oracle. All sub projects will be consumable as modules (or OSGi bundles) and will provide implementations for important and popular enterprise standards.&lt;br /&gt;&lt;br /&gt;Up to now, there is no official feedback available in the &lt;a href="http://www.eclipse.org/forums/eclipse.gemini" target="_blank"&gt;community forums&lt;/a&gt;. Even if the announcement did fire up some &lt;a href="http://www.google.com/search?q=Eclipse+Gemini" target="_blank"&gt;press comments (google.com&lt;/a&gt;. You can find the &lt;a href="http://www.springsource.org/node/2178" target="_blank"&gt;SpringSource press release&lt;/a&gt; here.&lt;br /&gt;&lt;br /&gt;The overall lead for the project is &lt;a href="http://www.oracle.com/innovation/innovator-mike-keith.html" target="_blank"&gt;Mike Keith&lt;/a&gt;. The project mentors are &lt;a href="http://www.rokc.ca/wayne/" target="_blank"&gt;Wayne Beaton&lt;/a&gt;, &lt;a href="http://wiki.eclipse.org/User:Douglas.clarke.oracle.com" target="_blank"&gt;Doug Clarke&lt;/a&gt; and &lt;a href="http://www.springsource.com/about/management" target="_blank"&gt;Adrian Colyer&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Gemini is organized under 6 subprojects:&lt;br /&gt;* RFC 66 — Web Container&lt;br /&gt;* RFC 98 — Transactions&lt;br /&gt;* RFC 122 — Database Access&lt;br /&gt;* RFC 124 — Blueprint Services&lt;br /&gt;* RFC 139 — JMX Integration&lt;br /&gt;* RFC 142 — JNDI Integration&lt;br /&gt;* RFC 143 — JPA Integration&lt;br /&gt;* RFC 146 — JCA Connector Integration&lt;br /&gt;&lt;br /&gt;As you can see, some important JEE specs are still missing (e.g. EJB &amp; JMS).&lt;br /&gt;&lt;br /&gt;Most notably, this project would continue the recently presented invests taken by Oracle in &lt;a href="http://www.eisele.net/blog/2009/10/preview-weblogic-dm-server-weblogic.html"&gt;OSGi and a WebLogic DM server&lt;/a&gt;. It could lead to a defined standard ways of building and running enterprise technologies (such as Java EE) in OSGi. The EEG has a wide participation: beside Oracle and SpringSource you can find IBM, IONA/Progress, Tibco, ProSyst, Siemens and LinkedIn on the list.&lt;br /&gt;&lt;br /&gt;On a midrange timeframe both technologies could grow together. While Java EE defines a suite of application-level APIs, OSGi specifies the infrastructure obligations, needed running them. With the power of OSGi some of the many existing Java EE issues  could be solved:&lt;br /&gt;* Application versioning&lt;br /&gt;* Facilitates application module reuse&lt;br /&gt;* Hot upgrades/patches&lt;br /&gt;&lt;br /&gt;So OSGi could be the enabler for the next generation of Java server infrastructure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-7197045921219084522?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/7197045921219084522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/11/enterprise-modules-project-gemini.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/7197045921219084522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/7197045921219084522'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/11/enterprise-modules-project-gemini.html' title='Enterprise Modules Project (Gemini), oracle, springsource and weblogic server'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-7091889842611703209</id><published>2009-11-23T07:45:00.004+01:00</published><updated>2009-12-10T06:33:06.285+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='glassfishv3'/><category scheme='http://www.blogger.com/atom/ns#' term='slides'/><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><category scheme='http://www.blogger.com/atom/ns#' term='glassfish'/><category scheme='http://www.blogger.com/atom/ns#' term='session'/><category scheme='http://www.blogger.com/atom/ns#' term='doag'/><title type='text'>The GlassFish Experience (german)</title><content type='html'>Here are the slides from my doag conference session about Sun's GlassFish.&lt;br /&gt;Only available in german:&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px;text-align:left" id="__ss_2562607"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/myfear/the-glassfish-experience" title="The Glassfish Experience"&gt;The Glassfish Experience&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2009-k-sun-eisele-glassfishexperience-091123004343-phpapp01&amp;stripped_title=the-glassfish-experience" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=2009-k-sun-eisele-glassfishexperience-091123004343-phpapp01&amp;stripped_title=the-glassfish-experience" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;documents&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/myfear"&gt;myfear&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Opening Slide CC:&lt;br /&gt;&lt;div xmlns:cc="http://creativecommons.org/ns#" about="http://www.flickr.com/photos/octopushat/2691997956/"&gt;&lt;a rel="cc:attributionURL" href="http://www.flickr.com/photos/octopushat/"&gt;http://www.flickr.com/photos/octopushat/&lt;/a&gt; / &lt;a rel="license" href="http://creativecommons.org/licenses/by-sa/2.0/"&gt;CC BY-SA 2.0&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-7091889842611703209?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/7091889842611703209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/11/glassfish-experience-german.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/7091889842611703209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/7091889842611703209'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/11/glassfish-experience-german.html' title='The GlassFish Experience (german)'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6868595312516376692.post-3124366284443972842</id><published>2009-11-17T11:56:00.000+01:00</published><updated>2009-11-17T11:56:13.073+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adf faces'/><category scheme='http://www.blogger.com/atom/ns#' term='primefaces'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='richfaces'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Enterprise grade JSF component libraries and how to find them</title><content type='html'>It is quite obvious, that there is a still growing number of jsf component libraries out there. The most popular ones are compared on my favorite site &lt;a href="http://www.jsfmatrix.net/"&gt;www.jsf-matrix.net&lt;/a&gt;.&lt;br /&gt;Working with clients in everyday projects I sometimes need to make a proposal for one or the other library to use. But what are the decision making points on this? What does "enterprise grade" really mean?&lt;br /&gt;Even if I am not going to present a complete evaluation report about JSF libraries here, I will try to introduce my approach in finding enterprise-grade JSF component libraries for customers. And further on, I will try to have a more detailed look at three component libraries I choose to evaluate in customer situations quite often.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Definition: enterprise-grade&lt;/strong&gt;&lt;br /&gt;My first try was to find out about the definition of enterprise-grade. The wikipedia keeps silent about this. No article about this does exist. Ok. Some googling does return more results. Anyway, as silently allready expected,&lt;br /&gt;you will not find a definition anywhere. In a &lt;a href="http://www.theserverside.com/tt/knowledgecenter-is/knowledgecenter-is.tss?l=PodcastEdBurns"&gt;2008 TSS Discussion&lt;/a&gt;, Ed Burns talked about Enterprise Grade Ajax and JSF already. He defined it as follows:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;[...] something that is robust, scalable, well tested, and industry proven.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;strong&gt;General evaluation approach&lt;/strong&gt;&lt;br /&gt;&lt;i&gt;Evaluation Criteria&lt;/i&gt;&lt;br /&gt;If you compare the customers needs to Ed's keywords, you obviously find some missing parts. Resorted and completed it could lead to a list like the following:&lt;br /&gt;&lt;br /&gt;- robustness&lt;br /&gt;- scalability&lt;br /&gt;- testability&lt;br /&gt;- # of available components&lt;br /&gt;- browser support&lt;br /&gt;- development tools support&lt;br /&gt;- professional support &lt;br /&gt;- # of industry references&lt;br /&gt;- size of the community&lt;br /&gt;- software quality&lt;br /&gt;- documentation (size/quality)&lt;br /&gt;- # releases per year&lt;br /&gt;- avrg time for bugfixing&lt;br /&gt;- customizability&lt;br /&gt;- licensing&lt;br /&gt;- avalable since&lt;br /&gt;&lt;br /&gt;This is still a very limited list and could be expanded, to the customers needs. But to me it seems as if this are the most interesting points to evaluate if you are looking for an enterprise-grade product. Having special platforms or environments in place, you could even think about defining categories (non-technical, technical, enterprise, strategic and so on..)&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Candidates&lt;/i&gt;&lt;br /&gt;Collecting the criteria is the first part. Next step is to identify the candidates to evaluate. Sometimes this is also called a shortlist. There are some pre evaluation suggestions around. To me it is most valuable to define some necessary and sufficient conditions and  only discuss those libraries meeting the sufficient criteria. In most cases it should be perfect to work with up to five different libraries in the comparisson. For each of them you have to do the criteria evaluation.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Cost-utility analyses&lt;/i&gt;&lt;br /&gt;If you have your criteria and degrees of fulfilment in place, you should do your analysis. There are some more or less common approaches in place to do this. A more general description could be &lt;a href="http://en.wikipedia.org/wiki/Cost-utility_analysis"&gt;found here&lt;/a&gt;. The &lt;a href="http://de.wikipedia.org/wiki/Nutzwertanalyse"&gt;german articel in the wikipedia&lt;/a&gt; is more complete and also defines some functions as guidelines.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Personal shortlist&lt;/strong&gt;&lt;br /&gt;Looking at the jsf-matrix again is a perfect starting point for building a  shortlist. My personal shortlist is influenced by what I know from my customers and their requirements. Therefore I have chosen the following three:&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://www.jboss.org/richfaces"&gt;RichFaces&lt;/a&gt;&lt;br /&gt;RichFaces is a component library for JSF and an advanced framework for easily integrating AJAX capabilities into business applications.&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://www.oracle.com/technology/products/adf/adffaces/index.html"&gt;Oracle ADF Faces&lt;/a&gt;&lt;br /&gt;Oracle ADF Faces Components is a set of over a 150 Ajax-enabled JSF components that let you build a richer user interface for your Java EE applications. Oracle ADF Faces also includes many of the framework features most needed by JSF developers today.&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://primefaces.prime.com.tr/en/"&gt;PrimeFaces&lt;/a&gt;&lt;br /&gt;PrimeFaces is an open source component suite for Java Server Faces featuring 70+ Ajax powered rich set of JSF components. Additional TouchFaces module features a UI kit for developing mobile web applications.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Criteria fulfillment&lt;/strong&gt;&lt;br /&gt;Here are some examples derived from the product's websites and communities for selected criteria. &lt;br /&gt;&lt;br /&gt;&lt;table border=0 cellpadding=0 cellspacing=0 &gt; &lt;tr height=20 style='height:15.0pt'&gt;  &lt;td height=20  width=191 style='height:15.0pt;width:143pt'&gt;&lt;/td&gt;  &lt;td  width=76 style='width:57pt'&gt;&lt;strong&gt;RichFaces&lt;/strong&gt;&lt;/td&gt;  &lt;td  width=113 style='width:85pt'&gt;&lt;strong&gt;Oracle ADF Faces&lt;/strong&gt;&lt;/td&gt;  &lt;td  width=102 style='width:77pt'&gt;&lt;strong&gt;PrimeFaces&lt;/strong&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr height=20 style='height:15.0pt'&gt;  &lt;td height=20  style='height:15.0pt'&gt;# of available components&lt;/td&gt;  &lt;td&gt;100&lt;/td&gt;  &lt;td&gt;150&lt;/td&gt;  &lt;td&gt;70&lt;/td&gt; &lt;/tr&gt; &lt;tr height=20 style='height:15.0pt'&gt;  &lt;td height=20  style='height:15.0pt'&gt;development tools support&lt;/td&gt;  &lt;td&gt;Jboss Tools&lt;/td&gt;  &lt;td&gt;JDeveloper&lt;/td&gt;  &lt;td&gt;none&lt;/td&gt; &lt;/tr&gt; &lt;tr height=20 style='height:15.0pt'&gt;  &lt;td height=20  style='height:15.0pt'&gt;professional support&lt;/td&gt;  &lt;td&gt;yes&lt;/td&gt;  &lt;td&gt;yes&lt;/td&gt;  &lt;td&gt;none&lt;/td&gt; &lt;/tr&gt; &lt;tr height=20 style='height:15.0pt'&gt;  &lt;td height=20  style='height:15.0pt'&gt;size of the community&lt;br /&gt;  (members forum)&lt;/td&gt;  &lt;td&gt;14.498&lt;/td&gt;  &lt;td&gt;&lt;/td&gt;  &lt;td&gt;3600&lt;/td&gt; &lt;/tr&gt; &lt;tr height=20 style='height:15.0pt'&gt;  &lt;td height=20  style='height:15.0pt'&gt;documentation&lt;br /&gt;  (size/quality)&lt;/td&gt;  &lt;td&gt;lots/ok&lt;/td&gt;  &lt;td&gt;lots/ok&lt;/td&gt;  &lt;td&gt;avrg/ok&lt;/td&gt; &lt;/tr&gt; &lt;tr height=20 style='height:15.0pt'&gt;  &lt;td height=20  style='height:15.0pt'&gt;# releases per year&lt;/td&gt;  &lt;td class=xl642470&gt;3 - 4&lt;/td&gt;  &lt;td&gt;1&lt;/td&gt;  &lt;td&gt;&amp;gt;6&lt;/td&gt; &lt;/tr&gt; &lt;tr height=20 style='height:15.0pt'&gt;  &lt;td height=20  style='height:15.0pt'&gt;avrg time for&lt;br /&gt;  bugfixing/days&lt;/td&gt;  &lt;td&gt;60&lt;/td&gt;  &lt;td&gt;&lt;/td&gt;  &lt;td&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr height=20 style='height:15.0pt'&gt;  &lt;td height=20  style='height:15.0pt'&gt;customizability&lt;/td&gt;  &lt;td&gt;skins&lt;/td&gt;  &lt;td&gt;skins&lt;/td&gt;  &lt;td&gt;skins&lt;/td&gt; &lt;/tr&gt; &lt;tr height=20 style='height:15.0pt'&gt;  &lt;td height=20  style='height:15.0pt'&gt;licensing&lt;/td&gt;  &lt;td&gt;LGPL&lt;/td&gt;  &lt;td&gt;Commercial&lt;/td&gt;  &lt;td&gt;Apache License&lt;/td&gt; &lt;/tr&gt; &lt;tr height=20 style='height:15.0pt'&gt;  &lt;td height=20  style='height:15.0pt'&gt;avalable since&lt;/td&gt;  &lt;td&gt;&lt;/td&gt;  &lt;td&gt;&lt;/td&gt;  &lt;td&gt;2009&lt;/td&gt; &lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;As you can imagine, it is not too easy to gather all those informations. In some cases it could be a solution to prepare a request for information and send it out to the vendors in order to have your questions answered.&lt;br /&gt;Before you choose a component library it is best to have a very good understanding of what it is capable in general. Most notably you can only combine selected libraries with each other. Therefore, you should wisely take the component suite, best fitting your projects needs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6868595312516376692-3124366284443972842?l=www.eisele.net%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/3124366284443972842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.eisele.net/blog/2009/11/enterprise-grade-jsf-component.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/3124366284443972842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6868595312516376692/posts/default/3124366284443972842'/><link rel='alternate' type='text/html' href='http://www.eisele.net/blog/2009/11/enterprise-grade-jsf-component.html' title='Enterprise grade JSF component libraries and how to find them'/><author><name>myfear</name><uri>http://www.blogger.com/profile/16195673592300911244</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='06379434802252254924'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry></feed>