<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
  <title>EmForge</title>
  <link rel="alternate" href="" />
  <subtitle>EmForge</subtitle>
  <entry>
    <title>Workflow and Reports in Liferay 6</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=187436" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=187436</id>
    <updated>2010-08-04T15:53:06Z</updated>
    <published>2010-08-04T15:05:20Z</published>
    <summary type="html">&lt;p&gt;Liferay 6 has 2 very nice features, probably not well documented yet.
  It is support for Workflows and Reports. Here I want to discuss some
  major details about these features, since there are no too much info
  about them.&lt;/p&gt;
&lt;h3&gt;Support for Workflows&lt;/h3&gt;
&lt;h4&gt;How it works from developer side:&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Liferay has set of general interfaces, implemnted working with
    workflows (look at the package com.liferay.portal.kernel.workflow)&lt;/li&gt;
  &lt;li&gt;It is possible to deploy some implementation of these interfaces
    as separate plugin.&lt;/li&gt;
  &lt;li&gt;By default, Liferay 6.0.4 ships with kaleo-web - plugin
    implemented workflow functionality with using own developed workflow
    engine Kaleo;&lt;/li&gt;
  &lt;li&gt;But it is possible to deploy jbpm3 based implementation (available
    in svn: &lt;a href="http://svn.liferay.com/repos/public/plugins/trunk/webs/jbpm-web"&gt;http://svn.liferay.com/repos/public/plugins/trunk/webs/jbpm-web&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;As well as I've started development of jBPM4 based implementation
      (&lt;a
    href="http://www.emforge.net/web/jbpm4-portlet"&gt;http://www.emforge.net/web/jbpm4-portlet&lt;/a&gt;),
    but, since there was no interest from community side, as well as no
    strong requirements in this implementation in my current project
    this implementation currently placed on-hold;&lt;/li&gt;
  &lt;li&gt;Then somebody (any portlet) calls core Workflow methods in Liferay
    - these calls routed into deployed implementation (with using
    internal Liferay's Message Bus).&lt;/li&gt;&lt;/ul&gt;
&lt;h4&gt;How it works from Administrator Side:&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;After deploying some implementation, it is possible to manage
    workflows in the control panel (for example deploy workflow definitions);&lt;/li&gt;
  &lt;li&gt;Set of workflows is individual for each portal instance;&lt;/li&gt;
  &lt;li&gt;As well, for each group it is possible to define own
      &lt;strong&gt;Workflow Configuration&lt;/strong&gt;: mapping of Assets with
    Workflows, responsible for their processing;&lt;/li&gt;&lt;/ul&gt;
&lt;p style="text-align: center;"&gt;
  &lt;img align="middle" alt="" height="423"
    src="http://www.emforge.net/image/image_gallery?uuid=36a9b3b5-1b71-43e9-9db0-0f77be9be753&amp;amp;groupId=10146&amp;amp;t=1280937087693" width="530" /&gt;&lt;/p&gt;
&lt;p&gt;Important thing - in Liferay each process instance (workflow
  instance) are connected to some Asset. It is not possible to just
  &amp;quot;create a task&amp;quot;, but, you can create/edit some asset and it
  will &amp;quot;flow&amp;quot; by some workflow (according to asset type and
  workflow linked with this type in Workflow Configuration).&lt;/p&gt;
&lt;h4&gt;How it works from User Side:&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;Actually, how to work with workflows from user side quite well
  described in &lt;a
    href="http://www.liferay.com/web/juan.fernandez/blog/-/blogs/liferay-workflow-in-action"&gt;Juan's
  blog-post&lt;/a&gt;. I can just add - fi you like to experiment with
  workflows - simple start default Liferay 6.0.4 bundle with 7cogz-hook
  deployed. It deploy's kaleo workflow engine, as well as defined users
  with required roles - you can play with editing web-content by
  &amp;quot;Editor&amp;quot; users, and approve changes by &amp;quot;Publisher&amp;quot;
  user. It is good enough to see how it works (and very fast to start).&lt;/p&gt;
&lt;h3&gt;Support for Reports&lt;/h3&gt;
&lt;p&gt;Supports for reports is very simular to support for Workflow:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Liferay core has some interfaces for working with reports (looks
    at ReportEngine class);&lt;/li&gt;
  &lt;li&gt;It is possible to deploy some implementation;&lt;/li&gt;
  &lt;li&gt;In Incubation SVN you can find JasperReport's based
    implementation: &lt;a href="http://svn.liferay.com/repos/public/plugins/incubation/webs/reporting-jasper-web/"&gt;svn.liferay.com/repos/public/plugins/incubation/webs/reporting-jasper-web/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;By save way - all calls to core ReportEngine are routed to
    implementation with using MessageBus;&lt;/li&gt;
  &lt;li&gt;After deploying some implementation, you can use reports in your
    portlets, but&lt;/li&gt;
  &lt;li&gt;You may deploy &amp;quot;Report Console&amp;quot; portlet from svn
    incubation: &lt;a href="http://svn.liferay.com/repos/public/plugins/incubation/portlets/reports-console-portlet/"&gt;svn.liferay.com/repos/public/plugins/incubation/portlets/reports-console-portlet/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;It will add Reports Tab into your Control Panel - to allow admin
    to deploy reports and manage them, manage data sources and some
    other settings, as well as place &amp;quot;View Report&amp;quot; portlet on
    any page&lt;/li&gt;&lt;/ul&gt;
&lt;p style="text-align: center;"&gt;
  &lt;img alt="" height="423"
    src="http://www.emforge.net/image/image_gallery?uuid=c9d36a2b-3149-48e0-a6f9-f9822404a6a0&amp;amp;groupId=10146&amp;amp;t=1280937130522" width="530" /&gt;&lt;/p&gt;
&lt;p&gt;I think these two features are very good big steps forward to make
  Liferay more powerful and more &amp;quot;Enterprise&amp;quot;. Just again -
  big &amp;quot;thank you&amp;quot; to Liferay team for great job!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-08-04T15:05:20Z</dc:date>
  </entry>
  <entry>
    <title>First project migrated to 6.0.3</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=176476" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=176476</id>
    <updated>2010-07-17T20:15:00Z</updated>
    <published>2010-07-17T20:07:31Z</published>
    <summary type="html">&lt;p&gt;I already have several projects based on Liferay 6 branch, some of
  them based on 6.0.1, some on 6.0.2. Few days ago first GA version of
  Liferay 6 &lt;a
    href="http://www.liferay.com/web/brian.chan/blog/-/blogs/liferay-portal-6-ga-released"&gt;was
  released&lt;/a&gt; so, it's time to move project forward.&lt;/p&gt;
&lt;p&gt;Today was first - based on 6.0.1. Here is some notes for developers,
  to know what expect from such migration:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Database upgraded without any problems. Looks like error in
    upgrade-script between 6.0.1 and 6.0.2 is fixed and now everything
    works as expected. Simple place new Liferay instead old one and
    connect to same DB;&lt;/li&gt;
  &lt;li&gt;Dependencies - minor changes required (jstl.jar renamed to jstl-api.jar);&lt;/li&gt;
  &lt;li&gt;Source code - some minor changes required because of changed API (expectable);&lt;/li&gt;
  &lt;li&gt;JSP pages: here was major change I had to do: in my project jsp
    pages was located in /WEB-INF/jsp, and Liferay 6.0.3 is not allowed
    to load resources under WEB-INF (ok, I thin it is configurable - but
    I will prefer to stay with standard configuration as much as
    possible). So, I had to move jsp pages to /jsp (and of course change
    all source-code). Hopefully it is very easy change.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;So, migration from 6.0.1 to 6.0.3 works almost without any problems.
  Good job Liferay Team!&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-07-17T20:07:31Z</dc:date>
  </entry>
  <entry>
    <title>Spring Security Step2 integration version 3.0.3 released</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=173631" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=173631</id>
    <updated>2010-07-13T10:34:33Z</updated>
    <published>2010-07-13T10:33:07Z</published>
    <summary type="html">&lt;p&gt;Hi!&lt;/p&gt;
&lt;p&gt;I've got new notebook, so, was able to test build with clean maven
  repo. Found some issues with repository configuration in the project,
  what was fixed.&lt;/p&gt;
&lt;p&gt;Also, Spring Security 3.0.3 was just released, so, I've adopted this
  integration project to work with 3.0.3. Actually, no any changes was
  done - I simple changed versions in pom-files and recompiled with new dependencies.&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-07-13T10:33:07Z</dc:date>
  </entry>
  <entry>
    <title>Simple Vaadin Portlet in Liferay Plugins SDK</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=172749" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=172749</id>
    <updated>2010-07-12T08:49:44Z</updated>
    <published>2010-07-12T08:29:19Z</published>
    <summary type="html">&lt;p&gt;Vaadin is a new word in Liferay world, it looks very promised, but,
  as always, not so much documentation and tutorials. Some of tutorials
  too complex, some not covered some (even simple) questions.&lt;/p&gt;
&lt;p&gt;Here I want to explain for Liferay developers already used Plugins
  SDK (and have experience in Liferay Portlets development) how to write
  simple Vaadin portlet and access Portlet and Liferay infrastructure
  (handle render request, access ThemeDisplay object).&lt;/p&gt;
&lt;p&gt;Actually, you can skip everything and simple get sources from SVN: &lt;a
  href="http://svn.emforge.net/svnroot/akakunin-experiments/sample-vaadin-portlet"&gt;svn.emforge.net/svnroot/akakunin-experiments/sample-vaadin-portlet&lt;/a&gt;
  - it is really very simple.&lt;/p&gt;
&lt;h3&gt;Prerequirements&lt;/h3&gt;
&lt;p&gt;I've used latest public version of Liferay (6.0.2) and it's plugins
  SDK. Also I'm using Eclipse (not using Liferay IDE yet, since had no
  time to switch into it) - but it is not required for this tutorial -
  it is based on Liferay SDK, so, used ant for build and may be used
  with any IDE&lt;/p&gt;
&lt;h3&gt;Create portlet&lt;/h3&gt;
&lt;p&gt;Switch to sdk/portlets and call&lt;/p&gt;
&lt;pre&gt;
#  ./create.sh sample-vaadin
&lt;/pre&gt;
&lt;p&gt;Then remove all renerated jsp-pages, css, images and so on -
  everything was generated for sample portlet&lt;/p&gt;
&lt;h3&gt;Configure web.xml for working with Vaadin&lt;/h3&gt;
&lt;p&gt;Create web.xml (in my case it wasn't created by plugins-sdk) with
  setting to enable using VAADIN in your portlet:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;web-app xmlns=&amp;quot;http://java.sun.com/xml/ns/j2ee&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xsi:schemaLocation=&amp;quot;http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&amp;quot; version=&amp;quot;2.4&amp;quot;&amp;gt;

  &amp;lt;context-param&amp;gt;
      &amp;lt;description&amp;gt;Vaadin production mode&amp;lt;/description&amp;gt;
      &amp;lt;param-name&amp;gt;productionMode&amp;lt;/param-name&amp;gt;
      &amp;lt;param-value&amp;gt;false&amp;lt;/param-value&amp;gt;
  &amp;lt;/context-param&amp;gt;

  &amp;lt;servlet&amp;gt;
      &amp;lt;servlet-name&amp;gt;Vaadin_portlet Application&amp;lt;/servlet-name&amp;gt;
      &amp;lt;servlet-class&amp;gt;
      com.vaadin.terminal.gwt.server.ApplicationServlet&amp;lt;/servlet-class&amp;gt;
      &amp;lt;init-param&amp;gt;
          &amp;lt;description&amp;gt;
          Vaadin application class to start&amp;lt;/description&amp;gt;
          &amp;lt;param-name&amp;gt;application&amp;lt;/param-name&amp;gt;
          &amp;lt;param-value&amp;gt;com.example.vaadin_portlet.Vaadin_portletApplication&amp;lt;/param-value&amp;gt;
      &amp;lt;/init-param&amp;gt;
  &amp;lt;/servlet&amp;gt;
  &amp;lt;servlet-mapping&amp;gt;
      &amp;lt;servlet-name&amp;gt;Vaadin_portlet Application&amp;lt;/servlet-name&amp;gt;
      &amp;lt;url-pattern&amp;gt;/Vaadin_portletApplicationServlet/*&amp;lt;/url-pattern&amp;gt;
  &amp;lt;/servlet-mapping&amp;gt;
  &amp;lt;servlet-mapping&amp;gt;
      &amp;lt;servlet-name&amp;gt;Vaadin_portlet Application&amp;lt;/servlet-name&amp;gt;
      &amp;lt;url-pattern&amp;gt;/VAADIN/*&amp;lt;/url-pattern&amp;gt;
  &amp;lt;/servlet-mapping&amp;gt;

&amp;lt;/web-app&amp;gt;


&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Add Vaadin into portlet dependencies&lt;/h3&gt;
&lt;p&gt;Liferay itself already has vaadin, you do not need to include it into
  your portlet lib. Simple add it into portal-dependency-jars in liferay-plugin-package.properties:&lt;/p&gt;
&lt;pre&gt;
name=
module-group-id=liferay
module-incremental-version=1
tags=
short-description=
change-log=
page-url=http://www.liferay.com
author=Liferay, Inc.
licenses=LGPL

portal-dependency-jars=\
    vaadin.jar
&lt;/pre&gt;
&lt;h3&gt;Add portlet definition into portlet.xml &amp;amp; liferay-portlet.xml&lt;/h3&gt;
&lt;p&gt;Add into portlet.xml:&lt;/p&gt;
&lt;pre&gt;
    &amp;lt;portlet&amp;gt;
        &amp;lt;portlet-name&amp;gt;sample-vaadin&amp;lt;/portlet-name&amp;gt;
        &amp;lt;display-name&amp;gt;Sample Vaadin&amp;lt;/display-name&amp;gt;
       
        &amp;lt;portlet-class&amp;gt;com.vaadin.terminal.gwt.server.ApplicationPortlet2&amp;lt;/portlet-class&amp;gt;
        &amp;lt;init-param&amp;gt;
            &amp;lt;name&amp;gt;application&amp;lt;/name&amp;gt;
            &amp;lt;value&amp;gt;sample.vaadin.SampleApplication&amp;lt;/value&amp;gt;
        &amp;lt;/init-param&amp;gt;
       
        &amp;lt;!--
          To enable displaying multiple Vaadin portlets on a page,
          they should all use the same widgetset. In that case, the
          widgetset can be configured on the portal level (parameter
          vaadin.widgetset) or here for each portlet.
        --&amp;gt;
        &amp;lt;!--
        &amp;lt;init-param&amp;gt;
            &amp;lt;name&amp;gt;widgetset&amp;lt;/name&amp;gt;
            &amp;lt;value&amp;gt;com.vaadin.portal.gwt.PortalDefaultWidgetSet&amp;lt;/value&amp;gt;
        &amp;lt;/init-param&amp;gt;
        --&amp;gt;
       
        &amp;lt;!-- Supported portlet modes and content types. --&amp;gt;
        &amp;lt;supports&amp;gt;
            &amp;lt;mime-type&amp;gt;text/html&amp;lt;/mime-type&amp;gt;
            &amp;lt;portlet-mode&amp;gt;view&amp;lt;/portlet-mode&amp;gt;
            &amp;lt;!-- &amp;lt;portlet-mode&amp;gt;edit&amp;lt;/portlet-mode&amp;gt; --&amp;gt;
            &amp;lt;!-- &amp;lt;portlet-mode&amp;gt;help&amp;lt;/portlet-mode&amp;gt; --&amp;gt;
        &amp;lt;/supports&amp;gt;
       
        &amp;lt;!-- Not always required but Liferay uses these. --&amp;gt;
        &amp;lt;portlet-info&amp;gt;
            &amp;lt;title&amp;gt;Sample Vaadin&amp;lt;/title&amp;gt;
            &amp;lt;short-title&amp;gt;Sample Vaadin&amp;lt;/short-title&amp;gt;
        &amp;lt;/portlet-info&amp;gt;
    &amp;lt;/portlet&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;and liferay-portlet.xml:&lt;/p&gt;
&lt;pre&gt;
    &amp;lt;portlet&amp;gt;
        &amp;lt;portlet-name&amp;gt;sample-vaadin&amp;lt;/portlet-name&amp;gt;
        &amp;lt;ajaxable&amp;gt;false&amp;lt;/ajaxable&amp;gt;
    &amp;lt;/portlet&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Implement Application Class&lt;/h3&gt;
&lt;p&gt;You can get sources of class from svn: &lt;a href="http://svn.emforge.net/svnroot/akakunin-experiments/sample-vaadin-portlet/docroot/WEB-INF/src/sample/vaadin/"&gt;svn.emforge.net/svnroot/akakunin-experiments/sample-vaadin-portlet/docroot/WEB-INF/src/sample/vaadin/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Some important points in this class:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Get PortletApplicationContext2 and add PortletListener into it;&lt;/li&gt;
  &lt;li&gt;SamplePortletListener (PortletListener implementation) will allow
    you to access Portlet API (render, action, even, resource);&lt;/li&gt;
  &lt;li&gt;As result, you can use standard way to access (for example)
    ThemeDisplay object - and information about your current context.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;What is all - take fun with Liferay and Vaadin!&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-07-12T08:29:19Z</dc:date>
  </entry>
  <entry>
    <title>Ubutu 10.04, mysql, Java, localhost = WTF?</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=172349" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=172349</id>
    <updated>2010-07-11T21:56:15Z</updated>
    <published>2010-07-10T22:06:12Z</published>
    <summary type="html">&lt;p&gt;Today I killed 2 hours of my life for very studip problem.&lt;/p&gt;
&lt;p&gt;I just got new notebook (IBM&amp;nbsp;Thnkpad T400) with 4Gb, so, to be
  able to use whole memory, installed Ubuntu 10.04 64 bit. Then
  installed mysql-server, sun java, eclipse, some other staff and
  started to work. mysql nd sun java was installed via apt with standard settings.&lt;/p&gt;
&lt;p&gt;Created DB, successfully connected via MySQL Admin and Query Browser,
  and, then, trying to connect from my app: failed&lt;/p&gt;
&lt;pre&gt;
Exception in thread &amp;quot;main&amp;quot; com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Last packet sent to the server was 0 ms ago.
&amp;nbsp;&amp;nbsp;&amp;nbsp; at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Checking JDBC Url - everything is correct, checking username/password
  - same, I can connect to localhost DB with using this
  username/password with using standard mysql tools. But not from java
  via JDBC.&lt;/p&gt;
&lt;p&gt;WTF???&lt;/p&gt;
&lt;p&gt;After spending 2 hours, found &lt;a
    href="http://ubuntuforums.org/showthread.php?t=991141"&gt;this
  forum&lt;/a&gt;. After commenting &lt;strong&gt;bind-address&lt;/strong&gt; in my.cnf
  and changing jdbc url to use my computer IP address (like
  192.168.0.157) instead of localhost it finally started to connect.&lt;/p&gt;
&lt;p&gt;Why? Why it is not working with localhost out-of-box? Why I should
  spent 2 hours for such stupid problems?&lt;/p&gt;
&lt;h2&gt;Problem resolved&lt;/h2&gt;
&lt;p&gt;Ok, today (after sleeping a little bit) I realized the source of
  problem. It is not ubuntu, java, or mysql. It is (of course) - I'm.&lt;/p&gt;
&lt;p&gt;Yesterday I changed by /etc/hosts - so, localhost was defined
  incorrectly (by some reason). But, MySQL clients, in case localhost
  server used - not used TCP at all - then connected to mysql directly.&lt;/p&gt;
&lt;p&gt;JDBC driver does not use it - it always (looks like) tried to use TCP
  and resolve hostname. It is why it connection worked in mysql tools,
  but did not worked in java.&lt;/p&gt;
&lt;p&gt;Ubuntu == cool!&lt;/p&gt;
&lt;p&gt;Java == cool!&lt;/p&gt;
&lt;p&gt;I'm == dummy developer :)&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-07-10T22:06:12Z</dc:date>
  </entry>
  <entry>
    <title>First working version for Liferay 6.0.2</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=153959" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=153959</id>
    <updated>2010-06-07T15:51:18Z</updated>
    <published>2010-06-07T15:49:24Z</published>
    <summary type="html">&lt;p&gt;Today I finally namaged to deploy jbpm4.3 portlet (jbpm4-web) and
  deploy   first process definition into Liferay.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I think only 1% of required functionality is done - but, at least it
  started. If somebody interested in jbpm4 workflow engine in Liferay -
  please - feel free to join the project!&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-06-07T15:49:24Z</dc:date>
  </entry>
  <entry>
    <title>PetClinic GWT application in less then 30 minutes</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=140324" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=140324</id>
    <updated>2010-05-20T23:30:03Z</updated>
    <published>2010-05-20T12:45:16Z</published>
    <summary type="html">&lt;p&gt;Yesterday I've read announce of new version of &lt;a
    href="http://blog.springsource.com/2010/05/19/spring-roo-1-1-0-m1-released/"&gt;Spring-Roo
  1.1.0M1&lt;/a&gt; and found there at least 2 very interesting features: GWT
  &amp;amp; GAE support.&lt;/p&gt;
&lt;p&gt;So, today I spent some time to play with it - and here is short
  instructions how to make PetClinic application in less then 30 minutes
  (depends from your connection speed).&lt;/p&gt;
&lt;h2&gt;Prepequirements&lt;/h2&gt;
&lt;p&gt;You will need to have JDK 1.6 and &lt;a
    href="http://maven.apache.org/download.html"&gt;Apache Maven&lt;/a&gt;
  installed. I hope it is not a problem and sure 90% readers of this
  blog already have them&lt;/p&gt;
&lt;h2&gt;Download and Install Spring-Roo&lt;/h2&gt;
&lt;p&gt;Simple download it from &lt;a
    href="http://www.springsource.com/download/community?project=Spring%20Roo"&gt;SpringSource
  Site&lt;/a&gt; and unzip into some folder (lets say it &amp;lt;spring-roo-path&amp;gt;)&lt;/p&gt;
&lt;h2&gt;Get clinic.roo file&lt;/h2&gt;
&lt;p&gt;Download &lt;a
  href="http://www.emforge.net/c/document_library/get_file?uuid=092185e8-6a32-4ce4-b961-84ea07563502&amp;amp;groupId=141281"&gt;clinic.roo&lt;/a&gt;
  file. It is script for roo, almost same as default clinic.roo (you can
  find initial version in &amp;lt;spring-roo-path&amp;gt;/samples/clinic.roo)
  but adopted for using GWT:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Commented enums since Roo-GWT is not supported them; In entities
    enums replaced by string;&lt;/li&gt;
  &lt;li&gt;Boolean primitive looks like also not supported - so, changed to java.lang.Boolean;&lt;/li&gt;
  &lt;li&gt;Calendar is not supported changed to Date;&lt;/li&gt;
  &lt;li&gt;Commented out Spring-MVC specific commands&lt;/li&gt;
  &lt;li&gt;Added &lt;strong&gt;gwt setup&lt;/strong&gt; to generate gwt UI.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Run Roo to generate sources&lt;/p&gt;
&lt;p&gt;Lets generate sources with using this roo-file:&lt;/p&gt;
&lt;pre&gt;
# ../bin/roo.sh
# roo&amp;gt; script -file clinic.roo
# roo&amp;gt; exit
&lt;/pre&gt;
&lt;p&gt;It will took some time, but as result you will get maven-based
  project with all required sources.&lt;/p&gt;
&lt;h2&gt;Run it&lt;/h2&gt;
&lt;p&gt;Quite easy:&lt;/p&gt;
&lt;pre&gt;
# mvn gwt:run
&lt;/pre&gt;
&lt;p&gt;It may also take some time, since it will make a build and download
  all required artifacts from maven repositories. But it will long only
  for first time - after all requirements will be downloaded into local
  maven repo, next builds will go much faster.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
  &lt;img alt="" height="267"
    src="http://www.emforge.net/image/image_gallery?uuid=3d899d88-ac8b-4f64-8b42-a8c6b5380470&amp;amp;groupId=10146&amp;amp;t=1274398140279" width="450" /&gt;&lt;/p&gt;
&lt;h2&gt;Try it&lt;/h2&gt;
&lt;p&gt;Copy provided link into clipboard and open it in your browser (it
  will require to install GWT plugin)&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
  &lt;img alt="" height="324"
    src="http://www.emforge.net/image/image_gallery?uuid=3ef6bb6e-2be9-4fca-819c-1d3818226938&amp;amp;groupId=10146&amp;amp;t=1274398162627" width="456" /&gt;&lt;/p&gt;
&lt;p&gt;So, now you can play with it. Not all forms working correctly - ok,
  GWT support in Spring-Roo is not in stable state, but at least it
  provide some ideas how it will be implemented.&lt;/p&gt;
&lt;h2&gt;What we have as result&lt;/h2&gt;
&lt;p&gt;As result, in less then 30 minutes we have great sample of:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Fast application generation with using Spring-Roo. Samples are
    very clear and you can use them as reference material for Roo
    features. Of course - if you interested - it make sense to read more
    Roo documentation&lt;/li&gt;
  &lt;li&gt;Sample of project used Spring Framework, GWT, Hibernate and many more;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;If you just started with one of these technologies, these
  code-samples may be good reference.&lt;/p&gt;
&lt;p&gt;Even you already using them for a long time - I'm pretty sure you
  can find many interesting things you probably did not know about
  Spring, Hibernate or GWT&lt;/p&gt;
&lt;p&gt;Of course created application is not something you can show to
  end-users. But - it may be good &amp;quot;start-point&amp;quot; and safe your
  time for doing some standard things for project initialization again
  and again.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-05-20T12:45:16Z</dc:date>
  </entry>
  <entry>
    <title>Magic options to monitor remote glassfish on ubuntu</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=121528" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=121528</id>
    <updated>2010-05-05T23:15:34Z</updated>
    <published>2010-05-04T22:20:28Z</published>
    <summary type="html">&lt;p&gt;&amp;nbsp;I've tried to setup JMX connection to my remote glassfish
  installed on ubuntu several times, and every time I've got 'cannot
  connect' error from my jconsole or VisualVM&lt;/p&gt;
&lt;p&gt;I've checked many tutorials in internet, in most case it should work
  out of box. Some people reported (like I'm) what they cannot connect
  to remote glassfish - but, without any answer and proper solution.&lt;/p&gt;
&lt;p&gt;Today I finally resolved 2 magic options enabled for me remote
  monitoring of Glassfish under Ubuntu (with using jconsole or
  VisualVM). They are:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;-Djava.rmi.server.hostname=xxx (use domain name you are using to
    access this server);&lt;/li&gt;
  &lt;li&gt;-Djava.net.preferIPv4Stack=true (in my cases by default Glassfish
    used IPv6 stack);&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;So, getting Glassfish with default settings (by default JMX conector
  is enabled), add this two JVM options via glassfish admin console and
  (of course if you have no firewall behind you and this server) after
  restarting glassfish it is possible to connect and monitor it with
  using both jconsole and VisualVM (as well as I hope any JMX client).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-05-04T22:20:28Z</dc:date>
  </entry>
  <entry>
    <title>Securing Remote EJB on Glassfish 2</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=121018" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=121018</id>
    <updated>2010-05-04T12:51:27Z</updated>
    <published>2010-05-04T12:39:17Z</published>
    <summary type="html">&lt;p&gt;Today I needed to write simplest remote EJB and command-line client
  for it and protect this EJB - request authentication. Glassfish2 was
  used as application server, but, I&amp;nbsp;suppose same will work (except
  probably required libraries) by same way with Glassfish 3.&lt;/p&gt;
&lt;p&gt;Write EJB&lt;/p&gt;
&lt;pre&gt;
@Stateless
public class TestSecurityBean implements TestSecurityBeanRemote, TestSecurityBeanLocal {
    private static Logger log = Logger.getLogger(TestSecurityBean.class.getName());

    @Resource
    EJBContext ejbContext;
   
    public String sayRemoteHello() {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; log.info(&amp;quot;EJBContext: &amp;quot; + ejbContext);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Principal principal = ejbContext.getCallerPrincipal();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; log.info(&amp;quot;Caller Principal: &amp;quot; + principal);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return &amp;quot;Hello &amp;quot; + principal.getName() + &amp;quot;!&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // Add business logic below. (Right-click in editor and choose
&amp;nbsp;&amp;nbsp;&amp;nbsp; // &amp;quot;Insert Code &amp;gt; Add Business Method&amp;quot;)
&amp;nbsp;
}&lt;/pre&gt;
&lt;p&gt;Say glassfish to request authentication for calling this EJB (in META-INF/sun-ejb-jar.xml):&lt;/p&gt;
&lt;pre&gt;
&amp;lt;sun-ejb-jar&amp;gt;
    &amp;lt;enterprise-beans&amp;gt;
        &amp;lt;ejb&amp;gt;
            &amp;lt;ejb-name&amp;gt;TestSecurityBean&amp;lt;/ejb-name&amp;gt;
            &amp;lt;ior-security-config&amp;gt;
                &amp;lt;transport-config&amp;gt;
                    &amp;lt;integrity&amp;gt;supported&amp;lt;/integrity&amp;gt;
                    &amp;lt;confidentiality&amp;gt;supported&amp;lt;/confidentiality&amp;gt;
                    &amp;lt;establish-trust-in-target&amp;gt;supported&amp;lt;/establish-trust-in-target&amp;gt;
                    &amp;lt;establish-trust-in-client&amp;gt;supported&amp;lt;/establish-trust-in-client&amp;gt;
                &amp;lt;/transport-config&amp;gt;
                &amp;lt;as-context&amp;gt;
                    &amp;lt;auth-method&amp;gt;username_password&amp;lt;/auth-method&amp;gt;
                    &amp;lt;realm&amp;gt;default&amp;lt;/realm&amp;gt;
                    &amp;lt;required&amp;gt;true&amp;lt;/required&amp;gt;
                &amp;lt;/as-context&amp;gt;
                &amp;lt;sas-context&amp;gt;
                    &amp;lt;caller-propagation&amp;gt;supported&amp;lt;/caller-propagation&amp;gt;
                &amp;lt;/sas-context&amp;gt;
            &amp;lt;/ior-security-config&amp;gt;

        &amp;lt;/ejb&amp;gt;
    &amp;lt;/enterprise-beans&amp;gt;
&amp;lt;/sun-ejb-jar&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Write client:&lt;/p&gt;
&lt;pre&gt;public class Client {
    private static Logger log = Logger.getLogger(Client.class.getName());

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws NamingException {
        TestSecurityBeanRemote testSecurityService = getRemoteService();
        String result = testSecurityService.sayRemoteHello();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; log.info(&amp;quot;Result:&amp;quot; + result);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp; public static TestSecurityBeanRemote getRemoteService() throws NamingException {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TestSecurityBeanRemote testSecurityService = null;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String host = &amp;quot;localhost&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String port = &amp;quot;3700&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Properties props = new Properties();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; props.setProperty(&amp;quot;java.naming.factory.initial&amp;quot;, &amp;quot;com.sun.enterprise.naming.SerialInitContextFactory&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; props.setProperty(&amp;quot;java.naming.factory.url.pkgs&amp;quot;, &amp;quot;com.sun.enterprise.naming&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; props.setProperty(&amp;quot;java.naming.factory.state&amp;quot;, &amp;quot;com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; props.setProperty(&amp;quot;org.omg.CORBA.ORBInitialHost&amp;quot;, host);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; props.setProperty(&amp;quot;org.omg.CORBA.ORBInitialPort&amp;quot;, port);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // standard way to put authentication info into remote ejb call
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // it is not working with Glassfish - own way for authentication should be used
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // props.setProperty(Context.SECURITY_PRINCIPAL, &amp;quot;user1&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // props.setProperty(Context.SECURITY_CREDENTIALS, &amp;quot;password1&amp;quot;);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProgrammaticLogin programmaticLogin = new ProgrammaticLogin();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; programmaticLogin.login(&amp;quot;user1&amp;quot;, &amp;quot;password1&amp;quot;);


&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Context amInitial = null;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; amInitial = new InitialContext(props);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; testSecurityService = (TestSecurityBeanRemote) amInitial.lookup(TestSecurityBeanRemote.class.getName());

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return testSecurityService;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }

}
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
  &lt;code&gt;W&lt;/code&gt;rite auth.conf&lt;/p&gt;
&lt;p&gt;
  &lt;code&gt;default {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
    com.sun.enterprise.security.auth.login.ClientPasswordLoginModule
    required debug=false;&lt;br /&gt;};&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Add required libraries from glassfish into project dependencies:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;$GF_PATH/lib/appserv-rt.jar&lt;/li&gt;
  &lt;li&gt;$GF_PATH/lib/appserv-admin.jar&lt;/li&gt;
  &lt;li&gt;$GF_PATH/lib/javaee.jar&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Run client with option to use this file with option &lt;code&gt;-Djava.security.auth.login.config=./auth.conf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Add user1 into file realm:&lt;/p&gt;
&lt;p&gt;
  &lt;code&gt;#./asadmin create-file-user user1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now you should be able to call your remote EJB with using specified
  user and password&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-05-04T12:39:17Z</dc:date>
  </entry>
  <entry>
    <title>Spring Security and Step2 Integration library released</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=118690" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=118690</id>
    <updated>2010-04-30T17:18:55Z</updated>
    <published>2010-04-30T17:17:57Z</published>
    <summary type="html">&lt;p&gt;
  &lt;a class="external"
  href="http://static.springsource.org/spring-security/site/index.html"&gt;Spring-Security&lt;/a&gt;
  is a great framework closelly integrated into SpringFramework and
  added secirity services in many aspects. One of the aspects - is
  authenication, and Spring-Security supports many way for
  authentication, including OpenID.&lt;/p&gt;
&lt;p&gt;
  &lt;a class="external" href="http://code.google.com/p/step2/"&gt;Step2&lt;/a&gt; -
  is a library developed by Google. It wrapps openid4java library (also
  used in Spring-Security) and added some addtional functionality.&lt;/p&gt;
&lt;p&gt;
  &lt;b&gt;Spring-Security-Step2&lt;/b&gt; is a project to integrate these 2 nice
  solutions. From one side, it is totally compatible with native
  spring-security-openid library in terms of configuration. You can
  simple replace spring-security-openid by spring-security-step2 (with
  dependencies) and everything should continue as well. As result,
  additionally to standard spring-security-openid features you will get:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Support for &lt;a
      href="../../../../../web/spring-security-step2/wiki/-/wiki/Main/Google%20Apps%20Support"&gt;Google
      Apps Domains&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Support working in &lt;a
      href="../../../../../web/spring-security-step2/wiki/-/wiki/Main/Google+App+Engine+Support"&gt;Google
      App Engine&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;a
      href="../../../../../web/spring-security-step2/wiki/-/wiki/Main/Getting+User+Attributes"&gt;Getting
    attributes&lt;/a&gt; by using SReg (additionally to Attribute Exchange
    used by default)&lt;/li&gt;
  &lt;li&gt;
    &lt;a
    href="../../../../../web/spring-security-step2/wiki/-/wiki/Main/OpenIdAuthenticationHandler"&gt;Handling&lt;/a&gt;
    success response from openId provider to (for example) automatic
    creation local account&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Please looks our &lt;a
  href="../../../../../web/spring-security-step2/wiki"&gt;Wiki&lt;/a&gt; for more details.&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-04-30T17:17:57Z</dc:date>
  </entry>
  <entry>
    <title>First deployment into GAE</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=111283" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=111283</id>
    <updated>2010-04-20T17:22:40Z</updated>
    <published>2010-04-20T17:21:13Z</published>
    <summary type="html">&lt;p&gt;Hi&amp;nbsp;Friend!&lt;/p&gt;
&lt;p&gt;You can see our app (even with some trivial ui) on the GAE: &lt;a href="http://taskoncc.appspot.com"&gt;taskoncc.appspot.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Also, I've made some changes in code for better GAE support
  (unfortunately behavior is not always same&amp;nbsp; in SDK and production GAE).&lt;/p&gt;
&lt;p&gt;Next steps:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;I will start to work on emails processing&lt;/li&gt;
  &lt;li&gt;Marek on web-UI (first of all - task list/ task view/ task edit)&lt;/li&gt;
  &lt;li&gt;Andrey on FF plugin&lt;/li&gt;&lt;/ul&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-04-20T17:21:13Z</dc:date>
  </entry>
  <entry>
    <title>Andrey joined the project</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=109956" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=109956</id>
    <updated>2010-04-19T16:53:17Z</updated>
    <published>2010-04-19T16:53:07Z</published>
    <summary type="html">&lt;p&gt;I'm happy to announce Andrey joined into the project.&lt;/p&gt;
&lt;p&gt;His first task he will work on - plugin for Firefox&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-04-19T16:53:07Z</dc:date>
  </entry>
  <entry>
    <title>Liefray Performance: Liferay  и Хабраэффект</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=105738" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=105738</id>
    <updated>2010-04-16T12:26:49Z</updated>
    <published>2010-04-16T12:14:27Z</published>
    <summary type="html">&lt;p&gt;Ну что - начнем заполнять проект контентом.&lt;/p&gt;
&lt;p&gt;Несколько раз уже слышал вопрос: &amp;quot;А как у Liferay&amp;nbsp; с
  производительностью&amp;quot;. В принципе - я конечно проводил некоторое
  нагрузочное тестирование - результаты есть в &lt;a
    href="http://www.emforge.net/web/akakunin/blogs/-/blogs/liferay-on-amazon-ec2-performance-testing-results"&gt;этом
  блоге&lt;/a&gt;, но тест все-таки был немного синтетическим - так как
  виртуальные пользователи просто ходили по сайту ничего не меняя&lt;/p&gt;
&lt;p&gt;Каким то показателем является то, что сам&amp;nbsp; Liferay.com&amp;nbsp;
  использует свою же (правда Enterprise)&amp;nbsp; версию, а нагрузка у них
  я думаю нормальная идет.&lt;/p&gt;
&lt;p&gt;Но вот появилась возможность провести еще одно нагрузочное
  тестирование. После выхода &lt;a
    href="http://habrahabr.ru/blogs/i_am_advertising/90950/"&gt;поста про
    EmForge Portal&lt;/a&gt; на главную страницу на Хабре мой сервер испытал
  ХабраЭффект - и, вышел из испытания с честью. Вот несколько цифр:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;В качестве хостинга по прежнему используется минимальный instance
    Amazon EC2;&lt;/li&gt;
  &lt;li&gt;Liferay 5.2.3 ( с некоторыми моими фиксами), база MySQL&lt;/li&gt;
  &lt;li&gt;В качестве front-end сервера стоит apache2, &amp;nbsp;который передает
    траффик tomcat-у через mod_jk&lt;/li&gt;
  &lt;li&gt;В течении 5-ти часов примерно 200 уникальных посетителей в час.
    В&amp;nbsp;среднем 5 просмотров на пользователя&lt;/li&gt;
  &lt;li&gt;Из них примерно 40 (в час) создали свой аккаунт&lt;/li&gt;
  &lt;li&gt;Из них примерно 20 (в час) создали свой проект (community)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Нагрузка не бог весть какая - но все-таки хоть что-то, плюс
  пользователи все-таки активное изменяли данные на портале.&lt;/p&gt;
&lt;p&gt;Загрузка системы только в пиковый момент (видимо когда пост
  только-только вышл на главную) подошла к отметке 60%,&amp;nbsp; остальное
  время на превышала 30%&lt;/p&gt;
&lt;p&gt;&amp;nbsp;То есть данное количество пользователе не загрузила достаточно
  слабенькую виртуальную машину. Все-таки со скоростью у Liferay&amp;nbsp;
  все в порядке.&lt;/p&gt;
&lt;p&gt;Если у кого есть еще какие данные по производительности (реальной)
  liferay (какие системы какое количество пользователе держат) - буду
  крайне признателен&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-04-16T12:14:27Z</dc:date>
  </entry>
  <entry>
    <title>EmForge on Google Apps Marketplace</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=83574" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=83574</id>
    <updated>2010-05-13T14:05:13Z</updated>
    <published>2010-04-13T09:11:38Z</published>
    <summary type="html">&lt;p&gt;
  &lt;img align="left" alt="Google Apps Marketplace" height="183"
    src="http://www.emforge.net/image/image_gallery?uuid=87de86be-3f83-4329-9e8a-7834fc0daeea&amp;amp;groupId=10278&amp;amp;t=1273759505978"
  width="225" /&gt;In the beginning of March &lt;a
    href="http://googleblog.blogspot.com/2010/03/open-for-business-google-apps.html"&gt;Google
    Launched it's Marketplace&lt;/a&gt; for applications, integrated with
  Google Apps. Via this Marketplace, Domain Administrator may now add
  new applications, integrated with Google Apps and extended
  functionality, available for Google Apps Users.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
  &lt;strong&gt;And today I'm happy to announce EmForge Portal on Google Apps Marketplace!&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;Integration for now very simple - we only
  implement Single-Sign-On with Google Apps and added special feature,
  allowed project admins to invite users into project with using their
  Google Contacts or Domain Users.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;But many features we are planning to add
  very soon.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
  &lt;a
      href="http://www.google.com/enterprise/marketplace/viewListing?productListingId=4079+1893460409963694567"&gt;&lt;img
      alt="" height="46"
      src="http://www.emforge.net/image/image_gallery?uuid=fec8f9b0-3f0f-4deb-8432-8be590cbbefd&amp;amp;groupId=10278&amp;amp;t=1271151058296" width="208" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;To add EmForge into your Google Apps
  Domain simple go into &lt;a
    href="http://www.google.com/enterprise/marketplace/viewListing?productListingId=4079+1893460409963694567"&gt;EmForge
    on Marketplace&lt;/a&gt; and click on &amp;quot;Add It Now&amp;quot; button.&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-04-13T09:11:38Z</dc:date>
  </entry>
  <entry>
    <title>Files tool to share binary releases</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=68490" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=68490</id>
    <updated>2010-03-23T07:33:27Z</updated>
    <published>2010-03-23T07:30:20Z</published>
    <summary type="html">&lt;p&gt;Hi!&lt;/p&gt;
&lt;p&gt;Last week we started to get responses from users via User Voice
  service, and today I'm happy to announce first request completed.&lt;/p&gt;
&lt;p&gt;Now, each project hosted in EmForge has &amp;quot;Files&amp;quot; tooll. This
  tool (placed on separate page) allowed users to keep files (like
  ibnary releases of project) with description, organize them into folders.&lt;/p&gt;
&lt;p&gt;There are many additional nice featues like:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;WebDAV access;&lt;/li&gt;
  &lt;li&gt;Comments on files;&lt;/li&gt;
  &lt;li&gt;Ratings;&lt;/li&gt;
  &lt;li&gt;Powerful Permissions configuration.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Hope it will make EmForge Portal more comfortable for our users.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Happy EmForging!&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-03-23T07:30:20Z</dc:date>
  </entry>
  <entry>
    <title>EmForge and Liferay on SunTechDays 2010 Saint-Petersburg</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=45470" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=45470</id>
    <updated>2010-03-20T21:54:31Z</updated>
    <published>2010-03-20T21:21:11Z</published>
    <summary type="html">&lt;p&gt;
  &lt;a href="http://developers.sun.com/events/techdays/"&gt;Sun (Oracle?)
  TechDays&lt;/a&gt; - is a global developers conference, organized by Sun
  Microsystems in several cities in the world and joined many developers
  to discuss about latest news in Java/Solaris (and other Sun
  technologies) world.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In Russia, usually this conference organized in &lt;a
  href="http://developers.sun.ru/techdays2010/index.php/en"&gt;Saint-Petersburg&lt;/a&gt;.
  More than 3500 visitors attended Sun Tech Days 2009 in St.Petersburg,
  I'm not sure about planned amount for this year, but, I can say it is
  biggest developers even in my city (probably in Russia???)&lt;/p&gt;
&lt;p&gt;And I'm happy to announce 2 my presentations I will do on SunTechDays
  this year: &lt;a
    href="http://developers.sun.ru/techdays2010/boothstalks"&gt;one about
    EmForge and another about Liferay&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;During first presentation I'm going to talk about problems, usually
  meet by Distributed teams, about important of communication and how
  EmForge help in this case.&lt;/p&gt;
&lt;p&gt;Second will be about Liferay, how Liferay help us during developing
  EmForge Portal, as well as how it is possible to build site with many
  functionality (web-content, blogs, forums, social network) in 20
  minutes. Actually, I'm going (during my short 20 minutes presentation)
  simple run Liferay from downloaded bundle and build sample site - I'm
  sure, any PowerPoint Presentation cannot replace this life-demonstration.&lt;/p&gt;
&lt;p&gt;Will be happy to see you on SunTechDays 2010 Saint-Petersburg!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-03-20T21:21:11Z</dc:date>
  </entry>
  <entry>
    <title>Integration with Gravatar</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=43582" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=43582</id>
    <updated>2010-03-17T08:20:59Z</updated>
    <published>2010-03-17T08:16:37Z</published>
    <summary type="html">&lt;p&gt;EmForge designed to be not only Project Collaboration platform, but
  we have a plans to make it a Social Network for developers. We are not
  going to implement own new Social network, but want to integrate with
  many already existed Social Services widelly used by developers.&lt;/p&gt;
&lt;p&gt;We already simplified login with using Google, Yahoo (and any OpenID
  in general) account. Now, we providing integration with &lt;a
  href="http://en.gravatar.com/"&gt;Gravatar&lt;/a&gt; - service kept user
  avatars in one place.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
  &lt;img alt="" src="http://s.gravatar.com/images/logo.png" /&gt;&lt;/p&gt;
&lt;p&gt;Now, if you have avatar there - no need to define new in EmForge -
  EmForge will just reuse it. Of Course you can change it to some
  EmForge-Specific (if you want).&lt;/p&gt;
&lt;p&gt;It is only first steps, many more social features planned in the
  nearest feature, first of all integration with Google Services,
  LinkedIn, Friends Connect.&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-03-17T08:16:37Z</dc:date>
  </entry>
  <entry>
    <title>New Release with Subversion Hosting, Admin Tool, Localization and Many More</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=40774" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=40774</id>
    <updated>2010-03-10T11:53:12Z</updated>
    <published>2010-03-10T10:47:45Z</published>
    <summary type="html">&lt;p&gt;I'm very happy to announce new version of EmForge Portal with great
  imrpovements we did during February&lt;/p&gt;
&lt;h2&gt;Subversion Hosting&lt;/h2&gt;
&lt;p&gt;First of all - it is subversion hosting. Now, during creation of new
  project you may create subversion repository for it. Access to
  repository controlled from EmForge Portal:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;only team members have rights to commit into repository;&lt;/li&gt;
  &lt;li&gt;for restricted and private project - only team members has access
    to repository even for read-only&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Subversion hosting is &lt;strong&gt;free&lt;/strong&gt; for open-source projects.
  During beta-stage - it is free for any project, IN future, we will
  provide free plan for small teams/repository, for bigger team plans
  will start from $5 per month.&lt;/p&gt;
&lt;p&gt;We are going to continue improvement Version Control hosting on
  EmForge Portal. Next plans are:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Access Control for Folders and Roles;&lt;/li&gt;
  &lt;li&gt;Git Hosting;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;With Subversion hosting we started provide full set of tools required
  for distributed software development teams&lt;/p&gt;
&lt;h2&gt;Admin Console&lt;/h2&gt;
&lt;p&gt;Admin Console added to allow project owner/manager to edit different
  project settings, team membership and role assignment.&lt;/p&gt;
&lt;h2&gt;Localization&lt;/h2&gt;
&lt;p&gt;Use EmForge Portal with your native language. We added support for
  Russian, Polish, Brazilian. We need contributors to add support for
  more languages. Please write into our &lt;a
  href="http://www.emforge.net/web/emforge-portal/forum"&gt;Forum&lt;/a&gt; if
  you like to see EmForge in you language and may help us!&lt;/p&gt;
&lt;h2&gt;Tasks/Burndown/Filters improvement&lt;/h2&gt;
&lt;p&gt;We improved our main tool:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;better and faster tasks managment,&lt;/li&gt;
  &lt;li&gt;Detailed bunrdown chart;&lt;/li&gt;
  &lt;li&gt;You may save your filters of tasks to use later;&lt;/li&gt;
  &lt;li&gt;and many more.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;EmForge Portal team hoped with all these imrpovements EmForge Portal
  become more and more useful and comfortable for teams. But we are not
  going to stop - we have many plans and hope to continue add new
  features and make EmForge more and more comfortable.&lt;/p&gt;
&lt;h2 style="text-align: center;"&gt;Happy EmForging!&lt;/h2&gt;
&lt;h2 style="text-align: center;"&gt;
  &lt;img alt="" src="http://www.emforge.net/image/image_gallery?uuid=f4823b68-addb-4d88-9e14-d90be3abe5c1&amp;amp;groupId=14403&amp;amp;t=1265026394920" /&gt;&lt;/h2&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-03-10T10:47:45Z</dc:date>
  </entry>
  <entry>
    <title>Improved BurnDown, Stored Filters and  Simplified Google and Yahoo users login</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=23632" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=23632</id>
    <updated>2010-02-08T23:05:44Z</updated>
    <published>2010-02-08T22:56:43Z</published>
    <summary type="html">&lt;p&gt;We released beta version a week ago. Of course this week was spent
  for different issues related to beta-release, but we did not stop to
  improve our EmForge Portal.&lt;/p&gt;
&lt;p&gt;So, new version were deployed - during this week followed changes
  were implemented:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Improved Release BurnDown Chart - not it is possible to see
    'detailed' version of Release BurnDown (in case some release is
    selected in tasks filter). Detailed BurnDown displayed chart
    separatelly for low, high and normal tasks, as well as allow to
    select date range, release and user;&lt;/li&gt;
  &lt;li&gt;Task Filters , selected by user in projects are stored between
    sessions. Now, then you back into some project task-list, you see
    same set of tasks as last time you visited this project;&lt;/li&gt;
  &lt;li&gt;Now it is much simpler to login with using your Google and Yahoo
    account. Simple click on Google or Yahoo button in login dialog;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;I hope al of these changes will make working with EmForge more comfortable!&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-02-08T22:56:43Z</dc:date>
  </entry>
  <entry>
    <title>Kenai Users: Welcome to EmForge Portal!</title>
    <link rel="alternate" href="http://www.emforge.net/c/blogs/find_entry?entryId=23542" />
    <author>
      <name>Alexey Kakunin</name>
    </author>
    <id>http://www.emforge.net/c/blogs/find_entry?entryId=23542</id>
    <updated>2010-02-08T10:04:48Z</updated>
    <published>2010-02-08T09:45:04Z</published>
    <summary type="html">&lt;p&gt;As you probably know, Oracle decided to do not support Kenai.com
  project, provided by Sun as project hosting service for open-source project.&lt;/p&gt;
&lt;p&gt;I will be happy if Kenai users will found EmForge Portal useful for
  them and will be happy to help in migration process&lt;/p&gt;
&lt;h2&gt;Features provided for Open-Source projects&lt;/h2&gt;
&lt;p&gt;For open-source projects EmForge Portal provided:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Totally &lt;strong&gt;Free&lt;/strong&gt; Services;&lt;/li&gt;
  &lt;li&gt;Own &amp;quot;&lt;strong&gt;workspace&lt;/strong&gt;&amp;quot; for each project with
    own set of pages;&lt;/li&gt;
  &lt;li&gt;You can assign &lt;strong&gt;own domain-name&lt;/strong&gt; to this workspace,
    own theme (Liferay themes used) and own logo - so, it will looks
    like your own site, provided wide range of tools for end-users;&lt;/li&gt;
  &lt;li&gt;Powerful, but simple to use &lt;strong&gt;Task-Management&lt;/strong&gt; to
    plan your activities for project;&lt;/li&gt;
  &lt;li&gt;
    &lt;strong&gt;Time-Tracking&lt;/strong&gt; tools and &lt;strong&gt;Burndown&lt;/strong&gt;
    chart to check the progress of project;&lt;/li&gt;
  &lt;li&gt;
    &lt;strong&gt;Wiki&lt;/strong&gt; to share information;&lt;/li&gt;
  &lt;li&gt;
    &lt;strong&gt;Blog&lt;/strong&gt; to publish project related news;&lt;/li&gt;
  &lt;li&gt;
    &lt;strong&gt;Forum&lt;/strong&gt; for communication with end-users, as well as
    discussing different issues inside the team;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Blog you currently reading is part of such workspace for &lt;a
    href="http://www.emforge.net/web/emforge-portal"&gt;EmForge Portal&lt;/a&gt; project.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;
  &lt;strong&gt;It is very easy to &lt;/strong&gt;
  &lt;a href="http://www.emforge.net/start-new-project"&gt;&lt;strong&gt;Start New Project&lt;/strong&gt;&lt;/a&gt;
  &lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;EmForge Portal - Open&amp;nbsp;Source project&lt;/h2&gt;
&lt;p&gt;EmForge Portal itself - &lt;strong&gt;open-source&lt;/strong&gt; project. We just
  started few months ago and already providing wide set of features. We
  hope to provide much more in the nearest months - and, if you like -
  you can &lt;strong&gt;join us&lt;/strong&gt; and help to make best hosting service
  for projects! &lt;/p&gt;
&lt;p&gt;Project itself hosted on EmForge: &lt;a
  href="http://www.emforge.net/web/emforge-portal"&gt;http://www.emforge.net/web/emforge-portal&lt;/a&gt;
  and you can use own &lt;a
  href="http://www.emforge.net/web/emforge-portal/forums"&gt;forum&lt;/a&gt; to
  discuss any questions related to the project.&lt;/p&gt;
&lt;h2&gt;New features coming soon&lt;/h2&gt;
&lt;p&gt;During this month we are going to start Subversion Hosting. Actually
  - we already have it - but just some UI to control Subversion
  from&amp;nbsp;EmForge Portal UI are missed. If you need it, or want
  migrate your repository from Kenai - please write to our forum - we
  will provide you tools.&lt;/p&gt;
&lt;p&gt;Also - we are woring hard on many other improvements, including:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Closer integration with Google Services and Social Networks
    (Facebook, LinkedIn first of all);&lt;/li&gt;
  &lt;li&gt;Tasks Collection - to collect tasks from different places in your profile;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Many more features comes!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Alexey Kakunin</dc:creator>
    <dc:date>2010-02-08T09:45:04Z</dc:date>
  </entry>
</feed>

