DEV Community

Beatriz Maciel
Beatriz Maciel

Posted on • Updated on

Desenvolvimento Back-end em AEM - Parte II

Back-end Coding Practices

Escrevendo Sling Servlets

Arquitetura orientada à objetos

Tudo é um recurso

  • Pedaços de informação, novas entradas, descrições de produtos, fotos e outros
  • Recursos são identificados por suas URLs únicas

Stateless

  • A requisição para um recurso contém toda a informação relevante

Interação restrita com os recursos

  • Eles usam métodos HTTP (GET, POST) para operações

Sling Servlets

O Sling Servlet API extende o HTTPServelet class. Ele define uma execução adicional de path (caminho) com a ajuda do Apache Sling Servlet/Script Resolver e Error Handler. O diretório default do Servlet Execution é o /bin.

Aqui estão algumas instâncias que você pode evitar usando o @slingServlet:

  • Use @Component (service = Servlet.class)
  • Evite @Component (service = Servlet.class,property={"sling.servlet.paths=/bin/servletdata"})
  • Use o atributo resourceType para conectar o Sling Servlets a um componente e.g. @Component (service = Servlet.class, property = {"sling.servlet.resourceTypes=project/components/component"})

Configuring the LoginService

O LoginService não trabalha junto com o usuário admin padrão. Para que ele trabalhe, é necessário:

  • Criar um usuário do sistema

    -- O username não é importante; pode ser qualquer coisa

    -- A única forma de criar um usuário do sistema é pelo explorar do CRX usando o System User

    -- Depois que você criar o usuário, os detalhes aparecem no Adobe Experience Manager Users and Groups

  • Garanta que você deu TODAS as permissões ao novo usuário do sistema

Event Admin

Especificação OSGi para lidar com o event:

  • Publish/Subscribe baseado nos tópicos de hierarquia

Acoplamento frágil de serviços

  • Whiteboard pattern (padrão de quadro branco), onde um ouvinte registra a si mesmo no registro de serviços como comparado a um Listener Pattern (por exemplo, no AWT), onde um ouviten registra a si mesmo em um assunto de event-generating (WHAT?!)

Eventos pré-definidos

  • Eventos de framework
  • Eventos de configuração

Receiving Events

Implementando a interface EventHandler

Se inscrever no registro de serviço

  • Whiteboard pattern (quadro branco padrão?!)

Seleção do Evento com as propriedades do serviço


@Component( 
Immediate = true, 
service = EventHandler.class, 
property = { 
EventConstantsEVENT_FILTER+"=(path=/content/*)", 
// …. 
})

Enter fullscreen mode Exit fullscreen mode

Use Java Content Repository Observation

Existem 3 tipos diferentes de interpretações de eventos:

  • NODE_ADDED
  • NODE_REMOVED
  • NODE_MOVED
  • PROPERTY_ADDED
  • PROPERTY_REMOVED
  • PROPERTY_CHANGED

Listener Registration

O Listernet Registration acontece quando o objeto ObservationManager chama o addEventListener

  • Ele é especificado por um path para o novo onde os eventos devem ser recebidos
  • Ele especifica quando eventos são profundamente ou superficialmente recebidos (whole subtree)
  • Ele pode escolher receber eventos para nodos de um certo tipo ao invés de um path

Sling Events vs JCR Observation Listeners

Os tópicos de evento Sling usados no nível CQ5 (CQ5-level) incluem Replication e PageEvents. Por exemplo:

  • com.day.cq.wcm.api.PageEvent
  • com.day.cq.replication.ReplicationAction

Observation Listeners tem eventos mais sofisticados.

Sling Models

Aqui o que os Slings Models fazem:

  • Eles disponibilizam o framework para desenvolvimento
  • Eles deixam você usar orientado por anotações. Objetos Java simples e antigos (POJOs)
  • Eles são adaptáveis para vários objetos, incluindo Recursos e SlingServletRequest.
  • Anotações em Sling models asseguram os inputs
  • Fora da caixa, Sling models trabalham com:

    -- Sling bindings

    -- Serviços OSGi

    -- Atributos de requisição

Sling Model Enhancements

Sobre o Sling Dynamic Include:

  • Substitui componentes gerados dinamicamente com tag inclusivas no server-side
  • É instalado através de um bundle OSGi
  • Pode trabalhar com CDNs para performar Edge-Side Include

Você não precisa modificar os componentes para usar esse módulo

Sling Model Exporter

  • O framework Sling Model Exporter te permite adicionar novas anotações nos Sling Models
  • A anotação @Exporter define como o Model pode ser exportado como um objeto Java diferente ou, mais usualmente, serializado em um formato diferente, como o JSON.
  • O Apache Slings disponibiliza um Jackson JSON exporter para cobrir os casos mais comuns, exportando os Sling Models como objetos JSON.
  • O Sling Model Exporter é perfeito para aproveitar Sling Models que já contém lógica de negócio que suportam renderizações HTML através do HTL

Sling Model Exporter

  • O Sling Model Exporter suporta passar por opções per-model Exporter para a implementação Exporter. Isso leva à como o Sling Model e finalmente exportado.
  • Opções per-model Exporter geralmente são aplicadas globalmente para como o Sling Model é exportado. Considerando que para cada data point podem ser aplicadas anotações inline do tipo:

    -- Opções Jackson Exporter incluem:

    > Opções Mapper Feature 
    
    > Opções Serialization Feature
    

Sling Model Exporter AEM

Usando Workflows

Modelos de workflow no AEM representam e implementam processos de negócios

  • Modelos de workflow atuam nas páginas ou assets para alcançar um resultado específico - essas páginas ou assets são conhecidas como workflows payload.
  • Os modelos de workflows incluem uma séria de passos que performam tarefas específicas
  • O Workflow payload passa por cada passo enquanto o workflow progride.

Uma instância do workflow é criada e está em andamento.

  1. O primeiro passo do workflow model é executado
  2. A engenharia do workflow usa o modelo para determinar o próximo passo para executar
  3. Os passos subsequentes no workflow são executados
  4. A instância do workflow termina e é arquivada

Passos do workflow

Quando os passos do workflow são executados eles são associados a uma instância do workflow. A história de uma instância do workflow inclui informação sobre cada passo que foi executado para a instância. Essa informação é útil para investigar problemas que ocorrem durante a execução.

Tanto um usuário quanto um serviço podem fazer os passos do workflow, dependendo do tipo de passo:

  • Quando um usuário faz um passo, ele se responsabiliza por um item de trabalho que fica localizado no seu Inbox. O usuário é responsável por completar manualmente o passo para que a instância do workflow progrida.
  • Quando um serviço faz um passo e completa uma instância do workflow isso faz com que o próximo passo progrida automaticamente.

Modificando Usuários e Grupos

Aspectos básicos do Access Control (Acesso de Controle)

O Access Control acontece em um nível de repositório

  • Permite que usuários e grupos sejam arquivados no repositório
  • Permite que permissões sejam arquivadas como nodos.
  • Oferece direitos de acesso de acordo com a Autenticação Java e Autorização de de Serviço (JAAS)

O Access Control consiste em:

  • Principals: uma conta de usuário ou de grupo
  • Subjects: os direitos atribuídos a um usuário ou grupo
  • Controle de Acesso e Autorização

Evaluation of a Subject

Evaluation é um processo de comparar as permissões do sujeito com aquelas necessárias para acessar um recurso.
Enquanto estamos avaliando, Oak olha para o ancestral mais próximo, permitindo ou negando uma ação e indo nesta decisão

Usando APIs Autorizáveis

Os três tipos de APIs autorizáveis são:

  • UserManager API:

    -- Te permite acesso e mantém objetos autorizáveis como Users e Groups
    -- Está atrelado a uma sessão particular de um usuário

  • Principal API

    -- Representa a noção abstrata de um principal que pode ser usado para representar qualquer entidade, como um indivíduo, uma coorporação, ou um id de login

  • User interface

    -- É uma API autorizável que pode ser autenticada (usando credenciais) e despersonalizada.

========

Questões Finais

Back-End Coding Practices

1 – O que ajuda a inicializar o observationManager object?
Session.getWorkspace().getObervationManager()

2 – Qual das opções são acessos a objetos do Java Content Repository?
Repository e Session

3 – O que acontece quando você faz um "deploy a servlet on a path"?
Ele sobrescreve os parâmetros existentes.

4 – Qual a forma que o sling models recupera as informações que mudou nessa versão do AEM?
Ele agora usa o "exporter framework"

5 – Qual o caminho das pastas dos arquivos JUnits?
Src/test folder

6 – Complete a lacuna:
To download Java docs and source files, you run the _______ command.
Mvn eclipse:eclipse

7 – Como você pode criar um system user?
No CRX explorer usando system user.

8 – O que voce precisa recupar para enviar um trabalho para o servidor?
Job manager interface

9 – Qual é a função de usar o Sling scheduler?
Ele permite fácil marcação (scheduling) do trabalho dentro da sua aplicação.

10 – Como você substitui os componentes gerados dinamicamente por tags de inclusão do lado do servidor?
Usando Sling Dynamic Include

11 – Complete a lacuna:
Sling resources map to the ______.
JCR node.
Back-end Advanced Features

Back-end Advanced Features

1 – O que são Workflow payloads?
Páginas ou recursos nos quais os fluxos de trabalho atuam.

2 – Complete a lacuna:
Access control happens on a ________ level.
Repository

3 – Access Control List (ACL) são armazenados em grupos de usuários autorizáveis.
False

4 – Qual API autorizavel providencia o acesso e mantém o User e Groups?
UserManager API

5 - Criar muitos launchers fará com que o processo de avaliação seja executado mais lentamente
Verdadeiro

6 – Complete a lacuna:
Workflow models in AEM represent and implement ______________.
Business processes

7 - Onde você pode encontrar informações que o ajudarão a investigar problemas que acontecem durante a execução de um
No historico do Workflow instance

Discussion (0)