<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>• Holism and Technology •</title>
	<atom:link href="http://holisticsecurity.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://holisticsecurity.wordpress.com</link>
	<description>Free/Open Source, Computer Security, Trust, and Usability. Systems Thinking Methodology applied to Technology.</description>
	<lastBuildDate>Thu, 19 Jan 2012 18:53:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='holisticsecurity.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/ff06dd41e20399df59f46a985d7c4bbf?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>• Holism and Technology •</title>
		<link>http://holisticsecurity.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://holisticsecurity.wordpress.com/osd.xml" title="• Holism and Technology •" />
	<atom:link rel='hub' href='http://holisticsecurity.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Virtualizing Liferay Portal with Proxmox VE</title>
		<link>http://holisticsecurity.wordpress.com/2011/11/23/virtualizing-liferay-portal-proxmox/</link>
		<comments>http://holisticsecurity.wordpress.com/2011/11/23/virtualizing-liferay-portal-proxmox/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 17:50:25 +0000</pubDate>
		<dc:creator>Roger Carhuatocto</dc:creator>
				<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://holisticsecurity.wordpress.com/?p=654</guid>
		<description><![CDATA[Some days ago I had to deploy a Liferay Portal in a hosting provider where Proxmox Virtual Environment (PVE) was necessary to use. Proxmox Virtual Environment is a Debian distro with pre-installed packages ready to use when you want to create virtualization platform for running Virtual Appliances and Virtual Machines based on OpenVZ and KVM. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=654&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Some days ago I had to deploy a Liferay Portal in a hosting provider where Proxmox Virtual Environment (PVE) was necessary to use.</p>
<p><a href="http://pve.proxmox.com/wiki/Network_Model">Proxmox Virtual Environment</a> is a Debian distro with pre-installed packages ready to use when you want to create virtualization platform for running Virtual Appliances and Virtual Machines based on OpenVZ and KVM.</p>
<p>But, What is difference between tradicional hosting and hosting based on Proxmox VE?, really does not exist differences because with Proxmox VE you can virtualize all (network, server, vlan, etc.).</p>
<p>Then, I did create a virtualized network with 2 servers based on Proxmox, the first server runs a Linux Debian with Apache HTTP server as web-proxy, the second server will be a private server with Liferay Portal.</p>
<p>The architecture final is as follow:</p>
<div class="wp-caption alignnone" style="width: 472px"><a href="http://dl.dropbox.com/u/2961879/blog20111108_proxmoxliferay/www.intix.info_proxmox_liferay_arquitectura.png"><img class="   " title="Architecture - Liferay in an environment virtualized with Proxmox" src="http://dl.dropbox.com/u/2961879/blog20111108_proxmoxliferay/www.intix.info_proxmox_liferay_arquitectura.png" alt="Architecture - Liferay in an environment virtualized with Proxmox" width="462" height="369" /></a><p class="wp-caption-text">Architecture - Liferay in an environment virtualized with Proxmox</p></div>
<h2>1. Installation first server with Proxmox / Apache2 HTTP Server (In Host)</h2>
<p>When installing Proxmox in your hosting provider you will have as principal public server a first server with Debian Linux,<br />
its initial configuration is as follow:</p>
<p><pre class="brush: plain; gutter: true; highlight: [1]; wrap-lines: false;">
root@kns ~ # nano /etc/network/interfaces

### Hetzner Online AG - installimage
# Loopback device:
auto lo
iface lo inet loopback

# device: eth0
auto  eth0
iface eth0 inet static
  address   176.9.30.36
  broadcast 176.9.30.63
  netmask   255.255.255.224
  gateway   176.9.30.33
  pointopoint 176.9.30.33
  post-up mii-tool -F 100baseTx-FD eth0

# default route to access subnet
up route add -net 176.9.30.32 netmask 255.255.255.224 gw 176.9.30.33 eth0
</pre><br />
<pre class="brush: plain; gutter: true; highlight: [1]; wrap-lines: false;">
root@kns ~ # more /etc/resolv.conf

search
nameserver 213.133.100.100
nameserver 213.133.98.98
nameserver 213.133.99.99
</pre></p>
<p>After of installing Proxmox, you have to create virtual network with a private IP range, in this case I will use 10.10.10.x.</p>
<h3>1.1. Creating Virtual Network with Proxmox</h3>
<p><pre class="brush: plain; gutter: true; highlight: [1]; wrap-lines: false;">
root@kns ~ # nano /etc/network/interfaces

# Loopback device:
auto lo
iface lo inet loopback

# device: eth0
auto  eth0
iface eth0 inet static
  address   176.9.30.36
  broadcast 176.9.30.63
  netmask   255.255.255.224
  gateway   176.9.30.33
  pointopoint 176.9.30.33
  post-up mii-tool -F 100baseTx-FD eth0
  post-up echo 1 &gt; /proc/sys/net/ipv4/conf/eth0/proxy_arp

#### my new virtual network
auto vmbr0
iface vmbr0 inet static
    address  10.10.10.1
    netmask  255.255.255.0
    bridge_ports none
    bridge_stp off
    bridge_fd 0
    post-up echo 1 &gt; /proc/sys/net/ipv4/ip_forward
    post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eth0 -j MASQUERADE
    post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eth0 -j MASQUERADE
</pre><br />
<pre class="brush: plain; gutter: true; highlight: [1]; wrap-lines: false;">
root@kns ~ # nano /etc/sysctl.d/10-no-icmp-redirects.conf

#### my bridge to VM
net.ipv4.conf.all.send_redirects = 0
</pre><br />
<pre class="brush: plain; gutter: true; highlight: [1]; wrap-lines: false;">
root@kns ~ # nano /etc/sysctl.conf

### Hetzner Online AG installimage
# sysctl config
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.ip_forward=1
</pre></p>
<h2>2. Installation of second server with Liferay 6.0.6 CE (a Guest VM)</h2>
<h3>2.1. Install your prefered Linux distro in your new VM</h3>
<p>With Proxmox VE is easy and quickly to create VM from ISO image.<br />
You can change VM parameters as RAM, HD, type of Network interface, MAC, etc. all from Proxmox VE web interface, or if you know Proxmox&#8217;s commands you could do from SSH terminal.</p>
<h3>2.2. Configure eth0 in Guest</h3>
<p>After of creating your VM with Proxmox, you will need to asign private IP or customize your VM, in this case you will need a VNC terminal to apply these changes.<br />
With Proxmox you can get a shell/terminal to Guest VM without connection to virtualized network.</p>
<p>Then, from Proxmox VE (interface web) go to your recently VM created and open a VNC terminal, then here runs following commands:</p>
<p><pre class="brush: plain; gutter: true; highlight: [1]; wrap-lines: false;">
[root@pisco ~]# nano /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=&quot;eth0&quot;
NM_CONTROLLED=&quot;yes&quot;
ONBOOT=yes
HWADDR=3E:DB:61:48:63:88
TYPE=Ethernet
BOOTPROTO=none
IPADDR=10.10.10.12
PREFIX=24
GATEWAY=10.10.10.1
DNS1=213.133.99.99
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=&quot;System eth0&quot;
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
</pre><br />
<pre class="brush: plain; gutter: true; highlight: [1]; wrap-lines: false;">
[root@pisco ~]# more /etc/resolv.conf

search local
nameserver 213.133.99.99
</pre></p>
<p>&#8230;add gateway</p>
<p><pre class="brush: plain; gutter: true; highlight: [1]; wrap-lines: false;">
[root@pisco ~]# ip route add 176.9.30.36 dev eth0
</pre></p>
<p>..add default path</p>
<p><pre class="brush: plain; gutter: true; highlight: [1]; wrap-lines: false;">
[root@pisco ~]# ip route add default via 176.9.30.36
</pre></p>
<h3>2.3. Re-start VM and test configuration</h3>
<p><pre class="brush: plain; gutter: true; highlight: [1]; wrap-lines: false;">
[root@pisco ~]# ping www.google.com

PING www.l.google.com (74.125.39.103) 56(84) bytes of data.
64 bytes from fx-in-f103.1e100.net (74.125.39.103): icmp_seq=1 ttl=55 time=6.77 ms
64 bytes from fx-in-f103.1e100.net (74.125.39.103): icmp_seq=2 ttl=53 time=6.81 ms
</pre></p>
<h3>2.4. Install Liferay, then move Liferay to non-root context</h3>
<p>Liferay will be running with this URL: http://10.10.10.12:8080/kns</p>
<h2>3. Move Proxmox Virtual Environment 1.9 (proxmox&#8217;s website) from 80 port to 8080 port.</h2>
<p>Next blog post.</p>
<h2>4. Configure first server as Reverse Web Proxy</h2>
<p>Next blog post.</p>
<h2>5. Test installation</h2>
<p>From Internet you can call this URL: <strong>http://myliferay.intix.info/kns</strong>, <strong>http://176.9.30.36/kns</strong> or http://${YOUR-PUBLIC-IP}/kns</p>
<p>Bye.</p>
<h2>References</h2>
<ul>
<li>Proxmox &#8211; Network model:<br />
<a href="http://pve.proxmox.com/wiki/Network_Model">http://pve.proxmox.com/wiki/Network_Model</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/holisticsecurity.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/holisticsecurity.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/holisticsecurity.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/holisticsecurity.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/holisticsecurity.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/holisticsecurity.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/holisticsecurity.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/holisticsecurity.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/holisticsecurity.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/holisticsecurity.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/holisticsecurity.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/holisticsecurity.wordpress.com/654/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/holisticsecurity.wordpress.com/654/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/holisticsecurity.wordpress.com/654/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=654&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://holisticsecurity.wordpress.com/2011/11/23/virtualizing-liferay-portal-proxmox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">rcarhuatocto</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20111108_proxmoxliferay/www.intix.info_proxmox_liferay_arquitectura.png" medium="image">
			<media:title type="html">Architecture - Liferay in an environment virtualized with Proxmox</media:title>
		</media:content>
	</item>
		<item>
		<title>Review: RIA Clients and RAD Frameworks for Alfresco ECM</title>
		<link>http://holisticsecurity.wordpress.com/2011/11/04/ria-clients-rad-frameworks-alfresco/</link>
		<comments>http://holisticsecurity.wordpress.com/2011/11/04/ria-clients-rad-frameworks-alfresco/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 17:03:54 +0000</pubDate>
		<dc:creator>Roger Carhuatocto</dc:creator>
				<category><![CDATA[ECM]]></category>
		<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[extjs]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Liferay]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[portlet]]></category>
		<category><![CDATA[rad]]></category>
		<category><![CDATA[ria]]></category>

		<guid isPermaLink="false">http://holisticsecurity.wordpress.com/?p=603</guid>
		<description><![CDATA[Some days ago I saw a post on the LinkedIn&#8217;s Alfresco forums asking &#8216;Which front end framework is Generally used with Alfresco?&#8217;, for this reason I started to research and test them and discovered with joy that the trend is to use lightweight frameworks capable of creating rich interfaces quickly. Well here I put the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=603&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Some days ago I saw a post on the LinkedIn&#8217;s Alfresco forums asking <a href="http://www.linkedin.com/groups/Which-front-end-framework-is-663827.S.69732274?view=&amp;srchtype=discussedNews&amp;gid=663827&amp;item=69732274&amp;type=member&amp;trk=eml-anet_dig-b_pd-ttl-cn&amp;ut=2MCRzVZGv0CAU1">&#8216;Which front end framework is Generally used with Alfresco?&#8217;</a>, for this reason I started to research and test them and discovered with joy that the trend is to use lightweight frameworks capable of creating rich interfaces quickly. Well here I put the review: Because I started to carefully review and discovered with joy that the trend is to use lightweight frameworks capable of creating rich interfaces quickly. Well here I put the review:</p>
<h2>I. What is a client for Alfresco ECM ?</h2>
<p>A client for Alfresco is any webapp or desktop app that consumes the Alfresco&#8217;s services, this client app can be created with Alfresco&#8217;s standard framework or with third party frameworks.</p>
<p>Several endusers want always customize traditional and existing Alfresco&#8217;s web clients, because these do not fit its requeriments.<br />
Then, they quickly seek to modify existing Alfresco&#8217;s webclient and if this is not possible, then seek a tool (framework) to build a desktop or client from scratch.</p>
<div class="wp-caption alignnone" style="width: 439px"><a href="http://dl.dropbox.com/u/2961879/blog20111104_riaclientsalfresco/ria_clients_alfresco_rev1.png"><img class="   " title="How to client applications can be connected to Alfresco ECM" src="http://dl.dropbox.com/u/2961879/blog20111104_riaclientsalfresco/ria_clients_alfresco_rev1.png" alt="How to client applications can be connected to Alfresco ECM" width="429" height="315" /></a><p class="wp-caption-text">How to client applications can be connected to Alfresco ECM</p></div>
<p>What are the main reasons why you need to modify Alfresco&#8217;s webclients or create new ones?<br />
Well, there are several reasons:</p>
<ul>
<li>The technology stack in the company is not Java.</li>
<li>Is very difficult to make changes. Although there is much online information available on how to make customizations to Alfresco Explorer and Alfresco Share.</li>
<li>Make changes in existing webapp are not supported.</li>
<li>UI (look&amp;feel) is not aligned to corporate graphical style.</li>
<li>Alfresco&#8217;s content must be delivered for any devices: iPad, Android tablet, PC, etc.</li>
<li>&#8230; or simply, everybody has different requirements.</li>
</ul>
<p>Well, this post will review existing initiatives, RIA, RDA (Rich Desktop App) and RAD frameworks for developing clients for Alfresco ECM.</p>
<h2>II. List of Clients</h2>
<h3>1. Alfresco Explorer</h3>
<p>Alfresco Explorer is the clasic webapp bundled with Alfresco ECM, It is the principal web application to do document management, this offers some functionalities of system administratios.<br />
Big changes or personalizations on this webapp must be done by XML file (Spring) configuring.</p>
<p>* Web: <a href="http://www.alfresco.com">http://www.alfresco.com</a><br />
* License: Enterprise Edition is open source with commercial support, Community Edition is LGPL 2 with some exception.<br />
* Technology:<br />
Alfresco Explorer based in JavaServerFace.</p>
<h3>2. Alfresco Share</h3>
<p>* Provides a rich web-based collaboration environment for managing documents, wiki content, blogs and more.<br />
* Is based on Alfresco Surf API (now is a Spring project).</p>
<p>* Web: <a href="http://www.alfresco.com">http://www.alfresco.com</a><br />
* License: Idem to Alfresco Explorer<br />
* Technology:<br />
Alfresco Share based in SpringSurf/Webscripts.</p>
<h3>3. Opsoro</h3>
<p>&#8220;opsoro is an alternative web client for the Alfresco Enterprise Content Management Plattform. It&#8217;s goal is to provide an easier user interface with a richer user experience by leveraging the latest web technologies.&#8221;</p>
<p>* Version: ExtJS-version is 0.1beta<br />
* Web: <a href="http://www.opsoro.org">http://www.opsoro.org</a><br />
* License: GPL<br />
* Architecture: <a href="http://www.opsoro.org/architecture">http://www.opsoro.org/architecture</a><br />
* Technology:<br />
- Alfresco server side: Opsoro does uses standard Alfresco Web Scripts.<br />
- Web server side: Ext JS 2.0<br />
* Features:<br />
Basic document management features as:<br />
- Folder, category and tag cloud browser<br />
- My Alfresco portal with draggable portlets<br />
- Document tagging<br />
- Embedded preview (crop content &amp; image preview)<br />
- Inline view (supports text, pdf and images)</p>
<h3>4. FlexSpaces (in browser, portlet and Air)</h3>
<p>&#8220;Flex RIA client for Alfresco ECM&#8221;</p>
<p>* Version: build 04052011 from 2011/05/10<br />
* Web: <a href="http://code.google.com/p/flexspaces">http://code.google.com/p/flexspaces</a><br />
* License: GNU Lesser GPL<br />
* Architecture: see my diagram above<br />
* Technology: Flex, own RESTful WebScripts, Air.<br />
* Features:<br />
- Supports document management, search, workflow and wcm.</p>
<h3>5. CMISSpaces (in browser, portlet and Air)</h3>
<p>· &#8220;Flex RIA client for CMIS content management APIs.&#8221;<br />
· Based on FlexSpaces</p>
<p>* Version: Build 18 from 2011/05/23<br />
* Web: <a href="http://code.google.com/p/cmisspaces">http://code.google.com/p/cmisspaces</a><br />
* License: GNU Lesser GPL<br />
* Architecture: see my diagram above<br />
* Technology: Flex, BlazeDS, CMIS, Air.<br />
* Features:<br />
- Doc management, except:<br />
· cut,copy,paste, advanced search not implemented, properties is read-only<br />
- No workflow actions.</p>
<h3>6. ifresco</h3>
<p>&#8220;OpenSource Client for Alfresco<br />
With the ifresco client we offer a powerful OpenSource Web-Client for Alfresco which has all features which are important and neccessary for the daily work with the DMS/ECM system and which can be operated easily and intuitiv.<br />
ifresco is Web-browser based &#8211; but offers consumer-like experience of MS-Windows applications with sortable lists, context menus, drag and drop.<br />
A plug-in interface allows to add new functions and features to the client without changing the base product.&#8221;</p>
<p>* Version: 0.2 beta from 2011/05<br />
* Web: <a href="http://code.google.com/p/ifresco-client">http://code.google.com/p/ifresco-client</a><br />
* License: GNU GPL v3<br />
* Architecture: <a href="http://www.ifresco.at/de/products/client/overview.html">http://www.ifresco.at/de/products/client/overview.html</a><br />
* Technology:</p>
<p>* PHP5+<br />
* Symfony 1.4 for MVC Framework<br />
* Doctrine for database ORM<br />
* Alfresco Integration based on Standard Restful Services &amp; Webservice API<br />
* No additional webscripts must be installed on the server!<br />
* Server Side Converter for OFFICE2SWF Conversion (jodconvert &amp; swftools)<br />
* MySQL to save &#8211; administrative data, user sessions and favorites<br />
* jQuery for various JavaScript functions and drag &amp; drop<br />
* ExtJS for the user interface with plug-ins</p>
<p>* Features:<br />
* All the DMS/ECM functionalities.<br />
* A plug-in interface allows to add new functions and features to the client without changing the base product.<br />
* No workflow actions.<br />
* Provides a mature and complete PHP Lib based on Alfresco PHP API (http://code.google.com/p/ifresco-php-library).</p>
<h3>7. Liferay Document Library by CMIS</h3>
<p>* Web: <a href="http://www.liferay.com">http://www.liferay.com</a><br />
* License: GNU General Public License version 3.0 (GPLv3) for Community Edition<br />
* Architecture: see my diagram above<br />
* Technology:<br />
Up to version 6.0.6 was possible to use Liferay Document Library to connect to any CMIS repository through a Liferay Hook, but was little usable in real scenarios, <a href="http://www.liferay.com/web/sergio.gonzalez/blog/-/blogs/9876984">now in version 6.1b3</a> we can connect to any CMIS repository and allow synchronization between Alfresco repository and Liferay.<br />
I think this is a huge step forward demonstrating the strength of CMIS interface to any type of application in front-end side.</p>
<p>* Features:<br />
- Connect to any CMIS repository<br />
- Still remaining to be developed all the features of CMIS 1.0<br />
- It is very usable in real scenarios.</p>
<h3>8. DoCASU</h3>
<p>&#8220;The goal of DoCASU is to provide to the Alfresco Community a Custom Alfresco UI with a strong focus on User eXperience. This will be less confusing for average end users and will permit a broader acceptance of the solution by a larger group of users.&#8221;</p>
<p>* Version: 1.6.3 from 2010/01/08<br />
* Web: <a href="http://docasu.sourceforge.net">http://docasu.sourceforge.net</a><br />
* License: GNU GPL<br />
* Architecture: <a href="http://docasu.sourceforge.net/productInfo.html">http://docasu.sourceforge.net/productInfo.html</a><br />
* Technology: ExtJS, own WebScripts (REST) and WS.<br />
* Features:<br />
DoCASU provides the functionality that average end users need to easily work with Alfresco:<br />
- Folder Actions (View, create, delete, rename Folder, Create HTML or Text File, Upload File, Paste all)<br />
- File Actions (View, update, delete, checkout, checkin, copy File, Download File, Add to favorites, Mail Link to File, Copy File Path/URL to clipboard)<br />
- Simple and Advanced Search (Node type, Creation date, Modification date, Look in current folder, all folders)<br />
- No workflow actions</p>
<h3>9. ExtAlf</h3>
<p>&#8220;This is not an Opsoro or FlexSpaces alternative, rather than a developer toolkit or a simple SDK what supports embedding Alfresco backend functionality into Web2.0/AJAX portals and frontends.&#8221;</p>
<p>* Web: <a href="http://louise.hu/poet/?p=753">http://louise.hu/poet/?p=753</a><br />
* License: ExtAlf is part of a bigger project what is closed-source yet.<br />
* Architecture: see diagram above<br />
* Technology: ExtJS and own WebScripts<br />
* Features:<br />
- Doc management.<br />
- More info here: <a href="http://louise.hu/poet/?p=927">http://louise.hu/poet/?p=927</a></p>
<h3>10. CMIS Explorer</h3>
<p><a href="http://blogs.citytechinc.com/sjohnson/?p=60">http://blogs.citytechinc.com/sjohnson/?p=60</a><br />
<a href="http://code.google.com/p/cmis-explorer">http://code.google.com/p/cmis-explorer</a></p>
<h3>11. Alfresco Office Plugin</h3>
<p>&#8220;Implemented on a mini-browser windows, all actions available through REST API (HTML response for UI, others JSON for responses to update UI and data retrieval&#8221;.<br />
Core services accessible through plugin:<br />
- Document management<br />
- Workflow<br />
- Search</p>
<h3>12. SCAr</h3>
<p><a href="http://wiki.rivetlogic.org/display/SCAr/Home">http://wiki.rivetlogic.org/display/SCAr/Home</a></p>
<h3>13. AWPr</h3>
<p>&#8220;AWPr (Alfresco Web Script Portlet rivet) is a JSR-286 portlet that can be used to expose remote Alfresco Web scripts, including those that need user authentication.&#8221;</p>
<p>* Web: <a href="http://wiki.rivetlogic.org/display/AWPr/About+AWPr">http://wiki.rivetlogic.org/display/AWPr/About+AWPr</a><br />
* License: GNU Affero General Public License.<br />
* Version:</p>
<h3>14. Alfresco Web Script Portlet</h3>
<p>&#8220;A webscript portlet for Liferay Portal, supporting multiple modes of authentication, a simple AJAX proxy and jQuery support.&#8221;</p>
<p>* Web: <a href="http://forge.alfresco.com/projects/liferaywsp">http://forge.alfresco.com/projects/liferaywsp</a><br />
* License: MIT/X Consortium License<br />
* Version: 1.0 of May/31/2010</p>
<h3>15. WeWeBu OpenWorkdesk</h3>
<p>&#8220;WeWebU OpenWorkdesk is an application suite (not just a CMIS browser!) for Enterprise Content Management (ECM) with an intuitive Web 2.0 front-end.&#8221;</p>
<p>* Web: http://openworkdesk.org (<a href="http://sourceforge.net/projects/owd">http://sourceforge.net/projects/owd</a>)<br />
* License: GNU General Public License version 3.0 (GPLv3) for Community Edition<br />
* Version: 3.2.0.0 sprint6<br />
* Architecture:</p>
<p>Integration using CMIS standard and custom framework (WeWebU OpenECM-Framework) more info here:<br />
<a href="http://www.wewebu.de/fileadmin/user_upload/software/OECM_Architektur_EN.gif">http://www.wewebu.de/fileadmin/user_upload/software/OECM_Architektur_EN.gif</a></p>
<p>* Technology:<br />
-Java, CMIS and ExtJS 3.2.0 for UI in frontend</p>
<p>* Features:<br />
The Community Edition version contains standard functionalities related to document manangement and supports all CMIS-enabled ECM systems:<br />
- checkin, checkout, create, delete, search, &#8230;<br />
Extra functionalities as workflow interactions, etc. are not availables in Community Edition.<br />
For more detailed information about editions, here is a short comparison matrix:<br />
<a href="http://www.openworkdesk.org/system/files/u4/20100623_OS-Editionen-Matrix_All.jpg">http://www.openworkdesk.org/system/files/u4/20100623_OS-Editionen-Matrix_All.jpg</a></p>
<p>For an updated roadmap, you can see here:<br />
<a href="http://www.openworkdesk.org/roadmap">http://www.openworkdesk.org/roadmap</a></p>
<h2>III. Meta-frameworks</h2>
<p>1. Jibe Framework (AlfExt)<br />
<a href="http://code.google.com/p/jibeframework">http://code.google.com/p/jibeframework</a></p>
<p>2. Spring Surf<br />
<a href="http://www.springsurf.org">http://www.springsurf.org</a></p>
<p>3. Apache Chemistry (CMIS)<br />
<a href="http://chemistry.apache.org">http://chemistry.apache.org</a></p>
<p>4. Spring Surf CMIS Application Browser<br />
&#8220;Spring Surf provides a scriptable approach to building web applications. OpenCMIS provides a Java client library for accessing any CMIS compliant content repository. By combining the two, we create a development platform for building CMIS enabled web applications.&#8221;</p>
<p><a href="http://blogs.alfresco.com/wp/cmis/2010/03/17/spring-surf-and-opencmis-integration/">http://blogs.alfresco.com/wp/cmis/2010/03/17/spring-surf-and-opencmis-integration</a><br />
<a href="http://blogs.alfresco.com/wp/cmis/2010/06/14/spring-surf-and-opencmis-integration-part-2">http://blogs.alfresco.com/wp/cmis/2010/06/14/spring-surf-and-opencmis-integration-part-2</a></p>
<p>5. Struts2 CMIS Explorer<br />
&#8220;Struts2CmisExplorer is a web-based CMIS explorer. It uses Struts2 for the user interface.<br />
If you have documents stored in your ECM repository and want to expose them (or some of them) to your clients/employees through an Intranet (or Internet/portal) web application&#8230;&#8221;<br />
<a href="http://code.google.com/p/struts2cmisexplorer">http://code.google.com/p/struts2cmisexplorer</a></p>
<p>6. Drupal + CMIS<br />
<a href="http://drupal.org/project/cmis">http://drupal.org/project/cmis</a></p>
<p>7. Joomla + CMIS<br />
<a href="http://blog.joomlatools.eu/2008/12/joomla-meet-alfresco.html">http://blog.joomlatools.eu/2008/12/joomla-meet-alfresco.html</a></p>
<p>8. Drupal Open Atrium + CMIS<br />
<a href="http://ecmarchitect.com/archives/2010/03/22/1141">http://ecmarchitect.com/archives/2010/03/22/1141</a></p>
<p>9. ifresco PHP Lib<br />
&#8220;ifresco PHP Library extends the Alfresco PHP Library, many RESTFul Services (which are used by Share) are implemented. Zoho Upload is implemented in here too.&#8221;</p>
<p>* Web: <a href="http://code.google.com/p/ifresco-php-library">http://code.google.com/p/ifresco-php-library</a><br />
* License: GNU GPL v3<br />
* Technology:<br />
- PHP5+<br />
- Alfresco Integration based on Standard Restful Services &amp; Webservice API<br />
- No additional webscripts must be installed on the server!<br />
- Parts of the Administration Service<br />
- Category Management<br />
- Lucene Search for Limited Result Query&#8217;s</p>
<h2>IV. Conclusions</h2>
<ul>
<li>This review concludes that the trend is to use existing products (ifresco, Drupal, OpenAtrium, Liferay, &#8230;.) enabling rapid integration with Alfresco services.</li>
<li>The second option is to create RIA applications from scratch, and quickly, taking advantage of existing metaframeworks, we can see in doCASU, ExtAlf, AWPr, FlexSpace, etc.., The fact that they have started as a proof of concept and then have become standalone products confirms this trend.</li>
<li><a href="#">You can download a resume table with all features of each product reviewed from here</a>.</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/holisticsecurity.wordpress.com/603/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/holisticsecurity.wordpress.com/603/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/holisticsecurity.wordpress.com/603/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/holisticsecurity.wordpress.com/603/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/holisticsecurity.wordpress.com/603/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/holisticsecurity.wordpress.com/603/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/holisticsecurity.wordpress.com/603/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/holisticsecurity.wordpress.com/603/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/holisticsecurity.wordpress.com/603/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/holisticsecurity.wordpress.com/603/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/holisticsecurity.wordpress.com/603/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/holisticsecurity.wordpress.com/603/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/holisticsecurity.wordpress.com/603/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/holisticsecurity.wordpress.com/603/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=603&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://holisticsecurity.wordpress.com/2011/11/04/ria-clients-rad-frameworks-alfresco/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">rcarhuatocto</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20111104_riaclientsalfresco/ria_clients_alfresco_rev1.png" medium="image">
			<media:title type="html">How to client applications can be connected to Alfresco ECM</media:title>
		</media:content>
	</item>
		<item>
		<title>Calling Alfresco&#8217;s Webscripts from a Liferay Portlet using Ajax</title>
		<link>http://holisticsecurity.wordpress.com/2011/09/26/alfresco-webscript-liferay-portlet-ajax/</link>
		<comments>http://holisticsecurity.wordpress.com/2011/09/26/alfresco-webscript-liferay-portlet-ajax/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 12:42:59 +0000</pubDate>
		<dc:creator>Roger Carhuatocto</dc:creator>
				<category><![CDATA[ECM]]></category>
		<category><![CDATA[PORTAL]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jsr-286]]></category>
		<category><![CDATA[Liferay]]></category>
		<category><![CDATA[portlet]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[serveresource]]></category>
		<category><![CDATA[surf]]></category>
		<category><![CDATA[webscript]]></category>

		<guid isPermaLink="false">http://holisticsecurity.wordpress.com/?p=623</guid>
		<description><![CDATA[I think that we are reaching the maturity level in Liferay and Alfresco, because we can create applications on top of them of fastly and easy way. Alfresco ECM has functionalities exposed as a RESTful API, as know as Alfresco Webscripts, built on the basis of Spring Surf. Liferay Portal has Liferay IDE based on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=623&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I think that we are reaching the maturity level in Liferay and Alfresco, because we can create applications on top of them of fastly and easy way.</p>
<p>Alfresco ECM has functionalities exposed as a RESTful API, as know as Alfresco Webscripts, built on the basis of Spring Surf.<br />
Liferay Portal has Liferay IDE based on Eclipse where we can create from scratch different types of Portlets. Also Liferay allows to include external libraries as jQuery, ExtJS, Vaadin, etc. that allows to develop highly customized portlets.</p>
<p>Right now, when several people ask me how to integrate Alfresco into Liferay, after I ask them what does mean when you said *integrate*?. Well I say that implies several thing as:</p>
<p>Integration mean:</p>
<ol>
<li>User and roles, SSO ?</li>
<li>Include Alfresco Explorer or Share as a Portlet?</li>
<li>Include Alfresco Explorer inside iFrame Portlet?</li>
<li>Call any Alfresco&#8217;s functionality from a Portlet?</li>
<li>&#8230;</li>
</ol>
<p>Well, everything is possible to do, but to create applications from scratch following point 5 was very difficult, but now I think is the quickest way to do it, also the best from an architectural point of view.</p>
<p>This post explain how to do a portlet calling to Alfresco&#8217;s Webscripts (REST URIs) via ajax using jQuery. I also give some recommendations.</p>
<div class="wp-caption alignnone" style="width: 384px"><a href="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_1arch.png"><img class="  " title="Ajax Portlet calls Alfresco Webscripts" src="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_1arch.png" alt="Ajax Portlet calls Alfresco Webscripts" width="374" height="222" /></a><p class="wp-caption-text">Ajax Portlet calls Alfresco Webscripts</p></div>
<h2>Requeriments</h2>
<ol>
<li>Liferay IDE version 1.3.1 as IDE</li>
<li>Liferay Portal version 6.0.6 installed into IDE</li>
<li>Liferay SDK version 6.0.6 installed into IDE</li>
<li>Alfresco ECM version 3.4d CE installed</li>
<li>Identify and verify Alfresco Webscripts:
<ul>
<li>Login and get Ticket: http://${ALFRESCO}/alfresco/service/api/login?u=${USR}&amp;pw=${PWD}</li>
<li>Folder browser: http://${ALFRESCO}/alfresco/service/sample/folder${INITIAL_FOLDER}</li>
</ul>
</li>
<li>jQuery version 1.6.3 added to new portlet</li>
</ol>
<h2>Process</h2>
<p>1. From Liferay IDE create a new Liferay Project that implement GenericPortlet as follow:</p>
<div class="wp-caption alignnone" style="width: 332px"><a href="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_2newproj.png"><img class="    " title="Liferay IDE - creating new Liferay Project (1/6)" src="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_2newproj.png" alt="Liferay IDE - creating new Liferay Project (1/6)" width="322" height="313" /></a><p class="wp-caption-text">Liferay IDE - creating new Liferay Project (1/6)</p></div>
<div class="wp-caption alignnone" style="width: 370px"><a href="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_3newproj.png"><img class="   " title="Liferay IDE - creating new Liferay Project (2/6)" src="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_3newproj.png" alt="Liferay IDE - creating new Liferay Project (2/6)" width="360" height="335" /></a><p class="wp-caption-text">Liferay IDE - creating new Liferay Project (2/6)</p></div>
<div class="wp-caption alignnone" style="width: 284px"><a href="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_4newproj.png"><img class="   " title="Liferay IDE - creating new Liferay Project (3/6) " src="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_4newproj.png" alt="Liferay IDE - creating new Liferay Project (3/6) " width="274" height="167" /></a><p class="wp-caption-text">Liferay IDE - creating new Liferay Project (3/6)</p></div>
<div class="wp-caption alignnone" style="width: 308px"><a href="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_5newproj.png"><img class="    " title="Liferay IDE - creating new Liferay Project (4/6) " src="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_5newproj.png" alt="Liferay IDE - creating new Liferay Project (4/6) " width="298" height="339" /></a><p class="wp-caption-text">Liferay IDE - creating new Liferay Project (4/6)</p></div>
<div class="wp-caption alignnone" style="width: 378px"><a href="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_6newproj.png"><img class="   " title="Liferay IDE - creating new Liferay Project (5/6) " src="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_6newproj.png" alt="Liferay IDE - creating new Liferay Project (5/6) " width="368" height="332" /></a><p class="wp-caption-text">Liferay IDE - creating new Liferay Project (5/6)</p></div>
<div class="wp-caption alignnone" style="width: 354px"><a href="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_7newproj.png"><img class="  " title="Liferay IDE - creating new Liferay Project (6/6) " src="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_7newproj.png" alt="Liferay IDE - creating new Liferay Project (6/6) " width="344" height="358" /></a><p class="wp-caption-text">Liferay IDE - creating new Liferay Project (6/6)</p></div>
<p>2. The structure of Project in Liferay IDE will be as follow:</p>
<div class="wp-caption alignnone" style="width: 388px"><a href="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_8structureproj.png"><img title="Liferay IDE - folder structure of new project" src="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_8structureproj.png" alt="Liferay IDE - folder structure of new project" width="378" height="454" /></a><p class="wp-caption-text">Liferay IDE - folder structure of new project</p></div>
<p>3. Add code in view.jsp to call serverResource method and to do ajax call to Alfresco. Also, in view.jsp you will add JavaScript code (jQuery) for parsing HTML/XML ajax responses.</p>
<p><pre class="brush: xml; gutter: true; wrap-lines: false;">
&lt;%@ taglib uri=&quot;http://java.sun.com/portlet_2_0&quot; prefix=&quot;portlet&quot; %&gt;

&lt;portlet:defineObjects /&gt;

This is the &lt;b&gt;Ajax Alfresco Folder Browser&lt;/b&gt; portlet in View mode.
&lt;hr/&gt;

&lt;%
// &quot;http://192.168.56.101:8080&quot;;
String strUrlAlfIP = renderRequest.getAttribute(&quot;alfServer&quot;).toString(); 
// &quot;/alfresco/service/api/login?u=admin&amp;pw=admin&quot;;
String strUrlAlfLogin = renderRequest.getAttribute(&quot;alfTicketSvc&quot;).toString() + &quot;?&quot; + renderRequest.getAttribute(&quot;alfTicketSvcParams&quot;);
// &quot;/alfresco/service/sample/folder/Company%20Home&quot;;
String strUrlAlfDir = renderRequest.getAttribute(&quot;alfWebscriptBrowserURL&quot;).toString(); 
%&gt;
&lt;portlet:resourceURL var=&quot;resourceUrlAlfIP&quot; id=&quot;&lt;%=strUrlAlfIP%&gt;&quot; escapeXml=&quot;false&quot; /&gt;
&lt;portlet:resourceURL var=&quot;resource1AlfLogin&quot; id=&quot;&lt;%=strUrlAlfIP.concat(strUrlAlfLogin.trim()).trim()%&gt;&quot; escapeXml=&quot;false&quot; /&gt;
&lt;portlet:resourceURL var=&quot;resource2AlfFolderBrowser&quot; id=&quot;&lt;%=strUrlAlfIP.concat(strUrlAlfDir.trim()).trim()%&gt;&quot; escapeXml=&quot;false&quot; /&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
jQuery(document).ready(function() {
		
	var urlAlfIP = &quot;&lt;%=strUrlAlfIP%&gt;&quot;;	
	var currentAlfTicket = jQuery(&quot;#&lt;portlet:namespace/&gt;alfrescoticket&quot;).text();			   
	$(&quot;#&lt;portlet:namespace/&gt;buttonAlfLoginAndTicket&quot;).click(function(){		
		if (currentAlfTicket == &quot;&quot;) {
			jQuery(&quot;#&lt;portlet:namespace/&gt;loading&quot;).html(&quot;&lt;img src='&lt;%=request.getContextPath()%&gt;/images/2-1.gif' border='0'&gt; loading ...&quot;);
			jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).html(&quot;&quot;);
			jQuery.get( '&lt;%=renderResponse.encodeURL(resource1AlfLogin)%&gt;',
					function (data1, textStatus1, jqXHR1) {
							jQuery(&quot;#&lt;portlet:namespace/&gt;alfrescoticket&quot;).html(data1.getElementsByTagName(&quot;ticket&quot;)[0].childNodes[0].nodeValue);
							jQuery.get( '&lt;%=renderResponse.encodeURL(resource2AlfFolderBrowser)%&gt;', 
								'alf_ticket=' + data1.getElementsByTagName(&quot;ticket&quot;)[0].childNodes[0].nodeValue, 
								function (data2, textStatus2, jqXHR2) {
									jQuery(&quot;#&lt;portlet:namespace/&gt;loading&quot;).html(&quot;&quot;);	
									jQuery(&quot;#&lt;portlet:namespace/&gt;alfrescowscontent&quot;).html(&quot;&lt;b&gt;&lt;font color='blue'&gt;Folder:&lt;/font&gt;&lt;/b&gt; &quot; + $(data2).filter(&quot;title&quot;).text() + &quot;&lt;br&gt;&lt;table&gt;&quot;);							
									var i=1;
									$(data2).find(&quot;a&quot;).each( 
										function() {								
											$(&quot;#&lt;portlet:namespace/&gt;alfrescowscontent&quot;).append( &quot;&lt;tr&gt;&lt;td&gt;&quot; +  i++  + &quot;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;a href='&quot; + $(this).attr(&quot;href&quot;) + &quot;' id='IdLinkAlfPath'&gt;&quot; + $(this).text() + &quot;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&quot;);
										}
									);
									jQuery(&quot;#&lt;portlet:namespace/&gt;alfrescowscontent&quot;).append(&quot;&lt;/table&gt;&lt;hr/&gt;&quot;);
									jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).append(&quot;&lt;font color='green'&gt;* textStatus2: &quot; + textStatus2  + &quot;&lt;/font&gt;&lt;br/&gt;&quot;);
									jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).append(&quot;&lt;font color='green'&gt;* jqXHR2: &quot; + jqXHR2.status  + &quot;&lt;/font&gt;&lt;br/&gt;&quot;);								
									jQuery(&quot;#&lt;portlet:namespace/&gt;loading&quot;).html(&quot;&quot;);
								},
								'html'
							).error(function() { //alert(&quot;2nd ajax error&quot;); 
												}); // 2nd end-jquery-get	
							jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).append(&quot;&lt;font color='green'&gt;* textStatus1: &quot; + textStatus1  + &quot;&lt;/font&gt;&lt;br/&gt;&quot;);
							jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).append(&quot;&lt;font color='green'&gt;* jqXHR1: &quot; + jqXHR1.status  + &quot;&lt;/font&gt;&lt;br/&gt;&quot;);	
					} // end-function-data 
			).error(function() { //alert(&quot;1st ajax error&quot;); 
								}); // 1st end-jquery-get
		} // end-if
	}); // end-click-button
	
	$('a#IdLinkAlfPath').live('click', function(event) {
		jQuery(&quot;#&lt;portlet:namespace/&gt;loading&quot;).html(&quot;&lt;img src='&lt;%=request.getContextPath()%&gt;/images/2-1.gif' border='0'&gt; loading ...&quot;);
		var urlAlfGeneric = &quot;&quot; + &quot;&lt;%=renderResponse.encodeURL(resourceUrlAlfIP)%&gt;&quot;;
		urlAlfGeneric = urlAlfGeneric.replace(encodeURIComponent(urlAlfIP), encodeURIComponent(urlAlfIP + $(this).attr(&quot;href&quot;)));
		
 		jQuery.get( urlAlfGeneric, 
 			'alf_ticket=' + jQuery(&quot;#&lt;portlet:namespace/&gt;alfrescoticket&quot;).text(), 
 			function (data3, textStatus3, jqXHR3) {
 				jQuery(&quot;#&lt;portlet:namespace/&gt;loading&quot;).html(&quot;&quot;);	
 				jQuery(&quot;#&lt;portlet:namespace/&gt;alfrescowscontent&quot;).html(&quot;&lt;b&gt;&lt;font color='blue'&gt;Folder:&lt;/font&gt;&lt;/b&gt; &quot; + $(data3).filter(&quot;title&quot;).text() + &quot;&lt;br&gt;&lt;table&gt;&quot;);	
 				var i=1;
 				$(data3).find(&quot;a&quot;).each( function() {								
 					$(&quot;#&lt;portlet:namespace/&gt;alfrescowscontent&quot;).append( &quot;&lt;tr&gt;&lt;td&gt;&quot; +  i++  + &quot;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;a href='&quot; + $(this).attr(&quot;href&quot;) + &quot;' id='IdLinkAlfPath'&gt;&quot; + $(this).text() + &quot;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&quot;);
 				});
 				jQuery(&quot;&lt;portlet:namespace/&gt;alfrescowscontent&quot;).append(&quot;&lt;/table&gt;&quot;);
 				
				jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).append(&quot;&lt;font color='green'&gt;* textStatus3: &quot; + textStatus3  + &quot;&lt;/font&gt;&lt;br/&gt;&quot;);
				jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).append(&quot;&lt;font color='green'&gt;* jqXHR3: &quot; + jqXHR3.status  + &quot;&lt;/font&gt;&lt;br/&gt;&quot;);				
 								
 				jQuery(&quot;#&lt;portlet:namespace/&gt;loading&quot;).html(&quot;&quot;);
 			}, 
 			'html'
 		).error(function() { //alert(&quot;3rd ajax error&quot;); 
 							}); // 3rd end jQuery.get		
		return false; 	// works, does not propagate
    });
    $('a#IdLinkAlfPath').trigger('click');
    
    // jquery error management
	jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).ajaxError(
		function (event, jqXHR, ajaxSettings, thrownError) {
			jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).html(&quot;&quot;);
			jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).append(&quot;&lt;font color='red'&gt;* Status Code jqXHR: &quot; + jqXHR.status  + &quot;&lt;/font&gt;&lt;br/&gt;&quot;);
			jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).append(&quot;&lt;font color='red'&gt;* Status Text jqXHR: &quot; + jqXHR.statusText  + &quot;&lt;/font&gt;&lt;br/&gt;&quot;);
			jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).append(&quot;&lt;font color='red'&gt;* URL: &quot; + ajaxSettings.url  + &quot;&lt;/font&gt;&lt;br/&gt;&quot;);
			jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).append(&quot;&lt;font color='red'&gt;* thrownError: &quot; + jqXHR.statusText  + &quot;&lt;/font&gt;&lt;br/&gt;&quot;);
			
			// intix: does not work HTTP_STATUS_CODE in 6.0.6 CE
            // http://issues.liferay.com/browse/LPS-13039
 			// for this reason, bellow messages will not be show
			if(jqXHR.status == 0) {
				// a status of 0 indicates a failure to connect to alfresco
				jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).append(&quot;&lt;font color='red'&gt;* Message: Unable to reach the Alfresco server, check your network connection&lt;/font&gt;&quot;);
			}else if(jqXHR.status == 403) {
				// a 403 indicates that the login via the alfresco ticket service has failed.
				// display the &quot;access denied&quot; div
				jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).append(&quot;&lt;font color='red'&gt;* Message: An authentication error has occurred loading content from Alfresco, check login params&lt;/font&gt;&quot;);
			}else if(jqXHR.status == 500) {
				// we shouldn't see many 500 errors from Alfrsco services if they 
				// have been properly configured.  
				jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).append(&quot;&lt;font color='red'&gt;* Message: A server error has occurred loading content from Alfresco&lt;/font&gt;&quot;);
			}else {
				// report timeouts to the user
				jQuery(&quot;#&lt;portlet:namespace/&gt;errormsg&quot;).append(&quot;&lt;font color='red'&gt;* Message: Request to Alfresco server has timed out&lt;/font&gt;&quot;);
			}
			jQuery(&quot;#&lt;portlet:namespace/&gt;loading&quot;).html(&quot;&quot;);
		}
	); //end-ajax-error 

	// toggles the slickbox on clicking the noted link  
	$('#alf-error-slick-toggle').click(function() {
		$('#&lt;portlet:namespace/&gt;errormsg').toggle(400);
		return false;
	});

	// toggles the slickbox on clicking the noted link  
	$('#alf-content-slick-toggle').click(function() {
		$('#&lt;portlet:namespace/&gt;alfrescowscontent').toggle(400);
		return false;
	});	
});
&lt;/script&gt;

&lt;input type=&quot;button&quot; id=&quot;&lt;portlet:namespace/&gt;buttonAlfLoginAndTicket&quot; value=&quot;Login Alfresco and get Ticket&quot;&gt;
&lt;hr&gt;

&lt;!-- div to contain ticket retrieved from Alfresco Login web script --&gt;
&lt;div id=&quot;&lt;portlet:namespace/&gt;alfrescoticket&quot;&gt;&lt;/div&gt;

&lt;!-- Div to hold loading image --&gt;
&lt;div id=&quot;&lt;portlet:namespace/&gt;loading&quot;&gt;&lt;img src=&quot;&lt;%=request.getContextPath()%&gt;/images/2-1.gif&quot; border=&quot;0&quot;&gt; ...click on above button to start or change params in portlet menu preferences!&lt;/div&gt;

&lt;br/&gt;
&lt;!-- Div to hold error messages --&gt;
&lt;a href=&quot;#&quot; id=&quot;alf-error-slick-toggle&quot;&gt;[+] Toggle error console&lt;/a&gt;
&lt;div id=&quot;&lt;portlet:namespace/&gt;errormsg&quot; class=&quot;div_bg_white&quot; &gt; :) &lt;/div&gt;

&lt;!-- Div to hold logs --&gt;
&lt;div id=&quot;&lt;portlet:namespace/&gt;logs&quot;&gt;&lt;/div&gt;

&lt;br/&gt;
&lt;!-- Div to hold alfresco content --&gt;
&lt;a href=&quot;#&quot; id=&quot;alf-content-slick-toggle&quot;&gt;[+] Toggle Alfresco content&lt;/a&gt;
&lt;div class=&quot;div_bg_white&quot; id=&quot;&lt;portlet:namespace/&gt;alfrescowscontent&quot;&gt;:)&lt;/div&gt;
</pre></p>
<p>4. AjaxAlfrescoFolderBrowser.java extends GenericPortlet, in the serverResource method manages ajax calls and returns ResourceResponse to be parsed in view.jsp</p>
<p><pre class="brush: java; gutter: true; wrap-lines: false;">
package info.intix.lfry.samples;

import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.PortletMode;
import javax.portlet.PortletPreferences;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;

/**
 * Portlet implementation class AjaxAlfrescoFolderBrowser
 */
public class AjaxAlfrescoFolderBrowser extends GenericPortlet {

    public void init() {
        editJSP = getInitParameter(&quot;edit-jsp&quot;);
        helpJSP = getInitParameter(&quot;help-jsp&quot;);
        viewJSP = getInitParameter(&quot;view-jsp&quot;);
    }

	/**
	 * intix: Changes are persisted when the store method is called. 
	 * The store method can only be invoked within the scope of a processAction call. 
	 * Changes that are not persisted are discarded when the processAction or render method ends.
	 */
    public void processAction(
            ActionRequest actionRequest, ActionResponse actionResponse)
        throws IOException, PortletException {

        //super.processAction(actionRequest, actionResponse);
		PortletPreferences prefs = actionRequest.getPreferences();		
		prefs.setValue(&quot;ticketUrl&quot;, actionRequest.getParameter(&quot;ticketUrl&quot;));
		prefs.setValue(&quot;alfServer&quot;, actionRequest.getParameter(&quot;alfServer&quot;));
		prefs.setValue(&quot;alfTicketSvc&quot;, actionRequest.getParameter(&quot;alfTicketSvc&quot;));
		prefs.setValue(&quot;alfTicketSvcParams&quot;, actionRequest.getParameter(&quot;alfTicketSvcParams&quot;));
		prefs.setValue(&quot;alfWebscriptBrowserURL&quot;, actionRequest.getParameter(&quot;alfWebscriptBrowserURL&quot;));
		prefs.setValue(&quot;alfWebscriptBrowserURLParams&quot;, actionRequest.getParameter(&quot;alfWebscriptBrowserURLParams&quot;));
		prefs.setValue(&quot;jQuery&quot;, actionRequest.getParameter(&quot;jQuery&quot;));	
		prefs.store();
		actionResponse.setPortletMode(PortletMode.EDIT);
    }
    
    /**
     * intix:
     */
    public void doEdit(
            RenderRequest renderRequest, RenderResponse renderResponse)
        throws IOException, PortletException {
		if (renderRequest.getPreferences() == null) {
			//super.doEdit(renderRequest, renderResponse);
		} else {
			// get editable preferences
			PortletPreferences prefs = renderRequest.getPreferences();
			
			// intix: these values will override options in portlet.xml
			renderRequest.setAttribute(&quot;alfServer&quot;, (prefs.getValue(&quot;alfServer&quot;, &quot;&quot;)));
			renderRequest.setAttribute(&quot;alfTicketSvc&quot;, (prefs.getValue(&quot;alfTicketSvc&quot;, &quot;&quot;)));
			renderRequest.setAttribute(&quot;alfTicketSvcParams&quot;, (prefs.getValue(&quot;alfTicketSvcParams&quot;, &quot;&quot;)));			
			renderRequest.setAttribute(&quot;alfWebscriptBrowserURL&quot;, (prefs.getValue(&quot;alfWebscriptBrowserURL&quot;, &quot;&quot;)));
			renderRequest.setAttribute(&quot;alfWebscriptBrowserURLParams&quot;, (prefs.getValue(&quot;alfWebscriptBrowserURLParams&quot;, &quot;&quot;)));		
			renderRequest.setAttribute(&quot;jQuery&quot;, (prefs.getValue(&quot;jQuery&quot;, &quot;&quot;)));		
			include(editJSP, renderRequest, renderResponse);
		}
    }
    
    public void doHelp(
            RenderRequest renderRequest, RenderResponse renderResponse)
        throws IOException, PortletException {
        
        include(helpJSP, renderRequest, renderResponse);
    }
    
    /**
     * intix:
     */
    public void doView(
            RenderRequest renderRequest, RenderResponse renderResponse)
        throws IOException, PortletException {
        
		try {
			// get portlet prefs
			PortletPreferences prefs = renderRequest.getPreferences();	
			
			String alfServer = prefs.getValue(&quot;alfServer&quot;, &quot;&quot;);
			String alfTicketSvc = prefs.getValue(&quot;alfTicketSvc&quot;, &quot;&quot;);
			String alfTicketSvcParams = prefs.getValue(&quot;alfTicketSvcParams&quot;, &quot;&quot;);		
			String alfWebscriptBrowserURL= prefs.getValue(&quot;alfWebscriptBrowserURL&quot;, &quot;&quot;);
			String alfWebscriptBrowserURLParams = prefs.getValue(&quot;alfWebscriptBrowserURLParams&quot;, &quot;&quot;);			
			String jQuery = prefs.getValue(&quot;jQuery&quot;, &quot;&quot;);			
			String ticketUrl = alfServer + alfTicketSvc + &quot;?&quot; + alfTicketSvcParams;
			
			renderRequest.setAttribute(&quot;ticketUrl&quot;, ticketUrl);			
			renderRequest.setAttribute(&quot;alfServer&quot;, alfServer);
			renderRequest.setAttribute(&quot;alfTicketSvc&quot;, alfTicketSvc);
			renderRequest.setAttribute(&quot;alfTicketSvcParams&quot;, alfTicketSvcParams);		
			renderRequest.setAttribute(&quot;alfWebscriptBrowserURL&quot;, alfWebscriptBrowserURL);
			renderRequest.setAttribute(&quot;alfWebscriptBrowserURLParams&quot;, alfWebscriptBrowserURLParams);
			renderRequest.setAttribute(&quot;jQuery&quot;, jQuery);
		}catch(Exception ex) {
			_log.error(ex);
		}     	
        include(viewJSP, renderRequest, renderResponse);
    }

    protected void include(
            String path, RenderRequest renderRequest,
            RenderResponse renderResponse)
        throws IOException, PortletException {

        PortletRequestDispatcher portletRequestDispatcher =
            getPortletContext().getRequestDispatcher(path);

        if (portletRequestDispatcher == null) {
            _log.error(path + &quot; is not a valid include&quot;);
        }
        else {
            portletRequestDispatcher.include(renderRequest, renderResponse);
        }
    }

    /**
     * intix: serveResource does HTTP and Ajax call behind of Liferay
     */
    public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, IOException {
    	response.setContentType(&quot;text/xml&quot;);
		String strAlfTicket= request.getParameter(&quot;alf_ticket&quot;);	
        String strQueryString = &quot;&quot;;
        if (strAlfTicket != null) {
			// intix: if alf_ticket exists, then user was authenticate with alfresco
			Map&lt;String, String[]&gt; mapParameters = request.getParameterMap();
			for (Entry&lt;String, String[]&gt; entryParameter : mapParameters.entrySet()) {
			    System.out.println(&quot;&gt;&gt; Key = &quot; + entryParameter.getKey() + &quot;, Value = &quot; + entryParameter.getValue()[0]);		    
			    strQueryString = strQueryString + entryParameter.getKey() + &quot;=&quot; + entryParameter.getValue()[0] + &quot;&amp;&quot;;
			}
		} else {
			// intix: ticket is null
			String strUser = request.getParameter(&quot;u&quot;);
			String strPw = request.getParameter(&quot;pw&quot;);
			strQueryString = &quot;u=&quot; + strUser + &quot;&amp;pw=&quot; + strPw;
		}
		String requestUrl = request.getResourceID();    
    	BufferedInputStream web2ProxyBuffer = null;
        BufferedOutputStream proxy2ClientBuffer = null;
        HttpURLConnection con;
        URL url = null;
        try {
            int oneByte = 0;
            String methodName;
            if (strAlfTicket != null) {
            	url = new URL(requestUrl + &quot;?&quot; + strQueryString);
            } else {
            	url = new URL(requestUrl);
            }
            con = (HttpURLConnection) url.openConnection();
            methodName = request.getMethod();
            System.out.println(&quot;&gt;&gt; methodName: &quot; + methodName);
            
            con.setRequestMethod(methodName);
            con.setDoOutput(true);
            con.setDoInput(true);
            con.setFollowRedirects(false);
            con.setUseCaches(true);
            con.connect();

            // does not work in 6.0.6 CE
            // http://issues.liferay.com/browse/LPS-13039
            int httpRespCode = con.getResponseCode();
            response.setProperty(ResourceResponse.HTTP_STATUS_CODE, Integer.toString(httpRespCode));
            System.out.println(&quot;&gt;&gt; HTTP_STATUS_CODE: &quot; + httpRespCode);
                      
            if(methodName.equals(&quot;POST&quot;)) {
                BufferedInputStream clientToProxyBuf = new BufferedInputStream(request.getPortletInputStream());
                BufferedOutputStream proxyToWebBuf     = new BufferedOutputStream(con.getOutputStream());
                while ((oneByte = clientToProxyBuf.read()) != -1) {
                    proxyToWebBuf.write(oneByte);
                }
                proxyToWebBuf.flush();
                proxyToWebBuf.close();
                clientToProxyBuf.close();
            }

            for( Iterator i = con.getHeaderFields().entrySet().iterator() ; i.hasNext() ;) {
                Map.Entry mapEntry = (Map.Entry)i.next();
                if(mapEntry.getKey()!=null) {
                    //response.setHeader(mapEntry.getKey().toString(), ((List)mapEntry.getValue()).get(0).toString());
                    System.out.println(&quot;&gt;&gt; HEADER &gt; &quot; + mapEntry.getKey().toString() + &quot;\t&quot; + ((List)mapEntry.getValue()).get(0).toString());
                }
            }
            
            InputStream in = con.getInputStream();
            web2ProxyBuffer = new BufferedInputStream(in);
            proxy2ClientBuffer = new BufferedOutputStream(response.getPortletOutputStream());

 			byte [] byteArray = new byte[1024]; // intix: any array size is valid
			int intByteRead = web2ProxyBuffer.read(byteArray);
			while (intByteRead &gt; 0) {
				// intix: print response-html/xml, must be the first line after while loop
				System.out.println(new String(byteArray, 0, intByteRead));
				proxy2ClientBuffer.write(byteArray, 0, intByteRead);
				intByteRead = web2ProxyBuffer.read(byteArray);			
			}                 
            proxy2ClientBuffer.flush();
            proxy2ClientBuffer.close();
            web2ProxyBuffer.close();
            con.disconnect();
        } catch(Exception e) {
            e.getMessage();
        } finally {
        	//
        }		
	}         
    
    protected String editJSP;
    protected String helpJSP;
    protected String viewJSP;

    private static Log _log = LogFactoryUtil.getLog(AjaxAlfrescoFolderBrowser.class);

}
</pre></p>
<p>5. When you have successfully deployed the portlet, open a browser, login, then add the new portlet to any page. Then you see the following:</p>
<div class="wp-caption alignnone" style="width: 313px"><a href="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_9ajaxportlet.png"><img class=" " title="Ajax Portlet calling Alfresco Webscripts" src="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_9ajaxportlet.png" alt="Ajax Portlet calling Alfresco Webscripts" width="303" height="295" /></a><p class="wp-caption-text">Ajax Portlet calling Alfresco Webscripts</p></div>
<div class="wp-caption alignnone" style="width: 421px"><a href="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_10ajaxportlet.png"><img class="  " title="Ajax Portlet calling Alfresco Webscript - view mode" src="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_10ajaxportlet.png" alt="Ajax Portlet calling Alfresco Webscript - view mode" width="411" height="472" /></a><p class="wp-caption-text">Ajax Portlet calling Alfresco Webscript - view mode</p></div>
<div class="wp-caption alignnone" style="width: 411px"><a href="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_11ajaxportlet.png"><img class="   " title="Ajax Portlet calling Alfresco Webscripts - edit mode" src="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_11ajaxportlet.png" alt="Ajax Portlet calling Alfresco Webscripts - edit mode" width="401" height="337" /></a><p class="wp-caption-text">Ajax Portlet calling Alfresco Webscripts - edit mode</p></div>
<h2>Conclussions</h2>
<ol>
<li>In the JSR-286 specifications (Portlet 2.0) now is possible to use serveResource() method andto request data. I use it as a servlet-proxy to do ajax calls to Alfresco.</li>
<li>Exists a issue in Liferay 6.0.6 when setting ResourceResponse.HTTP_STATUS_CODE in the Portlet response (<a href="http://issues.liferay.com/browse/LPS-13039">http://issues.liferay.com/browse/LPS-13039</a>), this implies I have to manage HTTP_STATUS_CODE by parsing the Ajax HTML/XML responses.</li>
<li>I have Liferay and Alfresco in different VMs (different IP and Ports) and I never had cross-domain issues thanks to Point #1 (serveResource nad portlet:resourceURL), but if you run into it is recommended that you use Apache HTTP server as a reverse-proxy.</li>
</ol>
<p>You can download entire project (source code) and compiled from here:</p>
<ol>
<li>Source code (Liferay IDE project): <a href="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/AjaxAlfrescoFolderBrowser-portlet.zip">AjaxAlfrescoFolderBrowser-portlet.zip</a></li>
<li>Compiled: <a href="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/AjaxAlfrescoFolderBrowser-portlet.war">AjaxAlfrescoFolderBrowser-portlet.war</a></li>
</ol>
<p>End.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/holisticsecurity.wordpress.com/623/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/holisticsecurity.wordpress.com/623/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/holisticsecurity.wordpress.com/623/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/holisticsecurity.wordpress.com/623/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/holisticsecurity.wordpress.com/623/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/holisticsecurity.wordpress.com/623/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/holisticsecurity.wordpress.com/623/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/holisticsecurity.wordpress.com/623/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/holisticsecurity.wordpress.com/623/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/holisticsecurity.wordpress.com/623/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/holisticsecurity.wordpress.com/623/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/holisticsecurity.wordpress.com/623/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/holisticsecurity.wordpress.com/623/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/holisticsecurity.wordpress.com/623/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=623&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://holisticsecurity.wordpress.com/2011/09/26/alfresco-webscript-liferay-portlet-ajax/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">rcarhuatocto</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_1arch.png" medium="image">
			<media:title type="html">Ajax Portlet calls Alfresco Webscripts</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_2newproj.png" medium="image">
			<media:title type="html">Liferay IDE - creating new Liferay Project (1/6)</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_3newproj.png" medium="image">
			<media:title type="html">Liferay IDE - creating new Liferay Project (2/6)</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_4newproj.png" medium="image">
			<media:title type="html">Liferay IDE - creating new Liferay Project (3/6) </media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_5newproj.png" medium="image">
			<media:title type="html">Liferay IDE - creating new Liferay Project (4/6) </media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_6newproj.png" medium="image">
			<media:title type="html">Liferay IDE - creating new Liferay Project (5/6) </media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_7newproj.png" medium="image">
			<media:title type="html">Liferay IDE - creating new Liferay Project (6/6) </media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_8structureproj.png" medium="image">
			<media:title type="html">Liferay IDE - folder structure of new project</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_9ajaxportlet.png" medium="image">
			<media:title type="html">Ajax Portlet calling Alfresco Webscripts</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_10ajaxportlet.png" medium="image">
			<media:title type="html">Ajax Portlet calling Alfresco Webscript - view mode</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110920_ajaxalfrescoliferayportlet/ajaxalflfry_11ajaxportlet.png" medium="image">
			<media:title type="html">Ajax Portlet calling Alfresco Webscripts - edit mode</media:title>
		</media:content>
	</item>
		<item>
		<title>Remote debugging of Liferay portlets</title>
		<link>http://holisticsecurity.wordpress.com/2011/09/09/remote-debugging-liferay-portlets/</link>
		<comments>http://holisticsecurity.wordpress.com/2011/09/09/remote-debugging-liferay-portlets/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 23:20:08 +0000</pubDate>
		<dc:creator>Roger Carhuatocto</dc:creator>
				<category><![CDATA[PORTAL]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[Liferay]]></category>

		<guid isPermaLink="false">http://holisticsecurity.wordpress.com/?p=609</guid>
		<description><![CDATA[Debugging is a task very important when building software, this allows software development with high level of quality (without bugs) because &#8220;debugging&#8221; enable you repeat cycles of &#8220;to do and to test&#8221; several time. When developing Liferay portlets, Liferay Portal server will contain the portlets in a PC different of the PC of developer. For [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=609&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Debugging is a task very important when building software, this allows software development with high level of quality (without bugs) because &#8220;debugging&#8221; enable you repeat cycles of &#8220;to do and to test&#8221; several time.</p>
<p>When developing Liferay portlets, Liferay Portal server will contain the portlets in a PC different of the PC of developer.</p>
<p>For this reason, debugging is an important task when working in distributed project teams with a single and/or centralized development server.</p>
<p>Then, remote debugging means you could debug an application or portlet on server from a different computer.</p>
<p>This post discusses how to use the Eclipse IDE for remote debugging on Liferay.</p>
<h2>Versions used</h2>
<ul>
<li>Liferay Portal bundled with Tomcat: liferay-portal-tomcat-6.0.6-20110225.zip</li>
<li>Liferay IDE 1.2</li>
</ul>
<h2>Remote Debugging configuration</h2>
<p>1. In your Liferay server side, if you have installed Tomcat bundle, to add this line into $TOMCAT_HOME/bin/setenv.bat or setenv.sh before you set any JAVA_OPTS:</p>
<p>In windows:</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
</pre></p>
<p>In Mac OSX the file will be as follow:</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
## intix - remote debugging
JAVA_OPTS=&quot;-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n&quot;
JAVA_OPTS=&quot;$JAVA_OPTS -Dfile.encoding=UTF8 -Duser.timezone=GMT -Xmx1024m -XX:MaxPermSize=256m&quot;
</pre></p>
<p>2. Restart Tomcat server. You should see in log (catalina.out) a message showing that port 8000 is opened and ready to use.</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
[...]
Listening for transport dt_socket at address: 8000
Sep 8, 2011 9:55:02 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: .:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
Sep 8, 2011 9:55:02 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Sep 8, 2011 9:55:02 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 456 ms
[...]
</pre></p>
<p>Note:<br />
* If you have Liferay Portal configured as server into your Liferay IDE, do not launch Tomcat from this IDE. It is possible that remote debugging port is not opened.<br />
* For a successfully debugging, run Tomcat from a shell as follow:</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
chilcano$ sh ./startup.sh ; tail -f ../logs/catalina.out
</pre></p>
<p>3. In your PC of development, to open Eclipse, Liferay IDE or Liferay Studio, in top menu to do click on &#8220;Run &gt; Debug Configurations&#8230;&#8221;, will appear a dialog setup window where you have to create a new &#8220;Remote Java Application&#8221;.<br />
Follow the image bellow:</p>
<div class="wp-caption alignnone" style="width: 515px"><a href="http://dl.dropbox.com/u/2961879/blog20110908_eclipseremotedebugliferay/remotedebuglfry1_debugconfiguration.png"><img class=" " title="The Debugging Configuration window" src="http://dl.dropbox.com/u/2961879/blog20110908_eclipseremotedebugliferay/remotedebuglfry1_debugconfiguration.png" alt="The Debugging Configuration window" width="505" height="304" /></a><p class="wp-caption-text">The Debugging Configuration window</p></div>
<p>4. Under &#8220;Remote Java Application&#8221; to add a entry, add values of hostname and port of remote server.<br />
Follow the image bellow:</p>
<div class="wp-caption alignnone" style="width: 491px"><a href="http://dl.dropbox.com/u/2961879/blog20110908_eclipseremotedebugliferay/remotedebuglfry2_debugconfiguration.png"><img class=" " title="Debug Configuration - set hostname and port of remote server" src="http://dl.dropbox.com/u/2961879/blog20110908_eclipseremotedebugliferay/remotedebuglfry2_debugconfiguration.png" alt="Debug Configuration - set hostname and port of remote server" width="481" height="392" /></a><p class="wp-caption-text">Debug Configuration - set hostname and port of remote server</p></div>
<p>5. In &#8220;Debug Configurations&#8230;&#8221; dialog window, click &#8220;Source&#8221; and to add source code of your project to be debugged. At end, start debugging by click on &#8220;Debug&#8221; button.</p>
<div class="wp-caption alignnone" style="width: 491px"><a href="http://dl.dropbox.com/u/2961879/blog20110908_eclipseremotedebugliferay/remotedebuglfry3_debugconfiguration.png"><img class=" " title="Debug Configuration - attach source code and start debugging" src="http://dl.dropbox.com/u/2961879/blog20110908_eclipseremotedebugliferay/remotedebuglfry3_debugconfiguration.png" alt="Debug Configuration - attach source code and start debugging" width="481" height="393" /></a><p class="wp-caption-text">Debug Configuration - attach source code and start debugging</p></div>
<p>Your IDE will ask you if you want to change to &#8220;Debug perspective&#8221;. You accept it.</p>
<p>6. In your IDE, put some &#8220;breakpoints&#8221; on your code.</p>
<p>7. Open your browser and go to your webapp&#8217;s URL, if you put breakpoints are in appropriate places, then Eclipse will show the line of code being executed.</p>
<p>You have nice debug on Liferay!.</p>
<p>Bye.</p>
<p><strong>References</strong>:</p>
<ul>
<li><a href="http://www.liferay.com/community/wiki/-/wiki/Main/Eclipse">http://www.liferay.com/community/wiki/-/wiki/Main/Eclipse</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/holisticsecurity.wordpress.com/609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/holisticsecurity.wordpress.com/609/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/holisticsecurity.wordpress.com/609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/holisticsecurity.wordpress.com/609/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/holisticsecurity.wordpress.com/609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/holisticsecurity.wordpress.com/609/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/holisticsecurity.wordpress.com/609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/holisticsecurity.wordpress.com/609/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/holisticsecurity.wordpress.com/609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/holisticsecurity.wordpress.com/609/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/holisticsecurity.wordpress.com/609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/holisticsecurity.wordpress.com/609/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/holisticsecurity.wordpress.com/609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/holisticsecurity.wordpress.com/609/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=609&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://holisticsecurity.wordpress.com/2011/09/09/remote-debugging-liferay-portlets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">rcarhuatocto</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110908_eclipseremotedebugliferay/remotedebuglfry1_debugconfiguration.png" medium="image">
			<media:title type="html">The Debugging Configuration window</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110908_eclipseremotedebugliferay/remotedebuglfry2_debugconfiguration.png" medium="image">
			<media:title type="html">Debug Configuration - set hostname and port of remote server</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110908_eclipseremotedebugliferay/remotedebuglfry3_debugconfiguration.png" medium="image">
			<media:title type="html">Debug Configuration - attach source code and start debugging</media:title>
		</media:content>
	</item>
		<item>
		<title>Web-SSO between a CAS-ified Java webapp and Liferay using CAS</title>
		<link>http://holisticsecurity.wordpress.com/2011/07/29/sso-cas-ified-java-webapp-liferay/</link>
		<comments>http://holisticsecurity.wordpress.com/2011/07/29/sso-cas-ified-java-webapp-liferay/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 23:12:48 +0000</pubDate>
		<dc:creator>Roger Carhuatocto</dc:creator>
				<category><![CDATA[PORTAL]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[SSO]]></category>
		<category><![CDATA[CAS]]></category>
		<category><![CDATA[Liferay]]></category>

		<guid isPermaLink="false">http://holisticsecurity.wordpress.com/?p=589</guid>
		<description><![CDATA[1. Introduction When working a Liferay Portal in Organizations with existing web applications, generally new web applications will need to be integrated in current Authentication and Web-SSO service. This document explains how to create new java web applications knowing that they will use the AuthN service and will Web-SSO with Liferay. Although, this document is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=589&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>1. Introduction</h2>
<p>When working a Liferay Portal in Organizations with existing web applications, generally new web applications will need to be integrated in current Authentication and Web-SSO service.</p>
<p>This document explains how to create new java web applications knowing that they will use the AuthN service and will Web-SSO with Liferay.</p>
<p>Although, this document is for new java web applications, existing web applications (based in java, php,. net, ruby, &#8230;) can also use it as this document explains the most important steps to perform.<br />
This document can be taken as a set of best practices (including source code) when you want to integrate with CAS.</p>
<p><b>Note:</b></p>
<ul>
<li>This document does not say how to do Single-Sign Out or logout, only Single-Sign On or login.
</ul>
<h2>2. Use cases when CAS-ifying web applications</h2>
<h3>Use case #1: Authentication</h3>
<div class="wp-caption alignnone" style="width: 497px"><a href="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_1usecaseauth.png"><img class="  " title="Use case #1: Authentication" src="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_1usecaseauth.png" alt="Use case #1: Authentication" width="487" height="383" /></a><p class="wp-caption-text">Use case #1: Authentication</p></div>
<h3>Use case #2: Web-SSO</h3>
<p>To perform Web-SSO, we will need 2 webapps, the first one is Liferay, and the second one is webappA. Both should be authenticated with CAS-server.<br />
The main difference between authentication and web-sso processes is that CAS shares authenticated session through CAS Service Manager.</p>
<h3>Use case #3: Web Single Sign Off or Single Log Out</h3>
<p>Single Sign Out or Single Log Out means that CAS-server contacts each webapp and notifies them that you have logged out. Then you should invalidate or delete all cookies stored in your web browser.<br />
This protocol is implemented in Java CAS client library only.</p>
<h3>Use case #4: Logout</h3>
<p>To perform a logout means (involves) to close authenticated session in CAS-server side. Afterwards, you will need to make sure that the cookie does not exist in your web browser.</p>
<h2>3. Process of installation and deployment of a CAS-ified webapp</h2>
<p>When you install and deploy any web application in an environment where Web-SSO is enabled, you should to following steps.</p>
<p><div class="wp-caption alignnone" style="width: 517px"><a href="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_2process.png"><img class=" " title="Task to do with/in CAS-ified webapp" src="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_2process.png" alt="Task to do with/in CAS-ified webapp" width="507" height="521" /></a><p class="wp-caption-text">Task to do with/in CAS-ified webapp</p></div><br />
Generally, the steps 1, 2 and 3 have already been made and it is only pending to how to configure CAS-client, CAS-service manager, java webapp, etc.</p>
<h3>CAS service manager</h3>
<p>It is necessary to define an URL for identify the new web application. This URL will be called the “URL Service”:</p>
<ul>
<li> Identify the CAS-ified webapp trying to authenticate in CAS-server. In almost all cases, this will be the URL of the web application.
<li> In a successfully login process is used to redirect web browser to URL specified.
<li> It is used as filter for CAS Services Management in Web-SSO process allowing to do SSO between webapps registered.
</ul>
<div class="wp-caption alignnone" style="width: 521px"><a href="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_3cassrvmngr.png"><img class=" " title="Define URL for CAS-ified webapp" src="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_3cassrvmngr.png" alt="Define URL for CAS-ified webapp" width="511" height="542" /></a><p class="wp-caption-text">Define URL for CAS-ified webapp</p></div>
<p>To replace the URL/IP for yours.</p>
<div class="wp-caption alignnone" style="width: 600px"><a href="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_4cassrvmngr.png"><img class=" " title="Define URL to filter webapp to perform SSO" src="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_4cassrvmngr.png" alt="Define URL to filter webapp to perform SSO" width="590" height="239" /></a><p class="wp-caption-text">Define URL to filter webapp to perform SSO</p></div>
<h3>Develop your Java Webapp and configure Tomcat</h3>
<p>Firstly, you have to design your scenario to do Web-SSO. In this case, We have 3 servers:</p>
<ul>
<li> lfry01 or svdapp85 (IP 192.168.56.101, HTTP port 6060): Liferay Portal
<li> lfry02 (IP 192.168.56.102 or IP 10.16.111.135, HTTP port 8080): Tomcat server hosting new CAS-ified Java Web App
<li> blcr00 or svdapp85 (IP 192.168.56.103, SSL port 6443): Tomcat server hosting CAS server and CAS service manager
</ul>
<p>Our scenario will look like to following diagram.</p>
<div class="wp-caption alignnone" style="width: 533px"><a href="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_5scenarioauthn.png"><img title="Scenario where we will deploy our CAS-ified webapp." src="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_5scenarioauthn.png" alt="Scenario where we will deploy our CAS-ified webapp." width="523" height="394" /></a><p class="wp-caption-text">Scenario where we will deploy our CAS-ified webapp.</p></div>
<p>1.	Install Tomcat, enable SSL (<b>lfry02</b>) using <i>server.xml</i> sample:</p>
<p><pre class="brush: xml; gutter: true; wrap-lines: false;">
&lt;?xml version='1.0' encoding='utf-8'?&gt;
&lt;Server port=&quot;8005&quot; shutdown=&quot;SHUTDOWN&quot;&gt;
  &lt;Listener className=&quot;org.apache.catalina.core.AprLifecycleListener&quot; SSLEngine=&quot;on&quot; /&gt;
  &lt;Listener className=&quot;org.apache.catalina.core.JasperListener&quot; /&gt;
  &lt;Listener className=&quot;org.apache.catalina.core.JreMemoryLeakPreventionListener&quot; /&gt;
  &lt;Listener className=&quot;org.apache.catalina.mbeans.ServerLifecycleListener&quot; /&gt;
  &lt;Listener className=&quot;org.apache.catalina.mbeans.GlobalResourcesLifecycleListener&quot; /&gt;
  &lt;GlobalNamingResources&gt;
    &lt;Resource name=&quot;UserDatabase&quot; auth=&quot;Container&quot;
              type=&quot;org.apache.catalina.UserDatabase&quot;
              description=&quot;User database that can be updated and saved&quot;
              factory=&quot;org.apache.catalina.users.MemoryUserDatabaseFactory&quot;
              pathname=&quot;conf/tomcat-users.xml&quot; /&gt;
  &lt;/GlobalNamingResources&gt;
  &lt;Service name=&quot;Catalina&quot;&gt;
    &lt;Connector port=&quot;8080&quot; protocol=&quot;HTTP/1.1&quot; 
               connectionTimeout=&quot;20000&quot; 
               redirectPort=&quot;8443&quot; /&gt;
	&lt;Connector protocol=&quot;org.apache.coyote.http11.Http11NioProtocol&quot;
	port=&quot;8443&quot; maxHttpHeaderSize=&quot;8192&quot; SSLEnabled=&quot;true&quot;
	maxThreads=&quot;150&quot; 
	enableLookups=&quot;false&quot; disableUploadTimeout=&quot;true&quot;
	acceptCount=&quot;100&quot; scheme=&quot;https&quot; secure=&quot;true&quot;
	clientAuth=&quot;false&quot; sslProtocol=&quot;TLS&quot;
	keystoreFile=&quot;D:\devel\usr-dev\apache-tomcat-6.0.29\webapps\mywebappssotest1.jks&quot;
	keystorePass=&quot;changeit&quot;
	truststoreFile=&quot;D:\devel\usr-dev\jdk_6u21\Java\lib\security\cacerts&quot; /&gt;
	&lt;!-- My CAS URL service = https://localhost:8443/webssotest1/protected/ --&gt;	
    &lt;Connector port=&quot;8009&quot; protocol=&quot;AJP/1.3&quot; redirectPort=&quot;8443&quot; /&gt;
    &lt;Engine name=&quot;Catalina&quot; defaultHost=&quot;localhost&quot;&gt;
      &lt;Realm className=&quot;org.apache.catalina.realm.UserDatabaseRealm&quot;
             resourceName=&quot;UserDatabase&quot;/&gt;
      &lt;Host name=&quot;localhost&quot;  appBase=&quot;webapps&quot;
            unpackWARs=&quot;true&quot; autoDeploy=&quot;true&quot;
            xmlValidation=&quot;false&quot; xmlNamespaceAware=&quot;false&quot;&gt;
      &lt;/Host&gt;
    &lt;/Engine&gt;
  &lt;/Service&gt;
&lt;/Server&gt;
</pre></p>
<p>2.	Generate key pair and export certificate SSL of this Tomcat (<b>lfry02</b>).</p>
<p>3.	Install CAS root certificate (<b>blcr00</b>) as trusted cert into JVM cacert repository of Tomcat (<b>lfry02</b>).</p>
<p>4.	Use this Java webapp (<b><a href="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/webssotest1.war">webssotest1.war</a></b>), deploy this webapp into Java Web Server (<b>lfry02</b>).</p>
<p>5.	Test this web application in HTTP and HTTPS mode.</p>
<h3>Connect your Java Webapp to CAS</h3>
<p><i>We have created a basic sample of java web application based in JSP (<b>webssptest1.war</b>).  We recommend that you try to deploy and configure this web application before trying something more complex.</i></p>
<p>1.	In <b>blcr00</b> use existing standard model of authentication based on usr/pwd where both are equals. If Liferay has already used this model, this webapp should follow too.</p>
<p>2.	In <b>lfry02</b> (tomcat <b>web.xml</b>) configure  CAS server, to use this sample file:</p>
<p><pre class="brush: xml; gutter: true; wrap-lines: false;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;web-app id=&quot;webssotest1&quot; 
         version=&quot;2.4&quot; 
		 xmlns=&quot;http://java.sun.com/xml/ns/j2ee&quot; 
		 xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; 
		 xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot;&gt;		 
	&lt;display-name&gt;webssotest1&lt;/display-name&gt;
	&lt;description&gt;		
		WebSSO sample, how to use CAS Java Client 3.x.
		In this sample exists a public area (/)
		and a private area (/protected/*). 		
	&lt;/description&gt;

	&lt;filter&gt;
		&lt;filter-name&gt;CAS Authentication Filter&lt;/filter-name&gt;
		&lt;filter-class&gt;org.jasig.cas.client.authentication.AuthenticationFilter&lt;/filter-class&gt;
		&lt;init-param&gt;
			&lt;param-name&gt;casServerLoginUrl&lt;/param-name&gt;
			&lt;param-value&gt;https://svdapp85:6443/cas-server-webapp-3.3.5/login&lt;/param-value&gt;
		&lt;/init-param&gt;
		&lt;init-param&gt;
			&lt;param-name&gt;serverName&lt;/param-name&gt;
			&lt;param-value&gt;https://10.16.111.135:8443&lt;/param-value&gt;
		&lt;/init-param&gt;
		&lt;init-param&gt;
			&lt;param-name&gt;renew&lt;/param-name&gt;
			&lt;param-value&gt;false&lt;/param-value&gt;
		&lt;/init-param&gt;
		&lt;init-param&gt;
			&lt;param-name&gt;gateway&lt;/param-name&gt;
			&lt;param-value&gt;false&lt;/param-value&gt;
		&lt;/init-param&gt;
	&lt;/filter&gt;
	&lt;filter&gt;
		&lt;filter-name&gt;CAS Validation Filter&lt;/filter-name&gt;
		&lt;filter-class&gt;org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter&lt;/filter-class&gt;
		&lt;init-param&gt;
			&lt;param-name&gt;casServerUrlPrefix&lt;/param-name&gt;
			&lt;param-value&gt;https://svdapp85:6443/cas-server-webapp-3.3.5/&lt;/param-value&gt;
		&lt;/init-param&gt;
		&lt;init-param&gt;
			&lt;param-name&gt;serverName&lt;/param-name&gt;
			&lt;param-value&gt;https://10.16.111.135:8443&lt;/param-value&gt;
		&lt;/init-param&gt;
		&lt;init-param&gt;
			&lt;param-name&gt;proxyCallbackUrl&lt;/param-name&gt;
			&lt;param-value&gt;https://svdapp85:6443/cas-server-webapp-3.3.5/proxyCallback&lt;/param-value&gt;
		&lt;/init-param&gt;
		&lt;init-param&gt;
			&lt;param-name&gt;proxyReceptorUrl&lt;/param-name&gt;
			&lt;param-value&gt;/mywebappssotest1/proxyCallback&lt;/param-value&gt;
		&lt;/init-param&gt;
	&lt;/filter&gt;
	&lt;filter&gt;
		&lt;filter-name&gt;CAS HttpServletRequest Wrapper Filter&lt;/filter-name&gt;
		&lt;filter-class&gt;org.jasig.cas.client.util.HttpServletRequestWrapperFilter&lt;/filter-class&gt;
	&lt;/filter&gt;	
	&lt;filter&gt;
		&lt;filter-name&gt;CAS Assertion Thread Local Filter&lt;/filter-name&gt;
		&lt;filter-class&gt;org.jasig.cas.client.util.AssertionThreadLocalFilter&lt;/filter-class&gt;
	&lt;/filter&gt;
	&lt;filter-mapping&gt;
		&lt;filter-name&gt;CAS Authentication Filter&lt;/filter-name&gt;
		&lt;url-pattern&gt;/protected/*&lt;/url-pattern&gt;
	&lt;/filter-mapping&gt;
	&lt;filter-mapping&gt;
		&lt;filter-name&gt;CAS Validation Filter&lt;/filter-name&gt;
		&lt;url-pattern&gt;/*&lt;/url-pattern&gt;
	&lt;/filter-mapping&gt;	 
	&lt;filter-mapping&gt;
		&lt;filter-name&gt;CAS HttpServletRequest Wrapper Filter&lt;/filter-name&gt;
		&lt;url-pattern&gt;/*&lt;/url-pattern&gt;
	&lt;/filter-mapping&gt;	
	&lt;filter-mapping&gt;
		&lt;filter-name&gt;CAS Assertion Thread Local Filter&lt;/filter-name&gt;
		&lt;url-pattern&gt;/*&lt;/url-pattern&gt;
	&lt;/filter-mapping&gt;	
	&lt;filter-mapping&gt;
		&lt;filter-name&gt;CAS Validation Filter&lt;/filter-name&gt;
		&lt;url-pattern&gt;/proxyCallback&lt;/url-pattern&gt;	
	&lt;/filter-mapping&gt;
		
	&lt;welcome-file-list&gt;
		&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
	&lt;/welcome-file-list&gt;
&lt;/web-app&gt;
</pre></p>
<p>3.	Make sure that exists CAS-client java libraries into <b>WEB-INF/lib</b> directory, as follow:</p>
<div class="wp-caption alignnone" style="width: 341px"><a href="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_6caslibs.png"><img title="CAS-client java libraries to be included in webssotest1.war" src="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_6caslibs.png" alt="CAS-client java libraries to be included in webssotest1.war" width="331" height="107" /></a><p class="wp-caption-text">CAS-client java libraries to be included in webssotest1.war</p></div>
<p>4.	Test login and SSO with liferay.</p>
<p>Login to Liferay (lfry01), go to following URL, for example: http://svdapp85:6060/en/group/intix/home<br />
You will be redirected to CAS login form, to entry an user/password valid in CAS-server. </p>
<div class="wp-caption alignnone" style="width: 572px"><a href="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_7caslogin.png"><img class=" " title="First login (CAS) when trying log into Liferay" src="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_7caslogin.png" alt="First login (CAS) when trying log into Liferay" width="562" height="299" /></a><p class="wp-caption-text">First login (CAS) when trying log into Liferay</p></div>
<p>Now, from same opened browser, switch to the CAS-ified webapp. Open following protected URL: http://10.16.111.135:8080/webssotest1/protected/<br />
If all is OK, then you can see URL without user/pwd prompted.</p>
<div class="wp-caption alignnone" style="width: 501px"><a href="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_8ssook.png"><img title="Successfully Web-SSO in CAS-ified webapp (webssotest1.war)" src="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_8ssook.png" alt="Successfully Web-SSO in CAS-ified webapp (webssotest1.war)" width="491" height="378" /></a><p class="wp-caption-text">Successfully Web-SSO in CAS-ified webapp (webssotest1.war)</p></div>
<p>The same applies if you do log into webssotest1.war first and then go to liferay.<br />
The CAS login form is the first page displayed when trying to login from any application. This form is shared by any web application you want to do Web-SSO.</p>
<p>END.</p>
<p><b>Reference:</b></p>
<ul>
<li><a href="https://wiki.jasig.org/display/CASC/JA-SIG+Java+Client+Simple+WebApp+Sample">JA-SIG Java Client Simple WebApp Sample</a>
<li>Web-SSO between Liferay and Alfresco with CAS and Penrose <a href="http://holisticsecurity.wordpress.com/2011/01/15/sso-liferay-alfresco-cas-penrose-part-12/">part 1</a> and <a href="http://holisticsecurity.wordpress.com/2011/02/19/web-sso-between-liferay-and-alfresco-with-cas-and-penrose-part-22/">part 2</a>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/holisticsecurity.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/holisticsecurity.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/holisticsecurity.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/holisticsecurity.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/holisticsecurity.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/holisticsecurity.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/holisticsecurity.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/holisticsecurity.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/holisticsecurity.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/holisticsecurity.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/holisticsecurity.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/holisticsecurity.wordpress.com/589/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/holisticsecurity.wordpress.com/589/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/holisticsecurity.wordpress.com/589/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=589&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://holisticsecurity.wordpress.com/2011/07/29/sso-cas-ified-java-webapp-liferay/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">rcarhuatocto</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_1usecaseauth.png" medium="image">
			<media:title type="html">Use case #1: Authentication</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_2process.png" medium="image">
			<media:title type="html">Task to do with/in CAS-ified webapp</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_3cassrvmngr.png" medium="image">
			<media:title type="html">Define URL for CAS-ified webapp</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_4cassrvmngr.png" medium="image">
			<media:title type="html">Define URL to filter webapp to perform SSO</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_5scenarioauthn.png" medium="image">
			<media:title type="html">Scenario where we will deploy our CAS-ified webapp.</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_6caslibs.png" medium="image">
			<media:title type="html">CAS-client java libraries to be included in webssotest1.war</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_7caslogin.png" medium="image">
			<media:title type="html">First login (CAS) when trying log into Liferay</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110728_sso_liferay_cas_ified_javawebapps/sso-liferay-casified-webapp_8ssook.png" medium="image">
			<media:title type="html">Successfully Web-SSO in CAS-ified webapp (webssotest1.war)</media:title>
		</media:content>
	</item>
		<item>
		<title>jBPM, Bonita, Intalio, ProcessMaker, Activiti. Qué BPM Suite uso?</title>
		<link>http://holisticsecurity.wordpress.com/2011/07/21/jbpm-bonita-intalio-processmaker-activiti-que-bpm-suite-uso/</link>
		<comments>http://holisticsecurity.wordpress.com/2011/07/21/jbpm-bonita-intalio-processmaker-activiti-que-bpm-suite-uso/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 00:09:05 +0000</pubDate>
		<dc:creator>Roger Carhuatocto</dc:creator>
				<category><![CDATA[BPM]]></category>
		<category><![CDATA[FOSS]]></category>
		<category><![CDATA[activiti]]></category>
		<category><![CDATA[Bonita]]></category>
		<category><![CDATA[Intalio]]></category>
		<category><![CDATA[jbpm]]></category>
		<category><![CDATA[processmaker]]></category>

		<guid isPermaLink="false">http://holisticsecurity.wordpress.com/?p=574</guid>
		<description><![CDATA[Ultimamente, en los cursos que suelo impartir o durante la etapa de consultoría con algún cliente me preguntan ¿Qué BPM me recomendarías? o, he comprado un CMS y viene con un Workflow, podría crear un Sistema de Gestión de Expedientes? Y mi respuesta siempre es, sabes qué es un BPM?, sabes lo que implicaría construir [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=574&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ultimamente, en los cursos que suelo impartir o durante la etapa de consultoría con algún cliente me preguntan ¿Qué BPM me recomendarías? o, he comprado un CMS y viene con un Workflow, podría crear un Sistema de Gestión de Expedientes?<br />
Y mi respuesta siempre es, sabes qué es un BPM?, sabes lo que implicaría construir aplicaciones siguiendo BPM en tu organización?. Pues la respuesta es muchas veces &#8220;no&#8221;. En esta situación, siempre lo mejor es aclarar los conceptos e<br />
iniciar algún proceso de evaluación de tecnologías, casos de éxitos, costes económicos y las consecuencias.</p>
<div class="wp-caption alignnone" style="width: 399px"><a href="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_0logos.png"><img class=" " title="jBPM, Bonita, Intalio, ProcessMaker and Activiti" src="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_0logos.png" alt="jBPM, Bonita, Intalio, ProcessMaker and Activiti" width="389" height="169" /></a><p class="wp-caption-text">jBPM, Bonita, Intalio, ProcessMaker and Activiti</p></div>
<p>Este post es el primero de una serie de posts relacionados con BPM Free/Open Source. En este primero haremos una presentación rápida de las alternativas tecnológicas de los BPMs free/open source de mayor actividad y hacernos una idea<br />
de cuál o cuáles son los más adecuado para cada escenario que nos encontremos en nuestras Organizaciones.<br />
En los siguientes posts entraremos en detalle en cada uno de las herramientas BPM, inclusive haciendo alguna prueba de concepto con cada uno de ellos.</p>
<p>Antes de iniciar con la revisión, describiré qué elementos o componentes importantes existen en una Suite BPM y unas definiciones.</p>
<h2>1. Definiciones y conceptos</h2>
<p><strong>BPM: Business Process Management.</strong></p>
<p>Metodología que permite analizar el comportamiento de la organización a través de los procesos.<br />
De Wikipedia (http://es.wikipedia.org/wiki/Gesti%C3%B3n_de_procesos_de_negocio)<br />
&#8220;Se llama Gestión de procesos de negocio (Business Process Management o BPM en inglés) a la metodología corporativa cuyo objetivo es mejorar la eficiencia a través de la gestión de los procesos de negocio, que se deben modelar, organizar, documentar y optimizar de forma continua. Como su nombre sugiere, BPM se enfoca en la administración de los procesos dentro de una organización.&#8221;</p>
<p><strong>BPMS: Buiness Process Management System or Suite.</strong></p>
<p>Un conjunto de herramientas o componentes que busca automatizar la construcción de aplicaciones siguiendo la metodología BPM.</p>
<h2>2. Componentes en una Suite BPM</h2>
<p><strong>1. Workflow:</strong><br />
Es el motor que ejecuta/orquesta los procesos de negocio definidos, lo hace siguiendo un lenguaje que el motor entiende, comunmente es BPEL.</p>
<p><strong>2. Process Designer:</strong><br />
Es la herramienta que permite definir los procesos de negocio usando una simbología o lenguaje natural propio de BPM.<br />
Este lenguaje puede ser BPMN o XPDL, algunos también suelen considerar BPEL.</p>
<p><strong>3. Form Creator: </strong><br />
La herramienta que me permite definir los formularios de interacción humana, es decir, formularios donde el usuario/persona puede iniciar, rechazar, aprobar, etc, es decir, interactuar con una instancia de un proceso de negocio.</p>
<p><strong>4. Business Activity Monitoring (BAM): </strong><br />
De la Wikipedia (http://en.wikipedia.org/wiki/Business_activity_monitoring):<br />
&#8220;&#8230; is software that aids in monitoring of business activities, as those activities are implemented in computer systems.&#8221;</p>
<p>Los elementos de un BAM son: KPI&#8217;s (indicadores claves de rendimiento), Dashboard (consola que permite monitorizar en tiempo real el valor actual de los KPI&#8217;s para tomar decisiones).<br />
En mi opinión, el concepto de BI (Business Intelligence) engloba a BAM. Mientras que BAM aplica a las Organizaciones, BI es una disciplina y conjunto de herramientas que aplica a diferentes escenarios.</p>
<p><strong>5. Business Rules Engine (BRE): </strong><br />
De la Wikipedia (http://en.wikipedia.org/wiki/Business_rules_engine):<br />
&#8220;&#8230; is a software system that executes one or more business rules in a runtime production environment. The rules might come from legal regulation (&#8220;An employee can be fired for any reason or no reason but not for an illegal reason&#8221;), company policy (&#8220;All customers that spend more than $100 at one time will receive a 10% discount&#8221;), or other sources. A business rule system enables these company policies and other operational decisions to be defined, tested, executed and maintained separately from application code.&#8221;</p>
<p><strong>6. Connectors: </strong><br />
- Para ECM<br />
- Para LDAP<br />
- Para ESB, etc.</p>
<p>Son aquellos componentes que hacen que los BPMS tengan más sentido dentro de la Organización, por ejemplo, un sistema de gestión de expedientes donde su motor sea un workflow no tiene sentido sin un repositorio documental para alojar los documentos entrantes y salientes.</p>
<h2>3. BPMS/Workflows Free/Open Source</h2>
<p>Existen muchos Workflows engine, BPMs free/open source y comerciales, nos centraremos únicamente en los proyectos FOSS y que de alguna forma están formados por los componentes antes indicados.</p>
<p>Pero por si os de interés, la lista de BPMS/Workflows FOSS actualizada (basada en &#8220;Open Source Workflow Engines in Java&#8221; &#8211; http://java-source.net/open-source/workflow-engines) al 2009 es esta:</p>
<div class="wp-caption alignnone" style="width: 415px"><a href="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/www.INTIX.info-LIST-BPMS-FOSS-2009.png"><img class="  " title="BPMS FOSS list - 2009" src="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/www.INTIX.info-LIST-BPMS-FOSS-2009.png" alt="BPMS FOSS list - 2009" width="405" height="262" /></a><p class="wp-caption-text">BPMS FOSS list - 2009</p></div>
<p><a href="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/www.INTIX.info-LIST-BPMS-FOSS-2009.xls">Download (XLS) Lista aquí</a>.</p>
<h2>4. BPMS Free/Open Source</h2>
<p>Iniciaré una revisión con los BPMS siguientes, ya que en mi opinión, estos son los proyectos más activos en este momento:</p>
<ul>
<li>1. jBPMEs el BPMS más veterano, Red Hat está detrás de esta iniciativa y en el 2010 hubo un cambio en el equipo de proyecto, esto dio paso al uso de Drools como BPM engine dentro de la versión 5.<br />
También dió paso al nacimiento de otro proyecto BPMS llamado Activiti.<br />
Aunque es un proyecto relativamente de un uso muy intensivo, la versión 5, es muy joven.</li>
<li>2. BonitaBPMS que sin mucho aspavientos, resuelve con creces los objetivos de cualquier BPMS de esta época: Social, Colaboración y Zero Code.</li>
<li>3. IntalioOtro proyecto veterano y equiparable a los BPMS comerciales, aunque la fuerza de su comunidad es muy baja.</li>
<li>4. ProcessMakerEs BPMS muy versátil y eficaz. Hace lo que la gran mayoría de las PYMES necesitan. Es el único en esta lista construída en PHP.</li>
<li>5. ActivitiEs el proyecto más joven de los evaluados, a nivel técnico el proyecto es muy prometedor aunque le falta posicionarse en el sector de los BPMS.</li>
</ul>
<p>Para tener una noción de qué BPMS es la más adecuada para nuestra organización, es necesario revisar y valorar cuantitativamente cada una de ellas.<br />
La valoración cuantitativa la hago con una escala de 0 (no tiene o no existe) a 5 (cumple al 100%) para la existencia de ciertas características y funcionalidades de la tabla siguiente:</p>
<div class="wp-caption alignnone" style="width: 360px"><a href="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_1featureslist.png"><img title="List of BPMS features to evaluate" src="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_1featureslist.png" alt="List of BPMS features to evaluate" width="350" height="406" /></a><p class="wp-caption-text">List of BPMS features to evaluate</p></div>
<p>Entonces, la valoración quedaría así:</p>
<div class="wp-caption alignnone" style="width: 438px"><a href="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_2eval-jbpm-rev2.png"><img class="      " title="Evaluation of jBPM" src="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_2eval-jbpm-rev2.png" alt="Evaluation of jBPM" width="428" height="519" /></a><p class="wp-caption-text">Evaluation of jBPM</p></div>
<div class="wp-caption alignnone" style="width: 436px"><a href="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_3eval-bonita.png"><img class=" " title="Evaluation of Bonita Open Solution" src="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_3eval-bonita.png" alt="Evaluation of Bonita Open Solution" width="426" height="484" /></a><p class="wp-caption-text">Evaluation of Bonita Open Solution</p></div>
<div class="wp-caption alignnone" style="width: 437px"><a href="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_4eval-intalio.png"><img class=" " title="Evaluation of Intalio|BPMS Community Edition" src="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_4eval-intalio.png" alt="Evaluation of Intalio|BPMS Community Edition" width="427" height="568" /></a><p class="wp-caption-text">Evaluation of Intalio|BPMS Community Edition</p></div>
<div class="wp-caption alignnone" style="width: 436px"><a href="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_5eval-processmaker.png"><img class=" " title="Evaluation of ProcessMaker" src="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_5eval-processmaker.png" alt="Evaluation of ProcessMaker" width="426" height="431" /></a><p class="wp-caption-text">Evaluation of ProcessMaker</p></div>
<div class="wp-caption alignnone" style="width: 441px"><a href="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_6eval-activiti.png"><img class=" " title="Evaluation of Activiti" src="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_6eval-activiti.png" alt="Evaluation of Activiti" width="431" height="463" /></a><p class="wp-caption-text">Evaluation of Activiti</p></div>
<h2>Conclusiones</h2>
<p>Después de valorar cuantitativamente cada una de los BPMS, concluímos:</p>
<ol>
<li>Si el día de mañana tenemos que iniciar un proyecto siguiendo BPM que requiera el uso de los estándares, que sea posible integrarlo a las diferentes aplicaciones legadas y que el volumen de usuarios es muy alto, entonces Bonita Open Solution es nuestra alternativa.<br />
Partimos también que si iniciamos un proyecto nuevo dentro de la organización, es necesario contar con información técnica actualizada y abundantes ejemplos que puedan ayudar a cómo se construir rápidamente aplicaciones BPM.</li>
<li>Si nuestra organización es una PYME, Bonita Open Solution y el resto de BPMS quedan algo grande excepto ProcessMaker. Al usarlo no se pierde nada valioso, todas las funcionalidades que BPMS comerciales y las otras analizadas, ProcessMaker las tiene.<br />
Si el volumen de usuarios se ve incrementado, no hay problema, ProcessMaker puede ser escalado sin ningún problema o si deseas puedes contratar la versión SaaS alojado en Amazon EC2.</li>
<li>Para usar jBPM debemos esperar que la fuerza de su comunidad crezca, abundante y exacta información técnica exista, aunque si las organizaciones valoran la buena integración con Drools, entonces jBPM es la mejor alternativa.</li>
<li>Activiti, al igual que jBPM, aunque inicien con versiones superiores o iguales a 5.1, los pocos o ninguno casos de éxitos, la poca documentación técnica del producto se traduce en poca confianza en el producto, pues Activiti no es una buena alternativa.<br />
Técnicamente, Activiti es de lo mejor, al ser parte del proyecto Alfresco ECM, es una cuestión de tiempo para que se convierta en el BPM de referencia.</li>
<li>Intalio comparado a los 4 BPMS restantes es otra buena alternativa, aunque la incorporación de funcionalidades muy importantes en la versión Enteprise Edition disuade su uso.<br />
Por otro lado, al igual que la gran mayoría de productos con licenciamiento dual (Open Source y Comercial) no tiene documentación exacta, quedando únicamente los foros públicos como medio para solventar dudas.</li>
</ol>
<div class="wp-caption alignnone" style="width: 359px"><a href="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_7resultado_rev2.png"><img class="   " title="jBPM vs. Bonita vs. Intalio vs. ProcessMaker vs. Activiti" src="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_7resultado_rev2.png" alt="jBPM vs. Bonita vs. Intalio vs. ProcessMaker vs. Activiti" width="349" height="331" /></a><p class="wp-caption-text">jBPM vs. Bonita vs. Intalio vs. ProcessMaker vs. Activiti</p></div>
<h2>Observaciones</h2>
<p>Este artículo expresa mi personal opinión acerca de estos proyectos resultado de haber pasado por varios procesos de revisión y conocimiento de cada BPMS antes de iniciar un proyecto de desarrollo.</p>
<p>Entender que esta revisión pretende ser una forma rápida para identificar la solución BPMS que se ajusta a mis necesidades.</p>
<p>No pretender ser una referencia absoluta, ni nunca lo será.</p>
<p>El resultado de la evaluación está relacionado a mi conocimiento del producto, que es fruto de haber usado dichas suites en proyectos reales y pruebas de concepto.</p>
<p>En los siguientes artículos entraré en mayor detalle en cada uno de ellos, comparando características concretas como por ejemplo, el nivel de implementación de BPMN2 o la tecnología usada para generación automática de formularios, etc.</p>
<p>Entonces, espero que este os haya servido de algo.</p>
<p>End.</p>
<p><strong>Referencias:</strong></p>
<ul>
<li>Open Source Power on BPM &#8211; A Comparison of JBoss jBPM and Intalio BPMS (By Pin Nie, Riku Seppälä, Måns Hafrén) &#8211; <a href="http://jannekorhonen.fi/project_report_final_BPMS.pdf">http://jannekorhonen.fi/project_report_final_BPMS.pdf</a></li>
<li>Gestión de Expedientes con Alfresco ECM &#8211; <a href="http://holisticsecurity.wordpress.com/2010/10/08/gestion-de-expedientes-con-alfresco-ecm">http://holisticsecurity.wordpress.com/2010/10/08/gestion-de-expedientes-con-alfresco-ecm</a></li>
<li>Open Source Workflow Engines in Java &#8211; <a href="http://java-source.net/open-source/workflow-engines">http://java-source.net/open-source/workflow-engines</a></li>
<li>jBPM5 vs Activiti5? dumb question? &#8211; <a href="http://salaboy.wordpress.com/2011/01/19/jbpm5-vs-activiti5-dumb-question">http://salaboy.wordpress.com/2011/01/19/jbpm5-vs-activiti5-dumb-question</a></li>
<li>Activiti or jBPM, which should I use in my next project? &#8211; <a href="http://www.activiti.org/faq.html#ActivitiOrJbpm">http://www.activiti.org/faq.html#ActivitiOrJbpm</a></li>
<li>jBPM Form Builder follow-up &#8211; <a href="http://blog.athico.com/2011/07/jbpm-form-builder-follow-up.html">http://blog.athico.com/2011/07/jbpm-form-builder-follow-up.html</a></li>
<li>Business Process Simulation versus Emulation &#8211; <a href="http://onbpms.com/2007/07/18/business-process-simulation-versus-emulation">http://onbpms.com/2007/07/18/business-process-simulation-versus-emulation</a></li>
<li>Process Simulation &#8211; <a href="http://community.intalio.com/bpms-screencasts/process-simulation.html">http://community.intalio.com/bpms-screencasts/process-simulation.html</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/holisticsecurity.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/holisticsecurity.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/holisticsecurity.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/holisticsecurity.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/holisticsecurity.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/holisticsecurity.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/holisticsecurity.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/holisticsecurity.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/holisticsecurity.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/holisticsecurity.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/holisticsecurity.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/holisticsecurity.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/holisticsecurity.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/holisticsecurity.wordpress.com/574/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=574&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://holisticsecurity.wordpress.com/2011/07/21/jbpm-bonita-intalio-processmaker-activiti-que-bpm-suite-uso/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">rcarhuatocto</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_0logos.png" medium="image">
			<media:title type="html">jBPM, Bonita, Intalio, ProcessMaker and Activiti</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/www.INTIX.info-LIST-BPMS-FOSS-2009.png" medium="image">
			<media:title type="html">BPMS FOSS list - 2009</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_1featureslist.png" medium="image">
			<media:title type="html">List of BPMS features to evaluate</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_2eval-jbpm-rev2.png" medium="image">
			<media:title type="html">Evaluation of jBPM</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_3eval-bonita.png" medium="image">
			<media:title type="html">Evaluation of Bonita Open Solution</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_4eval-intalio.png" medium="image">
			<media:title type="html">Evaluation of Intalio&#124;BPMS Community Edition</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_5eval-processmaker.png" medium="image">
			<media:title type="html">Evaluation of ProcessMaker</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_6eval-activiti.png" medium="image">
			<media:title type="html">Evaluation of Activiti</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110708_bpmfoss/bpmsfoss_7resultado_rev2.png" medium="image">
			<media:title type="html">jBPM vs. Bonita vs. Intalio vs. ProcessMaker vs. Activiti</media:title>
		</media:content>
	</item>
		<item>
		<title>PHP debugging with XDebug and XAMPP on Win32</title>
		<link>http://holisticsecurity.wordpress.com/2011/07/04/php-xdebug-xampp-win32/</link>
		<comments>http://holisticsecurity.wordpress.com/2011/07/04/php-xdebug-xampp-win32/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 17:16:54 +0000</pubDate>
		<dc:creator>Roger Carhuatocto</dc:creator>
				<category><![CDATA[FOSS]]></category>
		<category><![CDATA[TESTING]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xampp]]></category>
		<category><![CDATA[xdebug]]></category>

		<guid isPermaLink="false">http://holisticsecurity.wordpress.com/?p=561</guid>
		<description><![CDATA[PHP is a powerful language for building from little web applications to bigger applications such as Facebook, WordPress, Drupal, Joomla, Meneame, Elgg, &#8230; and several times you need to solve many bugs and manage your source code, then in this case you will need powerful tools to trace errors. A text editor is not enough [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=561&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>PHP is a powerful language for building from little web applications to bigger applications such as Facebook, WordPress, Drupal, Joomla, Meneame, Elgg, &#8230;<br />
and several times you need to solve many bugs and manage your source code, then in this case you will need powerful tools to trace errors.<br />
A text editor is not enough for this, Eclipse IDE and PHP Development Tools are a good option.</p>
<p>In this post, you learn how to set your debug environment with XDebug, that seems to be one of the more popular ones and Eclipse PDT already has support for it.</p>
<h2>Requisites:</h2>
<p>1. Download and install/unzip <a href="http://www.apachefriends.org/en/xampp-windows.html">XAMPP</a> for win32 version 1.7.4-VC6.</p>
<p>This bundle comes with severals tools:</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
###### ApacheFriends XAMPP (Basispaket) version 1.7.4 ######

  + Apache 2.2.17
  + MySQL 5.5.8 (Community Server)
  + PHP 5.3.5 (VC6 X86 32bit) + PEAR
  + XAMPP Control Version 2.5 from www.nat32.com
  + XAMPP Security
  + SQLite 2.8.15
  + OpenSSL 0.9.8o
  + phpMyAdmin 3.3.9
  + ADOdb 5.11
  + Mercury Mail Transport System v4.62
  + FileZilla FTP Server 0.9.37
  + Webalizer 2.01-10
  + Zend Optimizer 3.3.0
  + Perl 5.10.1
  + Mod_perl 2.0.4
  + Tomcat 7.0.3
 </pre></p>
<p><a href="http://xdebug.org">XDebug</a> comes pre-installed in this bundle.</p>
<p>2. Download Eclipse IDE (Helios SR2).</p>
<p>3. Install from Eclipse Marketplace the PHP Development Tools (PDT) plugin (version 3.0.0.x).</p>
<h2>Apache and PHP debugging configuration</h2>
<p>1. Configure XDebug in XAMPP bundle.<br />
Edit <strong>php.ini</strong> and enable XDebug and remote debugging, make sure to uncomment the bellow lines and put to &#8220;1&#8243; the parameters &#8220;<strong>xdebug.remote_autostart</strong>&#8221; and &#8220;<strong>xdebug.remote_enable</strong>&#8220;.</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
[eAccelerator]
;zend_extension = &quot;C:\1bpms-demo\xampp-win32-1.7.4-VC6\php\ext\php_eaccelerator.dll&quot;
...

[XDebug]
zend_extension = &quot;C:\1bpms-demo\xampp-win32-1.7.4-VC6\php\ext\php_xdebug.dll&quot;
xdebug.auto_trace = 0
xdebug.collect_includes = 1
xdebug.collect_params = 0
xdebug.collect_return = 0
xdebug.collect_vars = &quot;Off&quot;
xdebug.default_enable = &quot;On&quot;
xdebug.dump.COOKIE = &quot;&quot;
xdebug.dump.FILES = &quot;&quot;
xdebug.dump.GET = &quot;&quot;
xdebug.dump.POST = &quot;&quot;
xdebug.dump.REQUEST = &quot;&quot;
xdebug.dump.SERVER = &quot;&quot;
xdebug.dump.SESSION = &quot;&quot;
xdebug.dump_globals = 1
xdebug.dump_once = 1
xdebug.dump_undefined = 0
xdebug.extended_info = 1
xdebug.file_link_format = &quot;&quot;
xdebug.idekey = &quot;&quot;
xdebug.manual_url = &quot;http://www.php.net&quot;
xdebug.max_nesting_level = 100
xdebug.overload_var_dump = 1
xdebug.profiler_append = 0
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = &quot;C:\1bpms-demo\xampp-win32-1.7.4-VC6\tmp&quot;
xdebug.profiler_output_name = &quot;xdebug_profile.%R::%u&quot;

; xdebug.remote_autostart
; Type: boolean, Default value: 0
; Normally you need to use a specific HTTP GET/POST variable to start remote debugging (see Remote
; Debugging). When this setting is set to 'On' Xdebug will always attempt to start a remote debugging
; session and try to connect to a client, even if the GET/POST/COOKIE variable was not present.
xdebug.remote_autostart = 1

; xdebug.remote_enable
; Type: boolean, Default value: 0
; This switch controls whether Xdebug should try to contact a debug client which is listening on the
; host and port as set with the settings xdebug.remote_host and xdebug.remote_port. If a connection
; can not be established the script will just continue as if this setting was Off.
xdebug.remote_enable = 1

xdebug.remote_handler = &quot;dbgp&quot;
xdebug.remote_host = &quot;localhost&quot;
xdebug.remote_log = &quot;none&quot;
xdebug.remote_mode = &quot;req&quot;
xdebug.remote_port = 9000
xdebug.show_exception_trace = 0
xdebug.show_local_vars = 0
xdebug.show_mem_delta = 0
xdebug.trace_format = 0
xdebug.trace_options = 0
xdebug.trace_output_dir = &quot;C:\1bpms-demo\xampp-win32-1.7.4-VC6\tmp&quot;
xdebug.trace_output_name = &quot;trace.%c&quot;
xdebug.var_display_max_children = 128
xdebug.var_display_max_data = 512
xdebug.var_display_max_depth = 3
...
</pre></p>
<p>Make sure that XDebug dynamic extension is not loaded in <strong>php.ini</strong>.</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
;extension = php_xdebug.dll
</pre></p>
<p>Re-start apache and verify that XDebug is loaded.</p>
<div class="wp-caption alignnone" style="width: 449px"><img class=" " title="XDebug library loaded in Apache HTTPD" src="http://dl.dropbox.com/u/2961879/blog20110704_phpdebugging/phpdebugging-1-xdebugloaded.png" alt="XDebug library loaded in Apache HTTPD" width="439" height="173" /><p class="wp-caption-text">XDebug library loaded in Apache HTTPD</p></div>
<h2>Eclipse &amp; PDT configuration</h2>
<p>1. In Apache HTTP Server add a root folder as your base web for PHP projects.<br />
For example, my base folder is configured in httpd.conf file and looks like this:</p>
<p><pre class="brush: xml; gutter: true; wrap-lines: false;">
Alias /myphpprojects &quot;C:/2workspace&quot;
&lt;Directory &quot;C:/2workspace&quot;&gt;
    AllowOverride none
    Options None
    Order allow,deny
    Allow from all
&lt;/Directory&gt;
</pre></p>
<p>2. In Eclipse, create a test php project in &#8220;<strong>C:/2workspace</strong>&#8221; and select PHP 5.3 runtime when creating. For example, create &#8220;<strong>testdebug01</strong>&#8221; php project.</p>
<div class="wp-caption alignnone" style="width: 332px"><img class=" " title="Creating PHP Project from Eclipse IDE and PDT" src="http://dl.dropbox.com/u/2961879/blog20110704_phpdebugging/phpdebugging-2-eclipsecreateproj.png" alt="Creating PHP Project from Eclipse IDE and PDT" width="322" height="377" /><p class="wp-caption-text">Creating PHP Project from Eclipse IDE and PDT</p></div>
<p>3. Create a <strong>helloworld.php</strong> as you test PHP script in above project, the script looks like this:</p>
<p><pre class="brush: xml; gutter: true; wrap-lines: false;">
&lt;?php
$msg = &quot;crazy world&quot;;
echo &quot;&lt;h1&gt;Test PHP Debugging #1 &lt;/h1&gt;&quot;;
echo &quot;&lt;hr&gt;&quot;;
echo &quot;&lt;ol&gt;&quot;;
for ($k = 0; $k &lt; 10; $k++) {
	print(&quot;&lt;li&gt;Hello, $msg ($k)! &lt;br&gt;&quot;);
}
echo &quot;&lt;/ol&gt;&quot;;
?&gt;
</pre></p>
<p>4. In Eclipse, go to <strong>Windows &gt; Preferences &gt; PHP &gt; Debug</strong> and make sure XDebug is selected as default PHP Debugger.</p>
<div class="wp-caption alignnone" style="width: 368px"><img class=" " title="Configuring PHP Debug in Eclipse IDE" src="http://dl.dropbox.com/u/2961879/blog20110704_phpdebugging/phpdebugging-3-eclipsephpdebug.png" alt="Configuring PHP Debug in Eclipse IDE" width="358" height="304" /><p class="wp-caption-text">Configuring PHP Debug in Eclipse IDE</p></div>
<p>5. Now, you are ready for launching debugging from Eclipse. Firstly, put a breakpoint in <strong>helloworld.php</strong> and then go to left side on Navigator, right click on <strong>helloworld.php</strong> file and select &#8220;<strong>Debug Configurations</strong>&#8220;.<br />
In the next window configure following:</p>
<ul>
<li><strong> Name</strong>: Your debug profile configuration, in this example is &#8220;Test debug 01&#8243;.</li>
<li><strong> Server Debugger</strong>: XDebug</li>
<li><strong> File</strong>: Your php script that trigger debug environment. This file has to a breakpoint. In this example is &#8220;/testdebug01/helloworld.php&#8221;.</li>
<li><strong> Auto Generate</strong>: Unchecked if you want change URL of your php application. In this example is &#8220;/myphpprojects/testdebug01/helloworld.php&#8221;.</li>
</ul>
<div class="wp-caption alignnone" style="width: 491px"><img class=" " title="Launching debug from PHP Project in Eclipse IDE" src="http://dl.dropbox.com/u/2961879/blog20110704_phpdebugging/phpdebugging-4-debugconf.png" alt="Launching debug from PHP Project in Eclipse IDE" width="481" height="373" /><p class="wp-caption-text">Launching debug from PHP Project in Eclipse IDE</p></div>
<p>Click in &#8220;<strong>Run</strong>&#8221; button and if all is OK, Eclipse switchs to Debug perspective where you can debug your PHP application.</p>
<div class="wp-caption alignnone" style="width: 459px"><img class=" " title="Debugging PHP Project from Eclipse IDE" src="http://dl.dropbox.com/u/2961879/blog20110704_phpdebugging/phpdebugging-5-debugging.png" alt="Debugging PHP Project from Eclipse IDE" width="449" height="258" /><p class="wp-caption-text">Debugging PHP Project from Eclipse IDE</p></div>
<h2>Conclusions:</h2>
<ul>
<li>With XDebug you can debug remotely from Eclipse and PDT. In this case you have to change localhost for you server-name in <strong>php.ini</strong> file and <strong>Eclipse &gt; Preferences &gt; PHP &gt; PHP Servers</strong>.</li>
<li>If you set &#8220;<strong>/</strong>&#8221; as web base path instead of &#8220;<strong>/myphpprojects</strong>&#8221; you could avoid to configure special URL in Auto Generate box (Debug Configurations window). Always you URL will be &#8220;<strong>http://localhost/your-php-project-name</strong>&#8220;.</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/holisticsecurity.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/holisticsecurity.wordpress.com/561/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/holisticsecurity.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/holisticsecurity.wordpress.com/561/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/holisticsecurity.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/holisticsecurity.wordpress.com/561/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/holisticsecurity.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/holisticsecurity.wordpress.com/561/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/holisticsecurity.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/holisticsecurity.wordpress.com/561/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/holisticsecurity.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/holisticsecurity.wordpress.com/561/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/holisticsecurity.wordpress.com/561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/holisticsecurity.wordpress.com/561/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=561&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://holisticsecurity.wordpress.com/2011/07/04/php-xdebug-xampp-win32/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">rcarhuatocto</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110704_phpdebugging/phpdebugging-1-xdebugloaded.png" medium="image">
			<media:title type="html">XDebug library loaded in Apache HTTPD</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110704_phpdebugging/phpdebugging-2-eclipsecreateproj.png" medium="image">
			<media:title type="html">Creating PHP Project from Eclipse IDE and PDT</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110704_phpdebugging/phpdebugging-3-eclipsephpdebug.png" medium="image">
			<media:title type="html">Configuring PHP Debug in Eclipse IDE</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110704_phpdebugging/phpdebugging-4-debugconf.png" medium="image">
			<media:title type="html">Launching debug from PHP Project in Eclipse IDE</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110704_phpdebugging/phpdebugging-5-debugging.png" medium="image">
			<media:title type="html">Debugging PHP Project from Eclipse IDE</media:title>
		</media:content>
	</item>
		<item>
		<title>Content Modeling when developing application in Alfresco ECM</title>
		<link>http://holisticsecurity.wordpress.com/2011/06/22/content-modeling-when-developing-application-alfresco-ecm/</link>
		<comments>http://holisticsecurity.wordpress.com/2011/06/22/content-modeling-when-developing-application-alfresco-ecm/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 00:24:23 +0000</pubDate>
		<dc:creator>Roger Carhuatocto</dc:creator>
				<category><![CDATA[ECM]]></category>
		<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[model]]></category>

		<guid isPermaLink="false">http://holisticsecurity.wordpress.com/?p=553</guid>
		<description><![CDATA[When developing applications, you start with a stage of analysis-design that allows modeling the structure of the database that you application will use. So why not do something similar when developing applications on Alfresco ECM?. What makes Alfresco ECM a powerful tool is the ability to do content modeling. If you do not that, would [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=553&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>When developing applications, you start with a stage of analysis-design that allows modeling the structure of the database that you application will use.<br />
So why not do something similar when developing applications on Alfresco ECM?.</p>
<p>What makes Alfresco ECM a powerful tool is the ability to do content modeling. If you do not that, would not make much sense to use Alfresco ECM and instead should use any file-system such as WebDAV, FTP, NFS, etc.</p>
<p>The content model in Alfresco ECM allows us to identify types of documents, properties and their relationships existing in our organization/business.</p>
<p>This post will explain how to modeling the content that our type of organization/business requires and also explains how to deploy it on an installation of Alfresco ECM.</p>
<h2>I. XML definition files </h2>
<p>Create the following files:</p>
<p><b>1. intix-model-context.xml</b></p>
<p>This is Spring file configuration for the new content model.</p>
<p><pre class="brush: xml; gutter: true; wrap-lines: false;">
&lt;?xml version='1.0' encoding='UTF-8'?&gt;
&lt;!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'&gt;
&lt;beans&gt;
	&lt;!-- Registration of new models --&gt;
	&lt;bean id=&quot;intix.dictionaryBootstrap&quot; 
		  parent=&quot;dictionaryModelBootstrap&quot; 
		  depends-on=&quot;dictionaryBootstrap&quot;&gt;
		&lt;property name=&quot;models&quot;&gt;
			&lt;list&gt;
				&lt;value&gt;alfresco/extension/intixModel.xml&lt;/value&gt;
			&lt;/list&gt;
		&lt;/property&gt;
	&lt;/bean&gt;
&lt;/beans&gt;
</pre></p>
<p><b>2. intixModel.xml</b></p>
<p>This xml file contains our custom model.</p>
<p><pre class="brush: xml; gutter: true; wrap-lines: false;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!-- Definition of new Model --&gt;
&lt;model name=&quot;ix:intixmodel&quot; xmlns=&quot;http://www.alfresco.org/model/dictionary/1.0&quot;&gt;
&lt;!-- Optional meta-data about the model --&gt;
&lt;description&gt;INTIX.info Content Model&lt;/description&gt;
&lt;author&gt;Roger Carhuatocto&lt;/author&gt;
&lt;version&gt;1.0&lt;/version&gt;

&lt;!-- Imports are required to allow references to definitions in other models --&gt;
&lt;imports&gt;
	&lt;import uri=&quot;http://www.alfresco.org/model/dictionary/1.0&quot; prefix=&quot;d&quot; /&gt;
	&lt;import uri=&quot;http://www.alfresco.org/model/content/1.0&quot; prefix=&quot;cm&quot; /&gt;
	&lt;import uri=&quot;http://www.alfresco.org/model/system/1.0&quot; prefix=&quot;sys&quot; /&gt;
&lt;/imports&gt;

&lt;!-- Introduction of new namespaces defined by this model --&gt;
&lt;namespaces&gt;
	&lt;namespace uri=&quot;http://www.intix.info/model/content/1.0&quot; prefix=&quot;ix&quot; /&gt;
&lt;/namespaces&gt;

&lt;constraints&gt;
	&lt;constraint name=&quot;ix:projectList&quot; type=&quot;LIST&quot;&gt;
		&lt;parameter name=&quot;allowedValues&quot;&gt;
			&lt;list&gt;
			&lt;value&gt;Foo Project&lt;/value&gt;
			&lt;value&gt;Bar Project&lt;/value&gt;
			&lt;value&gt;Acme Project&lt;/value&gt;
			&lt;/list&gt;
		&lt;/parameter&gt;
	&lt;/constraint&gt;
&lt;/constraints&gt;

&lt;types&gt;
	&lt;!-- Enterprise-wide generic document type --&gt;
	&lt;type name=&quot;ix:doc&quot;&gt;
		&lt;title&gt;INTIX.info Document&lt;/title&gt;
		&lt;parent&gt;cm:content&lt;/parent&gt;
		&lt;associations&gt;
			&lt;association name=&quot;ix:relatedDocuments&quot;&gt;
			&lt;title&gt;INTIX.info Related Documents&lt;/title&gt;
			&lt;source&gt;
				&lt;mandatory&gt;false&lt;/mandatory&gt;
				&lt;many&gt;true&lt;/many&gt;
			&lt;/source&gt;
			&lt;target&gt;
				&lt;class&gt;ix:doc&lt;/class&gt;
				&lt;mandatory&gt;false&lt;/mandatory&gt;
				&lt;many&gt;true&lt;/many&gt;
			&lt;/target&gt;
			&lt;/association&gt;
		&lt;/associations&gt;
		&lt;mandatory-aspects&gt;
			&lt;aspect&gt;cm:generalclassifiable&lt;/aspect&gt;
		&lt;/mandatory-aspects&gt;
	&lt;/type&gt;
	
	&lt;type name=&quot;ix:legalDoc&quot;&gt;
		&lt;title&gt;INTIX.info Legal Document&lt;/title&gt;
		&lt;parent&gt;ix:doc&lt;/parent&gt;
	&lt;/type&gt;
	
	&lt;type name=&quot;ix:fld&quot;&gt;
		&lt;title&gt;INTIX.info Folder Document&lt;/title&gt;
		&lt;parent&gt;cm:folder&lt;/parent&gt;
		&lt;associations&gt;
			&lt;association name=&quot;ix:relatedFolder2Docs&quot;&gt;
			&lt;title&gt;INTIX.info Documents Related to Folder&lt;/title&gt;
			&lt;source&gt;
				&lt;mandatory&gt;false&lt;/mandatory&gt;
				&lt;many&gt;true&lt;/many&gt;
			&lt;/source&gt;
			&lt;target&gt;
				&lt;class&gt;ix:doc&lt;/class&gt;
				&lt;mandatory&gt;false&lt;/mandatory&gt;
				&lt;many&gt;true&lt;/many&gt;
			&lt;/target&gt;
			&lt;/association&gt;
		&lt;/associations&gt;
	&lt;/type&gt;
	
	&lt;type name=&quot;ix:marketingDoc&quot;&gt;
		&lt;title&gt;INTIX.info Marketing Document&lt;/title&gt;
		&lt;parent&gt;ix:doc&lt;/parent&gt;
		&lt;properties&gt;
			&lt;property name=&quot;ix:project&quot;&gt;
			&lt;type&gt;d:text&lt;/type&gt;
			&lt;multiple&gt;true&lt;/multiple&gt;
			&lt;constraints&gt;
				&lt;constraint ref=&quot;ix:projectList&quot; /&gt;
			&lt;/constraints&gt;
			&lt;/property&gt;
		&lt;/properties&gt;
	&lt;/type&gt;
&lt;/types&gt;
&lt;/model&gt;
</pre></p>
<p><b>3. web-client-config-custom.xml</b></p>
<p>This configuration file enables Alfresco Explore/Web Client to load the new content model in the Alfresco UI.</p>
<p><pre class="brush: xml; gutter: true; wrap-lines: false;">
&lt;alfresco-config&gt;
	&lt;!-- show related documents association on doc property sheet --&gt;
	&lt;config evaluator=&quot;node-type&quot; condition=&quot;ix:doc&quot;&gt;
		&lt;property-sheet&gt;
			&lt;show-association name=&quot;ix:relatedDocuments&quot; /&gt;
		&lt;/property-sheet&gt;
	&lt;/config&gt;
	&lt;!-- show related documents association on FOLDER property sheet --&gt;
	&lt;config evaluator=&quot;node-type&quot; condition=&quot;ix:fld&quot;&gt;
		&lt;property-sheet&gt;
			&lt;show-association name=&quot;ix:relatedFolder2Docs&quot; /&gt;
		&lt;/property-sheet&gt;
	&lt;/config&gt;
	&lt;!-- show PROJECT on marketingDoc property sheet --&gt;
	&lt;config evaluator=&quot;node-type&quot; condition=&quot;ix:marketingDoc&quot;&gt;
		&lt;property-sheet&gt;
			&lt;show-property name=&quot;ix:project&quot; display-label-id=&quot;project&quot; /&gt;
		&lt;/property-sheet&gt;
	&lt;/config&gt;
	&lt;!-- show related documents association on DOC property sheet --&gt;
	&lt;config evaluator=&quot;node-type&quot; condition=&quot;ix:doc&quot;&gt;
		&lt;property-sheet&gt;
			&lt;show-association name=&quot;ix:relatedDocuments&quot; /&gt;
		&lt;/property-sheet&gt;
	&lt;/config&gt;
	&lt;!-- add NEW CONTENT types to add content list wizard --&gt;
	&lt;config evaluator=&quot;string-compare&quot; condition=&quot;Content Wizards&quot;&gt;
		&lt;content-types&gt;
			&lt;type name=&quot;ix:doc&quot; /&gt;
			&lt;type name=&quot;ix:legalDoc&quot; /&gt;
			&lt;type name=&quot;ix:marketingDoc&quot; /&gt;
		&lt;/content-types&gt;
	&lt;/config&gt;
	&lt;!-- add new FOLDER types to add content list wizard --&gt;
	&lt;config evaluator=&quot;string-compare&quot; condition=&quot;Space Wizards&quot;&gt;
		&lt;folder-types&gt;
			&lt;type name=&quot;ix:fld&quot; /&gt;
		&lt;/folder-types&gt;
	&lt;/config&gt;
	&lt;config evaluator=&quot;string-compare&quot; condition=&quot;Action Wizards&quot;&gt;
		&lt;!-- The list of types shown in the is-subtype condition --&gt;
		&lt;subtypes&gt;
			&lt;type name=&quot;ix:doc&quot; /&gt;
			&lt;type name=&quot;ix:legalDoc&quot; /&gt;
			&lt;type name=&quot;ix:marketingDoc&quot; /&gt;
		&lt;/subtypes&gt;
		&lt;!-- The list of content and/or folder types shown in the specialise-type action --&gt;
		&lt;specialise-types&gt;
			&lt;type name=&quot;ix:doc&quot; /&gt;
			&lt;type name=&quot;ix:legalDoc&quot; /&gt;
			&lt;type name=&quot;ix:marketingDoc&quot; /&gt;
			&lt;type name=&quot;ix:fld&quot; /&gt;
		&lt;/specialise-types&gt;
	&lt;/config&gt;
	&lt;config evaluator=&quot;string-compare&quot; condition=&quot;Advanced Search&quot;&gt;
		&lt;advanced-search&gt;
			&lt;content-types&gt;
			&lt;type name=&quot;ix:doc&quot; /&gt;
			&lt;type name=&quot;ix:legalDoc&quot; /&gt;
			&lt;type name=&quot;ix:marketingDoc&quot; /&gt;
			&lt;type name=&quot;ix:fld&quot; /&gt;
			&lt;/content-types&gt;
		&lt;/advanced-search&gt;
	&lt;/config&gt;
&lt;/alfresco-config&gt;
</pre></p>
<h2>II. Deploy the content model </h2>
<p>1. Stop Alfresco.</p>
<p>2. Copy <b>intix-model-context.xml</b> to <b>${ALFRESCO_HOME}\tomcat\shared\classes\alfresco\extension</b></p>
<p>3. Copy <b>intixModel.xml</b> to <b>${ALFRESCO_HOME}\tomcat\shared\classes\alfresco\extension</b></p>
<p>4. At this point, you will still not actually can not &#8220;see&#8221; the new custom model on the Alfresco UI (Alfresco Explorer/Web Client).<br />
For that, you will need to set up the property dialogs for each of the content types.</p>
<p>Then, copy <b>web-client-config-custom.xml</b> to <b>${ALFRESCO_HOME}\tomcat\shared\classes\alfresco\extension</b></p>
<p>5. Start Alfresco.</p>
<p>6. Verify successfully deployment of new content model by browsing on Alfresco Explorer/Web Client.</p>
<div class="wp-caption alignnone" style="width: 442px"><img alt="Step 1 - Upload a new type of content" src="http://dl.dropbox.com/u/2961879/blog20110622_alfrescocontentmodeling/01_upload_content.png" title="Step 1 - Upload a new type of content" width="432" height="458" /><p class="wp-caption-text">Step 1 - Upload a new type of content</p></div>
<div class="wp-caption alignnone" style="width: 360px"><img alt="Step 2 - Modify properties (metadata) of new uploaded content" src="http://dl.dropbox.com/u/2961879/blog20110622_alfrescocontentmodeling/02_upload_content.png" title="Step 2 - Modify properties (metadata) of new uploaded content" width="350" height="439" /><p class="wp-caption-text">Step 2 - Modify properties (metadata) of new uploaded content</p></div>
<div class="wp-caption alignnone" style="width: 473px"><img alt="Step 3 - Modify properties of new type content" src="http://dl.dropbox.com/u/2961879/blog20110622_alfrescocontentmodeling/03_upload_content.png" title="Step 3 - Modify properties of new type content" width="463" height="517" /><p class="wp-caption-text">Step 3 - Modify properties of new type content</p></div>
<p> 7. End.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/holisticsecurity.wordpress.com/553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/holisticsecurity.wordpress.com/553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/holisticsecurity.wordpress.com/553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/holisticsecurity.wordpress.com/553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/holisticsecurity.wordpress.com/553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/holisticsecurity.wordpress.com/553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/holisticsecurity.wordpress.com/553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/holisticsecurity.wordpress.com/553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/holisticsecurity.wordpress.com/553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/holisticsecurity.wordpress.com/553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/holisticsecurity.wordpress.com/553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/holisticsecurity.wordpress.com/553/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/holisticsecurity.wordpress.com/553/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/holisticsecurity.wordpress.com/553/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=553&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://holisticsecurity.wordpress.com/2011/06/22/content-modeling-when-developing-application-alfresco-ecm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">rcarhuatocto</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110622_alfrescocontentmodeling/01_upload_content.png" medium="image">
			<media:title type="html">Step 1 - Upload a new type of content</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110622_alfrescocontentmodeling/02_upload_content.png" medium="image">
			<media:title type="html">Step 2 - Modify properties (metadata) of new uploaded content</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110622_alfrescocontentmodeling/03_upload_content.png" medium="image">
			<media:title type="html">Step 3 - Modify properties of new type content</media:title>
		</media:content>
	</item>
		<item>
		<title>Building Alfresco ECM from scratch</title>
		<link>http://holisticsecurity.wordpress.com/2011/06/21/building-alfresco-ecm-from-scratch/</link>
		<comments>http://holisticsecurity.wordpress.com/2011/06/21/building-alfresco-ecm-from-scratch/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 18:19:02 +0000</pubDate>
		<dc:creator>Roger Carhuatocto</dc:creator>
				<category><![CDATA[ECM]]></category>
		<category><![CDATA[Alfresco]]></category>

		<guid isPermaLink="false">http://holisticsecurity.wordpress.com/?p=534</guid>
		<description><![CDATA[This article show us how to build Alfresco from scratch which is useful when extending or bug fixing. Requisites: 1. Windows XP 2. Java/JDK 1.6.0_21 (http://www.oracle.com/technetwork/java/javase/downloads/index.html) 3. Eclipse EE Helios SR2 (http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr2) 4. Subversion plugin for Eclipse (downloaded from Eclipse Marketplace) 5. Apache Tomcat 6.0.32 (http://tomcat.apache.org/download-60.cgi) 6. MySQL (XAMPP &#8211; http://www.apachefriends.org/en/xampp-windows.html) 7. ImageMagick ﻿6.7.0-Q16 (http://www.imagemagick.org/script/binary-releases.php#windows) [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=534&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This article show us how to build Alfresco from scratch which is useful when extending or bug fixing.</p>
<div class="wp-caption aligncenter" style="width: 246px"><img title="Alfresco ECM" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_01_alfresco.png" alt="Alfresco ECM" width="236" height="72" /><p class="wp-caption-text">Alfresco ECM</p></div>
<h2>Requisites:</h2>
<p>1. Windows XP<br />
2. Java/JDK 1.6.0_21 (<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">http://www.oracle.com/technetwork/java/javase/downloads/index.html</a>)<br />
3. Eclipse EE Helios SR2 (<a href="http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr2">http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/heliossr2</a>)<br />
4. Subversion plugin for Eclipse (downloaded from Eclipse Marketplace</a>)<br />
5. Apache Tomcat 6.0.32 (<a href="http://tomcat.apache.org/download-60.cgi">http://tomcat.apache.org/download-60.cgi</a>)<br />
6. MySQL (XAMPP &#8211; <a href="http://www.apachefriends.org/en/xampp-windows.html">http://www.apachefriends.org/en/xampp-windows.html</a>)<br />
7. ImageMagick ﻿6.7.0-Q16 (<a href="http://www.imagemagick.org/script/binary-releases.php#windows">http://www.imagemagick.org/script/binary-releases.php#windows</a>)<br />
8. SWFTools 0.9.1 (<a href="http://www.swftools.org/download.html">http://www.swftools.org/download.html</a>)<br />
9. OpenOffice 3.2 (<a href="http://download.openoffice.org/index.html">http://download.openoffice.org/index.html</a>)<br />
10. Alfresco source code downloaded from SVN on 15/June.</p>
<div class="wp-caption alignnone" style="width: 503px"><img title="Alfresco ECM: Community - version 4.0.0" src="http://dl.dropbox.com/u/2961879/blog20110620_buildalfrescoscratch/build_alfresco_scratch_0.png" alt="Alfresco ECM: Community - version 4.0.0" width="493" height="230" /><p class="wp-caption-text">Alfresco ECM: Community - version 4.0.0</p></div>
<h2>Setup development environment:</h2>
<h3>JDK </h3>
<p>1. Install JDK and set two system variables (JAVA_HOME and PATH):</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
JAVA_HOME=C:\1bpms-demo\jdk160_21
PATH=%PATH%;%JAVA_HOME%\bin
</pre></p>
<h3>Apache Tomcat </h3>
<p>1. Install/Unzip Apache Tomcat in the folder above, for example, <b>C:\1bpms-demo\alfresco_scratch\tomcat-6.0.32_app</b></p>
<p>2. Create <b>setenv.bat</b> in <b>C:\1bpms-demo\alfresco_scratch\tomcat-6.0.32_app\bin</b> file with the following content:</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
set JAVA_OPTS=-Xms256m -Xmx1024m -Xss96k -XX:MaxPermSize=256m -server
set JAVA_OPTS=%JAVA_OPTS%    
</pre></p>
<h3>Eclipse </h3>
<p>1. Unzip Eclipse into <b>C:\1bpms-demo\eclipse-jee-helios-SR2</b>.</p>
<p>2. Open Eclipse and install Subclipse plugin from Eclipse Marketplace.</p>
<p>3. Create a folder where will download and build the Alfresco source code, for example﻿<b>C:\1bpms-demo\alfresco_scratch</b>.</p>
<p>4. Switch to &#8220;SVN Repository Exploring&#8221; perspective.<br />
Create a new SVN repository location, enter <b><a href="svn://svn.alfresco.com">svn://svn.alfresco.com</a></b> as the URL, then click on &#8220;alfresco&#8221; folder and do checkout as project in the workspace.</p>
<p>5. Configure ANT runtime in Eclipse.<br />
Go to <b>Window &gt; Preferences &gt; Ant &gt; Runtime &gt; Properties</b> and add 3 properties:</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
env.APP_TOMCAT_HOME=C:\1bpms-demo\alfresco_scratch\tomcat-6.0.32_app
env.TOMCAT_HOME=C:\1bpms-demo\alfresco_scratch\tomcat-6.0.32_app
env.VIRTUAL_TOMCAT_HOME=C:\1bpms-demo\alfresco_scratch\tomcat-6.0.32_virtual
</pre></p>
<p>In my case, env.VIRTUAL_TOMCAT_HOME is an empty folder.</p>
<p>5. Create an ANT project. </p>
<p>- Select New &gt; Project in the Eclipse toolbar. Under &#8220;General&#8221; choose &#8220;Project&#8221;.<br />
- Right-click the project and choose New &gt; File<br />
- When the new file dialog box appears click the Advanced button and select &#8220;Link to file in the file system&#8221;.<br />
- Browse to the build.xml file located in the HEAD\root directory.</p>
<h3>MySQL, OpenOffice, SWFTools, ImageMagick and others </h3>
<p>1. Install/Unzip MySQL (XAMPP) and create an empty database, for example:</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
create database alfresco;
grant all on alfresco.* to alfresco@localhost identified by 'alfresco';
grant all on alfresco.* to alfresco@localhost.localdomain identified by 'alfresco';
</pre></p>
<p>2. Install ImageMagick and SWFTools. Make sure you both exist in PATH system variable and you can run them from any place.</p>
<p>3. Install OpenOffice and make sure you can run it from any place.</p>
<p>4. Setup the Windows NetBios DLLs for CIFS Server:<br />
Copy <b>Win32Utils.dll</b> and <b>Win32NetBIOS.dll</b> placed in (C:\2workspace\alfresco20110615\HEAD\root\projects\alfresco-jlan\jni) to the <b>env.TOMCAT_HOME/bin</b> folder.</p>
<h2>Pre-configure Alfresco before building</h2>
<p>1. Create the file <b>alfresco-global.properties</b>﻿in <b>C:\1bpms-demo\alfresco_scratch\tomcat-6.0.32_app\shared\classes</b> with the following content:</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
dir.root=C:/1bpms-demo/alfresco_scratch/tomcat-6.0.32_app/alf_data
web.application.context.url=http://127.0.0.1:8080/alfresco
### database connection properties ###
db.driver=org.gjt.mm.mysql.Driver
db.username=root
db.password=
db.name=alfresco
db.url=jdbc:mysql://localhost/alfresco
### External executable locations ###
ooo.exe=C:/1bpms-demo/openoffice-3.2/App/openoffice/program/soffice.exe
ooo.enabled=false
img.root=C:/1bpms-demo/ImageMagick-6.7.0-Q16
img.dyn=${img.root}/lib
img.exe=${img.root}/convert
swf.exe=C:/1bpms-demo/swftools0.9.1/pdf2swf.exe
jodconverter.enabled=true 
jodconverter.officeHome=C:/1bpms-demo/openoffice-3.2/App/openoffice 
jodconverter.portNumbers=8101
</pre></p>
<p>2. Copy <b>mysql-connector-java-5.1.13-bin.jar</b> to <b>C:\1bpms-demo\alfresco_scratch\tomcat-6.0.32_app\lib</b></p>
<p>3. Modify <b>shared.loader</b> property of the catalina.properties file with following value:</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar
</pre></p>
<h2>Building:</h2>
<p>All targets for building Alfresco are within <b>build.xml</b>.<br />
You can use ant -projecthelp to see all the available options. Here are a few of the common commands:</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
ant build-tomcat	builds and deploys Alfresco for Tomcat
ant incremental-tomcat	incrementally builds and deploys Alfresco for Tomcat
ant start-tomcat-application	executes the Tomcat start up script
ant build-jboss	builds and deploys Alfresco for JBoss
ant incremental-jboss	incrementally builds and deploys Alfresco for JBoss
ant start-jboss	executes the JBoss start up script
ant test	runs unit tests for the entire project
</pre></p>
<p>1. Run target &#8220;build-tomcat&#8221; from Eclipse.</p>
<p>2. Eclipse will create alfresco.war and share.war, they will be copied to webapps folder in Tomcat. </p>
<p>3. Now, Alfresco now is ready to be deployed.</p>
<div class="wp-caption alignnone" style="width: 641px"><img title="Alfresco ECM deployed from Eclipse" src="http://dl.dropbox.com/u/2961879/blog20110620_buildalfrescoscratch/build_alfresco_scratch.png" alt="Alfresco ECM deployed from Eclipse" width="631" height="519" /><p class="wp-caption-text">Alfresco ECM deployed from Eclipse</p></div>
<h2>Launch Tomcat/Alfresco </h2>
<p>1. Run Tomcat from C:\1bpms-demo\alfresco_scratch\tomcat-6.0.32_app\bin\startup.bat. Make sure MySQL is running before.</p>
<p>Alfresco database schema will be created and you will see all log of activity in the console.</p>
<p>2. If you want deploy/run alfresco from Eclipse: </p>
<p>In Eclipse add a new server instance from &#8220;C:\1bpms-demo\alfresco_scratch\tomcat-6.0.32_app&#8221;.<br />
Edit launch configuration properties of this server adding new VM arguments as:</p>
<p><pre class="brush: plain; gutter: true; wrap-lines: false;">
-Dcatalina.base=&quot;C:\1bpms-demo\alfresco_scratch\tomcat-6.0.32_app&quot; 
-Dcatalina.home=&quot;C:\1bpms-demo\alfresco_scratch\tomcat-6.0.32_app&quot; 
-Dwtp.deploy=&quot;C:\1bpms-demo\alfresco_scratch\tomcat-6.0.32_app\webapps&quot; 
-Djava.endorsed.dirs=&quot;C:\1bpms-demo\alfresco_scratch\tomcat-6.0.32_app\endorsed&quot; 
-Xms256m -Xmx1024m -Xss96k -XX:MaxPermSize=256m -server 
-Djava.library.path=&quot;C:\1bpms-demo\alfresco_scratch\tomcat-6.0.32_app\bin&quot;
</pre></p>
<p>Now, from Eclipse Server window run Tomcat instance.</p>
<h2>Test Alfresco</h2>
<p>Open a browser and go to http://localhost:8080/alfresco or http://localhost:8080/share and enter admin/admin as user/password.</p>
<p>END.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/holisticsecurity.wordpress.com/534/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/holisticsecurity.wordpress.com/534/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/holisticsecurity.wordpress.com/534/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/holisticsecurity.wordpress.com/534/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/holisticsecurity.wordpress.com/534/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/holisticsecurity.wordpress.com/534/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/holisticsecurity.wordpress.com/534/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/holisticsecurity.wordpress.com/534/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/holisticsecurity.wordpress.com/534/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/holisticsecurity.wordpress.com/534/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/holisticsecurity.wordpress.com/534/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/holisticsecurity.wordpress.com/534/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/holisticsecurity.wordpress.com/534/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/holisticsecurity.wordpress.com/534/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=534&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://holisticsecurity.wordpress.com/2011/06/21/building-alfresco-ecm-from-scratch/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">rcarhuatocto</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_01_alfresco.png" medium="image">
			<media:title type="html">Alfresco ECM</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110620_buildalfrescoscratch/build_alfresco_scratch_0.png" medium="image">
			<media:title type="html">Alfresco ECM: Community - version 4.0.0</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110620_buildalfrescoscratch/build_alfresco_scratch.png" medium="image">
			<media:title type="html">Alfresco ECM deployed from Eclipse</media:title>
		</media:content>
	</item>
		<item>
		<title>Which Portal Solution should I use?</title>
		<link>http://holisticsecurity.wordpress.com/2011/06/14/which-portal-solution-should-i-use/</link>
		<comments>http://holisticsecurity.wordpress.com/2011/06/14/which-portal-solution-should-i-use/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 08:25:32 +0000</pubDate>
		<dc:creator>Roger Carhuatocto</dc:creator>
				<category><![CDATA[PORTAL]]></category>
		<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Liferay]]></category>
		<category><![CDATA[eXo]]></category>
		<category><![CDATA[uPortal]]></category>
		<category><![CDATA[Jahia]]></category>
		<category><![CDATA[Sakai]]></category>
		<category><![CDATA[JetSpeed]]></category>
		<category><![CDATA[GateIn]]></category>
		<category><![CDATA[Pluto]]></category>
		<category><![CDATA[OpenPortal]]></category>
		<category><![CDATA[InfoGlue]]></category>
		<category><![CDATA[Hippo]]></category>

		<guid isPermaLink="false">http://holisticsecurity.wordpress.com/?p=517</guid>
		<description><![CDATA[Tell me what you want to do and I will recommend a portal solution that meets your needs. There are many alternatives Free / Open Source, Commercial Open Source and Proprietary, in the LAMP area there are many more and in the world .Net, more. Therefore, is important to identify the needs and thus select [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=517&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Tell me what you want to do and I will recommend a portal solution that meets your needs. There are many alternatives Free / Open Source, Commercial Open Source and Proprietary, in the LAMP area there are many more and in the world .Net, more.<br />
Therefore, is important to identify the needs and thus select the portal product with which you will build your solution.<br />
But before we should define what is Portal?, is another buzz word?, Portal or Web Portal?.</p>
<div class="wp-caption alignnone" style="width: 508px"><img class="  " title="Enterprise Portal" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/portal-architecture.png" alt="Enterprise Portal" width="498" height="330" /><p class="wp-caption-text">Enterprise Portal</p></div>
<h2>What is Portal?</h2>
<p>From Wikipedia (http://en.wikipedia.org/wiki/Web_portal):</p>
<blockquote><p>&#8220;A web portal or links page is a web site that functions as a point of access to information on the World Wide Web. A portal presents information from diverse sources in a unified way.<br />
Apart from the standard search engine feature, web portals offer other services such as e-mail, news, stock prices, information, databases and entertainment. Portals provide a way for enterprises to provide a consistent look and feel with access control and procedures for multiple applications and databases, which otherwise would have been different entities altogether.<br />
Examples of public web portals are AOL, Excite, iGoogle, MSN, Netvibes, and Yahoo!.&#8221;</p></blockquote>
<h2>¿What is Software Portal?</h2>
<p>From SearchCIO.com (http://searchcio.techtarget.com/definition/portal-software):</p>
<blockquote><p>&#8220;Portal software is a type of development tool used to create a portal (starting point) on a company&#8217;s<br />
intranet so that employees can find a centralized starting place for access to consolidated<br />
enterprise-related functions, such as e-mail, customer relationship management (CRM) tools,<br />
company information, workgroup systems, and other applications. The package may be customized to<br />
varying degrees of enterprise or individual specificity. Portal software is similar to intranet<br />
software, but the end product typically features more complexity, automation, organization, and<br />
interactivity. Although the end product is sometimes referred to as an intranet portal, it is usually<br />
called an enterprise information&#8221;</p></blockquote>
<h2>What types of portals are there?</h2>
<p>It is increasingly difficult to classify a Portal under a category, and that these categories are changing, also the portals have common details among themselves.<br />
I have taken the definition of types of Portals from www.contentmanager.eu.com I think is wide and exact.<br />
And these are:</p>
<h3>1. Information Portals vs. Content Management Portals</h3>
<p><strong>Information Portals:</strong><br />
Also called Vertical Portals or Enterprise Information Portals, they consolidate the information from different types and from different sources.<br />
The users of these sites tend to consume information, they do not create information.</p>
<p>It is often used for:</p>
<ul>
<li>make &#8220;mash-up&#8221; in general.</li>
<li>RSS, weather, financial information</li>
<li>Access to corporate email, calendar, events, courses, etc..</li>
<li>View company&#8217;s corporate information, download forms, etc..</li>
<li>View reports, etc.</li>
</ul>
<p><strong>Content Management Portals:</strong><br />
Allows you to manage (create, modify, delete, publish, share, etc.) digital assets (content, documents, etc.) from the Portal.</p>
<p>It is often used for:</p>
<ul>
<li>Check-in, check-out, do versioning, lock, etc. on documents.</li>
<li>Perform a workflow on the documents.</li>
</ul>
<h3>2. Application Centric Portals vs. Content Centric Portals</h3>
<p><strong>Application Centric Portals:</strong><br />
Basically it is a portal that allows you to interact with applications or business systems of the organization, avoids access to each of them.<br />
This portal provides access to all business applications from a single point.</p>
<p>It is often used for:</p>
<ul>
<li>Perform procedures or workflows, not just the record or the initial part of them.</li>
</ul>
<p><strong>Content Centric Portals:</strong><br />
Very similar to Content Management Portal, in this case, the portal takes the information from enterprise applications such as WCMS, DMS, DAM, RMS and standard desktop applications.</p>
<h3>3. Vertical Enterprise Portals vs. Horizontal Enterprise Portals</h3>
<p><strong>Vertical Enterprise Portals:</strong><br />
There are specialized portals that address a certain theme and geared to a very specific audience.</p>
<p>Examples:</p>
<ul>
<li>www.mp3.com</li>
<li>www.pets.com</li>
</ul>
<p><strong>Horizontal Enterprise Portals:</strong><br />
They are portals that treat or display information from different types and are aimed at all audiences.</p>
<p>Examples:</p>
<ul>
<li>www.yahoo.com</li>
<li>www.aol.com</li>
</ul>
<h2>What type of portal you want to build?</h2>
<p>Apparently, from the types of portal, a personal website is a portal and a Facebook page too.<br />
So it is most convenient identify the portal we want to implement and see if it fits the definition.</p>
<h3>Web Dashboard:</h3>
<ul>
<li>Show real-time financial information of the Stock Exchange.</li>
<li>Generate reports.</li>
<li>Historical view of certain indicators.</li>
</ul>
<h3>e-Learning Web Portal:</h3>
<ul>
<li>Define courses, associate an agenda, content, exams, etc.</li>
<li>See students activity in virtual classrooms.</li>
<li>Allow collaboration: create content, conduct examinations.</li>
<li>Allow communication, via chat, instant messaging, email, VoIP calls, etc..</li>
<li>Allow assess.</li>
</ul>
<h3>Web of e-Commerce:</h3>
<ul>
<li>Define product catalog.</li>
<li>Be able to pay.</li>
<li>Be able to order a gift, etc..</li>
<li>Make a delivery.</li>
<li>Notifications.</li>
</ul>
<h3>Web of administrative Processes:</h3>
<ul>
<li>Define the list of processes.</li>
<li>Have an &#8220;inbox&#8221; where I will get notifications with the status of my processes.</li>
<li>Have a folder with all the processes that I can start.</li>
<li>Have a folder to save my documents that I could use in any process.</li>
</ul>
<h3>Web blog:</h3>
<ul>
<li>Define categories, tags related to topics.</li>
<li>Rich editor that allows write articles on my blog.</li>
<li>Have tools for evaluating the quality of the articles, their acceptance, their importance or simply to indicate whether or not you like someone.</li>
<li>Have tools to make diffusion of the articles published on the blog.</li>
</ul>
<h3>Intranet:</h3>
<ul>
<li>To access the document repository of the organization.</li>
<li>Able to access to email, instant messaging, chat, the blog, etc.</li>
<li>To access certain corporate applications such as SAP, CRM, ERP, etc.</li>
</ul>
<h3>Corporate Web:</h3>
<ul>
<li>To create an information structure: about us, services / products, news, contact, etc.</li>
<li>It is the &#8220;cover letter&#8221; of my organization on the Internet and should be able to find through search engines or Internet directories.</li>
</ul>
<h3>Social Network:</h3>
<ul>
<li>Be able to have a Wall as Facebook, to publish all my activity.</li>
<li>Post photos, videos, documents, etc.</li>
<li>Add members to my network.</li>
<li>To have communication and collaboration tools.</li>
</ul>
<p>&#8230; yes, the list is endless, it is important to define the scope of your website and then see if the technology exists to implement it.<br />
That is what the next step.</p>
<h2>What Software Portal can use?</h2>
<p>There are many products / software / technology to create the Portal we want.<br />
There are 2 product lines well marked, the difference is whether they are aligned or not standards Portals</p>
<p>The Portal standards are:</p>
<ul>
<li>JSR-168 (Java Portlet Specification v1.0)</li>
<li>JSR-286 (Java Portlet Specification v2.0)</li>
<li>WSRP (Web Services for Remote Portlets).</li>
</ul>
<p>Among those who are aligned to these standards are (in alphabetical order):</p>
<p><strong>1. Alfresco ECM (http://www.alfresco.com)</strong><br />
<img class="alignright" title="Alfresco ECM" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_01_alfresco.png" alt="" width="236" height="72" />Is an Enterprise Content Management, Document Management, has features of collaborative work, Record Management, Knowledge Management, Web Content Management and has social elements.</p>
<p><strong>2. Apache Pluto (http://portals.apache.org/pluto)</strong><br />
<img class="alignright" title="Apache Pluto" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_02_pluto.png" alt="" width="157" height="47" />From its website:<br />
&#8220;Pluto is the Reference Implementation of the Java Portlet Specification. The current version (2.0) of this specification is known as JSR-286. The previous specification version, JSR-168, covers version 1.0 of the specification. Pluto implements and is fully compliant with both the 1.0 and 2.0 specifications.&#8221;</p>
<p>Yes it is true, is a reference implementation of JSR-168 and JSR-286. The libraries of Apache Pluto is embedded in specialized implementations such as Apache JetSpeed​​, Sakai (for e-learning, etc.).</p>
<p><strong>3. Apache Jetspeed-2 (http://portals.apache.org/jetspeed-2)</strong><br />
<img class="alignright" title="Apache JetSpeed-2" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_03_jetspeed.gif" alt="" width="222" height="28" />Is based on Apache Pluto.<br />
From its website: &#8220;Jetspeed is an Open Portal Platform and Enterprise Information Portal, written entirely in open source under the Apache license in Java and XML and based on open standards&#8221;.</p>
<p><strong>4. eXo Platform (http://www.exoplatform.com)</strong><br />
<img class="alignright" title="eXo Platform" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_04_exo.png" alt="" width="146" height="67" />From its website: &#8220;eXo Platform 3.5 will enable social intranets and websites to be accessible in new ways, by adding cloud-readiness and mobile apps to the only User Experience Platform (UXP) for Java. Enterprise Java organizations will be able to more easily develop, extend and deploy modern enterprise portals, gadgets and mashups within a private cloud or in Platform-as-a-Service (PaaS) environments.&#8221;</p>
<p><strong>5. Hippo Portal 2 (http://www.onehippo.com/en/products/portal)</strong><br />
<img class="alignright" title="Hippo Portal" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_05_hippo.png" alt="" width="102" height="80" />From its website: &#8220;With Hippo Portal you can give secure and personalized access to content and business applications.&#8221;</p>
<p>Is based on Apache Jetspeed-2, has an easy integration with Hippo CMS, providing it with content management functionality.</p>
<p><strong>6. IBM WebSphere Portal (http://www-01.ibm.com/software/websphere/portal)</strong><br />
<img class="alignright" title="IBM WebSphere Portal" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_06_ibm.png" alt="" width="104" height="45" />From its website: &#8220;IBM® WebSphere® Portal Server is the foundation offering of the WebSphere Portal product family, with enterprise portal capabilities that enable you to quickly consolidate applications and content into role-based applications, complete with search, personalization, and security capabilities.&#8221;</p>
<p><strong>7. InfoGlue (http://www.infoglue.org)</strong><br />
<img class="alignright" title="InfoGlue" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_07_infoglue.png" alt="" width="134" height="39" />Is a platform that integrates CMS and Portal. Is based on Apache Pluto.<br />
From its website: &#8220;InfoGlue have step by step matured into one of the most advanced, scalable and robust Open Source content management / portal platforms available. Our increased focus on usability together with flexibibility in every area makes it suitable for a wide range of applications and organisations.&#8221;</p>
<p><strong>8. Jahia (http://www.jahia.com)</strong><br />
<img class="alignright" title="Jahia" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_08_jahia.png" alt="" width="224" height="90" />Basado en Apache Pluto, es un software muy similar a Alfresco ECM.<br />
Y de su web sacamos: &#8220;Jahia 6.5 is the comprehensive platform to meet these expectations: It is much more than a simple WCM, it helps your organization build cutting edge user experiences and virtually any type of web applications.&#8221; y<br />
&#8220;Jahia includes an embedded portal server, which is based on the Apache Pluto reference implementation of the JCR Portlet API specification. The goal of this implementation is to offer support for integrators who need to embed portlets on content pages.&#8221;</p>
<p><strong>9. JBoss GateIn (http://www.jboss.org/gatein)</strong><br />
<img class="alignright" title="JBoss GateIn" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_09_gatein.png" alt="" width="168" height="50" />From its website: &#8220;GateIn is a set of projects revolving aroung the main project called &#8216;GateIn Portal&#8217;.<br />
GateIn portal is a merge of two mature projects that have been around for a while, JBoss Portal and eXo Portal.<br />
It takes the best of both into a single new project.<br />
The aim is to provide both an intuitive portal to use as-is and a portal framework to build upon depending on your needs.&#8221;</p>
<p><strong>10. Liferay Portal (http://www.liferay.com)</strong><br />
<img class="alignright" title="Liferay Portal" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_10_liferay.png" alt="" width="156" height="43" />From its website: &#8220;Liferay Portal is an enterprise web platform for building business solutions that deliver immediate results and long-term value.&#8221;</p>
<p><strong>11. OpenPortal (http://en.wikipedia.org/wiki/OpenPortal)</strong><br />
<img class="alignright" title="OpenPortal" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_11_openportal.png" alt="" width="220" height="34" />From Wikipedia: &#8220;OpenPortal is an open-source web portal project. The code was donated by Sun Microsystems and was initially based on the Sun Java System Portal Server 7.1 update 1 release.&#8221;<br />
Is a discontinued project.</p>
<p><strong>12. Oracle Portal (http://www.oracle.com/technetwork/middleware/portal/overview)</strong><br />
<img class="alignright" title="Oracle Portal" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_12_oracle.gif" alt="" width="133" height="18" />From its web: &#8220;Oracle Portal 11g Release 1 offers a complete and integrated framework for building, deploying, and managing enterprise portals running on Oracle WebLogic Server. Oracle Portal&#8217;s unified and secure point of access to vital enterprise information and services improves business visibility and collaboration, reduces integration costs, and ensures investment protection.&#8221;</p>
<p><strong>13. Sakai (http://sakaiproject.org)</strong><br />
<img class="alignright" title="Sakai" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_13_sakai.png" alt="" width="90" height="68" />There are 2 products, Sakai CLE (Collaboration and Learning Environment) and Sakai OAE (Open Academic Environment) launched as a pre-release with version 0.1.<br />
Sakai CLE is based on Apache Pluto.</p>
<p>From its web, Sakai CLE: &#8220;A full-featured system supporting technology-enabled teaching, learning, research and collaboration for education.&#8221; and<br />
Sakai OAE: &#8220;The Sakai Open Academic Environment is a new system that embraces a new vision for academic collaboration.&#8221;</p>
<p><strong>14. uPortal (http://www.jasig.org/uportal)</strong><br />
<img class="alignright" title="uPortal" src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_14_uportal.jpg" alt="" width="200" height="66" />Based on Apache Pluto, from its web:&#8221;uPortal is the leading open source enterprise portal framework built by and for the higher education community.&#8221;</p>
<h2>What about software or products based on PHP, Python, Ruby, &#8230; ?</h2>
<p>Yes, yes there are, and they are very good, in the following article we will discuss them and its level of maturity.</p>
<h2>So, Is Portal Software ready for use?</h2>
<p>Depending on the type of portal you want to implement, usually with the products listed above could implement almost everything with a little effort in customizing and developing some custom components.<br />
Portlets (functional components that are deployed in Portales JSR-168) give the proper behavior of a portal type website.<br />
For example, if I have my own Facebook-style social network, you first have to install the Portal solution (the container), then add the tipical Portlets of a social network such as:<br />
Wall Portlet, RSS Reader Portlet, Chat Portlet, Portlet YouTube, etc.</p>
<h2>What features should have a Portal software?</h2>
<p>There are different features, they are:</p>
<p><strong>1. Content Management</strong><br />
- Document Library<br />
- Themes and Layout<br />
- Web &amp; webspace publishing<br />
- Language support<br />
- Knowledge management: taxonomy, categories, WCM, Wiki, etc.<br />
- Indexing/Searching: Lucene/Solr</p>
<p><strong>2. Collaboration </strong><br />
- Wiki<br />
- Blogs<br />
- Message boards<br />
- Instant messaging<br />
- Calendar<br />
- Knowledgebase: versioning, creation of docs, print to PDF, file attachment, integration with OpenSearch, rating system, etc.<br />
- Webmail client</p>
<p><strong>3. Social</strong><br />
- Presence &amp; Social: chat, friend list, activity tracker, etc.<br />
- Alerts &amp; announcements<br />
- Mashup &amp; integration: Facebook, iGoogle, OpenSocial, etc.</p>
<p><strong>4. Security</strong><br />
- Authentication methods: LDAP, JAAS, NTLM, Facebook, etc.<br />
- Authorization based on roles (Role-Based Authorization Control &#8211; RBAC)<br />
- Signgle Sign On with CAS, CA SiteMinder, OpenSSO, OpenID, etc.<br />
- Identity Management: LDAP sync, Oracle Access Manager, Facebook, etc.</p>
<p><strong>5. Integration Platform</strong><br />
- UI Integration Platform: AlloyUI, jQuery, &#8230;<br />
- Enterprise Integration Platform: Workflow Engine, Reporting Engine, SOAP, JSon, RMI over HTTP, &#8230;<br />
- Site Integration Platform: XSLT/XML, iFrame, WSRP, &#8230;</p>
<p><strong>6. Extendibility and easy Development</strong><br />
- SDK and/or API<br />
- IDE for developing<br />
- Support for portlets frameworks: JSF, Wicket, Spring MVC, ICEfaces, Vaadin, &#8230;</p>
<p><strong>7. Ready for Mobility</strong><br />
- Native mobile application<br />
- Mobile as thin client.</p>
<h2>What is the level of maturity of each portal software?</h2>
<p>Again, much depends on the needs and resources that are available, some solutions have a good base portal technology but lack the special features for WCM, for example.<br />
While other solutions lack of features related to social networks, so it must be created from scratch.</p>
<p>So now assess every one of these solutions and add aspects related to the strength of Community and the type of licensing (Free / Open Source, Commercial Open Source, Proprietary).<br />
This is not an exhaustive technical evaluation of each portal software, is simply a general review where I try to identify who is best suited for every need.</p>
<p>The aspects to consider are:</p>
<p>1. Content Management<br />
2. Collaboration<br />
3. Social<br />
4. Security<br />
5. Integration Platform<br />
6. Extendibility and easy Development<br />
7. Ready to Mobility<br />
8. Community (user forums, documentation, wiki, etc.)<br />
9. License type (Free Open Source, Commercial Open Source, Proprietary)</p>
<p>Rating:</p>
<pre>Not have:   0
Low:        1
Media:      2
Enough:     3
Good:       4
Excellent:  5</pre>
<p>Finally, the result is this:</p>
<div class="wp-caption alignnone" style="width: 500px"><img class="  " title="Enterprise Portals - Valoración " src="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/portal-madurez.png" alt="Enterprise Portals - Valoración " width="490" height="445" /><p class="wp-caption-text">Enterprise Portals - Valoración</p></div>
<p>Making a quick review of the product software Portals winner is Liferay Portal.<br />
With <strong>Liferay</strong> you can build any kind of portal, including social networks, e-learning portals and e-commerce portals, etc., however, its weakness is that it still has no native application for Android or iPhone, only you can use the mobile browser and wait to use the liferay theme for iphone.<br />
<strong>eXo Platform</strong> is in a second position and it really is a very powerful product, it is native applications for iPad, iPhone and Android.<br />
its weakness, compared with Liferay, is the weakness of their community.</p>
<p>If my purpose is to create an e-learning portal with social and collaborative features, as the first option is to use <strong> Sakai </strong>. There are initiatives to port the e-learning Portlets in Sakai and take them to another container such as Liferay, but this is not necessary.<br />
Sakai is based on Apache Pluto and this at the same time implements WSRP (Remote Portlets invocation via webservice) so you do not need to migrate, simply invoke remotely.</p>
<p>If you want to create a corporate Intranet, all of the above are good, but if we need document management functionalities, then <strong> Alfresco </strong> ECM is our best option.<br />
Nor should we forget Jahia, Hippo and eXo, they are all good choices.</p>
<p><strong>uPortal</strong> is notable for the strength of its community. Behind are universities and North American academic networks.<br />
As a product, in terms of technology is very mature, especially has a seamless integration with CAS (solution of authentication, authorization and SSO), also a product resulting from the efforts of the community.<br />
Particularly delight me much because it is a very lightweight alternative Portal, compared with Liferay for example. So is Hippo Portal (Optimized for low memory footprints and modest hardware requirements: Light-weight Installer Including 38MB Tomcat 6, Spring Portal Light-weight Framework) and Apache JetSpeed-2.</p>
<p>Finally, if we want to create a more powerful portal solution and we do not create it from scratch, as a good alternative is to use as a basis Apache Pluto, Apache or JBoss JetSpeed​​-2 GateIn. These three are good implementations of Portal standards and many manufacturers are embedding these products into their advanced products.<br />
As is the case of Pentaho (Business Intelligence solution), they use JBoss Portal to create a Dashboard.</p>
<h2>Conclusions:</h2>
<ol>
<li>If you want to create a corporate portal, a social network, etc. you should know that there is software to do that quickly and easily.</li>
<li>If you want to create your own portal solution, you can embed an existing one as Apache Pluto.</li>
<li>If your goal is to have a specialized portal (vertical portal) immediately, it is best to use an existing one for that purpose, for example, Alfresco ECM, Sakai for e-learning, etc.<br />
But if you have all the necessary resources, it is best to choose one that provides us with tools to quickly develop or customize functionality not had before, examples: Liferay, eXo, WebSphere Portal, Oracle Portal, etc.</li>
<li>If your organization is aligned to the spirit of Free / Open Source and do not need advanced features, then the best alternatives are Apache JetSpeed​​-2, Jahia, Hippo, etc..</li>
</ol>
<p><strong>References:</strong></p>
<ul>
<li>What is a Portal?
<p>http://www.contentmanager.eu.com/portal.htm</li>
<li>Definition: portal software
<p>http://searchcio.techtarget.com/definition/portal-software</li>
<li>New Subway (Content Technology) Vendor Map for 2011
<p>http://www.realstorygroup.com/Blog/2083-New-Subway-Vendor-Map-for-2011</li>
<li>Web portal
<p>http://en.wikipedia.org/wiki/Web_portal</li>
<li>Open Source Portal Servers Written in Java
<p>http://www.manageability.org/blog/stuff/open_source_portal_servers_in_java/view</li>
</ul>
<p>**** <a href="http://holisticsecurity.wordpress.com/2011/06/14/que-solucion-portal-deberia-usar/">Versión en castellano aquí.</a> ****</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/holisticsecurity.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/holisticsecurity.wordpress.com/517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/holisticsecurity.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/holisticsecurity.wordpress.com/517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/holisticsecurity.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/holisticsecurity.wordpress.com/517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/holisticsecurity.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/holisticsecurity.wordpress.com/517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/holisticsecurity.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/holisticsecurity.wordpress.com/517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/holisticsecurity.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/holisticsecurity.wordpress.com/517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/holisticsecurity.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/holisticsecurity.wordpress.com/517/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=holisticsecurity.wordpress.com&amp;blog=2005905&amp;post=517&amp;subd=holisticsecurity&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://holisticsecurity.wordpress.com/2011/06/14/which-portal-solution-should-i-use/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">rcarhuatocto</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/portal-architecture.png" medium="image">
			<media:title type="html">Enterprise Portal</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_01_alfresco.png" medium="image">
			<media:title type="html">Alfresco ECM</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_02_pluto.png" medium="image">
			<media:title type="html">Apache Pluto</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_03_jetspeed.gif" medium="image">
			<media:title type="html">Apache JetSpeed-2</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_04_exo.png" medium="image">
			<media:title type="html">eXo Platform</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_05_hippo.png" medium="image">
			<media:title type="html">Hippo Portal</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_06_ibm.png" medium="image">
			<media:title type="html">IBM WebSphere Portal</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_07_infoglue.png" medium="image">
			<media:title type="html">InfoGlue</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_08_jahia.png" medium="image">
			<media:title type="html">Jahia</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_09_gatein.png" medium="image">
			<media:title type="html">JBoss GateIn</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_10_liferay.png" medium="image">
			<media:title type="html">Liferay Portal</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_11_openportal.png" medium="image">
			<media:title type="html">OpenPortal</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_12_oracle.gif" medium="image">
			<media:title type="html">Oracle Portal</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_13_sakai.png" medium="image">
			<media:title type="html">Sakai</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/logo_14_uportal.jpg" medium="image">
			<media:title type="html">uPortal</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/2961879/blog20110603_whichportal/portal-madurez.png" medium="image">
			<media:title type="html">Enterprise Portals - Valoración </media:title>
		</media:content>
	</item>
	</channel>
</rss>
