Desenvolvimento Back-end em AEM - Parte II
Tags: aem, adobe, backend, cms
Published: 2021-10-29 16:12:18

## 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 

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

*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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ehc28ou907wttt9qk7qr.png)

**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