Frequently Asked Questions

About portals

  1. What is a portal?
  2. What is a portlet?
  3. What is a portlet container
  4. Are there any standards for developing portlets?
  5. What does it means to be JSR 168 compliant?
  6. Is the eXo platform compliant
  7. What does it means to proove WSRP interoperability?
  8. Has the eXo platform prooved interoperability?

About the eXo platform

  1. The platform overview - a picture
  2. Is the eXo portlet container ready for production?
  3. Does the eXo portlet container provides specifications extensions
  4. How do you compare the eXo platform container and the Reference Implementation (RI)- Pluto
  5. What technologies are utilized in eXo?
  6. How do you compare to other Open Source portals?
  7. What is Java Server Faces?
  8. Does eXo come packaged with any portlets and what does JSR 168 standard mean to portlet developers?
  9. What about eXo’s workflow service?
  10. What is eXo’s customization model look like?
  11. Is eXo’s ui easy to maintain?
  12. What kind of content management system does eXo implement?
  13. What does eXo security model look like?
  14. Are there any tools to help developers create new portlets?
  15. Can eXo interact with other technologies like Struts and Cocoon?
  16. How is eXo integrated and configured into server environments?
  17. Is eXo a very performant platform?
  18. How is the WSRP layer implemented?
  19. How does eXo handle group administration?

Technical question

  1. How do I check out the latest src code from cvs?
  2. What do I need to build exoplatform?
  3. How do I build exoplatform
  4. How exoplatform source code organize?
  5. What is the maven build order
  6. Why every service has an api and impl jar file separately
  7. What is the relation of picocontainer and exo services ?
  8. How and when the services are deployed
  9. How a porlet is deployed ?
  10. How do I customize the localization for my public website?
  11. How do I support the other encoding for request parameter than UTF-8
  12. How can one set the logo and/or html for the banner and footer
  13. How does the styles work
  14. What is the renderer?
  15. What is the skin-config.xml
  16. Why I need many different renderers for UIPage , UIPortlet...... ?
  17. How do I change the security implementation to fit the existing security of my organization

About portals

What is a portal?
A portal is a unified gateway to several dynamic information sources
What is a portlet?
A portlet is a web component that is aggregated in a portal page
What is a portlet container
A portlet container manages the portlet lifecycle and allows -through an API - the interaction betaween the portal and the portlet code.
Are there any standards for developing portlets?
There are two main standars from the Java and Web Services worlds
  • portlet API (former JSR 168) : it specifies a common way to integrate portlets into a portlet container.
  • Web Services for Remote Portals (WSRP) : it allows to query remote portlets using WSDL/SOAP mechanisms. Therefore portal and portlet containers could be deployed on remote servers but also be implemented in different languages
What does it means to be JSR 168 compliant?
Like most other standard Java APIs there's a specification, a reference implementation (as a proof of concept of the specification, and at the same time the reference for behaviour which may be incompletly specified), a TCK (compatability test suite) and multiple implemtations. All of the implementations have to pass a standard test (the TCK) in order to call themselves compliant.
Is the eXo platform compliant
The eXo platform was one of the first solution to get the TCK certification from Sun Microsystems (December 2003). It is also the only Open Source (other than the Reference Implementation) portlet container to be certified.
What does it means to proove WSRP interoperability?
The WSRP standard has been established by the OASIS fundation. There is no TCK available for it and an implementation have to test interoperability with other implementations.
Has the eXo platform prooved interoperability?
Discussions with OASIS and other portal companies have been started to proove that interoperability.

About the eXo platform

The platform overview - a picture
Is the eXo portlet container ready for production?
Yes. When designing the eXo platform portlet container architecture, we focused on optimization and scalability and provided some advanced features like :
  • shared sessions
  • object pooling
  • enhanced caching (global and per user)
Does the eXo portlet container provides specifications extensions
Yes. The following extensions - proposed for sepcs 1.1 - have already been implemented :
  • portlet filters
  • inter portlet communication
Some of the previous enhancements (shared sessions and global cache) are also specification extension.
How do you compare the eXo platform container and the Reference Implementation (RI)- Pluto

The first goal of the RI is to be the basic implementation of the specifications. Pluto has been implemented in that goal and is not ready or even intended for production.

Some companies have realized that fact and are bundling the eXo portlet container with their portal to offer a powerfull JSR 168 portlet container to their customers.

What technologies are utilized in eXo?
The eXo platform is based on innovative tools, APIs and frameworks such as Java Server Faces, Pico Container and AspectJ. Nevertheless the use of those new tools is completely transparent to the end user and using the eXo platform is straighforward.
How do you compare to other Open Source portals?

The eXo platform is clearly leading the innovation in the Open Source portal space.

What is Java Server Faces?
Java Server Faces (JSR-127) is a new web framework paradigm. It provides a real MVC reference architecture allowing developers to deal with components and events on the web layer almost in the same way as they would on rich Swing clients. The eXo platform portal is the first application available based on JSF.
Does eXo come packaged with any portlets and what does JSR 168 standard mean to portlet developers?
The eXo platform comes with a bunch of portlets. One of the great advantages of the JSR 168 standard lies in the fact that you can build your own portal upon Java Server Faces and use Velocity or Cocoon for portlets. eXo provides Struts, Velocity and Cocoon integration portlets. To illustrate this new concept, the Sun sample portlets are included in the platform demo site. They integrate and work perfectly with eXo platform. eXo alsoe provides a portlet framework à la Struts. It offers to portlet developers the possibility to manage all action mappings of all portlet modes in a single XML file. The latter also includes exception handling and dynamic action classes.
What about eXo’s workflow service?
The workflow service is provided via a basic workflow portlet. This portlet utilizes a service built on jBPM – a wonderfully architected, open source workflow engine. Moreover, the eXo development team has good connections with Tom Baens and his team.
What is eXo’s customization model look like?
eXo’s customization model is completely innovative as it is based on a tree manipulation (JSF model) and not templates. Therefore users can create and manipulate many UIComponents within that tree which represents the page to be rendered. There is a real time customizer portlet that lets the user customize its site as well as the group pages/site is in. More than just the layout, the user can also choose the design (decorators) of those UI components as well as the language he wants to use. The tree approach is a new standard proposed in JSF specifications and no other portal solution has yet utilized this elegant way to handle user components. It is very easy to add new decorators for those new portlets. A designer with no HTML knowledge could do it. The Exo Portal JSF tree:
          UIPortal                           --> customized renderer
            UIPortlet(header portlet)        --> customized renderer
            UIPage                           --> customized renderer
              UIMainColumn                   --> customized renderer
                UITab                        --> customized renderer
                  UIRow                      --> customized renderer
                    UIColumn                 --> customized renderer
                      UIPortlet              --> customized renderer
                      UIPortlet              --> customized renderer
                      UIPortlet              --> customized renderer
                      ......
                      

            UIPage                           --> customized renderer
            .....


            UIPortlet(footer portlet)        --> customized renderer
              
        
Is eXo’s ui easy to maintain?
All the information about the user pages can be exported/imported in XML files, which make it very powerful for maintainability, version updates and backups.
What kind of content management system does eXo implement?
This module is built using the composite pattern as described in the now famous GoF book. The well-known Object Oriented design has been enhanced with AOP (AspectJ) to provide a cached and indexed web file system. Aspects such as versioning, locking and webdav are on the way. Of course, JSR 170 will be implemented as soon as it is out.
What does eXo security model look like?
eXo supports several level of security:
  • J2EE security roles
  • Organization memberships
Roles can be defined for each portlet, for each mode to protect access to its content.
Are there any tools to help developers create new portlets?
eXo provides an eclipse plug-in that helps developers to develop and deploy portlets.
Can eXo interact with other technologies like Struts and Cocoon?
Yes, eXo supports a concept of technology bridges, which provide for integration with other frameworks.
How is eXo integrated and configured into server environments?
The eXo platform can be distributed as an EAR archive and therefore can be used in any J2EE 1.3 compliant application server like Websphere or Weblogic. So the configuration is the basic J2EE one.
Is eXo a very performant platform?
The performance from beta 4 to beta 5 has dramatically been improved. The average response time on a basic computer for a basic request is of 18 ms!
How is the WSRP layer implemented?
The WSRP implementation is a layer between the client portal and the JSR 168 portlet container.

Therefore, it is possible to access JSR 168 compliant portlets from a non Java portal through the WSRP channel.

How does eXo handle group administration?
Organization Admin portlet shows a list of the users, groups and memberships. Users with admin roles can create groups and assign memberships to other user. The Admin can also go to another user’s site context and have the capabilities of that user. Using the group site customizer portlet, the group admin (any user can be a group admin if he has group-admin membership of that group) can create a page for the group. The page will be inserted into the personal pages of the other group members (note the pages are only inserted if the other members subscribe to group-pages membership).

Technical question

How do I check out the latest src code from cvs?
  • use the command cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/exo co exoplatform
  • You can also find more information how to setup wincvs client and eclipse at: http://sourceforge.net/docman/display_doc.php?docid=14033&group_id=1
  • What do I need to build exoplatform?
    You need to have jdk1.4 or later and maven tool
    How do I build exoplatform
  • Go to exoplatform/exo-build , edit the project.properties , build.properties and global.properties file according to your maven configuration. Run maven multiproject:install. This step will produce the jar/war files and copy them to your maven repository
  • Go to exoplatform/exo-server, run maven exo-tomcat:deploy or maven exo-jetty:deploy or maven ear:ear. This step will copy the the jar/war files from maven repository and additional configuration file to the server location or a server template.
  • important: by default the tomcat.server.dir , jetty.server.dir, jboss.server.dir are sibbling to your exoplatform directory. If you don't change those properties in global.properties file, you need to have the exo-tomcat, exo-jetty, exo-jboss in the parent directory of your exoplatform.

    important: If you do not copy the build.properties file in exo-build to your user home directory. You will not be able to run the maven task in sub module.

    Tip: To avoid rebuild the whole platform when you make a small change to a portlet or a service. There are many task that allow you to deploy the modified module to the server location:

    * exo-tomcat:deploy-war, exo-jetty:deploy-war: this task compile and copy the portlet application to the webapps directory

    * exo-tomcat:deploy-service, exo-jetty:deploy-service: this task compile and copy the service jar file to the service deploy dir common/lib for tomcat and ext/ dir for jetty

    * exo-tomcat:deploy-lib and exo-jetty:deploy-lib: this copy the jar file to common/lib directory of tomcat and ext/ directory of jetty

    * exo-tomcat:deploy-portal-lib and exo-jetty:deploy-portal-lib: this copy the jar file to shared/lib directory of tomcat and ext/ directory of jetty

    How exoplatform source code organize?
    Here is the exoplatform layout
    exoplatform/
               exo-commons/
               exo-services-container/
               exo-services/
                           exo-base-services/(cache, log, threadpool, database services)
                                             api 
                                             impl
                           exo-portlet-container-service/
                                                         api
                                                         impl
                           wsrp-service/
                                        api/
                                        impl/
                           portal-service/
                                          api
                                          impl
                           ..................
                           ..................
              exo-portal/
              exo-web/
              exo-portlet-framework/
                                    exo-framework
                                    jsf-framework
                                    velocity-framework
                                    struts-framework
              exo-portlets/
                           core/
                                user/
                                content/
                                ......
                                ......
                           sample/
                                  hello-world/
                                  sun-samples/
                                  velocity-eaxmples
                                  ................
                           third-party
              exo-server/
            
    What is the maven build order
    Maven calculate the build order for you base on the dependencies defined in the project.xml. But ususally the order should be exo-commons, exo-services-container, exo-services, exo-portal, exo-web , exo-portlet-framework, exo-portlets
    Why every service has an api and impl jar file separately
    This is the best way to make your code modular. Usually all exo interface and common classes are located at api and platform dependant classes or customized implementation are located in impl. For ex, you can find All OrganizationService, User , Group , Membership classes in organization-service/api and hiberntate implementation in impl. If a third party want to use ldap implementation , he just need to make another implementation for ldap and replace the jar file
    What is the relation of picocontainer and exo services ?
    Pico is a very light container, you can consider it as a HashMap that store all exo services. Plus When you drop a service into picocontainer, it will try to resolve service dependency for you. For example
              public class CacheService {
                public CacheService() {  }
              }
    
              public class DatabaseService {
                CacheService cacheService_ ;
                public DatabaseService(CacheService cService) {  
                  cacheService_ = sService ;
                }
              }
            
    So as you see the DatabaseService is depended on CacheService, if you call PicoContainer.registerClass(DatabaseService.class) , the picoconatainer will try to instantiate DatabaseService and throw an exception since there is no CacheService registered with the pico container. If you register the cache service first then DatabaseService, PicoContainer.registerClass(CacheService.class); Picocontainer.registerClass(DatabaseService.class). There will be no exception.
    How and when the services are deployed

    All the exo services are deployed when the method ServicesManager.getInstance() is called for the first time. Usually it is called in PortalContextListener class and this class is called when you deploy the portal.war package.

    When ServicesManager singleton initialize, it call method ClassLoader.getResources("exo/services/exo-service.xml"). This method will return all the xml file in in service impl jar file. The service manager read all the xml file and add the service to the picocontainer. For more information , please read our exo acticle 2

    How a porlet is deployed ?

    In each portlet application, you have this configuration in web.xml

              
              <listener> 
                <listener-class>
                  exo.services.portletcontainer.impl.servlet.PortletApplicationListener
                </listener-class>
              </listener>
              
            

    When a war in deployed into webapps dir , The web server will call the listener that you configure in web.xml. In our case the method in PortletApplicationListener.contextInitialized(..) will be called and we call ServicesManager.getInstance() , get the portlet container and register the i portlets that configure in porlet.xml file

    When you remove the war file from webapps directory , the method PortletApplicationListner.contextDestroyed(..) is called and we remove the portlets in PortletContainerService.

    How do I customize the localization for my public website?

    We currently support en, fr, vn, no, sk locales. To configure the properties file you need to create an properties file in exo/WEB-INF/classes and specify the location of the properties file in pages.xml. You can hand code for the default user-pages.xml or change it later by the portlet customizer

              
               <personal-pages>
                 <resource-name>locale.users.community</resource-name>
                 [...]
               </personal-pages>
    
               <group-pages>
                 <resource-name>locale.users.community</resource-name>
                 [...]
               </group-pages>
    
               And for the page , tab , portlet title you can use 
    
               <page default="true">
                 <title>${home}</title>
                 [...]
                    <tab default="true">
                      <title>${welcome}</title>
                      [...]
    
                        <portlet>
                          <title>${news}</title>
                          [...]
                        </portlet>
                    </tab>
               </page>
              
            

    You also need to translate all the properties files of each portlet. You can find those properties file in /WEB-INF/classes of each portlet application.

    How do I support the other encoding for request parameter than UTF-8
    We do not support it for now. If You want , you need to modify some code in exo-portal module. The servlet container parse the url the first time when you call request.getParameter(..) So you need to set the encoding for the HttpServletRequest in PublicRequestFilter , PrivateRequestFilter, AdminRequestFilter. Before any request.getParameter() method is called
    How can one set the logo and/or html for the banner and footer

    The banner and footer is the portlets themself. and user cannot remove or add it. Only admin can configure it before he start the server. to replace the banner or footer portlet, write a new portlet by your self and edit the portlet.xml file in web portlet application. Replcace the old one with your banner and footer portlet. By default , exo provide the banner and footer portlet that read a html fragment in /web/banner/community.html and /web/footer/community.html

    You can let user change the banner and footer by written a customizable banner and footer portlet and let user configure the look and feel in the edit mode

    How does the styles work

    Exo Portal use heavily css stylesheet to customize the look and feel of a portlet. To understand how it work you need to understand how the css matching rule work. Please refer to CSS-2 document for more detail.

    Consider the following portlet block

               --------------------------------------------------
               |                                                |
               | portlet title                                  |
               --------------------------------------------------
               |                                                |
               |                                                |
               |     portlet content                            |
               |                                                |
               |                                                |
               |------------------------------------------------|
            

    If you look at the html src code you will see some thing like

              
               <table class="default-portlet">
                 <tr>
                   <td class="portlet-title">Portlet title</td>
                 </tr>
                 <tr>
                   <td class="portlet-content">Portlet Content</td>
                 </tr>
               </table>
              
            

    and default-portlet.css

              .default-portlet { }
              .default-portlet  .portlet-title { color: black ; }
              .default-portlet  .portlet-content { color: black ; }
            

    So You can see that any block with portlet-title and portlet-content class and has block default-portlet as parent will have the black color for the text. To change look and feel of the portlet block, you need to change the class of the table tag to

              
              <table class="customized-portlet">
                [...]
              </table>
              
            

    and create the customized-portlet.css

              .customized-portlet { }
              .customized-portlet  .portlet-title { color: blue ; }
              .customized-portlet  .portlet-content { color: blue ; }
            

    So the text of the portlet-title and portlet-content block will change to the blue color without the need of changing the class name for the portlet-title and portlet-content block.

    With exo platform , you can customized the the class name of a portlet block in pages.xml of each user and the user later user can use the portlet customizer to change the style of each portlet block.

    What is the renderer?

    The renderer is a class that convert the internal representation of UIComponent to the html presentation or wrml presentation. For example: You have UIPortlet component that hold the information of a portlet

              class UIPortlet {
                String style_ ;
                String portletTitle_
                String portletContent_ ;
              }
            

    You need to a portlet renderer to convert the UIPortlet component to

              
                
                  Portlet title
                
                
                  Portlet Content
                
              
            
    What is the skin-config.xml
    skin-config.xml store the configuration for the renderers and styles. In this configuration You will find many list of the styles that associate with a renderer. For example: You have a set of {"style a", "style b", style c".} that associate with with portlet renderer A, {"style a", "style b", "style d"} associate with the portlet renderer B
    Why I need many different renderers for UIPage , UIPortlet...... ?
    Since each portlet and user require different layout so you need the different renderers. For example user A require the portlet button display on top of the portlet content while user B require the portlet button display at the bottom. In this case you need 2 renderers.
    How do I change the security implementation to fit the existing security of my organization
    You need to:
     
            a. Create a class which implements the exo.services.organization.OrganizationService
            b. create an ex-service.xml that configure to use your OrganizationServiceImpl
            c. package the your implementation as
               organization.jar/
                                exo/services/exo-service.xml 
                                my.compnay.organization.impl.*
            d. Replace exo organization implementation file by your organization implementation
               file
            
    Important: You need to implement method addListener method and broadcast the the event to the listener when you add/save/delete user, group, memebership since other service listen to the organization service. For example when a user is created/removed, the portal service need to catch the event to create/remove a pages.xml for that user.