After doing some Pentaho Data Integration (Kettle) work especially with JSON Output Step in PDI-7195 bug, I guess it's a good thing to describe visually how I see the PDI transformations and steps architecture.
Hopefully this is helpful for you and also to remind me when I'm confused because which Kettle step framework classes/interfaces relate to which ones is sometimes easy to forget. :-)Learn how to process and integrate enterprise databases & data warehouses easily with Pentaho Data Integration 4 Cookbook.Monday, January 16, 2012
Friday, January 13, 2012
When do work in Enterprise Application Integration field...
...be prepared to get ClassNotFoundException, ClassCastException,
and loads of other classpath and classloading problems often. :-)
(if you don't use OSGi, that is...)
When do work in Enterprise Application Integration field...
...be prepared to get ClassNotFoundException, ClassCastException,
and loads of other classpath and classloading problems often. :-)
(if you don't use OSGi, that is...)
Wednesday, January 11, 2012
Making JSF 2.0 Composite Components Ajax render-capable
If you for example have the following composite component in a JSF 2.0 Facelets XHTML template:
<sc:block title="Followers">
<h:panelGroup rendered="#{not empty userShow.user.followedByUsers}">
<ul>
<ui:repeat var="user" value="#{userShow.user.followedByUsers}">
<li><sc:user_link user="#{user}"/></li>
</ui:repeat>
</ul>
</h:panelGroup>
<h:panelGroup rendered="#{empty usefollowedByUsers}">
#{userShow.user.name} has no followers.
</h:panelGroup>
</sc:block>
and try do ajax render:
<a4j:commandButton value="Follow" action="#{userBean.follow(currentUser, userShow.user)}"
render="followPanel followers"
rendered="#{not currentUser.isFollowing(userShow.user)}"/>
This won't work for some reason. Wrong workaround is using a h:panelGroup and moving the id for ajax render there:
<sc:block title="Followers">
<h:panelGroup id="followers">
<h:panelGroup rendered="#{not empty userShow.user.followedByUsers}">
<ul>
<ui:repeat var="user" value="#{userShow.user.followedByUsers}">
<li><sc:user_link user="#{user}"/></li>
</ui:repeat>
</ul>
</h:panelGroup>
<h:panelGroup rendered="#{empty us.followedByUsers}">
#{userShow.user.name} has no followers.
</h:panelGroup>
</h:panelGroup>
</sc:block>
The correct solution is to put a #{cc.clientId} like below in the composite implementation:
<composite:implementation>
<section id="#{cc.clientId}" class="block">
<div class="block-inner clearfix">
<h2 class="block-title">#{cc.attrs.title}</h2>
<div class="block-content content">
<composite:insertChildren/>
</div>
</div>
</section>
</composite:implementation>
To learn more about Java Web Development using Java EE 6, I highly recommend The Java EE 6 Tutorial: Basic Concepts (4th Edition) (Java Series) by Eric Jendrock, Ian Evans, Devika Gollapudi and Kim Haase.