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

<channel>
	<title>Whitehorses Blog &#187; Enterprise Java</title>
	<atom:link href="http://blog.whitehorses.nl/category/enterprise-java/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.whitehorses.nl</link>
	<description>Oracle, Java and SOA expertise - Lean thinking, Agile working</description>
	<lastBuildDate>Wed, 28 Jul 2010 11:40:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>TortoiseSVN and Oracle SQL Developer</title>
		<link>http://blog.whitehorses.nl/2010/06/16/tortoisesvn-and-oracle-sql-developer/</link>
		<comments>http://blog.whitehorses.nl/2010/06/16/tortoisesvn-and-oracle-sql-developer/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 14:06:39 +0000</pubDate>
		<dc:creator>Martin Schapendonk</dc:creator>
				<category><![CDATA[Enterprise Java]]></category>
		<category><![CDATA[Oracle tools]]></category>
		<category><![CDATA[oracle sql developer]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svnkit]]></category>
		<category><![CDATA[tortoisesvn]]></category>

		<guid isPermaLink="false">http://blog.whitehorses.nl/?p=1770</guid>
		<description><![CDATA[I like Oracle SQL Developer. And I like TortoiseSVN. Oracle SQL Developer has versioning support, but some tasks are more easily done with TortoiseSVN. Maybe it&#8217;s what I&#8217;m accustomed to, but that&#8217;s the way I feel about it. Today, I ran into a problem to get the versioning support in Oracle SQL Developer (based on [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I like <a title="Oracle SQL Developer" href="http://www.oracle.com/technology/products/database/sql_developer/index.html"><strong>Oracle SQL Developer</strong></a>. And I like <a title="Subversion" href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>. Oracle SQL Developer has versioning support, but some tasks are more easily done with TortoiseSVN. Maybe it&#8217;s what I&#8217;m accustomed to, but that&#8217;s the way I feel about it.</p>
<p>Today, I ran into a problem to get the versioning support in Oracle  SQL Developer (based on <a title="SVNKit" href="http://svnkit.com/">SVNKit</a>) to play nice with TortoiseSVN on the same working copy.</p>
<p>I have a repository on my harddrive and when I  checked out files from within Oracle SQL Developer, TortoiseSVN refused  to believe it was a legitimate subversion working copy. Vice versa, when checked out with TortoiseSVN, SQL Developer insisted that the directory was unversioned.</p>
<p>Huh?</p>
<p>After a small investigation (I ran a diff on the .svn/entries files), the major difference was that TortoiseSVN used an uppercase C (&#8220;file:///<strong>C</strong>:/path/to/repos&#8221;) and Oracle SQL Developer used a lowercase c (&#8220;file:///<strong>c</strong>:/path/to/repos&#8221;). After I recreated the repository connection in Oracle SQL Developer with a capital C and checked out to a fresh working copy, TortoiseSVN was also convinced that it was indeed a subversion working copy.</p>
<p>I hope this tip will save you valuable time should you happen to run into the same problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.whitehorses.nl/2010/06/16/tortoisesvn-and-oracle-sql-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSF 2.0</title>
		<link>http://blog.whitehorses.nl/2010/02/08/jsf-2-0/</link>
		<comments>http://blog.whitehorses.nl/2010/02/08/jsf-2-0/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 09:07:24 +0000</pubDate>
		<dc:creator>gerbrand</dc:creator>
				<category><![CDATA[Enterprise Java]]></category>
		<category><![CDATA[j2ee]]></category>
		<category><![CDATA[jsf]]></category>

		<guid isPermaLink="false">http://blog.whitehorses.nl/?p=1060</guid>
		<description><![CDATA[In my report on JFall 2009 I already wrote about JSF 2.0. I wanted to make an extensive posting about new features in JSF 2.0, but then I came across this excellent posting of July last year: What’s New in JSF 2? by Andy Schwartz of Oracle. I won&#8217;t rehash this and many other excellent [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>In my report on <a href="http://www.whitehorses.nl/whitebooks/2009/jfall-2009-een-verslag">JFall 2009</a> I already wrote about JSF 2.0. I wanted to make an extensive posting about new features in JSF 2.0, but then I came across this excellent posting of July last year: <a href="http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/" target="_blank">What’s New in JSF 2?</a> by Andy Schwartz of Oracle. I won&#8217;t rehash this and many other excellent postings on jsf &#8211; I&#8217;ll just shortly write what&#8217;s great about JSF 2.0, in comparison to JSF 1.2.</p>
<p>In short, main new feature of JSF 2.0 is standardization a frameworks that extended JSF 1.2:</p>
<ul>
<li>Ajax &#8211; provided in JSF 1.2 by amongst others by <a href="http://www.jboss.org/richfaces" target="_blank">Richfaces (ajax4jsf)</a>. Standardization allows different ajax-libraries to work together.</li>
<li>Other scopes besides application, session and request scope &#8211; provided in JSF 1.2 by amongst others <a href="http://www.springsource.org/webflow" target="_blank">Spring Webflow</a>, <a href="http://www.jboss.com/products/seam/" target="_blank">JBoss Seam</a> and <a href="http://myfaces.apache.org/orchestra/myfaces-orchestra-core/installation.html" target="_blank">Apache Orchestra</a>. One notable flow is the flash-scope: a scope that is longer than the request scope, but shorter than the session scope. This scope can be used when you want to persist values between requests on the same page, but don&#8217;t care if a value is lost when the users navigates away from that page.</li>
<li>Bean validation &#8211; also provided by JBoss Seam, and various other frameworks, now standardized under <a href="http://jcp.org/en/jsr/detail?id=303" target="_blank">JSR 303</a>. You add declarative rules to beans, such as &#8216;both street and house number should be filled in&#8217;, or &#8216;car-usage is filled in when lease-car is yes&#8217;. The jsf-engine will generate both client-side and serverside code for that &#8211; so you won&#8217;t have to implement the same functionality twice in cumbersome java and javascript code.</li>
<li>Facelets &#8211; Apache Facelets replaced JSP as rendering engine for JSF 1.2 &#8211; in JSF 2.0 facelets has become a standard &#8211; and makes JSP legacy (at least when you use JSF). Facelets allows a developer to very easily create (truly) reusable components and templates.<br />
Creating re-usable components is something that is done rarely (well) in frontend development, and even more rarely web development &#8211; similar or even the same functionality is recreated countless times within the same company and even the same project. Facelets can change that!</li>
<li>Better support for GET-request &#8211; which was already provided by Seam for JSF, and many other webframeworks. At least now you&#8217;re not limited to POSTs when using JSF. Especially useful if you want to create bookmarkable or search-engine friendly pages.</li>
</ul>
<p>More shortly: JSF is a standardization for webframeworks. Many webframeworks and -libraries are or are becoming JSF 2.0 compatible, such as <a href="http://community.jboss.org/wiki/RichFacesJSF20migration" target="_blank">Richfaces</a>, <a href="http://www.zkoss.org/smalltalks/zuljsf/" target="_blank">ZK</a>, <a href="http://www.icefaces.org/JForum/posts/list/13548.page" target="_blank">Icefaces</a>,even <a href="http://code.google.com/p/jsf-flex/" target="_blank">Flex</a> (Flash) and of course <a href="http://www.oracle.com/technology/products/adf/adffaces/index.html" target="_blank">Oracle&#8217;s ADF</a>.<br />
This standardization not only means these frameworks can work together, more important is that a developer who has experience in developing for one framework, can reuse his knowledge when he starts developing with another framework. This can greatly shorten the many months needed to learn yet another web-framework.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.whitehorses.nl/2010/02/08/jsf-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Weblogic web application container security part 2 ADF Security</title>
		<link>http://blog.whitehorses.nl/2010/02/01/weblogic-web-application-container-security-part-2-adf-security/</link>
		<comments>http://blog.whitehorses.nl/2010/02/01/weblogic-web-application-container-security-part-2-adf-security/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 19:54:02 +0000</pubDate>
		<dc:creator>Edwin Biemond</dc:creator>
				<category><![CDATA[Enterprise Java]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Oracle platform]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[adf]]></category>
		<category><![CDATA[FMW]]></category>
		<category><![CDATA[Oracle Fusion Middleware]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[weblogic]]></category>

		<guid isPermaLink="false">http://blog.whitehorses.nl/?p=988</guid>
		<description><![CDATA[In Part 1, I already blogged about the standard web container security but If you use ADF then you have an other option: ADF Security. With ADF Security you can protect your JSP or JSPX pages just like the default container security but ADF Security can do more like protecting your Task Flows ( fragments), [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>In <a href="http://blog.whitehorses.nl/2010/01/29/weblogic-web-application-container-security-part-1/">Part 1</a>, I already blogged about the standard web container security but If you use ADF then you have an other option: ADF Security. With ADF Security you can protect your JSP or JSPX pages just like the default container security but ADF Security can do more like protecting your Task Flows ( fragments), Anonymous support, retrieve all the user roles, can create user and roles in Weblogic when it is in development mode.</p>
<p>Start the ADF Security wizard ( located in the Application menu / secure )</p>
<p><a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_11.png"><img class="alignnone size-medium wp-image-991" title="sec_1" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_11-300x269.png" alt="" width="300" height="269" /></a></p>
<p>I choose for this blog for ADF Authentication and Authorization,  so I can also explain how authorization is done in ADF.</p>
<p><a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_2.png"><img class="alignnone size-medium wp-image-993" title="sec_2" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_2-300x225.png" alt="" width="300" height="225" /></a></p>
<p>This will enable security in your ADF Web application.</p>
<p>When we take a look at what the ADF Security wizard did in your web application, we can see that in the web.xml an adfAuthentication servlet, security-constraint , security-role and a login-config element is added.</p>
<pre class="brush: xml">&lt;?xml version = '1.0' encoding = 'windows-1252'?&gt;
&lt;web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"&gt;
    &lt;description&gt;Empty web.xml file for Web Application&lt;/description&gt;
    &lt;servlet&gt;
        &lt;servlet-name&gt;adfAuthentication&lt;/servlet-name&gt;
        &lt;servlet-class&gt;oracle.adf.share.security.authentication.AuthenticationServlet&lt;/servlet-class&gt;
        &lt;init-param&gt;
            &lt;param-name&gt;success_url&lt;/param-name&gt;
            &lt;param-value&gt;/main.jspx&lt;/param-value&gt;
        &lt;/init-param&gt;
        &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
    &lt;/servlet&gt;
    &lt;security-constraint&gt;
        &lt;web-resource-collection&gt;
            &lt;web-resource-name&gt;adfAuthentication&lt;/web-resource-name&gt;
            &lt;url-pattern&gt;/adfAuthentication&lt;/url-pattern&gt;
        &lt;/web-resource-collection&gt;
        &lt;auth-constraint&gt;
            &lt;role-name&gt;valid-users&lt;/role-name&gt;
        &lt;/auth-constraint&gt;
    &lt;/security-constraint&gt;
    &lt;security-role&gt;
        &lt;role-name&gt;valid-users&lt;/role-name&gt;
    &lt;/security-role&gt;
    &lt;login-config&gt;
        &lt;auth-method&gt;BASIC&lt;/auth-method&gt;
        &lt;realm-name&gt;myrealm&lt;/realm-name&gt;
    &lt;/login-config&gt;
&lt;/web-app&gt;</pre>
<p>JDeveloper also creates an weblogic.xml deployment descriptor where it maps the default Weblogic users group to the valid-users container security role. For ADF Security we don&#8217;t ever need to change these files. Off course you can add extra Weblogic groups in the weblogic.xml ( you also need to add a security-role in the web.xml, else you will get a deployment error )  but ADF Security can&#8217;t use these roles for the JSP / JSPX pages or Task Flows ( fragments ). Off course you still can use these roles in the ADF isUserInRole method. ( ADFContext.getCurrent().getSecurityContext().isUserInRole(role) ) So when you have Weblogic groups which are not needed by ADF Security but you still want to use them in your application then you can add them to the weblogic.xml / web.xml.</p>
<p><strong>Application Users</strong><br />
For the Authentication part we need to have some user accounts. When you have your own Authenticator provider then you can skip this part. When your Weblogic server is in development mode (Test ) then you can add your own test users in JAZN editor. Go to Application menu / Secure / Users<br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_5.png"><img class="alignnone size-medium wp-image-1016" title="sec_5" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_5-300x276.png" alt="" width="300" height="276" /></a><br />
Here we can add our own test users. The next time you deploy your web application, it will add these users to the DefaultAuthenticator provider.<br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_6.png"><img class="alignnone size-medium wp-image-1017" title="sec_6" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_6-300x157.png" alt="" width="300" height="157" /></a><br />
This will work in development but in production you probably have a LDAP ( OID or AD ) or SQL Authenticator which contains your application users. If so we need to change the control flag of the DefaultAuthenticator and your own Authenticator to Sufficient else your user acounts need to be in both Authenticators.<br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_3.png"><img class="alignnone size-medium wp-image-1014" title="sec_3" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_3-300x216.png" alt="" width="300" height="216" /></a><br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_4.png"><img class="alignnone size-medium wp-image-1015" title="sec_4" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_4-299x203.png" alt="" width="299" height="203" /></a><br />
<strong>Enterprise Roles</strong><br />
The user part is ready and we can define the Enterprise roles. These roles matches with the Weblogic Groups. We can add these roles in the Application menu / secure / Groups.<br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_10.png"><img class="alignnone size-medium wp-image-1037" title="sec_10" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_10-300x273.png" alt="" width="300" height="273" /></a><br />
Add a new Role and add the testusers as members of this role. When the Weblogic server is in Development mode then these Roles will be automatically be created in the Weblogic DefaultAuthenticator provider.<br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_111.png"><img class="alignnone size-medium wp-image-1038" title="sec_11" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_111-300x139.png" alt="" width="300" height="139" /></a><br />
We can disable the automatic user / group migration by disable this User and Group property in the Configure Security Deployment.  ( Application menu / secure )<br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_7.png"><img class="alignnone size-medium wp-image-1019" title="sec_7" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_7-300x276.png" alt="" width="300" height="276" /></a><br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_8.png"><img class="alignnone size-medium wp-image-1020" title="sec_8" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_8-300x237.png" alt="" width="300" height="237" /></a><br />
<strong>Application Roles</strong><br />
The next part is defining the applications roles and map these application roles to the enterprise roles. To add these roles go to the application menu / secure / application roles.<br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_121.png"><img class="alignnone size-medium wp-image-1043" title="sec_12" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_121-300x272.png" alt="" width="300" height="272" /></a><br />
Add a new application role and select the right enterprise role as member of this role. ( this is necessary when you want to protect your application resources with a specific Weblogic group )<br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_13.png"><img class="alignnone size-medium wp-image-1044" title="sec_13" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_13-300x144.png" alt="" width="300" height="144" /></a><br />
<strong>Application Policies</strong><br />
The last part is defining the security policies on the Task Flows and JSP / JSPX pages ( pages need to have a Page Definition ) and add these policies to the Applications Roles. Go to the Application menu / secure / Application policies.<br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_14.png"><img class="alignnone size-medium wp-image-1046" title="sec_14" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_14-300x278.png" alt="" width="300" height="278" /></a><br />
We can now select an application page ( which has a pagedef) and add an application role to this page. Default the view permission is already selected, this is the minimal security policy. The authenticated-role and the anonymous-role roles are the default application roles, when you only use these roles then you don&#8217;t need to define enterprise or application roles and are user accounts enough.<br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_15.png"><img class="alignnone size-medium wp-image-1047" title="sec_15" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_15-300x258.png" alt="" width="300" height="258" /></a><br />
Web pages security policies overview<br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_16.png"><img class="alignnone size-medium wp-image-1048" title="sec_16" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_16-300x108.png" alt="" width="300" height="108" /></a><br />
And the Task Flows overview<br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_17.png"><img class="alignnone size-medium wp-image-1049" title="sec_17" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_17-299x111.png" alt="" width="299" height="111" /></a><br />
In the managed bean or JSF code we can retrieve or validate the ADF Security properties, here are some examples</p>
<pre class="brush: java">// print the roles of the current user
for ( String role : ADFContext.getCurrent().getSecurityContext().getUserRoles() ) {
   System.out.println("role "+role);
}

// get the ADF security context and test if the user has the role users
SecurityContext sec = ADFContext.getCurrent().getSecurityContext();
if ( sec.isUserInRole("users") ) {
}
// is the user valid
public boolean isAuthenticated() {
 return ADFContext.getCurrent().getSecurityContext().isAuthenticated();
}
// return the user
public String getCurrentUser() {
 return ADFContext.getCurrent().getSecurityContext().getUserName();
}</pre>
<p>or use it in an EL expression for example in a rendered or disable attribute of a JSF component<br />
#{securityContext.regionViewable['pageDefs.MainPageDef.xml']} or use #{securityContext.userInRole['admin']}<br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_18.png"><img class="alignnone size-medium wp-image-1052" title="sec_18" src="http://blog.whitehorses.nl/wp-content/uploads/2010/02/sec_18-300x230.png" alt="" width="300" height="230" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.whitehorses.nl/2010/02/01/weblogic-web-application-container-security-part-2-adf-security/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Weblogic web application container security part 1</title>
		<link>http://blog.whitehorses.nl/2010/01/29/weblogic-web-application-container-security-part-1/</link>
		<comments>http://blog.whitehorses.nl/2010/01/29/weblogic-web-application-container-security-part-1/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 16:22:35 +0000</pubDate>
		<dc:creator>Edwin Biemond</dc:creator>
				<category><![CDATA[Enterprise Java]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Oracle tools]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[adf]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Oracle Fusion Middleware]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[weblogic]]></category>

		<guid isPermaLink="false">http://blog.whitehorses.nl/?p=958</guid>
		<description><![CDATA[With the  Weblogic server we have two ways to implement security on a J2EE web application. The first is the normal container security and the second is ADF Security. In part 1 I will explain the container security and in part 2 the ADF Security. To test this, I first added a testuser called edwin [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>With the  Weblogic server we have two ways to implement security on a J2EE web application. The first is the normal container security and the second is ADF Security. In part 1 I will explain the container security and in part 2 the ADF Security.<br />
To test this, I first added a testuser called edwin and a test group called users to the DefaultAuthenticator Authentication Provider. The user edwin is member of the group users.<br />
first step is to add a security constraint on a url and define that you need to have the role User_role to authenticate </p>
<pre name="code" class="brush:xml">
    &lt;security-constraint&gt;
        &lt;web-resource-collection&gt;
            &lt;web-resource-name&gt;sec&lt;/web-resource-name&gt;
            &lt;url-pattern&gt;/&lt;/url-pattern&gt;
        &lt;/web-resource-collection&gt;
        &lt;auth-constraint&gt;
            &lt;role-name&gt;User_role&lt;/role-name&gt;
        &lt;/auth-constraint&gt;
    &lt;/security-constraint&gt;
    &lt;login-config&gt;
        &lt;auth-method&gt;BASIC&lt;/auth-method&gt;
        &lt;realm-name&gt;myrealm&lt;/realm-name&gt;
    &lt;/login-config&gt;
    &lt;security-role&gt;
        &lt;role-name&gt;User_role&lt;/role-name&gt;
    &lt;/security-role&gt;
</pre>
<p>Because we don&#8217;t have the role User_role in Weblogic so we need to add a mapping between User_role role ( defined in the web.xml ) and the Weblogic group users. For this we need to add a weblogic.xml  deployment descriptor (located in the WEB-INF )</p>
<pre name="code" class="brush:xml">
&lt;?xml version = '1.0' encoding = 'windows-1252'?&gt;
&lt;weblogic-web-app xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
                  xsi:schemaLocation=&quot;http://www.bea.com/ns/weblogic/weblogic-web-app.xsd&quot;
                  xmlns=&quot;http://www.bea.com/ns/weblogic/weblogic-web-app&quot;&gt;
  &lt;security-role-assignment&gt;
    &lt;role-name&gt;User_role&lt;/role-name&gt;
    &lt;principal-name&gt;users&lt;/principal-name&gt;
  &lt;/security-role-assignment&gt;
&lt;/weblogic-web-app&gt;
</pre>
<p>We solved the Authentication part but the next step is Authorization part. For this we need to add a managed bean where we retrieve and evaluate the roles of the authenticated user. The hard part is that the principal does not give back the user roles. Off course we can evaluate is the user has a role ( with isUserInRole ), but then you need to know the role name ( in most cases this is enough). To get all the User roles, we need to retrieve the Weblogic Subject and get all the principals and look at the class of the principal ( it can be a instance of WLSGroupImpl or WLSUserImpl ). Be aware you will get the Weblogic groups and not the mapped names of the web.xml or weblogic.xml.<br />
Here is the managed bean ( request scope)</p>
<pre name="code" class="brush:java">
package nl.whitehorses.sec.bean;

import java.security.Principal;

import java.util.ArrayList;
import java.util.Set;

import javax.faces.context.FacesContext;
import javax.security.auth.Subject;

import weblogic.security.Security;
import weblogic.security.SubjectUtils;
import weblogic.security.principal.WLSGroupImpl;
import weblogic.security.principal.WLSUserImpl;

public class SecurityBean {

    public SecurityBean() {

        Subject subject = Security.getCurrentSubject();
        Set&lt;Principal&gt; allPrincipals = subject.getPrincipals();
        for (Principal principal : allPrincipals) {
            if ( principal instanceof WLSGroupImpl ) {
                System.out.println(&quot;found role: &quot;+principal.getName());
                roles.add(principal.getName());
            }
            if ( principal instanceof WLSUserImpl ) {
                System.out.println(&quot;found user: &quot;+principal.getName());
                user = principal.getName();
            }
        }
    }

    private ArrayList&lt;String&gt; roles = new ArrayList&lt;String&gt;();
    private String user = null;

    public String getCurrentUserRoles() {
        String curRoles = &quot;&quot;;
        for (String role : roles) {
            curRoles = curRoles +&quot;, &quot;+role;
        }
        return curRoles;
    }

    public boolean isWlsUserRole() {
     for (int i=0; i &lt; roles.size() ; i++ ){
        if ( &quot;users&quot;.equalsIgnoreCase(roles.get(i)) ){
           return true;
        }
      }
      return false;
    }

    public boolean isContainerUserRole() {
      if (FacesContext.getCurrentInstance().getExternalContext().isUserInRole(&quot;User_role&quot;)){
           return true;
      }
      return false;
    }

    public String getCurrentUser() {
        return user;
    }
}
</pre>
<p> and last the JSF page where I use this managed bean</p>
<pre name="code" class="brush:xml">
&lt;?xml version='1.0' encoding='windows-1252'?&gt;
&lt;jsp:root xmlns:jsp=&quot;http://java.sun.com/JSP/Page&quot; version=&quot;2.1&quot;
          xmlns:f=&quot;http://java.sun.com/jsf/core&quot;
          xmlns:af=&quot;http://xmlns.oracle.com/adf/faces/rich&quot;&gt;
  &lt;jsp:directive.page contentType=&quot;text/html;charset=windows-1252&quot;/&gt;
  &lt;f:view&gt;
    &lt;af:document id=&quot;d1&quot;&gt;
      &lt;af:form id=&quot;f1&quot;&gt;
        &lt;af:panelHeader text=&quot;Start&quot; id=&quot;ph1&quot;&gt;
          &lt;af:panelFormLayout id=&quot;pfl1&quot;&gt;
            &lt;af:inputText label=&quot;User&quot; id=&quot;it1&quot;
                          value=&quot;#{SecurityBean.currentUser}&quot;/&gt;
            &lt;af:inputText label=&quot;Roles&quot; id=&quot;it2&quot;
                          value=&quot;#{SecurityBean.currentUserRoles}&quot;/&gt;
            &lt;af:inputText label=&quot;WLS Role&quot; id=&quot;it3&quot;
                          value=&quot;got the users role from weblogic&quot;
                          rendered=&quot;#{SecurityBean.wlsUserRole}&quot; columns=&quot;80&quot;/&gt;
            &lt;af:inputText label=&quot;JAAS Role&quot; id=&quot;it4&quot;
                          value=&quot;got the User_role mapped by weblogic.xml&quot;
                          rendered=&quot;#{SecurityBean.containerUserRole}&quot;
                          columns=&quot;80&quot;/&gt;
          &lt;/af:panelFormLayout&gt;
        &lt;/af:panelHeader&gt;
      &lt;/af:form&gt;
    &lt;/af:document&gt;
  &lt;/f:view&gt;
&lt;/jsp:root&gt;
</pre>
<p>with this as result.<br />
<a href="http://blog.whitehorses.nl/wp-content/uploads/2010/01/secu.png"><img src="http://blog.whitehorses.nl/wp-content/uploads/2010/01/secu-300x104.png" alt="" title="secu" width="300" height="104" class="alignnone size-medium wp-image-968" /></a><br />
In <a href="http://blog.whitehorses.nl/2010/02/01/weblogic-web-application-container-security-part-2-adf-security/">Part 2</a> I will explain ADF Security and then you can see how easy Security is in ADF and that ADF has a lot more security options then the standard container security.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.whitehorses.nl/2010/01/29/weblogic-web-application-container-security-part-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Oracle + Sun Strategy Update Webcast unveils future direction</title>
		<link>http://blog.whitehorses.nl/2010/01/28/oracle-sun-strategy-update-webcast-unveils-future-direction/</link>
		<comments>http://blog.whitehorses.nl/2010/01/28/oracle-sun-strategy-update-webcast-unveils-future-direction/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 09:12:19 +0000</pubDate>
		<dc:creator>Frank Dorst</dc:creator>
				<category><![CDATA[Business & IT]]></category>
		<category><![CDATA[Enterprise Java]]></category>
		<category><![CDATA[Integration, SOA & BPM]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Oracle platform]]></category>
		<category><![CDATA[Oracle tools]]></category>
		<category><![CDATA[Enterprise Manager]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[Glassfish]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[Ops Center]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Solaris]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://blog.whitehorses.nl/?p=903</guid>
		<description><![CDATA[Although the Apple iPad event got far more buzz, Oracle presented a very important press conference yesterday as well. After about 9 months of waiting, the European Commission finally approved the acquisition of SUN by Oracle. At the day of that announcement, Oracle announced the  Strategy Update Webcast. Although I won't be complete, I'll share some of what I heard with you in this blogpost. ]]></description>
			<content:encoded><![CDATA[<p></p><p>Although the Apple iPad event got far more buzz, Oracle presented a very important press conference yesterday (Jan. 27) as well.</p>
<p>After about 9 months of waiting, the European Commission finally approved the acquisition of Sun Microsystems by Oracle. At the day of that announcement, Oracle announced the  Strategy Update Webcast.</p>
<p>The webcast started at 18:00 in The Netherlands and lasted until late. Still, from following <a href="http://twitter.com/#search?q=%23oraclesun" target="_blank">Twitter</a>, it was clear that a lot of people we attending. Although I won&#8217;t be complete, I&#8217;ll share some of what I heard with you in this blog.  The webcast started with a extensive <a href="http://en.wikipedia.org/wiki/Safe_harbor" target="_blank">safe harbor statement</a> explaining that Oracle cannot be asked to deliver on their promises. So&#8230; there we go.</p>
<h2>Hardware</h2>
<p>There was lots of talk about hardware. Following the strategy that has made IBM big (at least according to Larry himself), Oracle wants to sell end-to-end everything. They will continue to sell the Sun hardware and will keep the strong Sun brand. Oracle will make a lot of changes to the distribution and supply chain models to reduce cost. Also, expect a lot less sales through the old Sun channels: &#8220;partners need to add value, or we&#8217;ll go direct&#8221;.</p>
<p>The big investments will go to enhance the Sun platform with embedding specific functionality, like encryption, to make the total solution (hardware, OS and software) better. Oracle will also bundle the apps with the hardware. The first steps are already there with the announcement during OpenWorld in 2009 of the second database machine based on Sun hardware.</p>
<p>I was glad to hear that Oracle will continue to support the other platforms and operating systems, specifically Linux of course.</p>
<h2>Software</h2>
<p>The product portfolio of Sun is extensive and covers a broad range of functionality. Some of its products overlap with the Oracle product suite and some products seem to be quite alien to the core business of the former database company. After the BEA Systems take over, that has quite a (potential) impact for some Oracle customers, I was curious to see what the direction would be for the Sun middleware components. Besides hardware, MySQL and Java, Sun has an extensive set of products that overlap the Oracle stack. Examples are Glassfish, Open ESB and Netbeans.</p>
<p>Some of the announcements (or at least my interpretation of them):</p>
<ul>
<li>The open source MySQL database will co-exist with all the other Oracle databases. It will be managed with an independent development organization and handled through a dedicated sales force. Customers use both MySQL and the commercial Oracle databases at the same site. To facilitate this, technical support will be integrated through Oracle Support and there will be bridges (for lack of a better word), for instance to support easier backup/restore and management through Enterprise Manager.</li>
<li>Java is the most important language in the world. It will continue to be very important and Oracle will<em> </em>make money from it (in contrast to Sun who apparently didn&#8217;t). Oracle will push to rapidly release Java SE 7, work on JEE and improve Java ME and JavaFX.</li>
<li>OpenOffice will be expanded and offered in a hosted web based model as well.</li>
<li>GlassFish will continue to be the reference implementation for Java EE and is positioned for tactical (smaller) deployments. The WebLogic platform is strategic moving forward.</li>
<li> NetBeans is positioned as the lightweight IDE and targeted specifically at the mobile developement. Eclypse contributions will continu. The strategic development tool will be JDeveloper.</li>
<li> The SOA Suite / OSB platform is and will be the strategic platform for Service Oriented Architectures. OpenESB and other Sun products get continued support.</li>
<li>The Identity &amp; Access Management products of both product lines will continue to be supported. For most components the Oracle version will be the strategic product. The Sun Role Manager is the strategic product for Identity Analytics.</li>
<li>For management both product lines will (eventually) be integrated. Oracle&#8217;s Enterprise Manager is strategic, important parts of Sun Ops Center will get included.</li>
<li> Both Solaris and Unbreakable Linux will get big investments and continued support.</li>
<li>The virtualization solutions from Sun are key in the Oracle strategy to deliver a uniform and integrated platform. Solaris virtualization will be added t0 the Oracle VM offering on x86 machines.</li>
</ul>
<p><strong>Concluding</strong></p>
<p>Oracle has used the forced delay well and showed strong valid plans. As with every acquisition Oracle promises continued support for all Sun products (except the ones that Sun already declared end-of-life). That will of course not stop them to try to persuade us to migrate to the <em>strategic</em> Oracle product lines.</p>
<p>For the main focus areas of Whitehorses, the changes at hand give us some very nice opportunities. And it looks like the Sun acquisition will have a lot less impact on Oracle SOA &amp; middleware customers than the BEA purchase had/has.</p>
<p>All in all it was a good overview covering all aspects of the Sun offering. Oracle has big plan, has lots of experience in merging companies and expects to make Sun profitable this year. Oracles fiscal year that is!</p>
<p>The webcast is or will be available on demand through the <a href="http://www.oracle.com/us/sun/044498.html" target="_blank">Oracle site</a>. There are <a href="http://www.oracle.com/events/productstrategy/index.html" target="_blank">additional webcasts</a> discussing the future direction for each product area.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.whitehorses.nl/2010/01/28/oracle-sun-strategy-update-webcast-unveils-future-direction/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SCA Spring in WebLogic 10.3.2 &amp; SOA Suite 11g</title>
		<link>http://blog.whitehorses.nl/2009/12/14/sca-spring-in-weblogic-10-3-2-soa-suite-11g/</link>
		<comments>http://blog.whitehorses.nl/2009/12/14/sca-spring-in-weblogic-10-3-2-soa-suite-11g/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 21:51:19 +0000</pubDate>
		<dc:creator>Edwin Biemond</dc:creator>
				<category><![CDATA[Enterprise Java]]></category>
		<category><![CDATA[Integration, SOA & BPM]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[Fusion Middleware]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[SCA]]></category>
		<category><![CDATA[SOA Suite]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[weblogic]]></category>
		<category><![CDATA[WLS]]></category>

		<guid isPermaLink="false">http://blog.whitehorses.nl/?p=762</guid>
		<description><![CDATA[With Patch Set 1 of Fusion Middleware R1 Oracle adds support for SCA Spring in WebLogic and also add the Spring Component in SOA Suite 11g.  This is great news because everything what works in SCA Spring can be used without any problem in SOA Suite 11g. Develop once and use it everywhere or start [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>With Patch Set 1 of Fusion Middleware R1 Oracle adds support for SCA Spring in WebLogic and also add the Spring Component in SOA Suite 11g.  This is great news because everything what works in SCA Spring can be used without any problem in SOA Suite 11g. Develop once and use it everywhere or start with SCA Spring and end with SOA Suite 11g when you are ready. With Patch Set 2 SCA Spring and the Spring component will be supported in WLS or SOA Suite.</p>
<p>To demonstrate this exchange of Java code  I made two examples:  the first is a java logger in SCA Spring in Weblogic 10.3.2 and the second is to use the same code in SOA Suite 11G</p>
<p><a href="http://biemond.blogspot.com/2009/12/sca-spring-in-weblogic-1032-soa-suite.html" target="_blank">Part 1: Weblogic SCA Spring Example </a></p>
<p><a href="http://biemond.blogspot.com/2009/12/sca-spring-in-weblogic-1032-soa-suite_14.html" target="_blank">Part 2: Soa Suite Spring Example</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.whitehorses.nl/2009/12/14/sca-spring-in-weblogic-10-3-2-soa-suite-11g/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JRockit Mission Control 4.0 sneak preview</title>
		<link>http://blog.whitehorses.nl/2009/12/03/jrockit-mission-control-4-0-sneak-preview/</link>
		<comments>http://blog.whitehorses.nl/2009/12/03/jrockit-mission-control-4-0-sneak-preview/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 11:45:46 +0000</pubDate>
		<dc:creator>Wietjenk Traast</dc:creator>
				<category><![CDATA[Enterprise Java]]></category>
		<category><![CDATA[Integration, SOA & BPM]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Oracle platform]]></category>
		<category><![CDATA[Oracle tools]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[Devoxx 2009]]></category>
		<category><![CDATA[diagnostics]]></category>
		<category><![CDATA[JRockit]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[profiling]]></category>

		<guid isPermaLink="false">http://blog.whitehorses.nl/?p=663</guid>
		<description><![CDATA[On the first day of the Devoxx 2009, Noora Peura presented a university session on the new 4.0 version of JRockit Mission Control called “The Next Generation Profiling and Diagnostics Tools”. JRockit is the second most used Java Virtual machine(JVM) with, as they claim, tremendous power and analytic abilities. Sun’s JVM is used more, because [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>On the first day of the Devoxx 2009, Noora Peura presented a university session on the new 4.0 version of JRockit Mission Control called “The Next Generation Profiling and Diagnostics Tools”. JRockit is the second most used Java Virtual machine(JVM) with, as they claim, tremendous power and analytic abilities. Sun’s JVM is used more, because it is the default JVM when you install Java Runtime.</p>
<p>JRockit was originally built by Appeal Virtual Machines. In 2002 it was acquired by BEA Systems it is now part of the Oracle Fusion Middelware stack. Noora Peura has been with the JRockit team since 2001. JRockit has been here for over a decade and is for a fact, one of the fastest virtual machines around. Because of its excellent statistics it is the favorite JVM for building and running high performance apps. It is the default JVM used by the Oracle support and performance teams.</p>
<h2>Suite of tools</h2>
<p></em>In this sneak preview of the new JRockit Mission Control 4.0 version we saw a complete line of tools in a neat tool suite. Some tools already exit in the Mission Control 3.1 version and can therefore already be used straightaway. And some extra, very useful features were added or improved.</p>
<h3>Memory Leak Detector</h3>
<p>The Memory Leak Detector is build-in inside JRockit JVM with enables it to link directly to the garbage collector and gather analysis data from there. Direct monitoring like this gives a firsthand insight of any problems or memory leaks as they occur. An overview of existing classes can be displayed and in this presentation one can see how much heap size is allocated and in how many bits a second this allocation is growing. You can zoom into suspicious classes in a graphical overview.  Displaying which dependencies this class has to give more insight in its usage. This way it is easier to detect if it is valid that the class still exists or should have been garbage collected already. With this approach the Memory Leak Detector even makes it possible to detect very slow occurring memory leaks even long before the system crashes as a cause of them.</p>
<p>The new JRockit Mission Control 4.0 release has a new feature called shortest path analysis. This feature gives a boost to the analysis of stackdumps as we know them. Shortest path analysis helps you to point directly to the root of the problem when something goes wrong. Instead of browsing through endless stackdumps. It reduces the stackdump to only the information you need while highlighting the possible cause of the failure.</p>
<p>Being directly hooked into the class loader JRockit is also able to pull information from it to tackle the much to often occurring vague class loader issues as early as possible.</p>
<h3>Management Console</h3>
<p>In the Management Console you’re able to present an overview of MBeans residing in the JVM and monitor their activity. It helps you monitor the servers health by giving insight in heap usage and CPU load. Profiling is done low-level and on-line which provides real-time information.<br />
A very nifty extra feature is the ability to monitor multiple JVM’s and plot log alerts profile.</p>
<h3>JRockit runtime Analizer 3.1 &#8211;&gt; JRocket Flight recorder 4.0</h3>
<p>In the new JRockit Mission Control version 4.0 they changed the name of the “Runtime Analyzer” tool into “Flight Recorder”. This tool provides the information for the real-time analytics that is used by the other two tools. Recording is done in a very inexpensive manner. Therefore they have decided to leave recording is always on by default in the new 4.0 version.</p>
<h2>Eclipse plug-in</h2>
<p></em>Besides these tools JRockit Mission Control 4.0 also comes with a number of extension points with enable you to write and add you own self-created plug-ins or use others shared on the net.<br />
For eclipse there already is a downloadable plug-in that make it possible to use eclipse as a profiling and diagnostics GUI tool.</p>
<div id="attachment_670" class="wp-caption alignnone" style="width: 366px">
	<a href="http://blog.whitehorses.nl/wp-content/uploads/2009/12/eclipse-plugin1.jpg"><img class="size-full wp-image-670" style="vertical-align: middle;" title="eclipse-plugin" src="http://blog.whitehorses.nl/wp-content/uploads/2009/12/eclipse-plugin1.jpg" alt="eclipse-plugin" width="366" height="225" /></a>
	<p class="wp-caption-text">Eclipse-plugin voor JRockit</p>
</div>
<h2>Java profiling and diagnostics</h2>
<p>JRockit JVM with the JRockit Mission Control tools is very suitable for both development and production environments. Key here is non-intrusive performance monitoring. Which means you can leave your monitoring on also during production in a high performing environment nearly without paying the performance cost. This ability gives you direct insight into any problems that occur. Which will save you weeks of bug fixing iterations trying to reproduce the failure that occurred. The JRockit profiling and diagnostics tell the system administrator immediately where the problem occurred and he can start fixing the defect straight away.</p>
<p>Gathering all necessary data doesn’t use any bytecode generation and no Java code has to be altered. So after all analyzing, profiling and diagnosing is done you can easily replace the JRockit JVM with your own preferred JVM without any rewriting, rebuilding or redeploying whatsoever.</p>
<p>JRockit has been around for a long time and has proved to perform very well in the past. However SUN hasn’t stood still either. Their JVM has also made some significant improvements on profiling and error detection. So that is also still interesting to keep in mind. But more on that in a later blog.</p>
<p>For more information on JRockit Mission Control take a look at <a title="mission control" href="http://www.tinyurl.com/missioncontrol" target="_blank">http://www.tinyurl.com/missioncontrol</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.whitehorses.nl/2009/12/03/jrockit-mission-control-4-0-sneak-preview/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Devoxx 2009 &#8211; day 5</title>
		<link>http://blog.whitehorses.nl/2009/11/21/devoxx-2009-day-5/</link>
		<comments>http://blog.whitehorses.nl/2009/11/21/devoxx-2009-day-5/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 11:16:36 +0000</pubDate>
		<dc:creator>Jos Nieuwenhuis</dc:creator>
				<category><![CDATA[Enterprise Java]]></category>
		<category><![CDATA[Integration, SOA & BPM]]></category>
		<category><![CDATA[bpm]]></category>
		<category><![CDATA[Camel]]></category>
		<category><![CDATA[Devoxx]]></category>
		<category><![CDATA[Devoxx 2009]]></category>
		<category><![CDATA[dm Server]]></category>
		<category><![CDATA[Fuse]]></category>
		<category><![CDATA[OSGi]]></category>
		<category><![CDATA[ServiceMix]]></category>
		<category><![CDATA[Slices]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://blog.whitehorses.nl/?p=519</guid>
		<description><![CDATA[The last day of Devoxx. For me every session of this conference has been worthwhile. I am very glad I was there. On the last day I attended a session presented by Paul Brown. He was talking about BPM in a SOA environment. After that a session about slicing up web applications into vertical slices. It was interesting for me because I am looking for this kind of separation for a while, but I never found a good way to do it. The last session (Fuse) was like a University session: great explanation with some good code examples.]]></description>
			<content:encoded><![CDATA[<p></p><p>The last day of Devoxx. For me every session of this conference has been worthwhile. I am very glad I was there. On the last day I attended a session presented by Paul Brown. He was talking about BPM in a SOA environment. After that a session about slicing up web applications into vertical slices. It was interesting for me because I am looking for this kind of separation for a while, but I never found a good way to do it. The last session (Fuse) was like a University session: great explanation with some good code examples.</p>
<h2>Paul Brown: BPM in a SOA Environment</h2>
<p>In a service-oriented architecture a BPM engine is both a provider and consumer of services. BPM&#8217;s consumed services generally provide access to the enterprise&#8217;s applications, while its provided services define and manage business processes. These provided services are used by different types of interfaces and other services. An architect should think through intended utilization. Also he should design for failure. And above all, think total architecture: business purpose, business processes, people, information, system. Pay attention to user interaction styles; changes in style may impact many layers.<br />
After the talk Mr. Brown signed my copy of &#8216;Succeeding with SOA; Realizing Business Value Through Total Architecture&#8217;.</p>
<h2>Andy Wilkinson: Modular Web Applications with OSGi</h2>
<p>Spring Dynamic Modules enables building modular web applications: splitting the libraries from the web application. OSGi gives the ability to dynamically add, remove, and replace functionality at runtime. SpringSource Slices goes even further. Using the Spring Source Slices libraries it is possible to slice a web application vertically. This means that different parts of one web application can be developed in separate teams. This is great. At this moment Slices is still tied to OSGi. Soon also a standard Servlet container will be available. This means that potentially this functionality can be applied to many web frameworks.</p>
<h2>James Strachan: Open Source SOA with Fuse</h2>
<p><a href="http://fusesource.com" target="_blank">Fuse</a> is a supported distribution of popular Apache SOA and integration projects: ActiveMQ, CFX, ServiceMix, and Camel. ActiveMQ offers messaging. Messaging is like e-mail between a applications. ActiveMQ offers reliable load balancing and high performance. CFX consumes web services. ServiceMix is a container for integration glue. Camel is a library that offers a way to use the Enterprise Integration Patterns in an easy way. For example the MessageFilter. Camels offers the ability to describe routes in every programming language you like; XML, Java, Scala, Ruby, Groovy, etc. The code examples during the presentation showed that Camel API is very easy to use.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.whitehorses.nl/2009/11/21/devoxx-2009-day-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Devoxx 2009 &#8211; day 4</title>
		<link>http://blog.whitehorses.nl/2009/11/20/devoxx-2009-day-4/</link>
		<comments>http://blog.whitehorses.nl/2009/11/20/devoxx-2009-day-4/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 17:51:54 +0000</pubDate>
		<dc:creator>Jos Nieuwenhuis</dc:creator>
				<category><![CDATA[Enterprise Java]]></category>
		<category><![CDATA[Integration, SOA & BPM]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[craftsmanship]]></category>
		<category><![CDATA[data grid]]></category>
		<category><![CDATA[Devoxx]]></category>
		<category><![CDATA[Devoxx 2009]]></category>
		<category><![CDATA[Infinispan]]></category>
		<category><![CDATA[Ivar Jacobsen]]></category>

		<guid isPermaLink="false">http://blog.whitehorses.nl/?p=516</guid>
		<description><![CDATA[This year the Devoxx movie was '2012'. In the movie the President of the USA announces: "This will be the end of the world as we know it". On the Devoxx conference some of the speakers make similar claims: "A big change is coming: Craftsmanship (Robert C. Martin)", "Cloud computing will become mainstream and traditional data centres will be marginalised (Manik Surtani)" and "A new software engineering method should stop emerging new methodologies every year (Ivar Jacobson)".]]></description>
			<content:encoded><![CDATA[<p></p><p>This year the Devoxx movie was &#8217;2012&#8242;. In the movie the President of the USA announces: &#8220;This will be the end of the world as we know it&#8221;.<br />
On the Devoxx conference some of the speakers make similar claims:</p>
<ul>
<li>A big change is coming: Craftsmanship (Robert C. Martin)</li>
<li>Cloud computing will become mainstream and traditional data centres will be marginalised (Manik Surtani)</li>
<li>A new software engineering method should stop emerging new methodologies every year (Ivar Jacobson)</li>
</ul>
<h2>Robert C. Martin: Craftsmanship</h2>
<p>Ten years ago Agile methodology completely changed the software world. Now, an even bigger change is coming: <a href="”http://manifesto.softwarecraftsmanship.org”" target="_blank">Craftmanship</a>. What does it mean to be a professional? Writing code is not enough. A true professional should not compromise beyond a certain line. There are certain principles to be followed:</p>
<ul>
<li>First, do no harm. Do not compromise quality. Defend it well, and you will earn respect.</li>
<li>Clean code</li>
<li>To go fast, go well. You will not go fast by rushing.</li>
<li>TDD. Always strife for 100% test coverage. You should know that it works. Our attitude should be that QA does not find anything.</li>
</ul>
<p>I really hope most developers already follow these rules.</p>
<h2>Manik Surtani: Infinispan and the future of data grids</h2>
<p>Cloud computing will become mainstream and traditional data centres will be marginalised. Databases on clouds don’t make sense, because of scalability issues. Native database clustering is very hard to accomplish on clouds; Oracle RAC on EC2 is impossible. However, data grids are a perfect solution. They are highly scalable and there is no single point of failure. Latency is very low.</p>
<p>Infinispan is an open source data grid platform that uses a JPA-like API. This should make easy migration form traditional databases. The functionality is similar to database, but keywords like “JOIN” cannot be supported.</p>
<p>If Surtani is right, the software industry will change completely. This will have a big impact on database manufactures. Infinispan is not yet available for download. When it is available I would like to judge for myself whether the data-grid is a real alternative for the relational database.</p>
<h2>Ivar Jacobson: Software Engineering Method and Theory</h2>
<p>Ivar Jacobson is a father of components and component architecture, use cases, aspect-oriented software development, UML (Unified Modelling Language) and RUP (Rational Unified Process). He asks the question: Do we really know how to develop software? It looks like we are working in a fashion industry. Every year a new, but not really new, methodology becomes popular. We should not re-invent the wheel every time. We need a theory / basis that we all share and support. Ivar started a new initiative: <a href="”http://www.semat.org/”" target="_blank">Software Engineering Method and Theory.</a> This initiative should provide a solid theory, proven principles and best practices.</p>
<p>Let’s hope he will succeed.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.whitehorses.nl/2009/11/20/devoxx-2009-day-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Devoxx 2009 &#8211; day 3</title>
		<link>http://blog.whitehorses.nl/2009/11/19/devoxx-2009-day-3/</link>
		<comments>http://blog.whitehorses.nl/2009/11/19/devoxx-2009-day-3/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 06:27:43 +0000</pubDate>
		<dc:creator>Jos Nieuwenhuis</dc:creator>
				<category><![CDATA[Enterprise Java]]></category>
		<category><![CDATA[Integration, SOA & BPM]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Amazon EC2]]></category>
		<category><![CDATA[Devoxx]]></category>
		<category><![CDATA[Devoxx 2009]]></category>
		<category><![CDATA[EJB]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Java EE 6]]></category>
		<category><![CDATA[Spring ActionScript]]></category>

		<guid isPermaLink="false">http://blog.whitehorses.nl/?p=514</guid>
		<description><![CDATA[There were many sessions on the third day of Devoxx were about the new Java EE 6 release. Java EE 6 will be released on December 10th 2009. It will contain many improvements. For example, JAX-RS, BeanValidation, Web Profile 1.0, EJB Lite, Dependency Injection, EJB 3.1, Portable JNDI Names, Servlet 3.0, etc.]]></description>
			<content:encoded><![CDATA[<p></p><p>Many sessions on the third day of Devoxx were about the new Java EE release.</p>
<h2>Antonio Goncalves: Java EE 6 release</h2>
<p>Java EE 6 will be released on December 10th 2009. It will contain many improvements:</p>
<ul>
<li>JAX-RS &#8211; Annotation based API for REST web services. Very simple to use, just add the following annotations: @Path, @GET, @POST, etc.</li>
<li>BeanValidation &#8211;  Also annotation based; similar to the annotations in Rails/Grails: @NotNull, @Size (max=40, message=&#8221;longer than {max} characters&#8221;). It is possible to add your own custom tags. The tags work with JPA and JSF.</li>
<li>Web Profile 1.0 &#8211; This is a subset of Java EE APIs only for webcontainer. Includes EJB Lite: a way to run EJBs in a web container.</li>
<li>CDI &#8211; Context Dependency Injection. Annotations to be used: @Inject, @Resource.</li>
<li>EJB 3.1 &#8211; A new component has been added: Singleton. It is now possible to make a method asynchronous using the annotation @Asynchronous.</li>
<li>Embedded Container &#8211; EJB Container to be used in Java SE for test purposes.</li>
<li>Portable JNDI Names &#8211; Naming rules are not vendor specific anymore.</li>
<li>Servlet 3.0 &#8211; Many improvements. The file web.xml is now optional. Instead annotations like @WebServlet and @WebFilter can be used.</li>
<li>Simplified packaging &#8211; For example, EJBs do not have to be in separate jar anymore.</li>
<li>etcetera.</li>
</ul>
<p>I think Java EE 6 has some really great features. Java EE 6 is a huge improvement over Java EE 5.</p>
<h2>Scott Ambler: Agile Mythbusters</h2>
<p>Based on facts Scott Ambler makes some conclusions about what Agile people are really doing in practice. According to him:</p>
<ul>
<li>Agile is not just for small teams.</li>
<li>Only 47% of all Agile teams practice TDD (Test Driven Development). (This is strange. Isn&#8217;t it a requirement to do TDD?)</li>
<li>Only 65% of all Agile teams do continuous integration.</li>
<li>Agile teams do not just start coding from the beginning of the project. On average it takes 4 weeks before they start programming.</li>
<li>Agile teams do not follow common development guidelines. Applying common guidelines can be a quick win to increase software quality.</li>
<li>Agile works really works better than traditional approaches. &#8220;Agile teams produce higher quality work, are quicker to deliver, are more likely to deliver the right functionality and likely to produce greater ROI than traditional teams.&#8221;</li>
</ul>
<p>Interesting results?</p>
<h2>Chris Richardson: Architecting Robust Applications for Amazon EC2</h2>
<p>Amazon’s EC2 (Elastic Compute Cloud) is a virtualized computing environment which offers a way access computing resources via a web services API. Developing Java applications seems easy since it allows you to develop applications using standard software packages such as Tomcat and MySQL. However, some aspects of EC2 are very different than a physical computing environment. For example, you don&#8217;t know where your data is. A big advantage is that you are not responsible for the hardware. It is very easy to add and remove server instances.</p>
<h2>Christophe Herreman: Spring ActionScript</h2>
<p>Spring ActionScript is brings Independency Injection to the Flash Platform. The main focus is on Flex and AIR development. This framework can be used to build testable and maintainable Flex applications. The code examples looked quite clean. Maybe worth a try.</p>
<h2>Gregor Hohpe: Distributed programming the Google way</h2>
<p>Google runs one of the largest computer infrastructures in the world. Parts of this infrastructure have been made available as open source projects. Some design themes or patterns can be used in other contexts. Gregor Hohpe&#8217;s 8 rules:</p>
<ol>
<li>Use sharding. Partition your data.</li>
<li>Less is more. Choose only the basic features.</li>
<li>Expect failure. It is not a matter if, but when the failure will strike.</li>
<li>Autonomy. Some processes should be able to continue without supervision.</li>
<li>Empower the runtime. Flow freely instead of strict rules.</li>
<li>Favor Stateless. Processes that keep state are more expensive than stateless operations.</li>
<li>Precision versus Speed. Faster is better.</li>
<li>It is all about trade-offs.</li>
</ol>
<p>Interesting ideas. Some of them can also be useful for smaller scale projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.whitehorses.nl/2009/11/19/devoxx-2009-day-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
