SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
Resumo Anotações para Certificação OCE Oracle WebLogic Portal 10g
                              Developer

Gilberto Augusto Holms
@gibaholms
gibaholms85@gmail.com
http://gibaholms.wordpress.com/



Portal Architecture
   • Portal Project Lifecycle
           o Architect -> Develop -> Assemble & Deploy -> Manage
   • Need for Enterprise Portals
           o Rápido desenvolvimento e deploy
           o Utiliza tecnologias baseadas em padrões
           o Gerenciamento e workflow de conteúdo integrados
           o Personalização e customização
           o Administração e segurança centralizados
           o High availability, performance e scalability
           o Flexibilidade e agilidade para futuras mudanças
   • WebLogic Portal Services
           o Portal application framework
                       Desktops
                       Books
                       Pages
                       Portlets
                       Look and Feel
           o Federated Portals
                       Consumo de portal-resources remotos via SOAP sobre HTTP ou HTTPS
           o Content management
                       Conteúdo gerenciável sem retrabalho de desenvolvimento
                       Temporização de conteúdo
           o Communities
                       Foundation para gerenciar portais colaborativos
                       É uma extensão do portal framework
                       Compartilhamento de conteúdo
                       Pode-se participar por registro e/ou convite
           o Unified user profile
                       Define propriedades que representam características de um usuário
                       Tais características podem ser mantidas na base do portal ou externamente em bancos
                       ou diretórios
           o Personalization
                       Capacidade da aplicação de modificar sua aparência e/ou comportamento de acordo
                       com o usuário ou uma determinada audiência
           o Security & administration
                       Usuários e perfis
                       Visitor entitlements – diferentes permissões de acesso de acordo com perfis
                       Delegated administration – diferentes permissões de administração de acordo com perfis
                       Publicação e aprovação de conteúdo
                       Portal data propagation
           o Enterprise search
                       Licensa inclusa do produto Autonomy
                       Engine e APIs de busca, gerenciamento, indexamento de conteúdo, exemplos de
                       portlets de busca e relatório
Basic WebLogic Server
   • WebLogic Server


Gilberto Holms                                           http://gibaholms.wordpress.com/
o   Domain
                       Administration Server
                       Configuration Repository (pasta config)
                       Domain Log
                       Cluster / Managed Servers ( + local logging )




WebLogic Workshop
  • WTP
         o Editores HTML, CSS, XSD, etc…
         o Suporte a maioria dos servidores
         o Operações e conexões a bases de dados – Database Explorer
  • JDT
         o Suporte aos variados módulos J2EE
         o Editores JSP e JSF
         o Servlet e EJB
  • Facets
         o Componentes reutilizáveis em várias aplicações J2EE (WAR ou EAR)
         o Deployados apenas uma vez no servidor
  • Merged Projects View
         o Mostra todas os deploys reutilizáveis – shared J2EE libraries
  • Apache Beehive
         o NetUI Page Flow
         o Java Controls (FALTA PAG 106)
         o Web Services Metadata
         o Framework MVC
                   View – NetUI JSP
                   Controller – Page Flow Controller Class (jpf)
                   Model – Java Control
         o System Controls
                   Padrão do Apache Beehive
                       • EJB Control
                       • JDBC Control
                       • JMS Control
                   Extensões do Workshop
                       • Timer Control
                       • Service Control
  • JDBC Control
         o Principais annotations
                   @JdbcControl.ConnectionDataSource
                       • jndiName
                   @JdbcControl.ConnectionDriver
                       • databaseDriverClass
                       • databaseURL
                       • password

Gilberto Holms                                             http://gibaholms.wordpress.com/
• username
                         • properties
                      @JdbcControl.SQL
            o   Exemplo
@ControlExtension
@JdbcControl.ConnectionDataSource(jndiName = "LOCAL_ORACLE_TESTE")
public interface ClienteJDBCControl extends JdbcControl {

        public static class Cliente {
              private int id;
              private String nome;

                @Override
                public String toString() {
                       return id + " | " + nome;
                }

                public int getId() {
                       return id;
                }
                public void setId(int id) {
                       this.id = id;
                }
                public String getNome() {
                       return nome;
                }
                public void setNome(String nome) {
                       this.nome = nome;
                }
        }

        @JdbcControl.SQL(statement="SELECT ID, NOME FROM CLIENTE WHERE ID = {id}")
        public Cliente buscar(int id) throws SQLException;

}

    •   JMS Control
           o Principais nnotations
                     @JMSControl.Destination
                         • sendType
                         • sendJndiName
                         • jndiConnectionFactory
                         • transacted
                         • …
                     @JMSControl.Message
                         • MessageType (enum)
           o Exemplo
@ControlExtension
@JMSControl.Destination(sendType = JMSControl.DestinationType.Auto, sendJndiName = "TesteJMSTopic",
       jndiConnectionFactory = "TesteJMSFactory", transacted = false)
public interface TesteJMSControl extends JMSControl {

        @Message(JMSControl.MessageType.Text)
        public void sendMessage(String body);
}


    •   Custom Control
           o @ControlInterface
                       Anotar na interface do controle
           o @ControlImplementation
                       Anotar na classe concreta do controle

Building a Portal Application
    • Portal Projects
           o EAR
           o Web
           o DataSync
    • Propriedades Configuráveis

Gilberto Holms                                            http://gibaholms.wordpress.com/
o   Desktop
                     Backable Properties
                         • Backing File
                     Desktop Properties
                         • Asynchronous Mode
                         • Definition Label
                         • Disc Enabled
                         • DVT Enabled
                         • Encoding
                         • Look and Feel
                         • Scroll to Window
                         • Shell
                         • Title
                         • Tree Optimization
                     Presentation Properties
                         • Presentation Class
                         • Presentation ID
                         • Presentation Style
                         • Properties
                         • Skeleton URI
          o   Book
                     Backable Properties
                         • Backing File
                         • Definition Label
                         • Hidden
                         • Packed
                         • Rollover Image
                         • Selected Image
                         • Theme
                         • Title
                         • Unselected Image
                     Book Properties
                         • Content Presentation
                         • Default Page
                         • Editable
                         • Navigation
                         • Orientation
                         • Return to Default Page
                     Presentation Properties
                         • Presentation Class
                         • Presentation ID
                         • Presentation Style
                         • Properties
                         • Skeleton URI
          o   Page
                     Backable Properties
                        • Backing File
                        • Definition Label
                        • Hidden
                        • Packed
                        • Rollover Image
                        • Selected Image
                        • Theme
                        • Title
                        • Unselected Image
                     Page Properties
                        • Layout Type
                     Presentation Properties

Gilberto Holms                                      http://gibaholms.wordpress.com/
•   Presentation Class
                           •   Presentation ID
                           •   Presentation Style
                           •   Properties
                           •   Skeleton URI
Portlet Development
   • Tipos de Portlets
           o JSP/HTML Portlets
                     Prós
                          • Simples para implementação, deploy, teste
                          • Recomendado para portlets que apenas mostram dados
                     Contras
                          • Não prove arquitetura MVC
                          • Difícil de linkar com outras JSPs
                          • Difícil de manter e evoluir
           o Java Portlet
                     É baseado na especificação JSR-168
                     Prós
                          • Portabilidade entre múltiplos vendedores
                          • Foundation para construir portlets MVC
                     Contras
                          • Não possui tooling na IDE
                          • Desenvolvimento em baixo nível (similar a servlets)
                          • O controlador MVC precisa ser codificado pelo desenvolvedor
           o Java Page Flow Portlet
                     Prós
                          • Rápido desenvolvimento e tooling utilizando a IDE
                          • Arquitetura MVC
                          • Integração com Beehive Controls
                          • Melhora o Struts, utilizando annotations
                     Contras
                          • Muitos recursos talvez sejam desnecessários para simples portlets
           o Browser (URL) Portlet
                     Encapsula uma página da Web
                     Útil para integração com sistemas web legados
           o Struts Portlet
                     Prós
                          • Pode-se migrar uma aplicação antiga Struts para o portal
                          • Arquitetura MVC
                     Contras
                          • Não possui tooling na IDE
                          • Mais complexo que NetUi (pois contém classes e XML)
           o JavaServer Faces (JSF) Portlets
                     É baseado na especificção JSR-127
                     Prós
                          • Componentes de tela podem ser construídos com drag-and-drop
                          • Arquitetura MVC
                     Contras
                          • Não possui tooling na IDE
                          • Mais complexo que NetUi
           o Remote Portlet
                     Consumir portlets deployados em outro servidor (vide WSRP)
           o Clipper Portlet
                     Semelhante ao browser portlet, porém ele incorpora a página dentro do próprio portal,
                     podendo clipar apenas um determinado conteúdo via xpath
                     Prós
                          • O resto do portal pode acessar o conteúdo e compartilhar a mesma sessão da
                              página clipada
                          • Permite fazer um request via POST na página remota antes de clipar

Gilberto Holms                                           http://gibaholms.wordpress.com/
Contras
                           • Não isola o conteúdo clipado, ele roda no contexto do portal
                           • Autenticação não é criptografada
                           • JavaScript nas páginas remotas não é garantido que funcione corretamente
                           • Os cookies são carregados pelo portal, e não persistidos no cliente
   •   Configuração do Portlet
                      Backable Properties
                           • Backing File
                      Portlet General Properties
                           • Async Content Rendering
                           • Cache Expires (seconds)
                           • Cache Render Dependencies
                           • Client Classifications
                           • Default Minimized
                           • Definition Label
                           • Description
                           • Event Handlers
                           • Forkable
                           • Fork Pre-Render
                           • Fork Pre-Render Timeout
                           • Fork Render
                           • Fork Render Timeout
                           • LAF Dependencies Path
                           • Orientation
                           • Packed
                                    o Se false, ele extenderá na horizontal o máximo que conseguir (width
                                        100%). Se true, ele ocupa o mínimo espaço horizontal possível.
                           • Render Cacheable
                                    o Se true, o conteúdo de output sera cacheado entre requests
                                    o O cache será recusado se o usuário interagir via links ou forms
                                    o Pode-se usar o WebLogic Portal Cache Manager para controle
                                        programático de caching
                           • Title
                      Portlet Properties
                           • Content Presentation Class
                           • Content Presentation Style
                           • Offer As Remote
                      Portlet Titlebar
                           • Show Titlebar
                      Presentation Properties
                           • Presentation Class
                           • Presentation ID
                           • Presentation Style
                           • Properties
                           • Skeleton URI
   •   Backing Files
          o JspBacking        AbstractJspBacking
          o Sempre extender AbstractJspBacking, pois ela implementa os métodos de renderização
          o É criada uma instância por request
          o Métodos
                      init(HttpServletRequest, HttpServletResponse) : void
                           • É sempre executado, em cada request, antes do desktop ser renderizado
                      handlePostbackData(HttpServletRequest, HttpServletResponse) : boolean
                           • É executado se o recurso for visível e for “postback” (interação usuário, é
                               identificado pelo parametro _nfpb=true)
                      preRender(HttpServletRequest, HttpServletResponse) : boolean
                           • É executado se o recurso for visível
                      dispose( ) : void

Gilberto Holms                                           http://gibaholms.wordpress.com/
• É executado sempre, em cada request, depois de o conteudo ser renderizado
                     isRequestTargeted(HttpServletRequest, HttpServletResponse) : boolean
                         • É usado para saber se o request foi em um particular portlet
           o Ordem de Chamada
                     Página Abriu
                         • init
                     Usuário interagiu fora de um recurso com B.F.:
                         • init
                         • handlePostbackData
                     Usuário interagiu em um recurso com B.F.:
                         • init
                         • handlePostbackData
                         • preRender
                         • dispose
                     Usuário interagiu em um recurso interno a um recurso com B.F.:
                         • (idem ao anterior)
           o Observações:
                     Em caso de portlet, pode ser criada em dois níveis de escopo
                         • netuix:portlet – atua no nível do portlet
                         • netuix:jspContent – atua apenas na jsp do portlet (não influencia na renderização
                             do portlet)
                         • Depende do recurso netuix_servlet.jar no classpath do projeto
   •   Portlet File
           o Tipos de Content:
                     jspContent
                     pageflowContent
                     facesContent
                     bookContent
                     portionContent
                     strutsContent
                     uriContent
<portal:root>
    <netuix:portlet definitionLabel="homeGeral" title="Homegeral">
        <netuix:content>
            <netuix:jspContent contentUri="/homeGeral/home.jsp"/>
        </netuix:content>
    </netuix:portlet>
    <netuix:preference description="Descricao do parametro" modifiable="true" multiValued="true"
               name="nome" value="giba"/>
</portal:root>
           o   Portlet Preferences:
                        Pares de key-value para parametrização de valores
                        Permite que diferentes instâncias do portlet possam ter esse valor modificado em
                        runtime
                        Podem ser configuradas via Workshop (dev) ou via Console Administrativo (prod)
                        Recuperando os valores via API:
PortletBackingContext context = PortletBackingContext.getPortletBackingContext(request);
PortletPreferences preferences = context.getPortletPreferences(request);
String nome = preferences.getValue("nome", "Giba"); //Giba é o default caso não exista o atributo
                       Recuperando os valores via TAGLIB:




Gilberto Holms                                            http://gibaholms.wordpress.com/
•   Inter-Portlet Communication
           o Não suportado para Asynchronous Portlets
           o Portlet Event Handlers (recomendado)
                        Escuta eventos de um ou mais portlets, e responde com uma Event Action
                        Tipos de Event Handlers
                            • Handle Generic Event
                                   o Disparado por uma PageFlow Action de mesmo nome ou um custom
                                       event de mesmo nome
                            • Handle Portal Event
                                   o Portlet states (minimize, maximize, etc)
                                   o Visibility
                                   o Portlet refresh
                            • Handle Custom Event
                                   o Disparado programaticamente
PortletBackingContext portlet = PortletBackingContext.getPortletBackingContext(request);
portlet.fireCustomEvent("myCustomEvent", myPayloadObject);
                          •      Handle PageFlow Event
                                    o Actions de PageFlows
                            • Handle Struts Event
                                    o Action do Struts
                            • Handle Faces Event
                                    o Action de JSF
                       Tipos de Event Actions
                            • Change Window Mode
                            • Change Window State
                            • Activate Page
                            • Fire Generic Event
                            • Fire Custom Event
                            • Invoke BackingFile Method
                            • Invoke PageFlow Action
                            • Invoke Struts Action
                            • Invoke Faces Action
           o   Backing Files
           o   Refresh Actions
                       PageFlow portlets podem inscrever uma action para ser executada no refresh
                       É executada quando há refresh do portlet e nenhuma action foi invocada pelo usuário
           o   listenTo portlet property
                       Está deprecated
           o   Compartilhamento de Dados
                       Request Parameters
                            • Obter um parametro da URL do browser:
HttpServletRequest outerRequest = ScopedServletUtils.getOuterRequest(this.getRequest());
String nome = outerRequest.getParameter("nome");

                     Request Attributes
                     Session Attributes
   •   Asynchronous Portlets
          o Por padrão o portal executa os portlets de forma sincrona
          o Todos os portlets precisam ser carregados para que o usuário possa interagir
          o Se o portlet for assíncrono, ele será executado em uma thread separada
          o Habilitando skeletons para chamada assíncrona: framework/features
                     Atributo “Async Content Rendering” (a escolha é transparente ao cliente)
                          • AJAX
                                  o Usa o mesmo documento HTML
                                  o Suporta features como cross-portlet drag-and-drop
                                  o Não suporta XHTML
                                  o Melhor integração look-and-feel
                                  o Necessita JavaScript no browser
                          • IFRAME
                                  o Usa um documento HTML separado

Gilberto Holms                                           http://gibaholms.wordpress.com/
o Suporta XHTML
                       Consequências do uso de portlets asíncronos
                           • Não suporta inter-portlet communication
                           • Portlet Backing Files são executadas duas vezes
                           • Comandos HTTP redirect não são suportados no portlet
                           • Alguns commandos da PortletBackingContext API não são suportados
           o   Desabilitando request assíncrono em um portlet:
<render:controlContext asyncContentDisabled="true">
       <netui:form action="addToCart">
               <netui:select dataSource="actionForm.productSku" />
               <netui:button value="Submit" type="submit" />
       </netui:form>
</render:controlContext>

           o   Fork Render
                      É uma alternative ao portlet assíncrono
                      Os portlets são carregados em paralelo, o que melhora a performance geral
                      O cliente ainda é obrigado a esperar todos carregarem para interagir
                      Portlets que suportam:
                          • JSP
                          • PageFlow
                          • Java (JSR-168)
                          • Remote (WSRP)
                      Configurando no portlet
                          • Forkable: true
                          • Fork Render: true
                          • Fork Render Timeout: 30




           o   É possível renderizar um Portlet standalone assincronamente via código, utilizando o mesmo
               framework de portlets assíncronos, diretamente na JSP:
<render:portalFacet label="standalone_portlet_cart" path="/portlets/shoppingCart.portlet"/>




Gilberto Holms                                           http://gibaholms.wordpress.com/
Look And Feel
   • Look and Feel
          o Determina como o conteúdo do portal será renderizado
          o É independente do conteúdo do portlet
          o Pode ser aplicado genericamente ou de acordo a um tipo de dispositivo (palm, etc)
          o Elementos do LAF:
                    Skeletons
                    Shells
                    Skins (incluindo genes)
                    Layouts
                    Themes
          o Ciclo de Vida do LAF
                    Portal XML Representation    PresentationContext    Skeleton + Skin     HTML
          o Arquivo .laf
                    É uma associação de um Skeleton e um Skin
<netuix:markupDefinition>
    <netuix:locale language="en"/>
    <netuix:markup>
         <netuix:lookAndFeel title="Teste" description=""
              definitionLabel="TesteDefinitionLabel_1"
              skin="Teste" skinPath="/framework/skins/"
              skeleton="Teste" skeletonPath="/framework/skeletons/"
              markupType="LookAndFeel"
              markupName="TesteLookAndFeel_1"/>
    </netuix:markup>
</netuix:markupDefinition>

   •  Skeleton
         o É um conjunto de JSPs que renderizam o conteúdo do portal em HTML
         o Define a estrutura do portal e aplica os elementos do Skin
         o Pode ser baseado em um dispositivo
         o Cada skeleton JSP é executada duas vezes: beginRender e endRender
<render:beginRender>
      <body>
             . . Custom Logic . .
      <div class="bea-portal-body-content">
</render:beginRender>

<render:endRender>
      </div>
            . . Custom Logic . .
      </body>
</render:endRender>

           o   Um skeleton para um determinado elemento pode ser “override” através da propriedade
               Presentation Properties   Skeleton URI
           o   Skeleton.xml
                      Indica configurações e locais para procurar por JSPs
<ns:skeleton>
       <ns:render-format>
               <ns:preset>HTML_4_01_TRANSITIONAL</ns:preset>
       </ns:render-format>
       <ns:render-strategy>
               <ns:search-path>
                      <ns:path-element>.</ns:path-element>
                      <ns:path-element>../default</ns:path-element>
                      <ns:path-element>../shared</ns:path-element>
               </ns:search-path>
       </ns:render-strategy>
</ns:skeleton>




Gilberto Holms                                          http://gibaholms.wordpress.com/
•   Skin
           o   Oferece cores, imagens, fonts e estilos (CSS e JS) utilizados para renderizar o conteúdo do
               portal
           o   Skin.xml
                      Indica configurações e locais para serem encontrados imagens, css e js. Indica também
                      os commandos de link de css e include de javascript a serem renderizados no portal
<ns:skin xmlns:ns="http://www.bea.com/servers/portal/framework/laf/1.0.0">
    <ns:target-skeleton>
        <ns:skeleton-id>default</ns:skeleton-id>
        <ns:skeleton-path>/framework/skeletons</ns:skeleton-path>
    </ns:target-skeleton>
    <ns:images>
        <ns:search-path>
            <ns:path-element>images</ns:path-element>
        </ns:search-path>
    </ns:images>
    <ns:render-dependencies>
        <ns:html>
            <ns:links>
                <ns:search-path>
                    <ns:path-element>.</ns:path-element>
                </ns:search-path>
                <ns:link href="css/body.css" rel="stylesheet" type="text/css"/>
                <ns:link href="css/book.css" rel="stylesheet" type="text/css"/>
                 <!-- OUTROS -->
            </ns:links>
            <ns:scripts>
                <ns:search-path>
                    <ns:path-element>js</ns:path-element>
                    <ns:path-element>../shared/js</ns:path-element>
                </ns:search-path>
                <ns:script src="console.js" type="text/javascript"/>
                <ns:script src="cookies.js" type="text/javascript"/>
                 <!-- OUTROS -->
            </ns:scripts>
        </ns:html>
    </ns:render-dependencies>
    <ns:script-dependencies>
        <ns:script-fragments>
            <ns:fragment event-handler="onload">initSkin()</ns:fragment>
        </ns:script-fragments>
    </ns:script-dependencies>
</ns:skin>

           o Um CSS para um determinado elemento pode ser “override” através da propriedade
             Presentation Properties       Presentation Class
          o Podemos adicionar atributos CSS inline aos já presentes em um elemento utilizando a
             propriedade Presentation Properties        Presentation Style (geralmente utilizamos para definer
             height – altura e overflow – rolagem)
   •   Chromosomes and Genes
          o É possível definir genes através de ${tokens} em arquivos do skin ou do skeleton (CSS, JS, JSP,
             etc) e então definir seus valores através do arquivo chromosome
          o Por definição eles devem ser criados nas pastas “Skin” ou “Skeleton”
          o Denifido em arquivo.laf       Skin Chromosome Name ou Skeleton Chromosome Name




Gilberto Holms                                           http://gibaholms.wordpress.com/
o     Arquivo .chromosome
<chromosome>
       <genes>
              <gene name="titlebar-color">
                      <value>blue</value>
              </gene>
              <gene name="titlebar-size">
                      <value>18px</value>
              </gene>
       </genes>
</chromosome>

           o     Atenção: para utilizar chromosomes no skin, é preciso definir no skin.xml o uso de CSS e JS
                 inlined no html, como indicado na caixa da direita:
<ns:link href="window.css" rel="stylesheet"               <ns:style content-uri="window.css"
       type="text/css" />                                        type="text/css" />
<ns:script src="teste.js" type="text/javascript"/>        <ns:script type="text/javascript">
                                                                 alert('teste ${meuGene}');
                                                          </ns:script>

            o Observações:
Existe conceito de default.chromosome, que é onde o portal localiza os cromossomos default do skin ou
skeleton. Então podemos adicionar outros arquivos .chromosome para sobrescrever parcialmente um gene
particular
                        Para referenciar um recurso de LAF na JSP sem ficar preso ao caminho e o laf
                        escolhidos, utilizar o recurso de reescrita wlp_rewrite:
<img src="/framework/skins/classic/img/logo.gif"/>        <img src="”wlp_rewrite?logo.gif/wlp_rewrite"/>


   •   Shell
          o      Define a estrutura macro do portal, definindo as áreas de Header, Footer e conteúdo
          o      Arquivo .shell
<netuix:markupDefinition>
       <netuix:locale language="en" />
       <netuix:markup>
               <netuix:shell title="Custom JSP Shell"
                      description="A Custom Shell with Header and Footer."
                      markupType="Shell" markupName="customJSPHeaderFooter">
                      <netuix:head />
                      <netuix:body>
                              <netuix:header>
                                     <netuix:jspContent contentUri="/resources/jsp/customheader.jsp" />
                              </netuix:header>
                              <netuix:break />
                              <netuix:footer>
                                     <netuix:jspContent contentUri="/resources/jsp/customfooter.jsp" />
                              </netuix:footer>
                      </netuix:body>
               </netuix:shell>
       </netuix:markup>
</netuix:markupDefinition>
           o     Observações
                        Caso a tag <netuix:header/> esteja vazia, por default serão carregados os arquivos
                        header.jsp e footer.jsp do skeleton
                        O header e o footer também podem possuir um layout atrelado
                        O header e o footer podem ter os mesmos contents que um portlet pode ter (vide seção
                        de portlets) e ainda pode incluir um portlet através da tag <netuix:portletInstance>
   •   Layout
          o Define o posicionamento dos portlets em uma página
          o Tipos básicos de layout:
                    Flow Layout
                        • Posicionamento lado a lado, seguindo a ordem left-to-right ou top-to-botton
                    Grid Layout
                        • São definidas linhas e colunas
                    Border Layout
                        • São definidas 5 áreas geográficas (norte, sul, leste, oeste, centro)
                    Custom Layout
                        • Arquivo .layout: define a descrição, o arquivo html de definição e os placeholders

Gilberto Holms                                              http://gibaholms.wordpress.com/
<netuix:markupDefinition>
       <netuix:locale language="en" />
       <netuix:markup>
               <netuix:GridLayout title="My Layout"
                      description="This is my custom layout"
                      htmlLayoutUri="/framework/markup/layout/myLayout.html.txt"
                      markupType="Layout" markupName="myLayout">
                      <netuix:placeholder title="esquerda" description="..."
                              markupType="Placeholder" markupName="myPlaceholder1" />
                      <netuix:placeholder title="direita" description="..."
                              markupType="Placeholder" markupName="myPlaceholder2" />
               </netuix:GridLayout>
       </netuix:markup>
</netuix:markupDefinition>


                           •   Arquivo .html.txt: define o html do layout, onde cada placeholder é identificado
                               pela ordem em que aparece no arquivo de layout
<table class="portalLayout" id="thePortalLayout" width="100%" height="100%">
       <tr>
               <td class="placeholderTD" valign="top" width="30%">
                      <placeholder number="0" />
               </td>
               <td class="placeholderTD" valign="top" width="70%">
                      <placeholder number="1" />
               </td>
       </tr>
</table>
           o   Observações:
                      Ao invest de um arquivo .html.txt podemos utilizar um skeleton jsp e renderizar o layout
                      via código java
   •   Theme
          o É um componente “fine-grained” capaz de sobrescrever partes de um skin ou skeleton
          o Pode ser associado a nível de Book, Page e Portlet
          o Pode atuar das seguintes formas:
                   Sobrescrever JSP em um skeleton
                   Sobrescrever imagens em um skin
                   Adicionar novos arquivos CSS em um skin
          o Criando um Theme
                   Criar um arquivo de definição .theme
<netuix:markupDefinition>
    <netuix:locale language="en"/>
    <netuix:markup>
        <netuix:theme
              name="greyout"
              title="Grey Out" description="A Theme used to de-emphasise a particular entity."
              markupType="Theme" markupName="greyout"/>
    </netuix:markup>
</netuix:markupDefinition>

                       Criar pasta em Skin e Skeleton com o mesmo nome do theme
                           • Os arquivos de skeleton sobrescreverão os skeletons default
                       Declarar os arquivos de skin em skin.xml
                           • Os arquivos de skin sobrescreverão os skins default
                       Opcional: utilizar um arquivo structure.xml
NetUI
   • Struts Framework
         o Open-source application framework desenvolvido para criar aplicações web baseadas na
             arquitetura MVC
         o Componentes:
                     Front-Controller (ActionServlet)
                     Arquivo de configurações XML
                     Tags JSP
                     Classes
                         • Action – implementa a lógica do controller
                         • ActionForm – encapsula dados de formulário em JavaBeans
                         • ActionForward – implementa lógica de navegação
                         • ActionMapping – binda actions para URIs

Gilberto Holms                                             http://gibaholms.wordpress.com/
•   NetUI (Beehive Framework)
          o Open-source application framework desenvolvido para criar aplicações web baseadas na
               arquitetura MVC, baseado no Struts
          o É parte do projeto Apache Beehive
          o Componentes:
                       Java PageFlows
                       NetUI Tags JSP
                       Java Controls
                       Form Beans (POJO)




   •   Java PageFlow
           o É uma classe java com Beehive Annotations
           o Podem ser nested ou shared, para melhor permitir modularidade e reuso
           o Composição:
                      Actions
                          • Definem a lógica de navegação entre JSPs
                          • Configurados via annotation
                          • Responde um ou mais forwards
                      Forward
                          • Define o próximo elemento (JSP) do fluxo de navegação
                          • É declarado na action
   •   Actions
           o Dois tipos de action:
                     Simple Action
                          • Contém apenas um simples condicional
@Jpf.Controller(simpleActions = {
   @Jpf.SimpleAction(name = "someAction", path = "default.jsp", conditionalForwards = {
      @Jpf.ConditionalForward(condition = "${pageFlow.advanced}", path = "advanced.jsp"),
      @Jpf.ConditionalForward(condition = "${param==’yes’}", path = "alternate.jsp")
         })
   })
public class ClienteController extends PageFlowController { ... }




Gilberto Holms                                         http://gibaholms.wordpress.com/
Basic Method
                         • Implementadas em um método
@Jpf.Action(forwards = {
               @Jpf.Forward(name = "somePage", path = "somePage.jsp")
       })
public Forward someAction() {
       return new Forward("somePage");
}


   •  Java Controls
         o Os Java Controls podem ser utilizados no PageFlow
         o O controle é injetado pelo container através da annotation @Control
@Control
private ClienteJDBCControl clienteJDBCControl;

   •   Nested PageFlows
          o É um PageFlow completo que pode ser invocado por outro PageFlow
          o Retorna ao PageFlow chamador via uma action de saída, que corresponde a uma action do
              PageFlow chamador
          o Utilização:
                      Modularidade
                      Manutenção
                      Reuso
   •   Shared PageFlows
          o É um PageFlow que contém uma “biblioteca” de actions e JSPs, que não é necessariamente um
              fluxo completo
          o Seus conteúdos (actions, handlers, etc) podem ser acessados por qualquer PageFlow que o
              referencie
          o Extende a superclasse SharedFlowController
          o É instanciado em qualquer PageFlow, da seguinte forma:
@Jpf.Contoller(sharedFlowsRefs = {
   @Jpf.SharedFlowRef(name = "sharedFlowOne", type = example.SharedFlowClassOne.class),
   @Jpf.SharedFlowRef(name = "sharedFlowTwo", type = example.SharedFlowClassTwo.class)
 })
public class MyController extends PageFlowController { ... }




   •   NetUI Tags
          o Wizards
                   Create Form
                   Data Display
                   Data Grid
                   Update Form
          o Tags que Disparam Actions
                   Anchor
                   Anchor Cell
                   Area
                   Button
                   Form
                   Image Anchor
                   Image Anchor Cell
                   Tree Item
          o Tags Renderizadoras de Conteúdo

Gilberto Holms                                         http://gibaholms.wordpress.com/
Content – “texto simples”
                      Span – “texto dentro de uma tag <span>”
                      Label – “texto para input field”
           o   Tags para Data Binding
                      Repeater
                          • Itera sobre coleções, arrays e FormBeans (não gera html)
       <netui-data:repeater dataSource="pageFlow.cartItems">
              <netui-data:repeaterHeader>
                      <table>
              </netui-data:repeaterHeader>
              <netui-data:repeaterItem>
                      <tr>
                              <td>${container.item.name}</td>
                              <td>
                                     <netui:span value="${container.item.price}">
                                             <netui:formatNumber pattern="$##,###.00" />
                                     </netui:span>
                              </td>
                      </tr>
              </netui-data:repeaterItem>
              <netui-data:repeaterFooter>
                      </table>
              </netui-data:repeaterFooter>
       </netui-data:repeater>

                      Data Grid
                         • Renderiza coleções, arrays e FormBeans (gera um grid html)
       <netui-data:dataGrid dataSource="pageScope.pets" name="petGrid">
              <netui-data:configurePager pageSize="5" />
              <netui-data:rows>
                      <netui-data:spanCell value="${container.item.name}" />
                      <netui-data:spanCell value="${container.item.description}" />
                      <netui-data:spanCell value="${container.item.price}" />
                      <netui-data:anchorCell value="Details" action="details">
                              <netui:parameter name="id" value="${container.item.petId}" />
                      </netui-data:anchorCell>
              </netui-data:rows>
       </netui-data:dataGrid>

                      Tree
                          •   Renderiza uma árvore de itens
       <netui:tree dataSource="pageFlow.projectTree" selectionAction="selectTreeNode" tagId="tree">
              <netui:treeItem expanded="true">
                      <netui:treeLabel>0</netui:treeLabel>
                      <netui:treeItem>0.0</netui:treeItem>
                      <netui:treeItem>0.1</netui:treeItem>
                      <netui:treeItem>0.2</netui:treeItem>
              </netui:treeItem>
       </netui:tree>

   •   Data Binding Contexts
          o Objetos Expression Language 2.0 (EL) definidos:
                      requestScope / sessionScope / applicationScope / pageScope
                      actionForm
                          • Variáveis do FormBean associado à tag <netui:form> corrente (acessível
                              apenas dentro dessa tag)
                      pageFlow
                          • Variáveis de instância do PageFlow corrente (regra nomes JavaBeans)
                      Container
                          • Objeto corrente das tags de iteração (repeater, dataGrid, cellRepeater…)
   •   Form Bean
          o Classe interna definida dentro do controller, anotada com @Jpf.FormBean:
@Jpf.FormBean
public static class BeginFormBean implements java.io.Serializable {...}

           o   É passada para a action declarando na mesma um parâmetro do tipo do FormBean
           o   É bindada na JSP através de uma tag netui:form e o elemento EL actionForm
           o   Validação de FormBeans

Gilberto Holms                                          http://gibaholms.wordpress.com/
Feita de maneira declarativa, via Annotations
                       No NetUI ela é feita server-side
                       Regras de validação:




                       Implementando Validação:
                           • Definindo a regra de validação (2 modos)
                                 o Na própria action (pode ser específico por action)
       @Jpf.Action(
           ...
          validatableProperties = {
                @Jpf.ValidatableProperty(propertyName = "idade",
                    validateRequired = @Jpf.ValidateRequired(message="Campo obrigatório"),
                       validateType = @Jpf.ValidateType(type=long.class, message="Número inteiro"))
          })
       public Forward myAction(MyFormBean form) { ... }

                                   o   Em cada GETTER do FormBean
               @Jpf.ValidatableProperty(
                      validateRequired = @Jpf.ValidateRequired(message="Campo obrigatório"),
                      validateType = @Jpf.ValidateType(type=long.class, message="Número inteiro")
               )
               public BigInteger getIdade() { ... }


                           •    Definindo o fluxo de navegação de erro
       @Jpf.Action(
           ...
          validationErrorForward = @Jpf.Forward(name="fail", path="input.jsp")
       )
       public Forward myAction(MyFormBean form) { ... }
                                   o    Obs.: para voltar pra mesma página que submeteu o form utilizamos:
                                       @Jpf.Forward(navigateTo = Jpf.NavigateTo.currentPage)

                           •    Exibindo a mensagem de erro na tela
<netui:error   key="idade" />

                       MessageBundle
                          • É uma alternativa às mensagens fixas
                          • Um arquivo properties que serve de repositório de mensagens de erro
                          • Basta declarar no controller (caminho relativo à pasta “src/” e sem a extensão)
       @Jpf.Controller(
           ...
          messageBundles = { @Jpf.MessageBundle(bundlePath = "bundleErros") }
          //caminho resolvido: src/bundleErros.properties
       )
                                   o   Obs.: na tag de validação, ao invés de message, definir o atributo
                                       messageKey, setando a key do properties para a mensagem

Gilberto Holms                                            http://gibaholms.wordpress.com/
•   Tratamento de Exceção
           o Anotação @Jpf.Catch
                       Captura um certo tipo de exceção e direciona para uma action/jsp ou para um método
                       ExceptionHandler (@Jpf.ExceptionHandler)
           o Pode ser feita:
                       A nível de Controller
                           • Aplica a todas as actions do controller
                       A nível de Action
           o Obs.: uma action pode lançar exceções declaradas (throws Exception), que também serão
               tratadas pelo mecanismo de tratamento de exceção
   •   Internacionalização
           o É definida através de MessageBundles
           o É carregado dinamicamente de acordo com o idioma do browser do cliente
           o Padrão de nomenclatura:
                       nomeQualquer.properties – bundle default
                       nomeQualquer_es.properties
                       nomeQualquer_en.properties
           o Utilizando o Message Bundle (2 modos)
                       No controller
                           • Declaração:
                                   o Idêntico ao bundle de validação – adicionar no array da annotation
                                   o Caminho relativo à src, porém separado por pontos
                           • Utilização:
<netui:span value="${bundle.default.message1}"/>

                      Na própria JSP
                         • Declaração:
                                  o Caminho relativo à src, porém separado por barras
                                  o Exemplo:
<netui-data:declareBundle name="fooMessages" bundlePath="org/foo/messages" />
                          •   Utilização:
<netui:span value="${bundle.fooMessages.message1}"/>

Tags and API
   • Presentation Context
                 Manipula o estado corrente de um elemento, informando o que é necessário para renderizá-
                 lo e informações sobre o elemento
                 Bastante utilizado para renderização no skeleton
                      • Algumas Subclasses:
                              o DesktopPresentationContext
                              o HeaderPresentationContext
                              o PagePresentationContext
                              o LayoutPresentationContext
                              o …
                      • Alguns Métodos:
                              o isVisible
                              o getChildren
                              o getProperty
                              o …
                      • Obtendo via código
DesktopPresentationContext dpc = DesktopPresentationContext.getDesktopPresentationContext(request);
HeaderPresentationContext hpc = HeaderPresentationContext.getHeaderPresentationContext(request);
...
...


   •   Backing Contexts
          o Fornece informações sobre o estado dos elementos e permite que eles sejam modificados
          o Possuem a classe pai WindowBackingContext
          o Algumas Subclasses:
                      PortletBackingContext
                      PageBackingContext

Gilberto Holms                                          http://gibaholms.wordpress.com/
BookBackingContext
          o   Alguns Métodos:
                     setTitle / getTitle
                     setVisible / isVisible
                     getDefinitionLabel
                     setupStateChangeEvent




Gilberto Holms                                http://gibaholms.wordpress.com/
•   Portal JSP Tags




WSRP
  • Federated Portals
       o Permitem que portais compartilhem recursos (portlets) que podem ser utilizados como serviços
           por outros portais
       o “Um Portal A está interessado em um portlet do Portal B”:
                   Sem Federação:
                       • Portal A exporta o portlet
                       • TI migra e deploya o portlet no Portal B
                       • Qualquer mudança no portlet precisa fazer tudo denovo
                   Com federação:
                       • Portal A publica o portlet como WebService no seu UDDI
                       • TI do Portal B cria um “Proxy Portlet” e o configura para consumir o portlet
                       • Qualquer mudança feita no portlet será vista automaticamente no Portal B
       o Possui interoperabilidade com portais de outros vendedores e tecnologias (.NET, etc)
       o O que é WSRP:
                   “Web Services for Remote Portlets”
                   É uma especificação mantida pela OASIS
                   Define uma interface padronizada para implementação de Federated Portals
                   Permite que consumidores agreguem remote markups usando SOAP
                   Conceitos:
                       • Produtor – fornece recursos via Web Services
                       • Consumidor – consome e agrega recursos de um ou mais produtores




Gilberto Holms                                        http://gibaholms.wordpress.com/
o  Produtor WSRP
                     Registro de consumidor
                     Registro de entitlements
                     Federated portlets / books / pages
                     WS-Security / SAML
                     Integração com Service Registry
           o Consumidor WSRP
                     Proxy portlets / books / pages
                     Visitor Entitlements
                     User Identity Propagation (SAML)
                     User Profile Propagation
   •   Implementando um Produtor WSRP
           o Adicionar facet “WSRP Producer”
           o Extender o domínio adicionando o template wsrp-simple-producer.jar
           o Nos arquivos que deseja oferecer (.portlet / .book / .page), setar propriedade:
                     Portlet Properties    Offer As Remote
           o O Producer WSDL se tornará disponível em: http://<host>:<port>/<webapp>/producer?wsdl
           o Configuração do Producer




           o  O Visitor Entitlement é realizado através de “WSRP Properties” setadas no consumidor, que são
              enviadas para o produtor no momento do registro:
                      Criar um “Property Set” no DataSync Project
                      Adicionar properties no Property Set
                      Registra o Property Set no arquivo wsrp-producer-config.xml
                      Entitlement: no Console Administrativo, criar o entitlement utilizando “Role Expression”
                      associado ao Property Set criado, definindo uma regra com o valor de uma propriedade
   •   Implementando um Consumidor WSRP
           o Configuração do Consumer




           o   Criar um portlet do tipo “Remote Portlet”
           o   Digitar a url do Producer WSDL e clicar em “Register”
           o   Serão exibidos todos os portlets remotos que o produtor oferece para que seja escolhido um
           o   Serão exibidas todas as propriedades que o Producer declara no seu Property Set, para que elas
               sejam preenchidas pelo consumidor


Gilberto Holms                                            http://gibaholms.wordpress.com/
o   Atenção: books e pages remotos podem ser adicionados apenas em portais em produção,
               através do Console Administrativo (e não no workshop)
   •   Inter-Protlet Communication
           o É feita da mesma forma, criando Event Handlers no portlet proxy e Actions no portlet local
   •   User Profile
           o O consumidor informa as User Profile Properties que o produtor declarar como necessárias, na
               hora do registro
   •   Transferencia de Dados
           o Um protlet local pode trocar dados (objeto Serializable) com um portlet remoto, da seguinte
               forma:




   •   Interceptors
           o É possível que um consumidor declare interceptors nas chamadas do portlet remoto, para uma
               lógica qualquer:
                       Error handling / validation
                       Implementação de cache
                       Mudança de markup
                       Mudança de HTTP Headers

Content Management
   • Motivações:
          o O conteúdo de um site é modificado muito frequentemente
          o O site precisa ser ágil, sem a necessidade de um desenvolvedor
          o Gerenciamento de mudança do conteúdo
   • Um Content Management System (CMS) deve prover:
          o Ferramentas para administração e desenvolvimento
          o Ferramentas para criação / publicação de conteúdo
          o Um repositório (storage) estruturado para armazenamento do conteúdo
          o Sistema de busca Property-based
   • Virtual Content Repository
          o É o repositório lógico para acesso e organização de conteúdos no console administrativo
          o Pode agrupar vários repositórios físicos logicamente
   • Content Repository
          o É o repositório físico, onde realmente fica guardado o conteúdo
          o Opções de Content Repository
                     BEA Repository
                         • Database (default)
                         • File System
                                  o Mais performático
                                  o Se utilizado com versionamento, o conteúdo antigo é guardado na base
                                      de dados
                                  o Porém, não é transacional
                     Third-Party Repository
                         • Repositórios de outros fabricantes (ex. Documentum)
          o Por padrão, o versionamento de conteúdo (“Library Services”) vem desabilitado
          o Podemos utilizar Content Workflow somente em repositórios versionados
   • Content Types
          o É o template, a definição de um determinado tipo de conteúdo


Gilberto Holms                                          http://gibaholms.wordpress.com/
o    Suas características são definidas a partir de “Properties”, que podem ser:
                        Boolean
                        Long Integer
                        Number Decimal
                        String
                        Date/Time
                        Binary – um arquivo qualquer
                        Nested Content Type – um sub-elemento complexo (outro Content Type)
                        Link – algum outro conteúdo já implantado
           o Opções gerais para as Properties:
                        Required
                        Read Only
                        Primary Property
                             • Uma por content-type, podendo ser utilizada para otimizar a busca de conteúdos
                        Searchable
                             • Pode ser incluída na busca de conteúdo
                        Is Explicit
                             • Mapeia o valor para uma coluna específica na tabela do CMS
                        Allow Multiple Values
                             • Uma lista de valores
                        Restrict Values
                             • Cria um domínio de valores permitidos
           o Hierarquia de Content Types
                        Abstract Content Types
                             • Não podem virar conteúdo, serve apenas para ser “herdado” (é um) ou
                                 “agregado” (tem um) por outros Content Types
           o Adicionando conteúdo:
                        Console Administrativo do Portal
                        Através do Windows Explorer, se o WebDAV estiver configurado
                        Programaticamente, utilizando CMS Controls e Content API
                        Usando Propagation Tools
           o Content Folders
                        Pastas utilizadas para agrupar lógicamente conteúdos
                        Importante pois permite setar Visitor Entitlements e Workflow em folder-lever
   •   WebDAV
           o Web-based Distributed Authoring and Versioning
           o É uma extensão do protocolo HTTP
           o Permite que administradores publiquem conteúdo através do Windows Explorer
           o Pode ser utilizada em um repositório por vez
           o O WebDAV determina o Content Type associado ao conteúdo de duas formas:
                        Utiliza o Content Type default associado ao repositório
                        Utiliza o Content Type default associado à pasta atual
           o Para isso, configurar as seguintes propriedades no repositório:
                        WEBDAV_ENABLED e WEBDAV_TYPE
   •   Library Services
           o Fornece:
                        Versionamento
                        Content Workflow
                        Content Workspace
                        Controle de ciclo-de-vida
           o Pode ser ativado apenas em repositórios do tipo “BEA Repository”
           o Content Workspace
                        Uma user-view do conteúdo atual
                        Gerencia check-in / check-out de conteúdo e os Assigned Itens para sua role no caso do
                        uso de workflow
           o Content Workflow
                        Workflow default:




Gilberto Holms                                            http://gibaholms.wordpress.com/
Criando workflows customizados
                          • Através de arquivo de configurações XML
                          • Cada estado do workflow é definido atrave´s de classes de estado default do
                             produto, chamadas de Workflow Action Class
                          • Exemplo de uma declaração de transição do status 2 para o status 6:
<transition>
       <from-status id="2">
              <capabilityConstraint>can_publish</capabilityConstraint>
       </from-status>
       ...
       <to-status id="6">
              <capabilityConstraint>can_publish</capabilityConstraint>
              <action class="examples.workflow.TechnicalAction" />
       </to-status>
</transition>


   •   Selectors e Placeholders
           o O Portal fornece aos desenvolvedores alguns recursos para publicação de conteúdo gerenciável:
                       Content Selectors
                       Content Placeholders
                       Campaigns
                       JSP Tag Libraries
                       Java API e Controls
           o Content Placeholders
                       A cada request no portal, faz uma busca de conteúdo através de property values
                       (através de uma query) e randomiza, escolhendo um conteúdo para exibir
                       Comportamento de um banner
                       Suporta prioridades e balanceamento de peso
                       Suporta personalização utilizando properties e campaigns
                       É criado no projeto DataSync
                       Exemplo de query
source = ’edudev’ && !(title like ’Java*’)
keywords contains ’bea’ || title = ’bea’
expireDate > now

                  Existem propriedades pré-definidas pelo portal, que podem ser utilizadas na query:
                      • cm_nodeName
                      • cm_path
                      • cm_objectClass
                      • cm_createdBy
                      • cm_modifiedBy
                      • cm_createdDate
                      • cm_modifiedDate
                  Exemplo de content query via TagLib:
<cm:search id="nodes" query="title like ’Java*’ && cm_objectClass = ’books’" />

                  Exibindo o placeholder na página JSP:
<ph:placeholder name="/placeholders/myPlaceholder.pla" height="100" width="150" />

                      Propriedades que podemos utilizar na tag ph:placeholder:




Gilberto Holms                                          http://gibaholms.wordpress.com/
o   Content Selectors
                      A cada request no portal, faz uma busca de conteúdo através de property values
                      (através de uma query) e retorna todos os content nodes localizados
                      Suporta personalização utilizando properties e segments
                      Exibindo o selector na página JSP:
                           • A Tag pz:contentSelector retorna o array de nodes encontrados, e então
                              utilizamos uma tag netui-data:repeater para iterar sobre os nodes e exibí-los
                              como necessário:
       <pz:contentSelector rule="myContentSelector" id="sampleContent" />
       <netui-data:repeater dataSource="sampleContent">
              <netui-data:repeaterHeader>
                      <tr>
                              <td>Content Title</td>
                      </tr>
              </netui-data:repeaterHeader>
              <netui-data:repeaterItem>
                      <tr>
                              <td><cm:getProperty node="${container.item}" name="title" /></td>
                      </tr>
              </netui-data:repeaterItem>
       </netui-data:repeater>


   •   Content Management API
          o Node
                     Representa um elemento/conteúdo no CMS
                     Existem duas categorias de Node:
                         • Hierarchy Nodes – pastas
                         • Content Nodes – conteúdos
                     Um Hierarchy Node pode conter outros Hierarchy Nodes e Content Nodes
                     Características do Content Node
                         • Possui um único ID
                         • É tipado pelo content type (ObjectClass)
                         • Contém properties
          o Property
                     Representa um par chave/valor, que é associado a um Content Node
          o ObjectClass
                     Representa o Content Type do qual foi criado o Content Node
          o ID
                     É o identificador único do Content Node
          o Pacote com.bea.content
          o O ponto de partida é sempre uma ContentManagerFactory:
ContentContext contentContext = new ContentContext(this.getRequest());
INodeManager nodeManager = ContentManagerFactory.getNodeManager();
Node node = nodeManager.addNode(contentContext, PathHelper.SEPARATOR
       + "BEA Repository" + PathHelper.SEPARATOR + "newNode", "someType", properties);
Node newNode = nodeManager.getNode(context, "/BEA Repository/newNode");
                      Obs.: os entitlements necessários para acessar o content são determinados a partir da
                      identidade do usuário obtida do request: new ContentContext(this.getRequest())


Gilberto Holms                                            http://gibaholms.wordpress.com/
o   API Overview




           o   Content Management Controls
                      O portal oferece Beehive Content Controls para acessar a CMS API de forma
                      simplificada
                      Principais CMS Controls:
                          • Content Node Control
                                   o Substitui o INodeManager
                                   o Permite:
                                              Adicionar novos Nodes
                                              Gerencias Nodes
                                              Obter Property e ID dos Nodes
                                              Obter Nodes filhos
                          • Content Search Control
                                   o Substitui o ISearchManager
                                   o Permite:
                                              Buscar conteúdos através de uma content query
                                              Retorna uma SortableFilterablePagedResult, que é uma lista
                                              que pode ser ordenada, filtrada e paginada
           o   Content Management JSP Tags
                      Estas funcionalidades também são fornecidas através de tags:
                          • <cm:search>
                          • <cm:getNode>
                          • <cm:getProperty>
                      Os conteúdos retornados em forma de lista podem ser iterados por qualquer tag iterativa
                      ou scriptlet
                      Para mostrar propriedades binárias (ex.: imagens), é preciso utilizar o ShowBinary
                      servlet
                      Exemplos:
<cm:getNode path="/BEA Repository/news" id="node" />
<% String nodeName = node.getName(); %>

<cm:getNode path="/BEA Repository/news/news1" id="node"/>
<cm:getProperty id="node" name="title"/>

<cm:search id="nodes" query="source ='edudev'"/>
<% for(int i = 0;i < nodes.length; i++) { ... } %>

<cm:getNode path="/BEA Repository/MyImageContent" id="imageNode"/>
<img src="<%=request.getContextPath()%>/ShowBinary?nodePath=${imageNode.path}/MyBinaryProperty"/>


   •   Content Management Administration API
          o É uma API parecida com a CMS API, porém permite a administração do sistema de Content
              Management do portal:


Gilberto Holms                                           http://gibaholms.wordpress.com/
Criar Repository
                      Criar novo Folder ou Node
                      Criar novo Content Type
                      Adicionar um novo Workflow
                      Check-in e Check-out de conteúdos
           o Usuários precisam estar autenticados e possuir permissão para as operações
           o Pacote com.bea.federated
                      com.bea.federated.INodeManager
                      com.bea.federated.ITypeManager
                      com.bea.federated.IVersionManager
           o Content Administration Controls
                      Também são fornecidos Beehive Content Administration Controls para simplificar o uso
                      da API
                      Principais CMS Administration Controls:
                                  o Content Node Control
                                  o Content Repository Control
                                  o Content Type Control
                                  o Content Workflow Control
   •   Third-Party CMS Systems Integration
           o Arquitetura geral do sistema de CMS da BEA:




          o   É criado como um Repository, que é associado a um Virtual Content Repository
          o   Técnicas de integração que podem ser utilizadas:
                      Implementação do BEA Content Repository Service Provider Interface (SPI)
                      Implementação da JSR-170 Service Provider Interface (SPI) – “Content Repository for
                      Java API”
                      Propagação de conteúdo diretamente para as tabelas da BEA
                      Portlets de conteúdo customizados
          o   Se o fabricante optar pela JSR-170, é necessário implantar uma Bridge. O portal fornece esta
              bridge




Gilberto Holms                                          http://gibaholms.wordpress.com/
o   Fabricantes que já se integram com o BEA Portal
                           Documentum
                           Interwoven
                           FatWire
                           Stellent
Portal   Administration
   •      Atividades possíveis de administração:
               o Usuários e profiles
               o Modificações finais em desktops e seus componentes
               o Setar permissão para componentes do portal de acordo com roles
               o Delegar capacidades administrativas para outros administradores
               o Publicar e aprovar conteúdo
               o Application deployment
               o Portal data propagation
   •      Um portal tem dois ciclos bem definidos: Development e Administration
               o Development
                           Criação do arquivo .portal, que é apenas o template de um portal
               o Administration
                           Assemblar templates para criar um portal customizado, focado em um tipo de usuário
                           Aplicar segurança nos recursos do portal
                           Outras atividades post-development
   •      Portal Template vs. Portal Desktop Instance
               o O arquivo .portal é apenas um template (filesystem portal)
               o A partir dele são criadas instâncias reais de portal (database portal)
               o Na instância real podemos modificar books, pages, portlets e look-and-feel, sem que o template
                  .portal original seja alterado
               o A instância real (Desktop) é uma “view” do portal direcionada a um determinado publico
   •      Portal Propagation Tool
               o Permite que mudanças de LDAP e base de dados sejam propagadas de um ambiente para outro
               o Desta forma, podemos por exemplo replicar no ambiente de produção todas as configurações
                  realizadas no ambiente de homologação
               o Realizado através do Workshop ou script Ant
               o Podemos propagar:




   •      Portal XIP Tool
              o Administradores podem fazer mudanças drásticas em um template de portal para criar sua
                   instância em produção
              o O XIP Tool permite recriar template files (.portal, .book, .page) a partir dos últimos desktops
                   usados em produção, para que as alterações feitas via console administrativo possam ser
                   replicadas posteriormente
   •      Portal Library Resources
              o São mostrados todos os recursos disponíveis para o portal deployado (books, pages, portlets,
                   lafs, etc…)
              o Recursos que são sincronizados automaticamente durante o desenvolvimento:
                            .portlet
                            .shell
                            .laf
                            .layout
                            .theme


Gilberto Holms                                               http://gibaholms.wordpress.com/
o    Recursos que precisam ser recarregados explicitamente:
                        .portal
                        Books
                        Pages
   •   Instância real – Production Desktop
           o URLs do production desktop:




          o   Formas de criar um Production Desktop:
                     Utilizar um template em uma lista
                     Assemblar manualmente com os recursos da library
                     Utilizar um arquivo .portal
          o   No production desktop podemos setar/modificar:
                     Details – resumo dos atributos
                     Contents – gerenciar child resources (boos/pages)
                     Preferences – gerenciar Portlet Preferences
                     Visitor Entitlements
                     Delegated Admin
Portal Security
   • WebLogic Security Realm:




   •   Users and Groups
           o Entidades do WebLogic Server Realm
           o Podem ser gerenciados pelo console do WebLogic Server ou pelo console administrativo do
              Portal
   •   User Profiles
           o Dados adicionais sobre a entidade (ex.: endereço, telefone, emal, etc…)
           o São gerenciados pelo console administrativo do Portal
           o São agrupados em Property Sets
   •   Roles
           o São classificações (perfis/papéis) para usuários
           o Podem ser atribuídos/classificados usuários das seguintes formas:
                     Grupos
                     Users
                     Regras com atributos de User Profile
                     Regras com atributos gravados na sessão (HttpSession)
                     Tempo / hora

Gilberto Holms                                          http://gibaholms.wordpress.com/
•   Visitor Entitlements
            o É um mecanismo para determinar “quem” pode acessar qual recurso e “o quê” ele pode fazer
            o É a permissão é concedida a nível de “Role”




           o  Podem ser aplicados a nível de
                       Desktops
                       Book
                       Page
                       Portlet
                       Conteúdo
          o Podem ser concedidas permissões de:
                       View
                       Minimize
                       Maximize
                       Edit
                       Remove
          o Já possui automaticamente dois Entitlements padrão:
                       Authenticated Visitor – todos que estão autenticados (independente da role)
                       AnonymousVisitor – todos que não estão autenticados
   • Visitor Tools
          o Permite que um Desktop seja customizado por cada usuário, para si próprio
          o A customização é persistida e permanece ativa para os próximos acessos do usuário
          o O usuário pode customizar:
                       Adicionar/remover Books e Pages
                       Posição dos Books e Pages
                       Adicionar/remover Portlets
                       Posição dos Portlets
                       Trocar Look-and-Feel
          o Pode ser aplicado apenas a um Production Desktop (não a nível de arquivo .portal)
          o É preciso adicionar a “facet” chamada Portal Visitor Tools
          o É criada uma pasta “/visitorTools” com os componentes necessários e o Visitor Tools Portlet
          o Visitor Tools Portlet
                       É o portlet que permite que o usuário gerencie sua view do desktop
                       Geralmente é incluído no Header (arquivo .shell)
                       Requer que o usuário esteja autenticado
                       Fica em “/visitorTools/visitorMenu.portlet”
          o Através do Console Administrativo do Portal, o administrador pode dar LOCK em placeholders, o
              que disabilitará a customização daquele placeholder específico
          o O Entitlement para definir quem pode customizar qual recurso deve ser atribuído através da
              Library, e não da instância do desktop
GroupSpace
   • Conceitos de Portais Colaborativos
          o Portais que permitem o compartilhamento de conteúdo entre usuários, como discussões,
              notificações, anúncios, email, etc.
          o Principais requisitos para colaboração:
                       Interface unificada
                       Member invitation e gerenciamento automático
                       Controle de acesso à informação
                       Ser extensível, para contemplar futuros requisitos
   • Weblogic Portal Communities
          o Weblogic Portal Community Framework
                       Base para criar e manter Portais Colaborativos

Gilberto Holms                                         http://gibaholms.wordpress.com/
Extende o core do Weblogic Portal
                     Community
                         • É uma coleção de recursos de portal que fornecem implementação dos
                             requisitos de colaboração
                         • Suporta compartilhamento de conteúdo
                         • Suporta member registration / invitation
                     Uma Community é uma forma especializada de um Portal Desktop
                     Componentes de uma Community:
                         • Componentes comuns de portal (como Books, Pages e Portlets)
                         • Assemblado através do Console Administrativo do Portal
                         • Pode ser iniciado através de um template criado no Workshop
                         • Pode ser customizável através de Visitor Tools
                     Community Templates
                         • Da mesma forma que portais normais são criados através de templates .portal,
                             as Communities são criadas por templates .community e .ctmeta
          o Gerenciamento de Usuários nas Communities
                     Os usuários podem se tornar membros de uma community das seguintes formas:
                         • Respondendo a um link de convite na página do portal
                         • Respondendo a um email de convite
                         • Registrando-se sem um convite (communities públicas)
                     Papéis (roles) das Communities
                         • Creator
                                 o Cria e gerencia comunidades, todas configurações de portlets,
                                      automaticamente é convidado para fazer parte da community
                         • Owner
                                 o Apenas gerencia comunidades, todas configurações de portlets,
                                      automaticamente é convidado para fazer parte da community
                         • Contributor
                                 o Utiliza todas as features dos portlets, exceto deletar conteúdo
                         • Viewer
                                 o Utiliza apenas features read-only dos portlets
   •   GroupSpace Community
          o É uma aplicação completa pré-definida criada sobre o Community Framework, com vários
             recursos prontos para serem customizados e reutilizados
          o Arquitetura do GroupSpace




          o   GroupSpace Portlets
                     Mail
                     Calendar
                     Document Library
                     Discussion Forums
                     RSS Reader
                     Issues
                     Tasks
                     Announcements
                     Search
          o   Os usuários podem definir a visibilidade do conteúdo que postam nos GroupSpace Portlets:
                     Community
                         • Todos os membros da community
                     Private

Gilberto Holms                                          http://gibaholms.wordpress.com/
• Apenas o usuário que postou
                        Personal
                            • Apenas o usuário que postou, e o conteúdo é visível em todas comunidades que
                                o usuário é membro
            o   Todo o conteúdo das GroupSpace Communities são modelados através de Content Types, que
                são criados automaticamente pelo aplicativo
            o   Os GroupSpace portlets suportam diversos tipos de customização via código


                                Content Management – Principais Conceitos

1 – Virtual Content Repository
         É o repositório lógico para acesso aos conteúdos pelo console de administração. Independe do tipo de
repositório físico e pode agrupar vários repositórios físicos logicamente.

2 – Repository
       É o repositório físico, onde realmente fica guardado o conteúdo. Pode ser dos seguintes tipos:
    • BEA Repository
            o Tipo Database (é o default)
               Já vem pré-configurado, utiliza base de dados tanto para guardar os metadados quanto o
               conteúdo.
            o Tipo Filesystem
               Utiliza base de dados para guardar os metadados e o disco rígido para guardar o conteúdo
               binário (tem melhor performance). Se utilizado com versionamento, o conteúdo antigo é
               guardado na database, assim se assegurando que se houver problemas no filesystem, os
               arquivos anteriores possam ser recuperados. Contra: não é transacional, se a rede cair durante
               uma alteração, ela será perdida.
    • Third-Party Repository
               Integração com repositórios de outros fabricantes.

       O versionamento (Library Services) por padrão vem desabilitado. Para habilitar:
       Aba “Repositories” > Selecione o repositório > Library Services

       Só podemos utilizar workflow em repositórios versionados.

3 – Content Types
        É uma definição de um “Tipo de Conteúdo”, que pode ter propriedades de vários tipos “primitivos” (string,
data, binário...) ou ainda um sub-elemento de outro “Content Type” complexo.
        Será o template para que a pessoa responsável por publicar conteúdo utilize, portanto deve ser bem
descrito.

4 – Content Folders
        São pastas criadas dentro da aba “Content” para organizar o conteúdo. Servem para organizar
logicamente o conteúdo, mas são importantes porque também permitem setar workflow e autorização separados
por pasta (aliás, permite tanto configurações folder-level quanto file-level).

5 – Content Workflow
       Permite um fluxo de aprovação para o conteúdo. Lembrete: precisa habilitar o versionamento (Library
Services) do repositório.
       O portal fornece um workflow default, mas podemos criar um personalizado:
                - Criar um XML de definição de workflow
                - Adicionar ele no repositório
                - Setar as configurações de autorização dos steps do workflow
                - O workflow fica disponível para ser associado a qualquer recurso

       Podem ser associados a Content Folders, Content Types e Contents.

6 – Content
        É um conteúdo criado (a implementação de um Content Type), pronto para ser carregado e exibido no
portal.

Gilberto Holms                                              http://gibaholms.wordpress.com/
7 – Detalhamento: Content Type
    • Property definitions: todo o metadado que possa ser útil obter no portal (como largura da imagem ou
        tamanho), ou para utilizar “Interaction Management”.
            o Boolean
            o Long Integer
            o Number Decimal
            o String
            o Date/Time
            o Binary – um arquivo qualquer (como por exemplo uma imagem)
            o Nested Content Type – um sub-elemento complexo (outro content type)
            o Link – algum outro conteúdo implementado
    • Property options: opções gerais da propriedade:
            o Required – é obrigatória ao criar o conteúdo
            o Read Only – valor não pode ser alterado
            o Primary Property – apenas uma por content type, com isso podemos criar uma busca de
                conteúdo apenas por esse campo para otimizar a consulta
            o Searchable – pode ser incluída na busca de conteúdo
            o Is Explicit – mapeia o valor para uma coluna específica da tabela do CMS
            o Allow Multiple Values – permite mais de um valor para a propriedade (array)
            o Restrict values – cria um choice (domínio) de valores permitidos
    • Abstract Content Types: tipos que não podem virar conteúdo diretamente, são apenas pedaços de um
        content type maior, ou seja, não têm significado sozinhos.
    • Content type inhiterance: é quando você deseja que content types herdem propriedades de um outro
        content type
    • Content workflow: associa o tipo a um workflow, ou seja, todo o conteúdo criado a partir desse tipo
        possuirá este workflow associado.




Gilberto Holms                                           http://gibaholms.wordpress.com/

Mais conteúdo relacionado

Semelhante a Resumo Anotacoes Certificacao OCE WebLogic Portal 10g Developer

JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com PrimefacesFabio Noth
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Banco de dados orientados a objetos
Banco de dados orientados a objetos Banco de dados orientados a objetos
Banco de dados orientados a objetos Raquel Machado
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 
Conexão Java 2006: Introdução ao Ajax
Conexão Java 2006: Introdução ao AjaxConexão Java 2006: Introdução ao Ajax
Conexão Java 2006: Introdução ao AjaxHelder da Rocha
 
TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6
TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6
TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6Dr. Spock
 
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEUso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEMarco Antonio Maciel
 
Técnicas de Programação para a Web
Técnicas de Programação para a WebTécnicas de Programação para a Web
Técnicas de Programação para a WebLuiz Cláudio Silva
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadospichiliani
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadospichiliani
 
BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIAlvaro Viebrantz
 
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6Dr. Spock
 

Semelhante a Resumo Anotacoes Certificacao OCE WebLogic Portal 10g Developer (20)

JSF com Primefaces
JSF com PrimefacesJSF com Primefaces
JSF com Primefaces
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Banco de dados orientados a objetos
Banco de dados orientados a objetos Banco de dados orientados a objetos
Banco de dados orientados a objetos
 
Hibernate conceitos
Hibernate conceitosHibernate conceitos
Hibernate conceitos
 
Slides .pptx.pdf
Slides .pptx.pdfSlides .pptx.pdf
Slides .pptx.pdf
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Web 3.0
Web 3.0Web 3.0
Web 3.0
 
Hibernate
HibernateHibernate
Hibernate
 
Conexão Java 2006: Introdução ao Ajax
Conexão Java 2006: Introdução ao AjaxConexão Java 2006: Introdução ao Ajax
Conexão Java 2006: Introdução ao Ajax
 
TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6
TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6
TDC2012: Explorando os conceitos básicos da API de CDI do Java EE 6
 
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EEUso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
Uso de Critérios de Seleção para Frameworks Livres em Plataforma Java EE
 
Conhecendo o Django
Conhecendo o DjangoConhecendo o Django
Conhecendo o Django
 
JQuery Mobile
JQuery MobileJQuery Mobile
JQuery Mobile
 
Técnicas de Programação para a Web
Técnicas de Programação para a WebTécnicas de Programação para a Web
Técnicas de Programação para a Web
 
Curso jsf
Curso jsfCurso jsf
Curso jsf
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
Interoperabilidade entre bancos de dados
Interoperabilidade entre bancos de dadosInteroperabilidade entre bancos de dados
Interoperabilidade entre bancos de dados
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
De 0 a DevOps
 
BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage API
 
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
TDC2012: Usando os recursos de extensibilidade da API de CDI do Java EE 6
 

Mais de Gilberto Holms

Apostila JavaEE 5 Componentes Distribuídos EJB 3 e JBoss
Apostila JavaEE 5 Componentes Distribuídos EJB 3 e JBossApostila JavaEE 5 Componentes Distribuídos EJB 3 e JBoss
Apostila JavaEE 5 Componentes Distribuídos EJB 3 e JBossGilberto Holms
 
BalanceLine4j Framework Overview
BalanceLine4j Framework OverviewBalanceLine4j Framework Overview
BalanceLine4j Framework OverviewGilberto Holms
 
Resumo Anotacoes JAX-WS Certificacao SCDJWS 5
Resumo Anotacoes JAX-WS Certificacao SCDJWS 5Resumo Anotacoes JAX-WS Certificacao SCDJWS 5
Resumo Anotacoes JAX-WS Certificacao SCDJWS 5Gilberto Holms
 
Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5Gilberto Holms
 
Resumo Anotacoes Certificacao SCWCD 5
Resumo Anotacoes Certificacao SCWCD 5Resumo Anotacoes Certificacao SCWCD 5
Resumo Anotacoes Certificacao SCWCD 5Gilberto Holms
 
Resumo Anotacoes Certificacao SCJP 5
Resumo Anotacoes Certificacao SCJP 5Resumo Anotacoes Certificacao SCJP 5
Resumo Anotacoes Certificacao SCJP 5Gilberto Holms
 
FFPOJO Framework Overview
FFPOJO Framework OverviewFFPOJO Framework Overview
FFPOJO Framework OverviewGilberto Holms
 

Mais de Gilberto Holms (7)

Apostila JavaEE 5 Componentes Distribuídos EJB 3 e JBoss
Apostila JavaEE 5 Componentes Distribuídos EJB 3 e JBossApostila JavaEE 5 Componentes Distribuídos EJB 3 e JBoss
Apostila JavaEE 5 Componentes Distribuídos EJB 3 e JBoss
 
BalanceLine4j Framework Overview
BalanceLine4j Framework OverviewBalanceLine4j Framework Overview
BalanceLine4j Framework Overview
 
Resumo Anotacoes JAX-WS Certificacao SCDJWS 5
Resumo Anotacoes JAX-WS Certificacao SCDJWS 5Resumo Anotacoes JAX-WS Certificacao SCDJWS 5
Resumo Anotacoes JAX-WS Certificacao SCDJWS 5
 
Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5Resumo Anotacoes Certificacao SCBCD 5
Resumo Anotacoes Certificacao SCBCD 5
 
Resumo Anotacoes Certificacao SCWCD 5
Resumo Anotacoes Certificacao SCWCD 5Resumo Anotacoes Certificacao SCWCD 5
Resumo Anotacoes Certificacao SCWCD 5
 
Resumo Anotacoes Certificacao SCJP 5
Resumo Anotacoes Certificacao SCJP 5Resumo Anotacoes Certificacao SCJP 5
Resumo Anotacoes Certificacao SCJP 5
 
FFPOJO Framework Overview
FFPOJO Framework OverviewFFPOJO Framework Overview
FFPOJO Framework Overview
 

Resumo Anotacoes Certificacao OCE WebLogic Portal 10g Developer

  • 1. Resumo Anotações para Certificação OCE Oracle WebLogic Portal 10g Developer Gilberto Augusto Holms @gibaholms gibaholms85@gmail.com http://gibaholms.wordpress.com/ Portal Architecture • Portal Project Lifecycle o Architect -> Develop -> Assemble & Deploy -> Manage • Need for Enterprise Portals o Rápido desenvolvimento e deploy o Utiliza tecnologias baseadas em padrões o Gerenciamento e workflow de conteúdo integrados o Personalização e customização o Administração e segurança centralizados o High availability, performance e scalability o Flexibilidade e agilidade para futuras mudanças • WebLogic Portal Services o Portal application framework Desktops Books Pages Portlets Look and Feel o Federated Portals Consumo de portal-resources remotos via SOAP sobre HTTP ou HTTPS o Content management Conteúdo gerenciável sem retrabalho de desenvolvimento Temporização de conteúdo o Communities Foundation para gerenciar portais colaborativos É uma extensão do portal framework Compartilhamento de conteúdo Pode-se participar por registro e/ou convite o Unified user profile Define propriedades que representam características de um usuário Tais características podem ser mantidas na base do portal ou externamente em bancos ou diretórios o Personalization Capacidade da aplicação de modificar sua aparência e/ou comportamento de acordo com o usuário ou uma determinada audiência o Security & administration Usuários e perfis Visitor entitlements – diferentes permissões de acesso de acordo com perfis Delegated administration – diferentes permissões de administração de acordo com perfis Publicação e aprovação de conteúdo Portal data propagation o Enterprise search Licensa inclusa do produto Autonomy Engine e APIs de busca, gerenciamento, indexamento de conteúdo, exemplos de portlets de busca e relatório Basic WebLogic Server • WebLogic Server Gilberto Holms http://gibaholms.wordpress.com/
  • 2. o Domain Administration Server Configuration Repository (pasta config) Domain Log Cluster / Managed Servers ( + local logging ) WebLogic Workshop • WTP o Editores HTML, CSS, XSD, etc… o Suporte a maioria dos servidores o Operações e conexões a bases de dados – Database Explorer • JDT o Suporte aos variados módulos J2EE o Editores JSP e JSF o Servlet e EJB • Facets o Componentes reutilizáveis em várias aplicações J2EE (WAR ou EAR) o Deployados apenas uma vez no servidor • Merged Projects View o Mostra todas os deploys reutilizáveis – shared J2EE libraries • Apache Beehive o NetUI Page Flow o Java Controls (FALTA PAG 106) o Web Services Metadata o Framework MVC View – NetUI JSP Controller – Page Flow Controller Class (jpf) Model – Java Control o System Controls Padrão do Apache Beehive • EJB Control • JDBC Control • JMS Control Extensões do Workshop • Timer Control • Service Control • JDBC Control o Principais annotations @JdbcControl.ConnectionDataSource • jndiName @JdbcControl.ConnectionDriver • databaseDriverClass • databaseURL • password Gilberto Holms http://gibaholms.wordpress.com/
  • 3. • username • properties @JdbcControl.SQL o Exemplo @ControlExtension @JdbcControl.ConnectionDataSource(jndiName = "LOCAL_ORACLE_TESTE") public interface ClienteJDBCControl extends JdbcControl { public static class Cliente { private int id; private String nome; @Override public String toString() { return id + " | " + nome; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } } @JdbcControl.SQL(statement="SELECT ID, NOME FROM CLIENTE WHERE ID = {id}") public Cliente buscar(int id) throws SQLException; } • JMS Control o Principais nnotations @JMSControl.Destination • sendType • sendJndiName • jndiConnectionFactory • transacted • … @JMSControl.Message • MessageType (enum) o Exemplo @ControlExtension @JMSControl.Destination(sendType = JMSControl.DestinationType.Auto, sendJndiName = "TesteJMSTopic", jndiConnectionFactory = "TesteJMSFactory", transacted = false) public interface TesteJMSControl extends JMSControl { @Message(JMSControl.MessageType.Text) public void sendMessage(String body); } • Custom Control o @ControlInterface Anotar na interface do controle o @ControlImplementation Anotar na classe concreta do controle Building a Portal Application • Portal Projects o EAR o Web o DataSync • Propriedades Configuráveis Gilberto Holms http://gibaholms.wordpress.com/
  • 4. o Desktop Backable Properties • Backing File Desktop Properties • Asynchronous Mode • Definition Label • Disc Enabled • DVT Enabled • Encoding • Look and Feel • Scroll to Window • Shell • Title • Tree Optimization Presentation Properties • Presentation Class • Presentation ID • Presentation Style • Properties • Skeleton URI o Book Backable Properties • Backing File • Definition Label • Hidden • Packed • Rollover Image • Selected Image • Theme • Title • Unselected Image Book Properties • Content Presentation • Default Page • Editable • Navigation • Orientation • Return to Default Page Presentation Properties • Presentation Class • Presentation ID • Presentation Style • Properties • Skeleton URI o Page Backable Properties • Backing File • Definition Label • Hidden • Packed • Rollover Image • Selected Image • Theme • Title • Unselected Image Page Properties • Layout Type Presentation Properties Gilberto Holms http://gibaholms.wordpress.com/
  • 5. Presentation Class • Presentation ID • Presentation Style • Properties • Skeleton URI Portlet Development • Tipos de Portlets o JSP/HTML Portlets Prós • Simples para implementação, deploy, teste • Recomendado para portlets que apenas mostram dados Contras • Não prove arquitetura MVC • Difícil de linkar com outras JSPs • Difícil de manter e evoluir o Java Portlet É baseado na especificação JSR-168 Prós • Portabilidade entre múltiplos vendedores • Foundation para construir portlets MVC Contras • Não possui tooling na IDE • Desenvolvimento em baixo nível (similar a servlets) • O controlador MVC precisa ser codificado pelo desenvolvedor o Java Page Flow Portlet Prós • Rápido desenvolvimento e tooling utilizando a IDE • Arquitetura MVC • Integração com Beehive Controls • Melhora o Struts, utilizando annotations Contras • Muitos recursos talvez sejam desnecessários para simples portlets o Browser (URL) Portlet Encapsula uma página da Web Útil para integração com sistemas web legados o Struts Portlet Prós • Pode-se migrar uma aplicação antiga Struts para o portal • Arquitetura MVC Contras • Não possui tooling na IDE • Mais complexo que NetUi (pois contém classes e XML) o JavaServer Faces (JSF) Portlets É baseado na especificção JSR-127 Prós • Componentes de tela podem ser construídos com drag-and-drop • Arquitetura MVC Contras • Não possui tooling na IDE • Mais complexo que NetUi o Remote Portlet Consumir portlets deployados em outro servidor (vide WSRP) o Clipper Portlet Semelhante ao browser portlet, porém ele incorpora a página dentro do próprio portal, podendo clipar apenas um determinado conteúdo via xpath Prós • O resto do portal pode acessar o conteúdo e compartilhar a mesma sessão da página clipada • Permite fazer um request via POST na página remota antes de clipar Gilberto Holms http://gibaholms.wordpress.com/
  • 6. Contras • Não isola o conteúdo clipado, ele roda no contexto do portal • Autenticação não é criptografada • JavaScript nas páginas remotas não é garantido que funcione corretamente • Os cookies são carregados pelo portal, e não persistidos no cliente • Configuração do Portlet Backable Properties • Backing File Portlet General Properties • Async Content Rendering • Cache Expires (seconds) • Cache Render Dependencies • Client Classifications • Default Minimized • Definition Label • Description • Event Handlers • Forkable • Fork Pre-Render • Fork Pre-Render Timeout • Fork Render • Fork Render Timeout • LAF Dependencies Path • Orientation • Packed o Se false, ele extenderá na horizontal o máximo que conseguir (width 100%). Se true, ele ocupa o mínimo espaço horizontal possível. • Render Cacheable o Se true, o conteúdo de output sera cacheado entre requests o O cache será recusado se o usuário interagir via links ou forms o Pode-se usar o WebLogic Portal Cache Manager para controle programático de caching • Title Portlet Properties • Content Presentation Class • Content Presentation Style • Offer As Remote Portlet Titlebar • Show Titlebar Presentation Properties • Presentation Class • Presentation ID • Presentation Style • Properties • Skeleton URI • Backing Files o JspBacking AbstractJspBacking o Sempre extender AbstractJspBacking, pois ela implementa os métodos de renderização o É criada uma instância por request o Métodos init(HttpServletRequest, HttpServletResponse) : void • É sempre executado, em cada request, antes do desktop ser renderizado handlePostbackData(HttpServletRequest, HttpServletResponse) : boolean • É executado se o recurso for visível e for “postback” (interação usuário, é identificado pelo parametro _nfpb=true) preRender(HttpServletRequest, HttpServletResponse) : boolean • É executado se o recurso for visível dispose( ) : void Gilberto Holms http://gibaholms.wordpress.com/
  • 7. • É executado sempre, em cada request, depois de o conteudo ser renderizado isRequestTargeted(HttpServletRequest, HttpServletResponse) : boolean • É usado para saber se o request foi em um particular portlet o Ordem de Chamada Página Abriu • init Usuário interagiu fora de um recurso com B.F.: • init • handlePostbackData Usuário interagiu em um recurso com B.F.: • init • handlePostbackData • preRender • dispose Usuário interagiu em um recurso interno a um recurso com B.F.: • (idem ao anterior) o Observações: Em caso de portlet, pode ser criada em dois níveis de escopo • netuix:portlet – atua no nível do portlet • netuix:jspContent – atua apenas na jsp do portlet (não influencia na renderização do portlet) • Depende do recurso netuix_servlet.jar no classpath do projeto • Portlet File o Tipos de Content: jspContent pageflowContent facesContent bookContent portionContent strutsContent uriContent <portal:root> <netuix:portlet definitionLabel="homeGeral" title="Homegeral"> <netuix:content> <netuix:jspContent contentUri="/homeGeral/home.jsp"/> </netuix:content> </netuix:portlet> <netuix:preference description="Descricao do parametro" modifiable="true" multiValued="true" name="nome" value="giba"/> </portal:root> o Portlet Preferences: Pares de key-value para parametrização de valores Permite que diferentes instâncias do portlet possam ter esse valor modificado em runtime Podem ser configuradas via Workshop (dev) ou via Console Administrativo (prod) Recuperando os valores via API: PortletBackingContext context = PortletBackingContext.getPortletBackingContext(request); PortletPreferences preferences = context.getPortletPreferences(request); String nome = preferences.getValue("nome", "Giba"); //Giba é o default caso não exista o atributo Recuperando os valores via TAGLIB: Gilberto Holms http://gibaholms.wordpress.com/
  • 8. Inter-Portlet Communication o Não suportado para Asynchronous Portlets o Portlet Event Handlers (recomendado) Escuta eventos de um ou mais portlets, e responde com uma Event Action Tipos de Event Handlers • Handle Generic Event o Disparado por uma PageFlow Action de mesmo nome ou um custom event de mesmo nome • Handle Portal Event o Portlet states (minimize, maximize, etc) o Visibility o Portlet refresh • Handle Custom Event o Disparado programaticamente PortletBackingContext portlet = PortletBackingContext.getPortletBackingContext(request); portlet.fireCustomEvent("myCustomEvent", myPayloadObject); • Handle PageFlow Event o Actions de PageFlows • Handle Struts Event o Action do Struts • Handle Faces Event o Action de JSF Tipos de Event Actions • Change Window Mode • Change Window State • Activate Page • Fire Generic Event • Fire Custom Event • Invoke BackingFile Method • Invoke PageFlow Action • Invoke Struts Action • Invoke Faces Action o Backing Files o Refresh Actions PageFlow portlets podem inscrever uma action para ser executada no refresh É executada quando há refresh do portlet e nenhuma action foi invocada pelo usuário o listenTo portlet property Está deprecated o Compartilhamento de Dados Request Parameters • Obter um parametro da URL do browser: HttpServletRequest outerRequest = ScopedServletUtils.getOuterRequest(this.getRequest()); String nome = outerRequest.getParameter("nome"); Request Attributes Session Attributes • Asynchronous Portlets o Por padrão o portal executa os portlets de forma sincrona o Todos os portlets precisam ser carregados para que o usuário possa interagir o Se o portlet for assíncrono, ele será executado em uma thread separada o Habilitando skeletons para chamada assíncrona: framework/features Atributo “Async Content Rendering” (a escolha é transparente ao cliente) • AJAX o Usa o mesmo documento HTML o Suporta features como cross-portlet drag-and-drop o Não suporta XHTML o Melhor integração look-and-feel o Necessita JavaScript no browser • IFRAME o Usa um documento HTML separado Gilberto Holms http://gibaholms.wordpress.com/
  • 9. o Suporta XHTML Consequências do uso de portlets asíncronos • Não suporta inter-portlet communication • Portlet Backing Files são executadas duas vezes • Comandos HTTP redirect não são suportados no portlet • Alguns commandos da PortletBackingContext API não são suportados o Desabilitando request assíncrono em um portlet: <render:controlContext asyncContentDisabled="true"> <netui:form action="addToCart"> <netui:select dataSource="actionForm.productSku" /> <netui:button value="Submit" type="submit" /> </netui:form> </render:controlContext> o Fork Render É uma alternative ao portlet assíncrono Os portlets são carregados em paralelo, o que melhora a performance geral O cliente ainda é obrigado a esperar todos carregarem para interagir Portlets que suportam: • JSP • PageFlow • Java (JSR-168) • Remote (WSRP) Configurando no portlet • Forkable: true • Fork Render: true • Fork Render Timeout: 30 o É possível renderizar um Portlet standalone assincronamente via código, utilizando o mesmo framework de portlets assíncronos, diretamente na JSP: <render:portalFacet label="standalone_portlet_cart" path="/portlets/shoppingCart.portlet"/> Gilberto Holms http://gibaholms.wordpress.com/
  • 10. Look And Feel • Look and Feel o Determina como o conteúdo do portal será renderizado o É independente do conteúdo do portlet o Pode ser aplicado genericamente ou de acordo a um tipo de dispositivo (palm, etc) o Elementos do LAF: Skeletons Shells Skins (incluindo genes) Layouts Themes o Ciclo de Vida do LAF Portal XML Representation PresentationContext Skeleton + Skin HTML o Arquivo .laf É uma associação de um Skeleton e um Skin <netuix:markupDefinition> <netuix:locale language="en"/> <netuix:markup> <netuix:lookAndFeel title="Teste" description="" definitionLabel="TesteDefinitionLabel_1" skin="Teste" skinPath="/framework/skins/" skeleton="Teste" skeletonPath="/framework/skeletons/" markupType="LookAndFeel" markupName="TesteLookAndFeel_1"/> </netuix:markup> </netuix:markupDefinition> • Skeleton o É um conjunto de JSPs que renderizam o conteúdo do portal em HTML o Define a estrutura do portal e aplica os elementos do Skin o Pode ser baseado em um dispositivo o Cada skeleton JSP é executada duas vezes: beginRender e endRender <render:beginRender> <body> . . Custom Logic . . <div class="bea-portal-body-content"> </render:beginRender> <render:endRender> </div> . . Custom Logic . . </body> </render:endRender> o Um skeleton para um determinado elemento pode ser “override” através da propriedade Presentation Properties Skeleton URI o Skeleton.xml Indica configurações e locais para procurar por JSPs <ns:skeleton> <ns:render-format> <ns:preset>HTML_4_01_TRANSITIONAL</ns:preset> </ns:render-format> <ns:render-strategy> <ns:search-path> <ns:path-element>.</ns:path-element> <ns:path-element>../default</ns:path-element> <ns:path-element>../shared</ns:path-element> </ns:search-path> </ns:render-strategy> </ns:skeleton> Gilberto Holms http://gibaholms.wordpress.com/
  • 11. Skin o Oferece cores, imagens, fonts e estilos (CSS e JS) utilizados para renderizar o conteúdo do portal o Skin.xml Indica configurações e locais para serem encontrados imagens, css e js. Indica também os commandos de link de css e include de javascript a serem renderizados no portal <ns:skin xmlns:ns="http://www.bea.com/servers/portal/framework/laf/1.0.0"> <ns:target-skeleton> <ns:skeleton-id>default</ns:skeleton-id> <ns:skeleton-path>/framework/skeletons</ns:skeleton-path> </ns:target-skeleton> <ns:images> <ns:search-path> <ns:path-element>images</ns:path-element> </ns:search-path> </ns:images> <ns:render-dependencies> <ns:html> <ns:links> <ns:search-path> <ns:path-element>.</ns:path-element> </ns:search-path> <ns:link href="css/body.css" rel="stylesheet" type="text/css"/> <ns:link href="css/book.css" rel="stylesheet" type="text/css"/> <!-- OUTROS --> </ns:links> <ns:scripts> <ns:search-path> <ns:path-element>js</ns:path-element> <ns:path-element>../shared/js</ns:path-element> </ns:search-path> <ns:script src="console.js" type="text/javascript"/> <ns:script src="cookies.js" type="text/javascript"/> <!-- OUTROS --> </ns:scripts> </ns:html> </ns:render-dependencies> <ns:script-dependencies> <ns:script-fragments> <ns:fragment event-handler="onload">initSkin()</ns:fragment> </ns:script-fragments> </ns:script-dependencies> </ns:skin> o Um CSS para um determinado elemento pode ser “override” através da propriedade Presentation Properties Presentation Class o Podemos adicionar atributos CSS inline aos já presentes em um elemento utilizando a propriedade Presentation Properties Presentation Style (geralmente utilizamos para definer height – altura e overflow – rolagem) • Chromosomes and Genes o É possível definir genes através de ${tokens} em arquivos do skin ou do skeleton (CSS, JS, JSP, etc) e então definir seus valores através do arquivo chromosome o Por definição eles devem ser criados nas pastas “Skin” ou “Skeleton” o Denifido em arquivo.laf Skin Chromosome Name ou Skeleton Chromosome Name Gilberto Holms http://gibaholms.wordpress.com/
  • 12. o Arquivo .chromosome <chromosome> <genes> <gene name="titlebar-color"> <value>blue</value> </gene> <gene name="titlebar-size"> <value>18px</value> </gene> </genes> </chromosome> o Atenção: para utilizar chromosomes no skin, é preciso definir no skin.xml o uso de CSS e JS inlined no html, como indicado na caixa da direita: <ns:link href="window.css" rel="stylesheet" <ns:style content-uri="window.css" type="text/css" /> type="text/css" /> <ns:script src="teste.js" type="text/javascript"/> <ns:script type="text/javascript"> alert('teste ${meuGene}'); </ns:script> o Observações: Existe conceito de default.chromosome, que é onde o portal localiza os cromossomos default do skin ou skeleton. Então podemos adicionar outros arquivos .chromosome para sobrescrever parcialmente um gene particular Para referenciar um recurso de LAF na JSP sem ficar preso ao caminho e o laf escolhidos, utilizar o recurso de reescrita wlp_rewrite: <img src="/framework/skins/classic/img/logo.gif"/> <img src="”wlp_rewrite?logo.gif/wlp_rewrite"/> • Shell o Define a estrutura macro do portal, definindo as áreas de Header, Footer e conteúdo o Arquivo .shell <netuix:markupDefinition> <netuix:locale language="en" /> <netuix:markup> <netuix:shell title="Custom JSP Shell" description="A Custom Shell with Header and Footer." markupType="Shell" markupName="customJSPHeaderFooter"> <netuix:head /> <netuix:body> <netuix:header> <netuix:jspContent contentUri="/resources/jsp/customheader.jsp" /> </netuix:header> <netuix:break /> <netuix:footer> <netuix:jspContent contentUri="/resources/jsp/customfooter.jsp" /> </netuix:footer> </netuix:body> </netuix:shell> </netuix:markup> </netuix:markupDefinition> o Observações Caso a tag <netuix:header/> esteja vazia, por default serão carregados os arquivos header.jsp e footer.jsp do skeleton O header e o footer também podem possuir um layout atrelado O header e o footer podem ter os mesmos contents que um portlet pode ter (vide seção de portlets) e ainda pode incluir um portlet através da tag <netuix:portletInstance> • Layout o Define o posicionamento dos portlets em uma página o Tipos básicos de layout: Flow Layout • Posicionamento lado a lado, seguindo a ordem left-to-right ou top-to-botton Grid Layout • São definidas linhas e colunas Border Layout • São definidas 5 áreas geográficas (norte, sul, leste, oeste, centro) Custom Layout • Arquivo .layout: define a descrição, o arquivo html de definição e os placeholders Gilberto Holms http://gibaholms.wordpress.com/
  • 13. <netuix:markupDefinition> <netuix:locale language="en" /> <netuix:markup> <netuix:GridLayout title="My Layout" description="This is my custom layout" htmlLayoutUri="/framework/markup/layout/myLayout.html.txt" markupType="Layout" markupName="myLayout"> <netuix:placeholder title="esquerda" description="..." markupType="Placeholder" markupName="myPlaceholder1" /> <netuix:placeholder title="direita" description="..." markupType="Placeholder" markupName="myPlaceholder2" /> </netuix:GridLayout> </netuix:markup> </netuix:markupDefinition> • Arquivo .html.txt: define o html do layout, onde cada placeholder é identificado pela ordem em que aparece no arquivo de layout <table class="portalLayout" id="thePortalLayout" width="100%" height="100%"> <tr> <td class="placeholderTD" valign="top" width="30%"> <placeholder number="0" /> </td> <td class="placeholderTD" valign="top" width="70%"> <placeholder number="1" /> </td> </tr> </table> o Observações: Ao invest de um arquivo .html.txt podemos utilizar um skeleton jsp e renderizar o layout via código java • Theme o É um componente “fine-grained” capaz de sobrescrever partes de um skin ou skeleton o Pode ser associado a nível de Book, Page e Portlet o Pode atuar das seguintes formas: Sobrescrever JSP em um skeleton Sobrescrever imagens em um skin Adicionar novos arquivos CSS em um skin o Criando um Theme Criar um arquivo de definição .theme <netuix:markupDefinition> <netuix:locale language="en"/> <netuix:markup> <netuix:theme name="greyout" title="Grey Out" description="A Theme used to de-emphasise a particular entity." markupType="Theme" markupName="greyout"/> </netuix:markup> </netuix:markupDefinition> Criar pasta em Skin e Skeleton com o mesmo nome do theme • Os arquivos de skeleton sobrescreverão os skeletons default Declarar os arquivos de skin em skin.xml • Os arquivos de skin sobrescreverão os skins default Opcional: utilizar um arquivo structure.xml NetUI • Struts Framework o Open-source application framework desenvolvido para criar aplicações web baseadas na arquitetura MVC o Componentes: Front-Controller (ActionServlet) Arquivo de configurações XML Tags JSP Classes • Action – implementa a lógica do controller • ActionForm – encapsula dados de formulário em JavaBeans • ActionForward – implementa lógica de navegação • ActionMapping – binda actions para URIs Gilberto Holms http://gibaholms.wordpress.com/
  • 14. NetUI (Beehive Framework) o Open-source application framework desenvolvido para criar aplicações web baseadas na arquitetura MVC, baseado no Struts o É parte do projeto Apache Beehive o Componentes: Java PageFlows NetUI Tags JSP Java Controls Form Beans (POJO) • Java PageFlow o É uma classe java com Beehive Annotations o Podem ser nested ou shared, para melhor permitir modularidade e reuso o Composição: Actions • Definem a lógica de navegação entre JSPs • Configurados via annotation • Responde um ou mais forwards Forward • Define o próximo elemento (JSP) do fluxo de navegação • É declarado na action • Actions o Dois tipos de action: Simple Action • Contém apenas um simples condicional @Jpf.Controller(simpleActions = { @Jpf.SimpleAction(name = "someAction", path = "default.jsp", conditionalForwards = { @Jpf.ConditionalForward(condition = "${pageFlow.advanced}", path = "advanced.jsp"), @Jpf.ConditionalForward(condition = "${param==’yes’}", path = "alternate.jsp") }) }) public class ClienteController extends PageFlowController { ... } Gilberto Holms http://gibaholms.wordpress.com/
  • 15. Basic Method • Implementadas em um método @Jpf.Action(forwards = { @Jpf.Forward(name = "somePage", path = "somePage.jsp") }) public Forward someAction() { return new Forward("somePage"); } • Java Controls o Os Java Controls podem ser utilizados no PageFlow o O controle é injetado pelo container através da annotation @Control @Control private ClienteJDBCControl clienteJDBCControl; • Nested PageFlows o É um PageFlow completo que pode ser invocado por outro PageFlow o Retorna ao PageFlow chamador via uma action de saída, que corresponde a uma action do PageFlow chamador o Utilização: Modularidade Manutenção Reuso • Shared PageFlows o É um PageFlow que contém uma “biblioteca” de actions e JSPs, que não é necessariamente um fluxo completo o Seus conteúdos (actions, handlers, etc) podem ser acessados por qualquer PageFlow que o referencie o Extende a superclasse SharedFlowController o É instanciado em qualquer PageFlow, da seguinte forma: @Jpf.Contoller(sharedFlowsRefs = { @Jpf.SharedFlowRef(name = "sharedFlowOne", type = example.SharedFlowClassOne.class), @Jpf.SharedFlowRef(name = "sharedFlowTwo", type = example.SharedFlowClassTwo.class) }) public class MyController extends PageFlowController { ... } • NetUI Tags o Wizards Create Form Data Display Data Grid Update Form o Tags que Disparam Actions Anchor Anchor Cell Area Button Form Image Anchor Image Anchor Cell Tree Item o Tags Renderizadoras de Conteúdo Gilberto Holms http://gibaholms.wordpress.com/
  • 16. Content – “texto simples” Span – “texto dentro de uma tag <span>” Label – “texto para input field” o Tags para Data Binding Repeater • Itera sobre coleções, arrays e FormBeans (não gera html) <netui-data:repeater dataSource="pageFlow.cartItems"> <netui-data:repeaterHeader> <table> </netui-data:repeaterHeader> <netui-data:repeaterItem> <tr> <td>${container.item.name}</td> <td> <netui:span value="${container.item.price}"> <netui:formatNumber pattern="$##,###.00" /> </netui:span> </td> </tr> </netui-data:repeaterItem> <netui-data:repeaterFooter> </table> </netui-data:repeaterFooter> </netui-data:repeater> Data Grid • Renderiza coleções, arrays e FormBeans (gera um grid html) <netui-data:dataGrid dataSource="pageScope.pets" name="petGrid"> <netui-data:configurePager pageSize="5" /> <netui-data:rows> <netui-data:spanCell value="${container.item.name}" /> <netui-data:spanCell value="${container.item.description}" /> <netui-data:spanCell value="${container.item.price}" /> <netui-data:anchorCell value="Details" action="details"> <netui:parameter name="id" value="${container.item.petId}" /> </netui-data:anchorCell> </netui-data:rows> </netui-data:dataGrid> Tree • Renderiza uma árvore de itens <netui:tree dataSource="pageFlow.projectTree" selectionAction="selectTreeNode" tagId="tree"> <netui:treeItem expanded="true"> <netui:treeLabel>0</netui:treeLabel> <netui:treeItem>0.0</netui:treeItem> <netui:treeItem>0.1</netui:treeItem> <netui:treeItem>0.2</netui:treeItem> </netui:treeItem> </netui:tree> • Data Binding Contexts o Objetos Expression Language 2.0 (EL) definidos: requestScope / sessionScope / applicationScope / pageScope actionForm • Variáveis do FormBean associado à tag <netui:form> corrente (acessível apenas dentro dessa tag) pageFlow • Variáveis de instância do PageFlow corrente (regra nomes JavaBeans) Container • Objeto corrente das tags de iteração (repeater, dataGrid, cellRepeater…) • Form Bean o Classe interna definida dentro do controller, anotada com @Jpf.FormBean: @Jpf.FormBean public static class BeginFormBean implements java.io.Serializable {...} o É passada para a action declarando na mesma um parâmetro do tipo do FormBean o É bindada na JSP através de uma tag netui:form e o elemento EL actionForm o Validação de FormBeans Gilberto Holms http://gibaholms.wordpress.com/
  • 17. Feita de maneira declarativa, via Annotations No NetUI ela é feita server-side Regras de validação: Implementando Validação: • Definindo a regra de validação (2 modos) o Na própria action (pode ser específico por action) @Jpf.Action( ... validatableProperties = { @Jpf.ValidatableProperty(propertyName = "idade", validateRequired = @Jpf.ValidateRequired(message="Campo obrigatório"), validateType = @Jpf.ValidateType(type=long.class, message="Número inteiro")) }) public Forward myAction(MyFormBean form) { ... } o Em cada GETTER do FormBean @Jpf.ValidatableProperty( validateRequired = @Jpf.ValidateRequired(message="Campo obrigatório"), validateType = @Jpf.ValidateType(type=long.class, message="Número inteiro") ) public BigInteger getIdade() { ... } • Definindo o fluxo de navegação de erro @Jpf.Action( ... validationErrorForward = @Jpf.Forward(name="fail", path="input.jsp") ) public Forward myAction(MyFormBean form) { ... } o Obs.: para voltar pra mesma página que submeteu o form utilizamos: @Jpf.Forward(navigateTo = Jpf.NavigateTo.currentPage) • Exibindo a mensagem de erro na tela <netui:error key="idade" /> MessageBundle • É uma alternativa às mensagens fixas • Um arquivo properties que serve de repositório de mensagens de erro • Basta declarar no controller (caminho relativo à pasta “src/” e sem a extensão) @Jpf.Controller( ... messageBundles = { @Jpf.MessageBundle(bundlePath = "bundleErros") } //caminho resolvido: src/bundleErros.properties ) o Obs.: na tag de validação, ao invés de message, definir o atributo messageKey, setando a key do properties para a mensagem Gilberto Holms http://gibaholms.wordpress.com/
  • 18. Tratamento de Exceção o Anotação @Jpf.Catch Captura um certo tipo de exceção e direciona para uma action/jsp ou para um método ExceptionHandler (@Jpf.ExceptionHandler) o Pode ser feita: A nível de Controller • Aplica a todas as actions do controller A nível de Action o Obs.: uma action pode lançar exceções declaradas (throws Exception), que também serão tratadas pelo mecanismo de tratamento de exceção • Internacionalização o É definida através de MessageBundles o É carregado dinamicamente de acordo com o idioma do browser do cliente o Padrão de nomenclatura: nomeQualquer.properties – bundle default nomeQualquer_es.properties nomeQualquer_en.properties o Utilizando o Message Bundle (2 modos) No controller • Declaração: o Idêntico ao bundle de validação – adicionar no array da annotation o Caminho relativo à src, porém separado por pontos • Utilização: <netui:span value="${bundle.default.message1}"/> Na própria JSP • Declaração: o Caminho relativo à src, porém separado por barras o Exemplo: <netui-data:declareBundle name="fooMessages" bundlePath="org/foo/messages" /> • Utilização: <netui:span value="${bundle.fooMessages.message1}"/> Tags and API • Presentation Context Manipula o estado corrente de um elemento, informando o que é necessário para renderizá- lo e informações sobre o elemento Bastante utilizado para renderização no skeleton • Algumas Subclasses: o DesktopPresentationContext o HeaderPresentationContext o PagePresentationContext o LayoutPresentationContext o … • Alguns Métodos: o isVisible o getChildren o getProperty o … • Obtendo via código DesktopPresentationContext dpc = DesktopPresentationContext.getDesktopPresentationContext(request); HeaderPresentationContext hpc = HeaderPresentationContext.getHeaderPresentationContext(request); ... ... • Backing Contexts o Fornece informações sobre o estado dos elementos e permite que eles sejam modificados o Possuem a classe pai WindowBackingContext o Algumas Subclasses: PortletBackingContext PageBackingContext Gilberto Holms http://gibaholms.wordpress.com/
  • 19. BookBackingContext o Alguns Métodos: setTitle / getTitle setVisible / isVisible getDefinitionLabel setupStateChangeEvent Gilberto Holms http://gibaholms.wordpress.com/
  • 20. Portal JSP Tags WSRP • Federated Portals o Permitem que portais compartilhem recursos (portlets) que podem ser utilizados como serviços por outros portais o “Um Portal A está interessado em um portlet do Portal B”: Sem Federação: • Portal A exporta o portlet • TI migra e deploya o portlet no Portal B • Qualquer mudança no portlet precisa fazer tudo denovo Com federação: • Portal A publica o portlet como WebService no seu UDDI • TI do Portal B cria um “Proxy Portlet” e o configura para consumir o portlet • Qualquer mudança feita no portlet será vista automaticamente no Portal B o Possui interoperabilidade com portais de outros vendedores e tecnologias (.NET, etc) o O que é WSRP: “Web Services for Remote Portlets” É uma especificação mantida pela OASIS Define uma interface padronizada para implementação de Federated Portals Permite que consumidores agreguem remote markups usando SOAP Conceitos: • Produtor – fornece recursos via Web Services • Consumidor – consome e agrega recursos de um ou mais produtores Gilberto Holms http://gibaholms.wordpress.com/
  • 21. o Produtor WSRP Registro de consumidor Registro de entitlements Federated portlets / books / pages WS-Security / SAML Integração com Service Registry o Consumidor WSRP Proxy portlets / books / pages Visitor Entitlements User Identity Propagation (SAML) User Profile Propagation • Implementando um Produtor WSRP o Adicionar facet “WSRP Producer” o Extender o domínio adicionando o template wsrp-simple-producer.jar o Nos arquivos que deseja oferecer (.portlet / .book / .page), setar propriedade: Portlet Properties Offer As Remote o O Producer WSDL se tornará disponível em: http://<host>:<port>/<webapp>/producer?wsdl o Configuração do Producer o O Visitor Entitlement é realizado através de “WSRP Properties” setadas no consumidor, que são enviadas para o produtor no momento do registro: Criar um “Property Set” no DataSync Project Adicionar properties no Property Set Registra o Property Set no arquivo wsrp-producer-config.xml Entitlement: no Console Administrativo, criar o entitlement utilizando “Role Expression” associado ao Property Set criado, definindo uma regra com o valor de uma propriedade • Implementando um Consumidor WSRP o Configuração do Consumer o Criar um portlet do tipo “Remote Portlet” o Digitar a url do Producer WSDL e clicar em “Register” o Serão exibidos todos os portlets remotos que o produtor oferece para que seja escolhido um o Serão exibidas todas as propriedades que o Producer declara no seu Property Set, para que elas sejam preenchidas pelo consumidor Gilberto Holms http://gibaholms.wordpress.com/
  • 22. o Atenção: books e pages remotos podem ser adicionados apenas em portais em produção, através do Console Administrativo (e não no workshop) • Inter-Protlet Communication o É feita da mesma forma, criando Event Handlers no portlet proxy e Actions no portlet local • User Profile o O consumidor informa as User Profile Properties que o produtor declarar como necessárias, na hora do registro • Transferencia de Dados o Um protlet local pode trocar dados (objeto Serializable) com um portlet remoto, da seguinte forma: • Interceptors o É possível que um consumidor declare interceptors nas chamadas do portlet remoto, para uma lógica qualquer: Error handling / validation Implementação de cache Mudança de markup Mudança de HTTP Headers Content Management • Motivações: o O conteúdo de um site é modificado muito frequentemente o O site precisa ser ágil, sem a necessidade de um desenvolvedor o Gerenciamento de mudança do conteúdo • Um Content Management System (CMS) deve prover: o Ferramentas para administração e desenvolvimento o Ferramentas para criação / publicação de conteúdo o Um repositório (storage) estruturado para armazenamento do conteúdo o Sistema de busca Property-based • Virtual Content Repository o É o repositório lógico para acesso e organização de conteúdos no console administrativo o Pode agrupar vários repositórios físicos logicamente • Content Repository o É o repositório físico, onde realmente fica guardado o conteúdo o Opções de Content Repository BEA Repository • Database (default) • File System o Mais performático o Se utilizado com versionamento, o conteúdo antigo é guardado na base de dados o Porém, não é transacional Third-Party Repository • Repositórios de outros fabricantes (ex. Documentum) o Por padrão, o versionamento de conteúdo (“Library Services”) vem desabilitado o Podemos utilizar Content Workflow somente em repositórios versionados • Content Types o É o template, a definição de um determinado tipo de conteúdo Gilberto Holms http://gibaholms.wordpress.com/
  • 23. o Suas características são definidas a partir de “Properties”, que podem ser: Boolean Long Integer Number Decimal String Date/Time Binary – um arquivo qualquer Nested Content Type – um sub-elemento complexo (outro Content Type) Link – algum outro conteúdo já implantado o Opções gerais para as Properties: Required Read Only Primary Property • Uma por content-type, podendo ser utilizada para otimizar a busca de conteúdos Searchable • Pode ser incluída na busca de conteúdo Is Explicit • Mapeia o valor para uma coluna específica na tabela do CMS Allow Multiple Values • Uma lista de valores Restrict Values • Cria um domínio de valores permitidos o Hierarquia de Content Types Abstract Content Types • Não podem virar conteúdo, serve apenas para ser “herdado” (é um) ou “agregado” (tem um) por outros Content Types o Adicionando conteúdo: Console Administrativo do Portal Através do Windows Explorer, se o WebDAV estiver configurado Programaticamente, utilizando CMS Controls e Content API Usando Propagation Tools o Content Folders Pastas utilizadas para agrupar lógicamente conteúdos Importante pois permite setar Visitor Entitlements e Workflow em folder-lever • WebDAV o Web-based Distributed Authoring and Versioning o É uma extensão do protocolo HTTP o Permite que administradores publiquem conteúdo através do Windows Explorer o Pode ser utilizada em um repositório por vez o O WebDAV determina o Content Type associado ao conteúdo de duas formas: Utiliza o Content Type default associado ao repositório Utiliza o Content Type default associado à pasta atual o Para isso, configurar as seguintes propriedades no repositório: WEBDAV_ENABLED e WEBDAV_TYPE • Library Services o Fornece: Versionamento Content Workflow Content Workspace Controle de ciclo-de-vida o Pode ser ativado apenas em repositórios do tipo “BEA Repository” o Content Workspace Uma user-view do conteúdo atual Gerencia check-in / check-out de conteúdo e os Assigned Itens para sua role no caso do uso de workflow o Content Workflow Workflow default: Gilberto Holms http://gibaholms.wordpress.com/
  • 24. Criando workflows customizados • Através de arquivo de configurações XML • Cada estado do workflow é definido atrave´s de classes de estado default do produto, chamadas de Workflow Action Class • Exemplo de uma declaração de transição do status 2 para o status 6: <transition> <from-status id="2"> <capabilityConstraint>can_publish</capabilityConstraint> </from-status> ... <to-status id="6"> <capabilityConstraint>can_publish</capabilityConstraint> <action class="examples.workflow.TechnicalAction" /> </to-status> </transition> • Selectors e Placeholders o O Portal fornece aos desenvolvedores alguns recursos para publicação de conteúdo gerenciável: Content Selectors Content Placeholders Campaigns JSP Tag Libraries Java API e Controls o Content Placeholders A cada request no portal, faz uma busca de conteúdo através de property values (através de uma query) e randomiza, escolhendo um conteúdo para exibir Comportamento de um banner Suporta prioridades e balanceamento de peso Suporta personalização utilizando properties e campaigns É criado no projeto DataSync Exemplo de query source = ’edudev’ && !(title like ’Java*’) keywords contains ’bea’ || title = ’bea’ expireDate > now Existem propriedades pré-definidas pelo portal, que podem ser utilizadas na query: • cm_nodeName • cm_path • cm_objectClass • cm_createdBy • cm_modifiedBy • cm_createdDate • cm_modifiedDate Exemplo de content query via TagLib: <cm:search id="nodes" query="title like ’Java*’ && cm_objectClass = ’books’" /> Exibindo o placeholder na página JSP: <ph:placeholder name="/placeholders/myPlaceholder.pla" height="100" width="150" /> Propriedades que podemos utilizar na tag ph:placeholder: Gilberto Holms http://gibaholms.wordpress.com/
  • 25. o Content Selectors A cada request no portal, faz uma busca de conteúdo através de property values (através de uma query) e retorna todos os content nodes localizados Suporta personalização utilizando properties e segments Exibindo o selector na página JSP: • A Tag pz:contentSelector retorna o array de nodes encontrados, e então utilizamos uma tag netui-data:repeater para iterar sobre os nodes e exibí-los como necessário: <pz:contentSelector rule="myContentSelector" id="sampleContent" /> <netui-data:repeater dataSource="sampleContent"> <netui-data:repeaterHeader> <tr> <td>Content Title</td> </tr> </netui-data:repeaterHeader> <netui-data:repeaterItem> <tr> <td><cm:getProperty node="${container.item}" name="title" /></td> </tr> </netui-data:repeaterItem> </netui-data:repeater> • Content Management API o Node Representa um elemento/conteúdo no CMS Existem duas categorias de Node: • Hierarchy Nodes – pastas • Content Nodes – conteúdos Um Hierarchy Node pode conter outros Hierarchy Nodes e Content Nodes Características do Content Node • Possui um único ID • É tipado pelo content type (ObjectClass) • Contém properties o Property Representa um par chave/valor, que é associado a um Content Node o ObjectClass Representa o Content Type do qual foi criado o Content Node o ID É o identificador único do Content Node o Pacote com.bea.content o O ponto de partida é sempre uma ContentManagerFactory: ContentContext contentContext = new ContentContext(this.getRequest()); INodeManager nodeManager = ContentManagerFactory.getNodeManager(); Node node = nodeManager.addNode(contentContext, PathHelper.SEPARATOR + "BEA Repository" + PathHelper.SEPARATOR + "newNode", "someType", properties); Node newNode = nodeManager.getNode(context, "/BEA Repository/newNode"); Obs.: os entitlements necessários para acessar o content são determinados a partir da identidade do usuário obtida do request: new ContentContext(this.getRequest()) Gilberto Holms http://gibaholms.wordpress.com/
  • 26. o API Overview o Content Management Controls O portal oferece Beehive Content Controls para acessar a CMS API de forma simplificada Principais CMS Controls: • Content Node Control o Substitui o INodeManager o Permite: Adicionar novos Nodes Gerencias Nodes Obter Property e ID dos Nodes Obter Nodes filhos • Content Search Control o Substitui o ISearchManager o Permite: Buscar conteúdos através de uma content query Retorna uma SortableFilterablePagedResult, que é uma lista que pode ser ordenada, filtrada e paginada o Content Management JSP Tags Estas funcionalidades também são fornecidas através de tags: • <cm:search> • <cm:getNode> • <cm:getProperty> Os conteúdos retornados em forma de lista podem ser iterados por qualquer tag iterativa ou scriptlet Para mostrar propriedades binárias (ex.: imagens), é preciso utilizar o ShowBinary servlet Exemplos: <cm:getNode path="/BEA Repository/news" id="node" /> <% String nodeName = node.getName(); %> <cm:getNode path="/BEA Repository/news/news1" id="node"/> <cm:getProperty id="node" name="title"/> <cm:search id="nodes" query="source ='edudev'"/> <% for(int i = 0;i < nodes.length; i++) { ... } %> <cm:getNode path="/BEA Repository/MyImageContent" id="imageNode"/> <img src="<%=request.getContextPath()%>/ShowBinary?nodePath=${imageNode.path}/MyBinaryProperty"/> • Content Management Administration API o É uma API parecida com a CMS API, porém permite a administração do sistema de Content Management do portal: Gilberto Holms http://gibaholms.wordpress.com/
  • 27. Criar Repository Criar novo Folder ou Node Criar novo Content Type Adicionar um novo Workflow Check-in e Check-out de conteúdos o Usuários precisam estar autenticados e possuir permissão para as operações o Pacote com.bea.federated com.bea.federated.INodeManager com.bea.federated.ITypeManager com.bea.federated.IVersionManager o Content Administration Controls Também são fornecidos Beehive Content Administration Controls para simplificar o uso da API Principais CMS Administration Controls: o Content Node Control o Content Repository Control o Content Type Control o Content Workflow Control • Third-Party CMS Systems Integration o Arquitetura geral do sistema de CMS da BEA: o É criado como um Repository, que é associado a um Virtual Content Repository o Técnicas de integração que podem ser utilizadas: Implementação do BEA Content Repository Service Provider Interface (SPI) Implementação da JSR-170 Service Provider Interface (SPI) – “Content Repository for Java API” Propagação de conteúdo diretamente para as tabelas da BEA Portlets de conteúdo customizados o Se o fabricante optar pela JSR-170, é necessário implantar uma Bridge. O portal fornece esta bridge Gilberto Holms http://gibaholms.wordpress.com/
  • 28. o Fabricantes que já se integram com o BEA Portal Documentum Interwoven FatWire Stellent Portal Administration • Atividades possíveis de administração: o Usuários e profiles o Modificações finais em desktops e seus componentes o Setar permissão para componentes do portal de acordo com roles o Delegar capacidades administrativas para outros administradores o Publicar e aprovar conteúdo o Application deployment o Portal data propagation • Um portal tem dois ciclos bem definidos: Development e Administration o Development Criação do arquivo .portal, que é apenas o template de um portal o Administration Assemblar templates para criar um portal customizado, focado em um tipo de usuário Aplicar segurança nos recursos do portal Outras atividades post-development • Portal Template vs. Portal Desktop Instance o O arquivo .portal é apenas um template (filesystem portal) o A partir dele são criadas instâncias reais de portal (database portal) o Na instância real podemos modificar books, pages, portlets e look-and-feel, sem que o template .portal original seja alterado o A instância real (Desktop) é uma “view” do portal direcionada a um determinado publico • Portal Propagation Tool o Permite que mudanças de LDAP e base de dados sejam propagadas de um ambiente para outro o Desta forma, podemos por exemplo replicar no ambiente de produção todas as configurações realizadas no ambiente de homologação o Realizado através do Workshop ou script Ant o Podemos propagar: • Portal XIP Tool o Administradores podem fazer mudanças drásticas em um template de portal para criar sua instância em produção o O XIP Tool permite recriar template files (.portal, .book, .page) a partir dos últimos desktops usados em produção, para que as alterações feitas via console administrativo possam ser replicadas posteriormente • Portal Library Resources o São mostrados todos os recursos disponíveis para o portal deployado (books, pages, portlets, lafs, etc…) o Recursos que são sincronizados automaticamente durante o desenvolvimento: .portlet .shell .laf .layout .theme Gilberto Holms http://gibaholms.wordpress.com/
  • 29. o Recursos que precisam ser recarregados explicitamente: .portal Books Pages • Instância real – Production Desktop o URLs do production desktop: o Formas de criar um Production Desktop: Utilizar um template em uma lista Assemblar manualmente com os recursos da library Utilizar um arquivo .portal o No production desktop podemos setar/modificar: Details – resumo dos atributos Contents – gerenciar child resources (boos/pages) Preferences – gerenciar Portlet Preferences Visitor Entitlements Delegated Admin Portal Security • WebLogic Security Realm: • Users and Groups o Entidades do WebLogic Server Realm o Podem ser gerenciados pelo console do WebLogic Server ou pelo console administrativo do Portal • User Profiles o Dados adicionais sobre a entidade (ex.: endereço, telefone, emal, etc…) o São gerenciados pelo console administrativo do Portal o São agrupados em Property Sets • Roles o São classificações (perfis/papéis) para usuários o Podem ser atribuídos/classificados usuários das seguintes formas: Grupos Users Regras com atributos de User Profile Regras com atributos gravados na sessão (HttpSession) Tempo / hora Gilberto Holms http://gibaholms.wordpress.com/
  • 30. Visitor Entitlements o É um mecanismo para determinar “quem” pode acessar qual recurso e “o quê” ele pode fazer o É a permissão é concedida a nível de “Role” o Podem ser aplicados a nível de Desktops Book Page Portlet Conteúdo o Podem ser concedidas permissões de: View Minimize Maximize Edit Remove o Já possui automaticamente dois Entitlements padrão: Authenticated Visitor – todos que estão autenticados (independente da role) AnonymousVisitor – todos que não estão autenticados • Visitor Tools o Permite que um Desktop seja customizado por cada usuário, para si próprio o A customização é persistida e permanece ativa para os próximos acessos do usuário o O usuário pode customizar: Adicionar/remover Books e Pages Posição dos Books e Pages Adicionar/remover Portlets Posição dos Portlets Trocar Look-and-Feel o Pode ser aplicado apenas a um Production Desktop (não a nível de arquivo .portal) o É preciso adicionar a “facet” chamada Portal Visitor Tools o É criada uma pasta “/visitorTools” com os componentes necessários e o Visitor Tools Portlet o Visitor Tools Portlet É o portlet que permite que o usuário gerencie sua view do desktop Geralmente é incluído no Header (arquivo .shell) Requer que o usuário esteja autenticado Fica em “/visitorTools/visitorMenu.portlet” o Através do Console Administrativo do Portal, o administrador pode dar LOCK em placeholders, o que disabilitará a customização daquele placeholder específico o O Entitlement para definir quem pode customizar qual recurso deve ser atribuído através da Library, e não da instância do desktop GroupSpace • Conceitos de Portais Colaborativos o Portais que permitem o compartilhamento de conteúdo entre usuários, como discussões, notificações, anúncios, email, etc. o Principais requisitos para colaboração: Interface unificada Member invitation e gerenciamento automático Controle de acesso à informação Ser extensível, para contemplar futuros requisitos • Weblogic Portal Communities o Weblogic Portal Community Framework Base para criar e manter Portais Colaborativos Gilberto Holms http://gibaholms.wordpress.com/
  • 31. Extende o core do Weblogic Portal Community • É uma coleção de recursos de portal que fornecem implementação dos requisitos de colaboração • Suporta compartilhamento de conteúdo • Suporta member registration / invitation Uma Community é uma forma especializada de um Portal Desktop Componentes de uma Community: • Componentes comuns de portal (como Books, Pages e Portlets) • Assemblado através do Console Administrativo do Portal • Pode ser iniciado através de um template criado no Workshop • Pode ser customizável através de Visitor Tools Community Templates • Da mesma forma que portais normais são criados através de templates .portal, as Communities são criadas por templates .community e .ctmeta o Gerenciamento de Usuários nas Communities Os usuários podem se tornar membros de uma community das seguintes formas: • Respondendo a um link de convite na página do portal • Respondendo a um email de convite • Registrando-se sem um convite (communities públicas) Papéis (roles) das Communities • Creator o Cria e gerencia comunidades, todas configurações de portlets, automaticamente é convidado para fazer parte da community • Owner o Apenas gerencia comunidades, todas configurações de portlets, automaticamente é convidado para fazer parte da community • Contributor o Utiliza todas as features dos portlets, exceto deletar conteúdo • Viewer o Utiliza apenas features read-only dos portlets • GroupSpace Community o É uma aplicação completa pré-definida criada sobre o Community Framework, com vários recursos prontos para serem customizados e reutilizados o Arquitetura do GroupSpace o GroupSpace Portlets Mail Calendar Document Library Discussion Forums RSS Reader Issues Tasks Announcements Search o Os usuários podem definir a visibilidade do conteúdo que postam nos GroupSpace Portlets: Community • Todos os membros da community Private Gilberto Holms http://gibaholms.wordpress.com/
  • 32. • Apenas o usuário que postou Personal • Apenas o usuário que postou, e o conteúdo é visível em todas comunidades que o usuário é membro o Todo o conteúdo das GroupSpace Communities são modelados através de Content Types, que são criados automaticamente pelo aplicativo o Os GroupSpace portlets suportam diversos tipos de customização via código Content Management – Principais Conceitos 1 – Virtual Content Repository É o repositório lógico para acesso aos conteúdos pelo console de administração. Independe do tipo de repositório físico e pode agrupar vários repositórios físicos logicamente. 2 – Repository É o repositório físico, onde realmente fica guardado o conteúdo. Pode ser dos seguintes tipos: • BEA Repository o Tipo Database (é o default) Já vem pré-configurado, utiliza base de dados tanto para guardar os metadados quanto o conteúdo. o Tipo Filesystem Utiliza base de dados para guardar os metadados e o disco rígido para guardar o conteúdo binário (tem melhor performance). Se utilizado com versionamento, o conteúdo antigo é guardado na database, assim se assegurando que se houver problemas no filesystem, os arquivos anteriores possam ser recuperados. Contra: não é transacional, se a rede cair durante uma alteração, ela será perdida. • Third-Party Repository Integração com repositórios de outros fabricantes. O versionamento (Library Services) por padrão vem desabilitado. Para habilitar: Aba “Repositories” > Selecione o repositório > Library Services Só podemos utilizar workflow em repositórios versionados. 3 – Content Types É uma definição de um “Tipo de Conteúdo”, que pode ter propriedades de vários tipos “primitivos” (string, data, binário...) ou ainda um sub-elemento de outro “Content Type” complexo. Será o template para que a pessoa responsável por publicar conteúdo utilize, portanto deve ser bem descrito. 4 – Content Folders São pastas criadas dentro da aba “Content” para organizar o conteúdo. Servem para organizar logicamente o conteúdo, mas são importantes porque também permitem setar workflow e autorização separados por pasta (aliás, permite tanto configurações folder-level quanto file-level). 5 – Content Workflow Permite um fluxo de aprovação para o conteúdo. Lembrete: precisa habilitar o versionamento (Library Services) do repositório. O portal fornece um workflow default, mas podemos criar um personalizado: - Criar um XML de definição de workflow - Adicionar ele no repositório - Setar as configurações de autorização dos steps do workflow - O workflow fica disponível para ser associado a qualquer recurso Podem ser associados a Content Folders, Content Types e Contents. 6 – Content É um conteúdo criado (a implementação de um Content Type), pronto para ser carregado e exibido no portal. Gilberto Holms http://gibaholms.wordpress.com/
  • 33. 7 – Detalhamento: Content Type • Property definitions: todo o metadado que possa ser útil obter no portal (como largura da imagem ou tamanho), ou para utilizar “Interaction Management”. o Boolean o Long Integer o Number Decimal o String o Date/Time o Binary – um arquivo qualquer (como por exemplo uma imagem) o Nested Content Type – um sub-elemento complexo (outro content type) o Link – algum outro conteúdo implementado • Property options: opções gerais da propriedade: o Required – é obrigatória ao criar o conteúdo o Read Only – valor não pode ser alterado o Primary Property – apenas uma por content type, com isso podemos criar uma busca de conteúdo apenas por esse campo para otimizar a consulta o Searchable – pode ser incluída na busca de conteúdo o Is Explicit – mapeia o valor para uma coluna específica da tabela do CMS o Allow Multiple Values – permite mais de um valor para a propriedade (array) o Restrict values – cria um choice (domínio) de valores permitidos • Abstract Content Types: tipos que não podem virar conteúdo diretamente, são apenas pedaços de um content type maior, ou seja, não têm significado sozinhos. • Content type inhiterance: é quando você deseja que content types herdem propriedades de um outro content type • Content workflow: associa o tipo a um workflow, ou seja, todo o conteúdo criado a partir desse tipo possuirá este workflow associado. Gilberto Holms http://gibaholms.wordpress.com/