SlideShare une entreprise Scribd logo
1  sur  83
Télécharger pour lire hors ligne
PC           IDM
MOP          Clustering
WSRP
WCI




ECM           IDM
WEBui         JCR
Connettori
OpenSocial
Novità

 Non solo portlet
 WCM e strumenti di amministrazione
 Il portale può essere interamente
 aggiornato dai web manager
 Gestione avanzata dei gruppi e dei
 documenti privati
 Semplicità di cooperazione tra componenti
Il Portale permette....
  Di ridurre i costi associando siti web ad applicazioni. Permette
  agli sviluppatori di riutilizzare svariati tipi di applicazioni e
  comporle all'interno di uno stesso contesto. Le portlet 2.0 sono lo
  standard attuale. Sono pensate per ottenere il riutilizzo.
  Agli utenti finali di personalizzare ogni parte del sito in maniera
  sicura garantendo gli accessi.
  Scalabilità - I portali sono predisposti alla replicazione dei dati su
  macchine in cluster.
  Di limitare i bug alla singola applicazione anzichè a tutta la pagina
  o a tutto il portale. E' possibile continuare a lavorare nel portale
  pur essendoci applicazioni in crash.
Licenze

 JBoss – Gatein e JCR sono rilasciati con
 licenza LGPL 2.1
 Exo – Gli strumenti di amministrazione
 sono rilasciati con licenza AGPL 3
 Redhat - Rilascia la EPP 5 (Enterprise
 Portal Platform). Contiene JBoss +
 Gatein+ Portlet Bridge + eXo ECM
Architettura
Strumenti esterni
Il Kernel
ECM
ECM - Drive
MOP (Model Object for Portal)

  Permette l'assegnazione di una pagina o di un gruppo di
  pagine per utente o gruppo. La stessa pagina può avere
  diverse preferenze a seconda dell'utenza
  Possibilità di esternalizzare la navigazione tramite import /
  export
  Le preferenze sono configurabili in 4 Scope: Contesto
  globale, sito, pagina e finestra
  Le preferenze sono ereditabili
MOP (Model Object for Portal)

  Relazione tra container, finestra e body. Il container crea
  una finestra tramite un meccanismo di template fornito da
  Exo
  Le pagine sono ereditabili, è possibile per una pagina
  ereditare le proprietà da un padre mantenendo comunque
  un diverso contenuto
  Layout gerarchico. Ogni parte del portale (finestra, pagina,
  sito, portale) ha la possibilità di ereditare un differente layout
  Introduce Chromattic, un framework opensource per il
  mapping tra oggetti e JCR
WCI (Web Container Integration)

 Attualmente supporta JBoss , Tomcat e Jetty
 Agisce durante il deploy per permettere una corretta
 installazione e durante ogni richiesta http
 Anticipa alcune funzionalità descritte nelle servlet 3.0
 Verrà aggiunta la parte di integrazione di SSO
WCI (Login e Logout programmatica)
                                   HttpServletRequest

void login(java.lang.String username,
java.lang.String password)
throws ServletException

void logout()
throws ServletException
PC (Portlet Container)
   Integra le portlet 2.0 in Exo portal in modo trasparente
   Permette di deploiare le portlet all'interno del portale
   mantenendo l'architettura di gestione delle finestre di Exo

<portlet>
<portlet-name>HelloWorldPortlet</portlet-name>
<portlet-class>
org.SimplestHelloWorldPortlet
</portlet-class>
<supports>
<mime-type>text/html</mime-type>
</supports>
<portlet-info>
<title>Simplest Hello World Portlet</title>
</portlet-info>
</portlet>
WSRP (Web Service Remote Portlet)
WSRP Producer
WSRP Consumer
Implementa le JSR 301 e 329 (portlet 1.0 e 2.0)
Permette di usare JSF 1.2 all'interno di un portlet
container.
Qualunque applicazione web basata su JSF può
diventare parte di un portale
Supporta Seam e RichFaces
<portlet>

 <portlet-name>yourPortletName</portlet-name>

 <portlet-class>

   javax.portlet.faces.GenericFacesPortlet

 </portlet-class>



 <init-param>

   <name>javax.portlet.faces.defaultViewId.view </name>

   <value>/welcome.xhtml</value>

 </init-param>
<faces-config>

      <application>

         <view-handler>

 org.jboss.portletbridge.application.PortletViewHandler

         </view-handler>

 <state-manager> org.jboss.portletbridge.application.
PortletStateManager </state-manager>

      </application>

      ...
<Module>
−
<ModulePrefs title_url="http://www.amoreepsiche.it/index.php?idcat">
     <Require feature="minimessage"/>
</ModulePrefs>
−
<Content type="html">
      <DIV >
      <TABLE width="100%"><TR><TD align=center>
      <DIV id="imgSRC__MODULE_ID__"></DIV>
      </TD></TR></TABLE>
       </DIV>
</Content>
</Module>
JCR
Ogni contenuto è condivisibile con REST
Supporta WebDav, FTP, RMI

REST        CURRENT                       LOCAL
ENCODING    IDENTITY                      SESSION
                           REST           PROVIDER
                           SERVLET


                                           POST
                                           GET
                                           DELETE
                                           PUT
FTP          BROWSER        WEBDAV
JCR
Supporta autorizzazione e ACL
Introduce lo scripting Groovy
Funzioni di Import / Export
Gestione degli eventi
Script per inizializzare i repository
Clustering con JBoss Cache
Tutti i documenti sono versionabili
Supporta l'internazionalizzazione
JCR
JCR - workspace
Suddividono le informazioni in gruppi
Possono essere configurati su diversi database
Sono clusterizzabili
JCR - workspace
REPOSITORY(Gatein)
  SYSTEM: Contiene i nodi e i namespace di base di
  JCR
  PORTAL-SYSTEM: Contiene le entità generate da
  MOP , tutte le informazioni generate dall'application
  registry (categorie, gadget, contenuti) e relativi
  permessi.
  PORTAL-WORK: Contiene i token per mantenere la
  sessione autenticata in caso di 'autologin' e 'ricorda
  password'.
  WSRP-SYSTEM:Contiene le informazioni dei
  producer e consumer WSRP.
  PC-SYSTEM: Contiene gli stati delle portlet.
JCR - workspace
REPOSITORY(ECM)
  COLLABORATION: Contiene le informazioni e i
  contenuti delle applicazioni di collaboration (tags,
  relazioni).
  BACKUP: Mantiene i documenti scaduti e può essere
  usato per implementare un meccanismo di backup
  automatico.
  DMS-SYSTEM: Contiene le info su applicazini e
  contenuti del DMS.
  WCM-SYSTEM:Contiene le info su applicazini e
  contenuti del WCM.
JCR
Identity Management - organization

 Membership   { manager, member, validator }
 Type


 Membership   { Mary / users, root / administrators }


 Group        { guests, management, users, administrators }


 User         { Mary, John, root, demo }
Identity Management - servizi

 Hibernate                      LDAP


 JDBC                           PicketLink
              Organization
 Active
 Directory
Identity Management - gestione dei
profili
I campi degli utenti, gruppi e membership type sono
dinamici e gestiti dai singoli servizi

<object type="org.exoplatform.services.organization.
OrganizationConfig$User">
   <field name="userName"><string>mary</string></field>
   <field name="password"><string>gtn</string></field>
   <field name="firstName"><string>Mary</string></field>
   <field name="lastName"><string>Kelly</string></field>
   <field name="email"><string>mary@localhost</string></field>
   <field name="groups">
         <string>member:/platform/users</string>
   </field>
</object>
IDM: Fornisce un modello a oggetti per l'identità
(Utenti/Gruppi/Ruoli) e si interfaccia con LDAP
e RDBMS.
Federated Identity: Supporta SAMLv2, WS-Trust e
OpenID.
AuthZ: Authorization framework semplice da utilizzare
XACML: Implementazione di Oasis XACMLv2.
Negotiation: SPNego/Kerberos based Desktop SSO.
Database
  Gatein
     IDM (Creato da PicketLink IDM)
     Portal (Creato da Exo JCR + MOP)
  ECM
     IDM (Creato da PicketLink IDM)
     Portal (Creato da Exo JCR + MOP)


  I Datasource sono configurabili tramite le common di
  Exo
  La EPP 5 utilizza i datasource di JBoss
Database - Datasource
 # JCR
 gatein.jcr.config.type=local
 gatein.jcr.datasource.name=java:jdbcjcr
 gatein.jcr.datasource.dialect=auto
 gatein.jcr.datasource.driver=org.hsqldb.jdbcDriver
 gatein.jcr.datasource.url=jdbc:hsqldb:file:${gatein.db.data.dir}/data/jdbcjcr_${name}
 gatein.jcr.datasource.username=sa
 gatein.jcr.datasource.password=

 gatein.jcr.data.dir=${gatein.data.dir}/jcr
 gatein.jcr.storage.data.dir=${gatein.jcr.data.dir}/values
 gatein.jcr.index.data.dir=${gatein.jcr.data.dir}/lucene
 gatein.jcr.index.changefilterclass=
    org.exoplatform.services.jcr.impl.core.query.DefaultChangesFilter

 # IDM
 gatein.idm.datasource.name=java:jdbcidm
 gatein.idm.datasource.driver=org.hsqldb.jdbcDriver
 gatein.idm.datasource.url=jdbc:hsqldb:file:${gatein.db.data.dir}/data/jdbcidm_${name}
 gatein.idm.datasource.username=sa
 gatein.idm.datasource.password=
Database
Database
Web UI - Groovy
Web UI - Groovy - Dashboard
                           UITabPaneDashboard
                    UITabbedDashboardPortlet




   UIDashboardPortlet



                UIGadgetPortlet /
                UIGadgetViewMode
Web UI - Groovy - UIDashboardPortlet
 <%
  import javax.portlet.PortletMode ;
  import org.exoplatform.dashboard.webui.component.DashboardParent ;
  import org.exoplatform.dashboard.webui.component.UIDashboard;
  import org.exoplatform.dashboard.webui.component.UIDashboardEditForm;

   def rcontext = _ctx.getRequestContext() ;
   def popupMsgs = uicomponent.getUIPopupMessages();
 %>
 <div id="$uicomponent.id" class="UIDashboardPortlet">
       <% if(rcontext.getApplicationMode() == PortletMode.VIEW) {
                  uicomponent.renderChild(UIDashboard.class);
        } else {
                  UIDashboardEditForm uiEditForm = uicomponent.getChild
 (UIDashboardEditForm.class);
                 uiEditForm.getUIStringInput(UIDashboardEditForm.TOTAL_COLUMNS)
 .setValue(uicomponent.getNumberOfCols() + "");
                  uicomponent.renderUIComponent(uiEditForm) ;
        }
             if(popupMsgs != null) popupMsgs.processRender(rcontext);
       %>
 </div>
Web UI - Skin
Web UI - Skin - CSS
    .UIGadgetPortlet {
        padding: 1px;
        height: 100%;
    }

    .UIGadgetPortlet .UIGadgetViewMode {
        height: 100%;
    }

    .UIGadgetPortlet .gadgets-gadget-content {
        height: 100%;
    }

    .UIGadgetPortlet .UIGadgetContent {
        height: 100%;
    }

    .UIGadgetPortlet .gadgets-gadget {
        width: 100%;
    }
Web UI - I18N
Web UI - I18N - Giapponese
  UITabPaneDashboard.action.
  addNewDashboard=u30c0u30c3u30b7u30e5u30dcu30fcu30c9u3092u8ffdu52a0
  UITabPaneDashboard.action.
  switchShowRange=u9818u57dfu3092u5207u308au66ffu3048
  UITabPaneDashboard.msg.
  deleteTab=u672cu5f53u306bu30c0u30c3u30b7u30e5u30dcu30fcu30c9u3092u
  524au9664u3057u307eu3059u304buff1f

  UITabPaneDashboard.msg.
  cannotDeleteLastTab=u30bfu30d6u3092u524au9664u51fau6765u307eu305bu3
  093u3002

  UITabPaneDashboard.msg.wrongTabName=u82f1u6570u5b57u3001u30fbu3001-
  u3001_u306eu307fu304cu8a31u3055u308cu3066u3044u307eu3059u3002
Web UI - I18N - UITabPaneDashboard.java
   import org.exoplatform.web.application.
   ApplicationMessage;

   ......
       else
        {
          getAncestorOfType(UIApplication.class).addMessage(
            new ApplicationMessage(
   "UITabPaneDashboard.msg.cannotDeleteLastTab", null));
          return null;
        }
Web UI - Configurazione
Web UI - gatein-resources.xml
   <gatein-resources
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.gatein.
   org/xml/ns/gatein_resources_1_0 http://www.gatein.
   org/xml/ns/gatein_resources_1_0"
        xmlns="http://www.gatein.org/xml/ns/gatein_resources_1_0">

       <!-- GadgetPortlet skins -->

        <portlet-skin>
            <application-name>dashboard</application-name>
            <portlet-name>GadgetPortlet</portlet-name>
            <skin-name>Default</skin-name>
            <css-
   path>/skin/gadget/webui/component/UIGadgetPortlet/DefaultStylesheet.
   css</css-path>
        </portlet-skin>

   </gatein-resources>
Web UI
  Si possono organizzare le sottodirectory
  nell'applicazione usando un meccanismo di import
  Le configurazioni possono essere sovrascritte da
  un'applicazione che usa gli stessi path
  Le portlet sono inserite sotto forma di nodi jcr. Risulta
  così più facile ricercarle, catalogarle o eseguirle
  C'è uno stretto legame tra componenti webui e classi
  CSS per rendere più immediata la configurazione
  grafica
Esempi - News - Portlet di lettura

   Category Navigation - Ordina le news per categoria e
   permette di navigarle (/private/acme/news)
   Category Contents - Elenca le news a seconda della
   categoria scelta. Se la categoria non è selezionata le
   elenca tutte (/private/acme/news)
   Content by Url - Rappresenta l'esploso della news
   selezionata. La selezione di una news passa un URL
   da cui è possibile prelevare il contenuto
   (/private/acme/detail)
Esempi - News - Portlet di lettura
Esempi - News - Groovy

 <div id="$uicomponent.id" class="$uicomponent.id">
      <%

   if (Utils.isShowQuickEdit()) {
     %>
      <a class="DocumentQuickEdit" href="<%= uicomponent.event("QuickEdit") %>"
 title="<%= _ctx.appRes("UICNContainer.title.QuickEdit") %>"><div class="
 QuickEdit"><span></span></div></a>
      <%
    }

           uicomponent.buildTree();
           uicomponent.renderChildren();
      %>
 </div>
Esempi - News - Skin

 <portlet-skin>
  <application-name>presentation</application-name>
  <portlet-name>CategoryNavigationPortlet</portlet-name>
  <skin-name>Default</skin-name>
  <css-path>/skin/CategoryNavigation/DefaultStylesheet.css</css-path>
 </portlet-skin>

                                                gatein-resources.xml

 .UICategoryNavigationPortlet .HorizontalLayout .UIFormInputSet {
   padding: 0;
 }

 .UICategoryNavigationPortlet .HorizontalLayout .FormContainer {
   padding: 0;
 }
                                                DefaultStylesheet.css
Esempi - News - Portlet

        <portlet>
             <description xml:lang="EN">Category Navigation</description>
             <portlet-name>CategoryNavigationPortlet</portlet-name>
             <display-name xml:lang="EN">Category Navigation</display-name>
             <portlet-class>org.exoplatform.webui.application.portlet.
 PortletApplicationController</portlet-class>
             <init-param>
 ......
                                                       portlet.xml
  <webui-configuration>
   <annotation-classes></annotation-classes>
   <application>
    <ui-component-root>org.exoplatform.wcm.webui.category.UICategoryNavigationPortlet</ui-component-
  root>
    <state-manager>org.exoplatform.webui.application.portlet.ParentAppStateManager</state-manager>
   </application>
  </webui-configuration>

                                                       configuration.xml
Esempi - News - Portlet
 PortletPreferences portletPreferences = UICategoryNavigationUtils.getPortletPreferences();
 String preferenceRepository = portletPreferences.getValue(UICategoryNavigationConstant.
 PREFERENCE_REPOSITORY, "");
 String preferenceTreeName = portletPreferences.getValue(UICategoryNavigationConstant.
 PREFERENCE_TREE_NAME, "");
 TaxonomyService taxonomyService = getApplicationComponent(TaxonomyService.class);
 Node rootTreeNode = null;
 try {
 rootTreeNode = taxonomyService.getTaxonomyTree(preferenceRepository,
 preferenceTreeName);
 } catch (RepositoryException e) {
 //return;
 }
 setRootTreeNode(rootTreeNode);
 setAcceptedNodeTypes(new String[] {"nt:folder", "nt:unstructured", "nt:file", "exo:taxonomy"});

 UITree tree = addChild(UICategoryNavigationTreeBase.class, null, null);
 tree.setBeanLabelField("name");
 tree.setBeanIdField("path");
Esempi - News - Portlet di lettura
Esempi - News - configuration.xml
  <configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:
  schemaLocation="http://www.exoplaform.org/xml/ns/kernel_1_0.xsd http://www.
  exoplaform.org/xml/ns/kernel_1_0.xsd"
      xmlns="http://www.exoplaform.org/xml/ns/kernel_1_0.xsd">
      <import>war:/conf/sample-portal/jcr/jcr-configuration.xml</import>
      <import>war:/conf/sample-portal/portal/portal-configuration.xml</import>
   <import>war:/conf/sample-portal/portal/application-registry-configuration.xml</import>
   <import>war:/conf/sample-portal/portal/resource-bundle-configuration.xml</import>

   <import>war:/conf/sample-portal/wcm/newsletter-configuration.xml</import>
   <import>war:/conf/sample-portal/wcm/deployment/acme-deployment-configuration.
  xml</import>
   <import>war:/conf/sample-portal/wcm/deployment/classic-deployment-configuration.
  xml</import>
   <import>war:/conf/sample-portal/wcm/deployment/template-deployment-configuration.
  xml</import>
   <import>war:/conf/sample-portal/wcm/taxonomy/acme-taxonomies-configuration.
  xml</import>
   <import>war:/conf/sample-portal/wcm/taxonomy/classic-taxonomies-configuration.
  xml</import>
  </configuration>
Esempi - News - tassonomia
        acme-taxonomies-configuration.xml
Esempi - News - importazione dei dati
        News.xml
Esempi - News - importazione dei dati
 <object-param>
  <name>ACME News data</name>
  <description>Deployment Descriptor</description>
  <object type="org.exoplatform.services.deployment.DeploymentDescriptor">
   <field name="target">
    <object type="org.exoplatform.services.deployment.DeploymentDescriptor$Target">
      <field name="repository">
        <string>repository</string>
      </field>
      <field name="workspace">
        <string>collaboration</string>
      </field>
      <field name="nodePath">
        <string>/sites content/live/acme/web contents/site artifacts</string>
      </field>
    </object>
   </field>
   <field name="sourcePath">
    <string>war:/conf/sample-portal/wcm/artifacts/site-resources/acme/News.xml</string>
   </field>
  </object>



                                             acme-deployment-configuration.xml
Esempi - News - Creazione della
pagina
  <page>
    <name>news</name>
    <title>News</title>
    <access-permissions>Everyone</access-permissions>
    <edit-permission>editor:/platform/web-contributors</edit-permission>
    <container id="ACMEBody" template="system:
/groovy/portal/webui/container/UITableColumnContainer.gtmpl">
      <access-permissions>Everyone</access-permissions>
      <container id="ACMECategories" template="system:
/groovy/portal/webui/container/UIContainer.gtmpl">
        <access-permissions>Everyone</access-permissions>
        <portlet-application>
          <portlet>
           <application-ref>presentation</application-ref>
           <portlet-ref>CategoryNavigationPortlet</portlet-ref>
           <preferences>
.........




                                             pages.xml
Esempi - News - Category Navigation
Esempi - News - Category Contents
Esempi - News - Category Contents
List<SelectItemOption<String>> templates = new ArrayList<SelectItemOption<String>>();
RepositoryService repositoryService = getApplicationComponent(RepositoryService.class);
ManageableRepository manageableRepository = repositoryService.getCurrentRepository();
ApplicationTemplateManagerService applicationTemplateManagerService = getApplicationComponent
(ApplicationTemplateManagerService.class);
String repository = manageableRepository.getConfiguration().getName();
List<Node> templateNodes = applicationTemplateManagerService.getTemplatesByCategory(repository,
portletName,
templateCategory,
Utils.getSessionProvider());
for (Node templateNode : templateNodes) {
String templateName = templateNode.getName();
String templatePath = templateNode.getPath();
templates.add(new SelectItemOption<String>(templateName, templatePath));
}
return templates;




                                                            Recupero dell'elenco dei
                                                            template
Esempi - News - Category by Url
Esempi - News - Inserimento

   Fast Content Creation - permette di inserire un
   documento configurando lo spazio di destinazione, un
   template grafico e degli eventi
   DMS Console - è la console per la gestione dei
   documenti. Contiene la Fast Content Creation portlet
   Form Generator - permette di creare graficamente una
   form di inserimento specificando i campi e una action
   per l'invio in post
Esempi - News - Inserimento
                       Fast Content Creation
Esempi - Contact Us
Esempi - Contact Us - Form Generator
Esempi - Contact Us - Form Generator
Esempi - Contact Us - Inserimento
Esempi - Contact Us - Risultato
Clustering - JBoss Cache
Clustering - PicketLink IDM
  Gira su Hibernate (ehcache, JBoss Cache)
  Cache di primo e secondo livello entrambe con JBoss
  Cache
  Utilizzabile su ogni piattaforma supportata da Gatein

 <value-param>
  <name>cacheConfig</name>
  <value>war:/conf/organization/picketlink-idm/jboss-cache.xml</value>
 </value-param>


 <value-param profiles="cluster">
  <name>cacheConfig</name>
  <value>war:/conf/organization/picketlink-idm/jboss-cache-cluster.xml</value>
 </value-param>
Clustering - Exo JCR
     La configurazione è dipendente dal workspace
     Clustering su 4 canali:
         Dati
         Indici
         Lock Manager
         Transaction Manager (da configurare)
     Utilizzabile su ogni piattaforma
       <cache enabled="true" class=
"org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.
JBossCacheWorkspaceStorageCache"> <properties>
          <property name="jbosscache-configuration" value="conf/jcr/jbosscache/${gatein.jcr.config.
type}/config.xml" />
          <property name="jgroups-configuration" value="jar:/conf/jcr/jbosscache/cluster/udp-mux.
xml" />
          <property name="jgroups-multiplexer-stack" value="true" />
          <property name="jbosscache-cluster-name" value="jcr-${container.name.suffix}-wsrp-
system" /> </properties>
        </cache>
Clustering - JBoss Cache
<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss:
jbosscache-core:config:3.1">

  <locking useLockStriping="false" concurrencyLevel="50000" lockParentForChildInsertRemove="
false"
    lockAcquisitionTimeout="20000" />

 <clustering mode="replication" clusterName="${jbosscache-cluster-name}">
   <stateRetrieval timeout="20000" fetchInMemoryState="false" />
   <jgroupsConfig multiplexerStack="jcr.stack" />
   <sync />
 </clustering>

  <!-- Eviction configuration -->
  <eviction wakeUpInterval="5000">
    <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm"
  actionPolicyClass="
org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.ParentNodeEvictionActionPolicy"
      eventQueueSize="1000000">
      <property name="maxNodes" value="1000000" />
      <property name="timeToLive" value="120000" />
    </default>
  </eviction>
</jbosscache>
Clustering - JBoss Cache - Rete
<protocol_stacks>
    <stack name="jcr.stack">
      <config>
        <UDP mcast_addr="228.10.10.10" mcast_port="45588" tos="8" ucast_recv_buf_size="
20000000"
          ucast_send_buf_size="640000" mcast_recv_buf_size="25000000" />
...
        <PING timeout="2000" num_initial_members="3" />
        <pbcast.NAKACK use_stats_for_retransmission="false" exponential_backoff="150"
use_mcast_xmit="true"
          gc_lag="0" retransmit_timeout="50,300,600,1200" discard_delivered_msgs="true" />
        <UNICAST timeout="300,600,1200" />
        <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="1000000"
/>
....
        <FC max_credits="500000" min_threshold="0.20" />
        <FRAG2 frag_size="60000" />
      </config>
    </stack>
</protocol_stacks>
Clustering - JBoss Cache - Strategie
Clustering - JBoss Cache - Strategie
Clustering - JBoss Cache - Strategie
                               Default
Clustering - JBoss Cache - Strategie
Clustering - JBoss Cache - Strategie
Ciao!!

 Luca Stancapiano

 ------------------------------------------
 Jboss Forums project leader
 Gatein / Jboss Portal developer
 JBUG Rome member

 ------------------------------------------
 jedim@vige.it

Contenu connexe

Similaire à September 2010 - Gatein

Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...
Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...
Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...
gwalter85
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
Luca Milan
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
Whymca
 
Usare le nuove WCF Web Api per creare servizi RESTful
Usare le nuove WCF Web Api per creare servizi RESTfulUsare le nuove WCF Web Api per creare servizi RESTful
Usare le nuove WCF Web Api per creare servizi RESTful
Luca Milan
 

Similaire à September 2010 - Gatein (20)

Installazione del cms alfresco
Installazione del cms alfrescoInstallazione del cms alfresco
Installazione del cms alfresco
 
DDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continuaDDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continua
 
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3
 
Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)Yii Framework - yes it is rapid web application development (Parte 1)
Yii Framework - yes it is rapid web application development (Parte 1)
 
Many Designs Elements
Many Designs ElementsMany Designs Elements
Many Designs Elements
 
What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012
 
Matteo Bicocchi - Introducing HTML5
Matteo Bicocchi - Introducing HTML5Matteo Bicocchi - Introducing HTML5
Matteo Bicocchi - Introducing HTML5
 
Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...
Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...
Presentazione: Sviluppo di un hub di comunicazione in una applicazione per po...
 
Grasso Frameworks Ajax
Grasso Frameworks AjaxGrasso Frameworks Ajax
Grasso Frameworks Ajax
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
jQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesignerjQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesigner
 
Ddive Xpage852
Ddive Xpage852Ddive Xpage852
Ddive Xpage852
 
jQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesignerjQuery - 1 | WebMaster & WebDesigner
jQuery - 1 | WebMaster & WebDesigner
 
Idp, passo dopo passo!
Idp, passo dopo passo!Idp, passo dopo passo!
Idp, passo dopo passo!
 
Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
 
Usare le nuove WCF Web Api per creare servizi RESTful
Usare le nuove WCF Web Api per creare servizi RESTfulUsare le nuove WCF Web Api per creare servizi RESTful
Usare le nuove WCF Web Api per creare servizi RESTful
 
Wcf data services
Wcf data servicesWcf data services
Wcf data services
 

Plus de JBug Italy

JBoss AS7 Overview
JBoss AS7 OverviewJBoss AS7 Overview
JBoss AS7 Overview
JBug Italy
 

Plus de JBug Italy (20)

JBoss Wise: breaking barriers to WS testing
JBoss Wise: breaking barriers to WS testingJBoss Wise: breaking barriers to WS testing
JBoss Wise: breaking barriers to WS testing
 
Camel and JBoss
Camel and JBossCamel and JBoss
Camel and JBoss
 
AS7 and CLI
AS7 and CLIAS7 and CLI
AS7 and CLI
 
Intro jbug milano_26_set2012
Intro jbug milano_26_set2012Intro jbug milano_26_set2012
Intro jbug milano_26_set2012
 
Faster & Greater Messaging System HornetQ zzz
Faster & Greater Messaging System HornetQ zzzFaster & Greater Messaging System HornetQ zzz
Faster & Greater Messaging System HornetQ zzz
 
Infinispan,Lucene,Hibername OGM
Infinispan,Lucene,Hibername OGMInfinispan,Lucene,Hibername OGM
Infinispan,Lucene,Hibername OGM
 
AS7
AS7AS7
AS7
 
JBoss BRMS - The enterprise platform for business logic
JBoss BRMS - The enterprise platform for business logicJBoss BRMS - The enterprise platform for business logic
JBoss BRMS - The enterprise platform for business logic
 
JBoss AS7 Overview
JBoss AS7 OverviewJBoss AS7 Overview
JBoss AS7 Overview
 
Intro JBug Milano - January 2012
Intro JBug Milano - January 2012Intro JBug Milano - January 2012
Intro JBug Milano - January 2012
 
JBoss AS7 Webservices
JBoss AS7 WebservicesJBoss AS7 Webservices
JBoss AS7 Webservices
 
JBoss AS7
JBoss AS7JBoss AS7
JBoss AS7
 
Intro JBug Milano - September 2011
Intro JBug Milano - September 2011Intro JBug Milano - September 2011
Intro JBug Milano - September 2011
 
All the cool stuff of JBoss BRMS
All the cool stuff of JBoss BRMSAll the cool stuff of JBoss BRMS
All the cool stuff of JBoss BRMS
 
Infinispan and Enterprise Data Grid
Infinispan and Enterprise Data GridInfinispan and Enterprise Data Grid
Infinispan and Enterprise Data Grid
 
Drools Introduction
Drools IntroductionDrools Introduction
Drools Introduction
 
September 2010 - Arquillian
September 2010 - ArquillianSeptember 2010 - Arquillian
September 2010 - Arquillian
 
May 2010 - Infinispan
May 2010 - InfinispanMay 2010 - Infinispan
May 2010 - Infinispan
 
May 2010 - RestEasy
May 2010 - RestEasyMay 2010 - RestEasy
May 2010 - RestEasy
 
May 2010 - Drools flow
May 2010 - Drools flowMay 2010 - Drools flow
May 2010 - Drools flow
 

September 2010 - Gatein

  • 1.
  • 2. PC IDM MOP Clustering WSRP WCI ECM IDM WEBui JCR Connettori OpenSocial
  • 3. Novità Non solo portlet WCM e strumenti di amministrazione Il portale può essere interamente aggiornato dai web manager Gestione avanzata dei gruppi e dei documenti privati Semplicità di cooperazione tra componenti
  • 4. Il Portale permette.... Di ridurre i costi associando siti web ad applicazioni. Permette agli sviluppatori di riutilizzare svariati tipi di applicazioni e comporle all'interno di uno stesso contesto. Le portlet 2.0 sono lo standard attuale. Sono pensate per ottenere il riutilizzo. Agli utenti finali di personalizzare ogni parte del sito in maniera sicura garantendo gli accessi. Scalabilità - I portali sono predisposti alla replicazione dei dati su macchine in cluster. Di limitare i bug alla singola applicazione anzichè a tutta la pagina o a tutto il portale. E' possibile continuare a lavorare nel portale pur essendoci applicazioni in crash.
  • 5. Licenze JBoss – Gatein e JCR sono rilasciati con licenza LGPL 2.1 Exo – Gli strumenti di amministrazione sono rilasciati con licenza AGPL 3 Redhat - Rilascia la EPP 5 (Enterprise Portal Platform). Contiene JBoss + Gatein+ Portlet Bridge + eXo ECM
  • 9. ECM
  • 11. MOP (Model Object for Portal) Permette l'assegnazione di una pagina o di un gruppo di pagine per utente o gruppo. La stessa pagina può avere diverse preferenze a seconda dell'utenza Possibilità di esternalizzare la navigazione tramite import / export Le preferenze sono configurabili in 4 Scope: Contesto globale, sito, pagina e finestra Le preferenze sono ereditabili
  • 12. MOP (Model Object for Portal) Relazione tra container, finestra e body. Il container crea una finestra tramite un meccanismo di template fornito da Exo Le pagine sono ereditabili, è possibile per una pagina ereditare le proprietà da un padre mantenendo comunque un diverso contenuto Layout gerarchico. Ogni parte del portale (finestra, pagina, sito, portale) ha la possibilità di ereditare un differente layout Introduce Chromattic, un framework opensource per il mapping tra oggetti e JCR
  • 13. WCI (Web Container Integration) Attualmente supporta JBoss , Tomcat e Jetty Agisce durante il deploy per permettere una corretta installazione e durante ogni richiesta http Anticipa alcune funzionalità descritte nelle servlet 3.0 Verrà aggiunta la parte di integrazione di SSO
  • 14. WCI (Login e Logout programmatica) HttpServletRequest void login(java.lang.String username, java.lang.String password) throws ServletException void logout() throws ServletException
  • 15. PC (Portlet Container) Integra le portlet 2.0 in Exo portal in modo trasparente Permette di deploiare le portlet all'interno del portale mantenendo l'architettura di gestione delle finestre di Exo <portlet> <portlet-name>HelloWorldPortlet</portlet-name> <portlet-class> org.SimplestHelloWorldPortlet </portlet-class> <supports> <mime-type>text/html</mime-type> </supports> <portlet-info> <title>Simplest Hello World Portlet</title> </portlet-info> </portlet>
  • 16. WSRP (Web Service Remote Portlet)
  • 19. Implementa le JSR 301 e 329 (portlet 1.0 e 2.0) Permette di usare JSF 1.2 all'interno di un portlet container. Qualunque applicazione web basata su JSF può diventare parte di un portale Supporta Seam e RichFaces
  • 20. <portlet> <portlet-name>yourPortletName</portlet-name> <portlet-class> javax.portlet.faces.GenericFacesPortlet </portlet-class> <init-param> <name>javax.portlet.faces.defaultViewId.view </name> <value>/welcome.xhtml</value> </init-param>
  • 21. <faces-config> <application> <view-handler> org.jboss.portletbridge.application.PortletViewHandler </view-handler> <state-manager> org.jboss.portletbridge.application. PortletStateManager </state-manager> </application> ...
  • 22.
  • 23. <Module> − <ModulePrefs title_url="http://www.amoreepsiche.it/index.php?idcat"> <Require feature="minimessage"/> </ModulePrefs> − <Content type="html"> <DIV > <TABLE width="100%"><TR><TD align=center> <DIV id="imgSRC__MODULE_ID__"></DIV> </TD></TR></TABLE> </DIV> </Content> </Module>
  • 24. JCR Ogni contenuto è condivisibile con REST Supporta WebDav, FTP, RMI REST CURRENT LOCAL ENCODING IDENTITY SESSION REST PROVIDER SERVLET POST GET DELETE PUT FTP BROWSER WEBDAV
  • 25. JCR Supporta autorizzazione e ACL Introduce lo scripting Groovy Funzioni di Import / Export Gestione degli eventi Script per inizializzare i repository Clustering con JBoss Cache Tutti i documenti sono versionabili Supporta l'internazionalizzazione
  • 26. JCR
  • 27. JCR - workspace Suddividono le informazioni in gruppi Possono essere configurati su diversi database Sono clusterizzabili
  • 28. JCR - workspace REPOSITORY(Gatein) SYSTEM: Contiene i nodi e i namespace di base di JCR PORTAL-SYSTEM: Contiene le entità generate da MOP , tutte le informazioni generate dall'application registry (categorie, gadget, contenuti) e relativi permessi. PORTAL-WORK: Contiene i token per mantenere la sessione autenticata in caso di 'autologin' e 'ricorda password'. WSRP-SYSTEM:Contiene le informazioni dei producer e consumer WSRP. PC-SYSTEM: Contiene gli stati delle portlet.
  • 29. JCR - workspace REPOSITORY(ECM) COLLABORATION: Contiene le informazioni e i contenuti delle applicazioni di collaboration (tags, relazioni). BACKUP: Mantiene i documenti scaduti e può essere usato per implementare un meccanismo di backup automatico. DMS-SYSTEM: Contiene le info su applicazini e contenuti del DMS. WCM-SYSTEM:Contiene le info su applicazini e contenuti del WCM.
  • 30. JCR
  • 31. Identity Management - organization Membership { manager, member, validator } Type Membership { Mary / users, root / administrators } Group { guests, management, users, administrators } User { Mary, John, root, demo }
  • 32. Identity Management - servizi Hibernate LDAP JDBC PicketLink Organization Active Directory
  • 33. Identity Management - gestione dei profili I campi degli utenti, gruppi e membership type sono dinamici e gestiti dai singoli servizi <object type="org.exoplatform.services.organization. OrganizationConfig$User"> <field name="userName"><string>mary</string></field> <field name="password"><string>gtn</string></field> <field name="firstName"><string>Mary</string></field> <field name="lastName"><string>Kelly</string></field> <field name="email"><string>mary@localhost</string></field> <field name="groups"> <string>member:/platform/users</string> </field> </object>
  • 34. IDM: Fornisce un modello a oggetti per l'identità (Utenti/Gruppi/Ruoli) e si interfaccia con LDAP e RDBMS. Federated Identity: Supporta SAMLv2, WS-Trust e OpenID. AuthZ: Authorization framework semplice da utilizzare XACML: Implementazione di Oasis XACMLv2. Negotiation: SPNego/Kerberos based Desktop SSO.
  • 35. Database Gatein IDM (Creato da PicketLink IDM) Portal (Creato da Exo JCR + MOP) ECM IDM (Creato da PicketLink IDM) Portal (Creato da Exo JCR + MOP) I Datasource sono configurabili tramite le common di Exo La EPP 5 utilizza i datasource di JBoss
  • 36. Database - Datasource # JCR gatein.jcr.config.type=local gatein.jcr.datasource.name=java:jdbcjcr gatein.jcr.datasource.dialect=auto gatein.jcr.datasource.driver=org.hsqldb.jdbcDriver gatein.jcr.datasource.url=jdbc:hsqldb:file:${gatein.db.data.dir}/data/jdbcjcr_${name} gatein.jcr.datasource.username=sa gatein.jcr.datasource.password= gatein.jcr.data.dir=${gatein.data.dir}/jcr gatein.jcr.storage.data.dir=${gatein.jcr.data.dir}/values gatein.jcr.index.data.dir=${gatein.jcr.data.dir}/lucene gatein.jcr.index.changefilterclass= org.exoplatform.services.jcr.impl.core.query.DefaultChangesFilter # IDM gatein.idm.datasource.name=java:jdbcidm gatein.idm.datasource.driver=org.hsqldb.jdbcDriver gatein.idm.datasource.url=jdbc:hsqldb:file:${gatein.db.data.dir}/data/jdbcidm_${name} gatein.idm.datasource.username=sa gatein.idm.datasource.password=
  • 39. Web UI - Groovy
  • 40. Web UI - Groovy - Dashboard UITabPaneDashboard UITabbedDashboardPortlet UIDashboardPortlet UIGadgetPortlet / UIGadgetViewMode
  • 41. Web UI - Groovy - UIDashboardPortlet <% import javax.portlet.PortletMode ; import org.exoplatform.dashboard.webui.component.DashboardParent ; import org.exoplatform.dashboard.webui.component.UIDashboard; import org.exoplatform.dashboard.webui.component.UIDashboardEditForm; def rcontext = _ctx.getRequestContext() ; def popupMsgs = uicomponent.getUIPopupMessages(); %> <div id="$uicomponent.id" class="UIDashboardPortlet"> <% if(rcontext.getApplicationMode() == PortletMode.VIEW) { uicomponent.renderChild(UIDashboard.class); } else { UIDashboardEditForm uiEditForm = uicomponent.getChild (UIDashboardEditForm.class); uiEditForm.getUIStringInput(UIDashboardEditForm.TOTAL_COLUMNS) .setValue(uicomponent.getNumberOfCols() + ""); uicomponent.renderUIComponent(uiEditForm) ; } if(popupMsgs != null) popupMsgs.processRender(rcontext); %> </div>
  • 42. Web UI - Skin
  • 43. Web UI - Skin - CSS .UIGadgetPortlet { padding: 1px; height: 100%; } .UIGadgetPortlet .UIGadgetViewMode { height: 100%; } .UIGadgetPortlet .gadgets-gadget-content { height: 100%; } .UIGadgetPortlet .UIGadgetContent { height: 100%; } .UIGadgetPortlet .gadgets-gadget { width: 100%; }
  • 44. Web UI - I18N
  • 45. Web UI - I18N - Giapponese UITabPaneDashboard.action. addNewDashboard=u30c0u30c3u30b7u30e5u30dcu30fcu30c9u3092u8ffdu52a0 UITabPaneDashboard.action. switchShowRange=u9818u57dfu3092u5207u308au66ffu3048 UITabPaneDashboard.msg. deleteTab=u672cu5f53u306bu30c0u30c3u30b7u30e5u30dcu30fcu30c9u3092u 524au9664u3057u307eu3059u304buff1f UITabPaneDashboard.msg. cannotDeleteLastTab=u30bfu30d6u3092u524au9664u51fau6765u307eu305bu3 093u3002 UITabPaneDashboard.msg.wrongTabName=u82f1u6570u5b57u3001u30fbu3001- u3001_u306eu307fu304cu8a31u3055u308cu3066u3044u307eu3059u3002
  • 46. Web UI - I18N - UITabPaneDashboard.java import org.exoplatform.web.application. ApplicationMessage; ...... else { getAncestorOfType(UIApplication.class).addMessage( new ApplicationMessage( "UITabPaneDashboard.msg.cannotDeleteLastTab", null)); return null; }
  • 47. Web UI - Configurazione
  • 48. Web UI - gatein-resources.xml <gatein-resources xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gatein. org/xml/ns/gatein_resources_1_0 http://www.gatein. org/xml/ns/gatein_resources_1_0" xmlns="http://www.gatein.org/xml/ns/gatein_resources_1_0"> <!-- GadgetPortlet skins --> <portlet-skin> <application-name>dashboard</application-name> <portlet-name>GadgetPortlet</portlet-name> <skin-name>Default</skin-name> <css- path>/skin/gadget/webui/component/UIGadgetPortlet/DefaultStylesheet. css</css-path> </portlet-skin> </gatein-resources>
  • 49. Web UI Si possono organizzare le sottodirectory nell'applicazione usando un meccanismo di import Le configurazioni possono essere sovrascritte da un'applicazione che usa gli stessi path Le portlet sono inserite sotto forma di nodi jcr. Risulta così più facile ricercarle, catalogarle o eseguirle C'è uno stretto legame tra componenti webui e classi CSS per rendere più immediata la configurazione grafica
  • 50. Esempi - News - Portlet di lettura Category Navigation - Ordina le news per categoria e permette di navigarle (/private/acme/news) Category Contents - Elenca le news a seconda della categoria scelta. Se la categoria non è selezionata le elenca tutte (/private/acme/news) Content by Url - Rappresenta l'esploso della news selezionata. La selezione di una news passa un URL da cui è possibile prelevare il contenuto (/private/acme/detail)
  • 51. Esempi - News - Portlet di lettura
  • 52. Esempi - News - Groovy <div id="$uicomponent.id" class="$uicomponent.id"> <% if (Utils.isShowQuickEdit()) { %> <a class="DocumentQuickEdit" href="<%= uicomponent.event("QuickEdit") %>" title="<%= _ctx.appRes("UICNContainer.title.QuickEdit") %>"><div class=" QuickEdit"><span></span></div></a> <% } uicomponent.buildTree(); uicomponent.renderChildren(); %> </div>
  • 53. Esempi - News - Skin <portlet-skin> <application-name>presentation</application-name> <portlet-name>CategoryNavigationPortlet</portlet-name> <skin-name>Default</skin-name> <css-path>/skin/CategoryNavigation/DefaultStylesheet.css</css-path> </portlet-skin> gatein-resources.xml .UICategoryNavigationPortlet .HorizontalLayout .UIFormInputSet { padding: 0; } .UICategoryNavigationPortlet .HorizontalLayout .FormContainer { padding: 0; } DefaultStylesheet.css
  • 54. Esempi - News - Portlet <portlet> <description xml:lang="EN">Category Navigation</description> <portlet-name>CategoryNavigationPortlet</portlet-name> <display-name xml:lang="EN">Category Navigation</display-name> <portlet-class>org.exoplatform.webui.application.portlet. PortletApplicationController</portlet-class> <init-param> ...... portlet.xml <webui-configuration> <annotation-classes></annotation-classes> <application> <ui-component-root>org.exoplatform.wcm.webui.category.UICategoryNavigationPortlet</ui-component- root> <state-manager>org.exoplatform.webui.application.portlet.ParentAppStateManager</state-manager> </application> </webui-configuration> configuration.xml
  • 55. Esempi - News - Portlet PortletPreferences portletPreferences = UICategoryNavigationUtils.getPortletPreferences(); String preferenceRepository = portletPreferences.getValue(UICategoryNavigationConstant. PREFERENCE_REPOSITORY, ""); String preferenceTreeName = portletPreferences.getValue(UICategoryNavigationConstant. PREFERENCE_TREE_NAME, ""); TaxonomyService taxonomyService = getApplicationComponent(TaxonomyService.class); Node rootTreeNode = null; try { rootTreeNode = taxonomyService.getTaxonomyTree(preferenceRepository, preferenceTreeName); } catch (RepositoryException e) { //return; } setRootTreeNode(rootTreeNode); setAcceptedNodeTypes(new String[] {"nt:folder", "nt:unstructured", "nt:file", "exo:taxonomy"}); UITree tree = addChild(UICategoryNavigationTreeBase.class, null, null); tree.setBeanLabelField("name"); tree.setBeanIdField("path");
  • 56. Esempi - News - Portlet di lettura
  • 57. Esempi - News - configuration.xml <configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi: schemaLocation="http://www.exoplaform.org/xml/ns/kernel_1_0.xsd http://www. exoplaform.org/xml/ns/kernel_1_0.xsd" xmlns="http://www.exoplaform.org/xml/ns/kernel_1_0.xsd"> <import>war:/conf/sample-portal/jcr/jcr-configuration.xml</import> <import>war:/conf/sample-portal/portal/portal-configuration.xml</import> <import>war:/conf/sample-portal/portal/application-registry-configuration.xml</import> <import>war:/conf/sample-portal/portal/resource-bundle-configuration.xml</import> <import>war:/conf/sample-portal/wcm/newsletter-configuration.xml</import> <import>war:/conf/sample-portal/wcm/deployment/acme-deployment-configuration. xml</import> <import>war:/conf/sample-portal/wcm/deployment/classic-deployment-configuration. xml</import> <import>war:/conf/sample-portal/wcm/deployment/template-deployment-configuration. xml</import> <import>war:/conf/sample-portal/wcm/taxonomy/acme-taxonomies-configuration. xml</import> <import>war:/conf/sample-portal/wcm/taxonomy/classic-taxonomies-configuration. xml</import> </configuration>
  • 58. Esempi - News - tassonomia acme-taxonomies-configuration.xml
  • 59. Esempi - News - importazione dei dati News.xml
  • 60. Esempi - News - importazione dei dati <object-param> <name>ACME News data</name> <description>Deployment Descriptor</description> <object type="org.exoplatform.services.deployment.DeploymentDescriptor"> <field name="target"> <object type="org.exoplatform.services.deployment.DeploymentDescriptor$Target"> <field name="repository"> <string>repository</string> </field> <field name="workspace"> <string>collaboration</string> </field> <field name="nodePath"> <string>/sites content/live/acme/web contents/site artifacts</string> </field> </object> </field> <field name="sourcePath"> <string>war:/conf/sample-portal/wcm/artifacts/site-resources/acme/News.xml</string> </field> </object> acme-deployment-configuration.xml
  • 61. Esempi - News - Creazione della pagina <page> <name>news</name> <title>News</title> <access-permissions>Everyone</access-permissions> <edit-permission>editor:/platform/web-contributors</edit-permission> <container id="ACMEBody" template="system: /groovy/portal/webui/container/UITableColumnContainer.gtmpl"> <access-permissions>Everyone</access-permissions> <container id="ACMECategories" template="system: /groovy/portal/webui/container/UIContainer.gtmpl"> <access-permissions>Everyone</access-permissions> <portlet-application> <portlet> <application-ref>presentation</application-ref> <portlet-ref>CategoryNavigationPortlet</portlet-ref> <preferences> ......... pages.xml
  • 62. Esempi - News - Category Navigation
  • 63. Esempi - News - Category Contents
  • 64. Esempi - News - Category Contents List<SelectItemOption<String>> templates = new ArrayList<SelectItemOption<String>>(); RepositoryService repositoryService = getApplicationComponent(RepositoryService.class); ManageableRepository manageableRepository = repositoryService.getCurrentRepository(); ApplicationTemplateManagerService applicationTemplateManagerService = getApplicationComponent (ApplicationTemplateManagerService.class); String repository = manageableRepository.getConfiguration().getName(); List<Node> templateNodes = applicationTemplateManagerService.getTemplatesByCategory(repository, portletName, templateCategory, Utils.getSessionProvider()); for (Node templateNode : templateNodes) { String templateName = templateNode.getName(); String templatePath = templateNode.getPath(); templates.add(new SelectItemOption<String>(templateName, templatePath)); } return templates; Recupero dell'elenco dei template
  • 65. Esempi - News - Category by Url
  • 66. Esempi - News - Inserimento Fast Content Creation - permette di inserire un documento configurando lo spazio di destinazione, un template grafico e degli eventi DMS Console - è la console per la gestione dei documenti. Contiene la Fast Content Creation portlet Form Generator - permette di creare graficamente una form di inserimento specificando i campi e una action per l'invio in post
  • 67. Esempi - News - Inserimento Fast Content Creation
  • 69. Esempi - Contact Us - Form Generator
  • 70. Esempi - Contact Us - Form Generator
  • 71. Esempi - Contact Us - Inserimento
  • 72. Esempi - Contact Us - Risultato
  • 74. Clustering - PicketLink IDM Gira su Hibernate (ehcache, JBoss Cache) Cache di primo e secondo livello entrambe con JBoss Cache Utilizzabile su ogni piattaforma supportata da Gatein <value-param> <name>cacheConfig</name> <value>war:/conf/organization/picketlink-idm/jboss-cache.xml</value> </value-param> <value-param profiles="cluster"> <name>cacheConfig</name> <value>war:/conf/organization/picketlink-idm/jboss-cache-cluster.xml</value> </value-param>
  • 75. Clustering - Exo JCR La configurazione è dipendente dal workspace Clustering su 4 canali: Dati Indici Lock Manager Transaction Manager (da configurare) Utilizzabile su ogni piattaforma <cache enabled="true" class= "org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache. JBossCacheWorkspaceStorageCache"> <properties> <property name="jbosscache-configuration" value="conf/jcr/jbosscache/${gatein.jcr.config. type}/config.xml" /> <property name="jgroups-configuration" value="jar:/conf/jcr/jbosscache/cluster/udp-mux. xml" /> <property name="jgroups-multiplexer-stack" value="true" /> <property name="jbosscache-cluster-name" value="jcr-${container.name.suffix}-wsrp- system" /> </properties> </cache>
  • 76. Clustering - JBoss Cache <jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:jboss: jbosscache-core:config:3.1"> <locking useLockStriping="false" concurrencyLevel="50000" lockParentForChildInsertRemove=" false" lockAcquisitionTimeout="20000" /> <clustering mode="replication" clusterName="${jbosscache-cluster-name}"> <stateRetrieval timeout="20000" fetchInMemoryState="false" /> <jgroupsConfig multiplexerStack="jcr.stack" /> <sync /> </clustering> <!-- Eviction configuration --> <eviction wakeUpInterval="5000"> <default algorithmClass="org.jboss.cache.eviction.LRUAlgorithm" actionPolicyClass=" org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.ParentNodeEvictionActionPolicy" eventQueueSize="1000000"> <property name="maxNodes" value="1000000" /> <property name="timeToLive" value="120000" /> </default> </eviction> </jbosscache>
  • 77. Clustering - JBoss Cache - Rete <protocol_stacks> <stack name="jcr.stack"> <config> <UDP mcast_addr="228.10.10.10" mcast_port="45588" tos="8" ucast_recv_buf_size=" 20000000" ucast_send_buf_size="640000" mcast_recv_buf_size="25000000" /> ... <PING timeout="2000" num_initial_members="3" /> <pbcast.NAKACK use_stats_for_retransmission="false" exponential_backoff="150" use_mcast_xmit="true" gc_lag="0" retransmit_timeout="50,300,600,1200" discard_delivered_msgs="true" /> <UNICAST timeout="300,600,1200" /> <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="1000000" /> .... <FC max_credits="500000" min_threshold="0.20" /> <FRAG2 frag_size="60000" /> </config> </stack> </protocol_stacks>
  • 78. Clustering - JBoss Cache - Strategie
  • 79. Clustering - JBoss Cache - Strategie
  • 80. Clustering - JBoss Cache - Strategie Default
  • 81. Clustering - JBoss Cache - Strategie
  • 82. Clustering - JBoss Cache - Strategie
  • 83. Ciao!! Luca Stancapiano ------------------------------------------ Jboss Forums project leader Gatein / Jboss Portal developer JBUG Rome member ------------------------------------------ jedim@vige.it