Author Archives: Luis Fernando Chaim

Criando projeto JAX-RS

Introdução

O objetivo deste post é demonstrar como criar um projeto RESTful, usando Eclipse e Jersey.

Procedimento

Instalando archetype-catalog do Jersey

  1. Abra o Eclipse
  2. Vá em Window / Preferences
  3. Abra o item Maven
  4. Selecione Archetype
  5. Clique em Add Remote Catalog…
  6. Em Catalog File: http://repo1.maven.org/maven2/archetype-catalog.xml
  7. Em Description: Maven Catalog
  8. Clique em OK

Criando o projeto

  1. Vá em File / New / Other…
  2. Digite: Maven
  3. Selecione: Maven Project
  4. Clique em Next
  5. Digite em Filter: jersey-quickstart
  6. Selecione: jersey-quickstart-webapp (versão 2.26)
  7. Clique em Next
  8. Digite Group Id: br.com.whs.jaxrsdemo
  9. Artifact Id: jax-rs-demo
  10. Version: 1.0.0
  11. Package: br.com.whs.jaxrsdemo
  12. Clique em Finish

Instalando Tomcat

  1. Acesse a página: https://tomcat.apache.org/download-80.cgi
  2. Baixe a versão 8.5.24
  3. Descompacte no local desejado
  4. No Eclipse, clique na aba: Servers
  5. Clique no link: Click this link to create a new server…
  6. Selecione: Apache
  7. Selecione: Tomcat v8.5 Server
  8. Clique em Next
  9. Localize o caminho raiz da instalação
  10. Clique em Next
  11. Adicione o projeto recém criado
  12. Clique em Finish

Testando Aplicação

  1. Clique no servidor criado (aba Servers)
  2. Clique no botão Start (mesma janela de Servers)
  3. Abra um navegador e digite: http://localhost:8080/jax-rs-demo/
  4. Clique no link Jersey resource

Código-fonte do projeto

Você pode baixar os fontes desse projeto no github.

Instalando NodeJs usando NVM no Ubuntu

Introdução

Neste post, vamos instalar o NodeJs, através da ferramenta NVM (Node Version Manager).

NVM

Excelente ferramenta de administração de versões do NodeJs. Procure utilizar essa ferramenta, pois torna o trabalho bem mais fácil.

Instalação do NVM

  1. Abra um Terminal
  2. Curl
    1. curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash
  3. Wget
    1. wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.23.2/install.sh | bash
  4. Digite
    1. nvm
    2. Deve aparecer o help do comando (já está instalado)

Instalação do NodeJs

Agora sim, vai ser complicado.

  1. No Terminal, digite
    1. nvm install 8.9.1
    2. 8.9.1 foi a versão estável selecionada no momento desse post
  2. Basta digitar
    1. node -v (aparecerá v8.9.1)
    2. npm -v (aparecerá 5.5.1)

Mamão com açucar! Está pronto!

 

MongoDB – Primeiros Comandos – Linux

Introdução

Este post tem o objetivo de iniciar a utilização do MongoDB, usando comandos.

Pré-requisitos

Para começarmos, é necessário ter executado o procedimento do post Instalar MongoDB no Ubuntu.

Console do MongoDB

Para abrir o console do MongoDB, utilize o comando

$ mongo

Listando bancos

> show dbs

admin 0.000GB
escola 0.000GB
local 0.000GB

Criando ou entrando no banco

Para entrar ou criar um banco, utilize o comando “use”. Se o banco não existir, será criado automaticamente.

> use escola

switched to db escola

Criando tabela e inserindo dado

Podemos criar uma tabela e inserir o dado ao mesmo tempo. Para isso, utilizamos o comando db.[[TABELA]].insert.

> db.aluno.insert({‘nome’:’Luis Fernando Chaim’,’dataNasc’:new Date(‘1972-05-22’)})

WriteResult({ “nInserted” : 1 })

Listando tabelas

> show collections

aluno

Pesquisando dado

Para pesquisar os dados de uma tabela, utilizar db.[[TABELA]].find().

> db.aluno.find()

{ “_id” : ObjectId(“5a02e14ef52458010bddaf80”), “nome” : “Luis Fernando Chaim”, “dataNasc” : ISODate(“1972-05-22T00:00:00Z”) }

> db.aluno.find({nome: ‘Luis Fernando Chaim’})

Exemplos

db.professores.insert({nome: ‘Jean’, idade:26, disciplinas:[‘Tecnicas de Programacao’, ‘Topicos Avancados’], sexo: ‘m’})

db.professores.insert({nome: ‘John’, idade:46, disciplinas:[‘Tecnicas de Programacao’, ‘Topicos Avancados’], sexo: ‘m’})

db.professores.insert({nome: ‘Joseph’, idade:53, disciplinas:[‘Tecnicas de Programacao’, ‘Topicos Avancados’], sexo: ‘m’})

db.professores.find()
Então nosso comando find() nos retornará a lista de todos os registros. Se eu quiser passar alguma cláusula para a busca, posso fazer da seguinte forma:

db.professores.find({nome: ‘Jean’})
//db.professores.find({nome: ‘Jean’, idade:26})
Lembrando que se nossa consulta for falsa, ele não escreverá nenhum resultado, como podemos ver na tela abaixo:

Para fazermos comparações entre valores, usaremos uma sintaxe um pouco diferente. Vamos ter como exemplo a busca por professores com idade acima de 30 anos.

db.professores.find({idade: {$gt:30}})
Como podemos notar com o exemplo, utilizamos um operador condicional o $gt que significa great than, ou maior que, em português.

Também podemos usar os seguintes operadores condicionais: $gte, $lt, $lte, $all, $in, $nin, $ne, $exists, $mod

Ou seja podemos ver que na função find() podemos passar 1 paramêtro que vai fazer a comparacao de valores para delimitar a busca. Tendo em vista que se utilizarmos operadores de comparação como >, >=, <, <= e outros, teremos que usar a seguinte regra:

db.collection.find({campo: {$operador: valor}})

Podemos passar um paramêtro para a comparação de valores, mas também posso passar outro parâmetro, informando quais campos eu quero que retornem na busca; neste caso, nosso exemplo ficará:

db.collection.find({campo: {$operador: valor}}, {campo1: 1, campo2: 1, campoN: 1})
Como visto no exemplo acima ele sempre retorna o _id de cada registro, para que isto não ocorra podemos repassar no paramêtro dos campos _id:0

Porém, caso eu não queira comparar nenhum valor, terei que passar null no primeiro paramêtro, podendo ficar da seguinte maneira:

db.collection.find(null, {campo1: 1, campo2: 1, campoN: 1})

Uma outra função bem útil é a ordenação da busca, que se assemelha ao ORDER BY do SQL. No MongoDB temos a função sort() que recebe um paramêtro para ordernar.

db.collection.find(null, {nome:1, idade:1, _id:0}).sort({idade:1})
Onde passaremos o 1 paras ASC ou seja, do menor para o maior, ou -1 que é o DESC, do maior para menor.

Além de ordenar, também podemos limitar a busca, parecido com o LIMIT do SQL, passando um valor inteiro para a função limit().

db.collection.find(null, {nome:1}).sort({idade:1, nome:-1}).limit(2)

Outra função que auxilia ao limit() é a skip(), que receberá um valor inteiro para pular até aquele registro. Até agora, nossas funções convertidas em SQL ficam assim:

select nome, idade from professores ORDER BY idade ASC LIMIT1,2
Bom, já aprendemos como inserir dados e listá-los esta na hora de modificarmos os registros. Para isto, utilizamos a função update({busca}, {atualizacao}).

Assim como temos o modificador $set, também temos o $unset, que elimina a chave.

db.professores.update({nome: ‘Jean’}, {$unset: {disicplinas: 1}})
Também podemos apenas incrementar ou decrementar um valor inteiro utilizando o modificador $inc

db.professores.update({nome: ‘Jean’}, {$inc: {idade: 5}})
//incrementa em 5 a idade do professor Jean
db.professores.update({nome: ‘Jean’}, {$inc: {idade: -5}})
//incrementa em 5 a idade do professor Jean

Agora para removermos documentos, utilizamos a função remove(json). Onde passamos como parâmetro a clausula de comparação.

Porém, caso queiramos limpar toda a collection, é mais rapido usando drop()

 

 

Instalar MongoDB no Ubuntu

Introdução

Este post demonstra a instalação do MongoDB no Ubuntu.

Procedimento

  1. Importar a chave oficial do MongoDB
    1. sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 0C49F3730359A14518585931BC711F9BA15703C6
  2. Atualizar a lista de atualizações
    1. sudo apt-get update
  3. Instalando MongoDB
    1. sudo apt-get install mongodb-org
    2. O item 3 não funcionou no meu Ubuntu 17, então substitui o comando para
      1. sudo apt-get install mongodb
  4. Criar pasta /data/db e fornecer permissão de escrita
    1. sudo chmod 775 -R /data
  5. Subindo servidor
    1. sudo mongod
  6. Baixando servidor
    1. sudo mongod stop
  7. Verificando serviço
    1. ps -ef|grep mongo

Angular e Node.js – 1 – Introdução

Olá, tudo bem?

Neste post, vamos iniciar o aprendizado do Angular e Node.js.

Sobre o Angular

AngularJS é um framework JavaScript open-source, mantido pelo Google e pela comunidade, que auxilia na execução de single-page applications.

Sobre o Node.js

Node.js é uma plataforma construída em tempo de execução de JavaScript do Chrome para facilmente construir aplicações de rede rápidos e escalonáveis. Node.js usa um bloqueio não-modelo orientado a eventos, I / O que o torna leve e eficiente, perfeito para aplicações em tempo real de dados intensivos que são executados através de dispositivos distribuídos.

Instalação

Node.js

Para a instalação do Node.js, basta acessar nodejs.org. O site detectará o sistema operacional da máquina e apresentará a correta versão para download. No momento da publicação, a versão disponibilizada foi 8.7.0.

Após a instalação, você pode testar digitando no prompt,

$ npm -version.

Typescript

$ npm install -g typescript

Typescript é um subset do Javascript, que transcompila em diferentes versões do javascript – garantindo mais recursos em ambiente de desenvolvimento e sendo mais portável ao transcompilar para diferentes versões do javascript para a execução.

Angular CLI

$ npm install -g @angular/cli

Verificação: $ ng -v

Trata-se de um facilitador de desenvolvimento de aplicações, ajudando a processar e agrupar arquivos TypeScript, JavaScript, CSS, HTML e imagens.

Criando um projeto

No prompt de comando, vá até o seu diretório onde serão armazenados seus projetos. No meu caso, optei por utilizar /opt/workspaces/projetos-angular/.

Digite o comando $ ng new NOME_DO_PROJETO (utilizei projeto-teste-angular1). Existem regras bem definidas para o nome do projeto, então, fique atento.

Rodando o projeto

Vá até o diretório do projeto (no meu caso, /opt/workspaces/projetos-angular/projeto-teste-angular1) e digite.

$ ng serve

Então, abra um navegador e digite.

http://localhost:4200/

Aparecerá a tela “Welcome to app!”

OutSystems – Exercício 14 – Data Synchronization

Este post demonstra o exercício 14.

Para baixar o material para esse exercício, acesse https://www.outsystems.com/learn/lesson/786/data-synchronization-exercise/

  1. Sincronização Automática
    1. Abra o projeto ToDo
    2. Abra a aba Logic e OfflineDataSyncConfiguration
    3. Mude os parâmetros SyncOnOnline, SyncOnLogin, SyncOnResume e RetryOnError para “Default Value” igual a “True”
    4. Publique a aplicação e rode. Se estiver logado, efetuar logoff e login para visualizar
  2. Habilitando mudanças Offline
    1. Na aba Data (ToDo) criar uma entidade estática SyncStatus
    2. Adicionar registro para None, Added e Updated
    3. Alterar a entidae LocalToDo, adicionando o campo SyncStatusId (relacionado a SyncStatus Identifier)
    4. Modificar a ação SaveOnClick (tela ToDoDetails)
      1. Excluir o If “not GetNetworkStatus()”, pois precisamos gravar localmente, mesmo sem conexão
      2. Criar If para verificação de data de encerramento passada
        1. GetLocalToDoById.List.Current.LocalToDo.DueDate <> NullDate() and GetLocalToDoById.List.Current.LocalToDo.DueDate < CurrDate()
        2. Setar Input_DueDate.Valid = False
        3. Input_DueDate.Message = “Data de encerramento não pode estar no passado”
      3. Criar If de Form1.Valid()
        1. Se Form1.Valid() = False, vá para o nó End
        2. Senão, prosseguir
      4. Criar If Offline (not GetNetworkStatus())
        1. Se verdadeiro, ir para If New To Do?
        2. Se falso
          1. Ir para CreateOrUpdateToDoWrapper (gravação direta no servidor)
          2. Marcar SyncStatus = None
          3. Ir para “CreateOrUpdateLocalToDo
      5. Criar If “New To Do?”
        1. LocalToDoId = NullIdentifier()
        2. Se falso, ir para If “Added SyncStatus?” (verifica se o status do registro está com Added)
        3. Senão
          1. Assign GetLocalToDoById.List.Current.LocalToDo.SyncStatusId = Entities.SyncStatus.Added
          2. Ir para “CreateOrUpdateLocalToDo”
      6. Criar If “Added SyncStatus?”
        1. Condição
          1. GetLocalToDoById.List.Current.LocalToDo.SyncStatusId = Entities.SyncStatus.Added
          2. True, ir para “CreateOrUpdateLocalToDo”
          3. False
            1. assign GetLocalToDoById.List.Current.LocalToDo.SyncStatusId = Entities.SyncStatus.Updated
            2. Ir para “CreateOrUpdateLocalToDo”
      7. Fluxo completo 
    5. Modificar a ação StarOnClick para que fique igual a figura abaixo
    6. Modificar a ação TakePictureOnClick
    7. Modificando ações de sincronização
      1. Na aba Logic, abra “Server Actions” e selecione “ServerDataSync” em “OfflineDataSync”
        1. Adicionar parâmetro “AddedLocalToDos”
        2. Dois cliques em “DataType”
          1. Clique em “Text” e mude para “List”
          2. Clique em tipo “Text” e escolha “Record”
          3. Remova “Text” atributo (ícone de lixeira)
          4. Clique “Add attribute to AddedLocalToDos” e escolha “LocalToDo”
          5. Clique “Add attribute to AddedLocalToDos” e escolha “LocalResource”
          6. Clique em “Close” para fechar a janela
        3. Adicionar outro parâmetro “UpdatedLocalToDos” e repetir o procedimento do item 2
    8. Criando a lógica necessária para ServerDataSync
      1. Abrir o fluxo ServerDataSync (duplo clique)
      2. Tratamento AddedLocalToDos
        1. Adicionar “For Each” entre LogMessage e GetCategories
        2. Adicionar “Run Server Action” e colocar do lado direito do “For Each” e escolher ação de entidade “CreateToDo”
        3. Criar um “Cicle” entre o “For Each” e “CreateToDo”
        4. Selecionar “For Each” e configurar a propriedade “Record List” para “AddedLocalToDos” no parâmetro de entrada
        5. Selecione “CreateToDo” e configure a propriedade Source para “AddedLocalToDos.Current.LocalToDo”
        6. No mapeamento “LocalToDo to ToDo”  configure “Id” para “NullIdentifier()” e “UserId” para “GetUserId()”
        7. Adicionar componente “If” abaixo do “CreateToDo”
          1. Label: “Has Resource?”
          2. Condition: AddedLocalToDos.Current.LocalResource.Id <> NullIdentifier()
        8. Adicione componente “Run Server Action” e colocar à esquerda do “If”
          1. Name: CreateResource
          2. Action: CreateResource
          3. Source: AddedLocalToDos.Current.LocalResource
          4. “Mapping from LocalResource to Resource”
          5. Id: CreateToDo.Id
      3. Tratamento UpdatedLocalToDos
        1. Repetir o procedimento do item 2. / 8. / 2.
        2. Utilizar UpdateLocalToDos no “For Each”
        3. “Run Server Action” “UpdateToDo”
          1. Action: UpdateToDo
          2. Source: UpdateLocalToDos.Current.LocalToDo
          3. “Mapping from LocalToDo to ToDo”
        4. “If” “Has Resource?”
          1. Condition: UpdatedLocalToDos.Current.LocalResource.Id <> NullIdentifier()
        5. “Run Server Action” “CreateOrUpdateResource”
          1. Action: CreateOrUpdateResource
          2. Source: UpdatedLocalToDos.Current.LocalResource
    9. Implementando OfflineDataSync
      1. Em “Client Actions” selecione a ação “OfflineDataSync” (dentro de “OfflineDataSync”)
      2. Adicione um “Aggregate” entre “Start” e “ServerDataSync” e abra (duplo clique)
        1. Arraste a entidade “LocalToDo” para o “Data”
        2. Repita o procedimento acima para a entidade “LocalResource”
        3. Em “Filters” configure: LocalToDo.SyncStatusId = Entities.SyncStatus.Added
        4. Em “Sources” modifique a cláusula entre LocalToDo e LocalResource para “With or Without”
        5. Nomear para “GetAddedLocalToDos”
      3. Repetir o procedimento do item 2, agora para “GetUpdatedLocalToDos”
        1. Em “Filters” configure: LocalToDo.SyncStatusId = Entities.SyncStatus.Updated
      4. Retorne para ação Client “OfflineDataSync”
        1. Configurar o parâmetro AddedLocalToDos para “GetAddedLocalToDos.List”
        2. Configurar o parâmetro UpdatedeLocalToDos para “GetUpdatedLocalToDos.List”
    10. Modificando Offline ícone
      1. Na aba Interface, abra “BottomBar” localizada no fluxo “Common”
      2. Usando “Widget Tree”, localize “BottomBarItem” que contém “Offline” ícone e apague-o
      3. Clique com o botão direito  no “Link” que contém “New To Do” e escolha “Remove Enclosing If”
      4. Arraste um componente “Container” para o mesmo nível do “bottom-bar-ph”
      5. Configure a propriedade “Visible” do “Container como, “not NetworkIsOnline”
      6. Configure no “Container”
        1. Align: Center
        2. Style: “background-light-grey text-italic text-dark-red”
      7. Arraste um componente “Icon” para dentro do “Container” e escolha “Pic an Icon” como “power off”
      8. Configure a propriedade “Size” para “Font Size”
      9. Coloque o cursor ao lado direito do “Icon” e digite: “You are currently offline”
    11. Publique e teste a aplicação

 

Amazon AWS – Redis

O Redis é um armazenamento de estrutura de dados de chave-valor de código aberto e na memória. O Redis oferece um conjunto de estruturas versáteis de dados na memória que permite a fácil criação de várias aplicações personalizadas. Os principais casos de uso do Redis incluem cache, gerenciamento de sessões, PUB/SUB e classificações. É o armazenamento de chave-valor mais conhecido atualmente. Ele tem a licença BSD, é escrito em código C otimizado e é compatível com várias linguagens de desenvolvimento. Redis é um acrônimo de REmote DIctionary Server.

Por conta da sua velocidade e facilidade de uso, o Redis é uma escolha em alta demanda para aplicações web e móveis, como também de jogos, tecnologia de anúncios e IoT, que exigem o melhor desempenho do mercado. A AWS oferece compatibilidade com o Redis por meio de um serviço de banco de dados gerenciado e otimizado chamado Amazon ElastiCache for Redis, além de permitir que os clientes executem o Redis autogerenciado no AWS EC2.

Benefícios

  • Desempenho muito rápido – Todos os dados do Redis residem na memória principal do seu servidor, em contraste com a maioria dos sistemas de gerenciamento de banco de dados que armazenam dados em disco ou SSDs. Ao eliminar a necessidade de acessar discos, bancos de dados na memória, como o Redis, evitam atrasos de tempo de busca e podem acessar dados com algoritmos mais simples que usam menos instruções de CPU. Operações comuns exigem menos do que 10 milissegundos para serem executadas.
  • Estruturas de dados na memória – O Redis permite que os usuários armazenem chaves que fazem o mapeamento para vários tipos de dados. O tipo de dados fundamental é uma string, que pode ser em formato de dados de texto ou binários e ter no máximo 512 MB. O Redis também é compatível com listas de strings na ordem em que foram adicionadas, conjuntos de strings não ordenadas, conjuntos classificados ordenados de acordo com uma pontuação, hashes que armazenam uma lista de campos e valores e HyperLogLogs para contar os itens exclusivos de um conjunto de dados. Praticamente qualquer tipo de dados pode ser armazenado na memória usando o Redis.
  • Versatilidade e facilidade de uso – O Redis é disponibilizado com várias ferramentas que tornam o desenvolvimento e as operações mais rápidas e fáceis, inclusive o PUB/SUB para publicar mensagens nos canais que são entregues para os assinantes, o que é ótimo para sistemas de mensagens e chat, as chaves com TTL podem ter um tempo de vida útil determinado, após a qual elas se autoexcluem, o que ajuda a evitar sobrecarregar o banco de dados com itens desnecessários, os contadores atômicos garantem que condições de corrida não criem resultados incompatíveis, além da Lua, uma linguagem de script potente, porém leve.
  • Replicação e persistência – O Redis emprega uma arquitetura no estilo mestre/subordinado e é compatível com a replicação assíncrona em que os dados podem ser replicados para vários servidores subordinados. Isso pode disponibilizar desempenho de leitura melhorado (à medida que as solicitações podem ser divididas entre os servidores) e recuperação quando o servidor primário passar por uma interrupção. Para disponibilizar durabilidade, o Redis oferece compatibilidade com snapshots point-in-time (copiando o conjunto de dados do Redis no disco) e criando um Append Only File (AOF) para armazenar cada alteração de dados no disco conforme elas vão sendo gravadas. Os dois métodos permitem a restauração rápida dos dados do Redis no caso de uma interrupção.
  • Compatibilidade com a sua linguagem de desenvolvimento preferencial – Mais de cem clientes de código aberto estão disponíveis para os desenvolvedores do Redis. As linguagens compatíveis incluem Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go e muitas outras.

Perfil – Arquiteto Sistemas

  1. Front End
    1. jQuery (link)
      1. jQuery é uma biblioteca de funções JavaScript que interage com o HTML, desenvolvida para simplificar os scripts interpretados no navegador do cliente. Usada por cerca de 74.4% dos 10 mil sites mais visitados do mundo, jQuery é a mais popular das bibliotecas JavaScript.
    2. Prototype (link)
      1. Prototype é um framework de código aberto em JavaScript, utilizado para o auxílio no desenvolvimento de aplicações Web. As principais características do Prototype são o fato dele ser muito bem estruturado, modular e orientado a objetos. Outro fato marcante é o excelente suporte ao Ajax.
    3. DWR (link)
      1. O DWR, ou Direct Web Remoting, é uma biblioteca de código aberto Java que ajuda os desenvolvedores a escrever sites que incluem a tecnologia Ajax. Ele permite que o código em um navegador da Web use funções Java em execução em um servidor da Web como se essas funções estivessem no navegador.
    4. Angular (link)
      1. AngularJS é um framework JavaScript código aberto, mantido pelo Google, que auxilia na execução de single-page applications.
    5. JSF2
      1. Primefaces
    6. Gulp
      1. O gulp é um kit de ferramentas JavaScript de código aberto da Fractal Innovations e da comunidade de código aberto do GitHub, usado como um sistema de criação de fluxo contínuo no desenvolvimento web de front-end.
    7. SASS
      1. Sass é uma linguagem de folhas de estilo concebida inicialmente por Hampton Catlin e desenvolvida por Natalie Weizenbaum. Depois de suas versões iniciais, Weizenbaum e Chris Eppstein continuaram a estender Sass com SassScript, uma simples linguagem de script usada em arquivos Sass.
  2. Back End
    1. JEE
    2. Persistence
      1. JPA (link)
        1. Java Persistence API é uma API padrão da linguagem Java que descreve uma interface comum para frameworks de persistência de dados. A JPA define um meio de mapeamento objeto-relacional para objetos Java simples e comuns, denominados beans de entidade.
      2. Hibernate (link)
        1. O Hibernate é um framework para o mapeamento objeto-relacional escrito na linguagem Java.
      3. MyBatis (link)
        1. O projeto iBATIS é um framework de mapeamento objeto-relacional usado para programas escritos em Java, .NET e Ruby. Ele une objetos com Stored Procedures ou declarações SQL usando um descritor XML. A maior vantagem desse programa é a sua simplicidade em relação ao outros mapeadores.
    3. Design Patterns
      1. Em Engenharia de Software, um padrão de desenho ou padrão de projeto é uma solução geral para um problema que ocorre com frequência dentro de um determinado contexto no projeto de software.
    4. Spring
      1. MVC
      2. SpringBoot
        1. Exemplo – Desenvolvendo uma aplicação Spring Data, REST e H2
    5. JMS
      1. ActiveMQ
      2. RabitMQ
      3. AMQP (link)
      4. Apache Camel (link)
    6. Streaming de Dados
      1. Kafka (link)
        1. Apache Kafka é uma plataforma distribuída de mensagens e streaming. Veja mais aqui.
      2. Kinesis
        1. Kinesis possui as mesmas características do Kafka, porém mais robusta. Veja mais aqui.
    7. Go (Golang)
      1. Go é uma linguagem de programação criada pela Google e lançada em código livre em novembro de 2009. É uma linguagem compilada e focada em produtividade e programação concorrente, baseada em trabalhos feitos no sistema operacional chamado Inferno.
    8. Kotlin
      1. Kotlin é uma Linguagem de programação que compila para a Máquina virtual Java e que também pode ser traduzida para JavaScript e compilada para código nativo. É desenvolvida pela JetBrains, seu nome é baseado na ilha de Kotlin onde se situa a cidade russa de Kronstadt, próximo à São Petersburgo.
  3. Arquitetura
    1. Nefflix OSS (microservices)
    2. Circuit Breaker (microservices)
      1. Hystrix
    3. CDI
    4. RSA – Rational Software Architect
    5. RSM – Remote Support Manager
    6. PWA (Progressive Web App)
      1. Os Progressive Web Apps são um conjunto de técnicas para desenvolver aplicações web, adicionando progressivamente funcionalidades que antes só eram possíveis em apps nativos.
    7. TOGAF (link)
    8. IASA (link)
      1. Cinco pilares
    9. Zachman (link)
    10. BiZZDesign (link)
    11. BIAN – Banking Industry Architecture Network (link)
    12. CBAP (link)
    13. BFF (Backend for Frontend)
    14. ACL (Access Control List)
  4. SOA
    1. JAX-WS
    2. JAX-RS
    3. REST
  5. Cloud
    1. Openshift (link)
      1. OpenShift é um produto de software de computador da Red Hat para implantação e gerenciamento de softwares baseados em container. Ele é uma distribuição suportada do Kubernetes usando Docker e ferramentas DevOps para desenvolvimento acelerado de aplicações.
    2. Spring Cloud (link)
  6. Database
    1. Redis (link)
      1. Redis é um armazenamento de estrutura de dados de chave-valor de código aberto e na memória. ORedis oferece um conjunto de estruturas versáteis de dados na memória que permite a criação de várias aplicações personalizadas.
    2. Cassandra (link)
      1. Apache Cassandra é um projeto de sistema de banco de dados distribuído altamente escalável de segunda geração, que reúne a arquitetura do DynamoDB, da Amazon Web Services e modelo de dados baseado no BigTable, do Google.
    3. MongoDB (link)
      1. MongoDB é uma aplicação de código aberto, de alta performance, sem esquemas, orientado a documentos. Foi escrito na linguagem de programação C++. Além de orientado a documentos, é formado por um conjunto de documentos JSON.
    4. ElasticSearch (link)
      1. Elasticsearch é um servidor de buscas distribuído baseado no Apache Lucene. Foi desenvolvido por Shay Banon e disponibilizado sobre os termos Apache License.
    5. Kibana
      1. O Kibana é um plugin de visualização de dados de fonte aberta para o Elasticsearch. Ele fornece recursos de visualização em cima do conteúdo indexado em um cluster Elasticsearch.
  7. Data Processing
    1. Apache Beam
      1. O Apache Beam é um modelo de programação unificada de código aberto para definir e executar pipelines de processamento de dados, incluindo o processamento de ETL, lote e fluxo.
  8. Big Data
    1. Linguagens
      1. Python
        1. Python é uma linguagem de programação de alto nível, interpretada, de script, imperativa, orientada a objetos, funcional, de tipagem dinâmica e forte. Foi lançada por Guido van Rossum em 1991.
      2. Java
        1.  
      3. R
        1. R é uma linguagem e também um ambiente de desenvolvimento integrado para cálculos estatísticos e gráficos.
      4. Scala
        1. Scala é uma linguagem de programação de propósito geral, diga-se multiparadigma, projetada para expressar padrões de programação comuns de uma forma concisa, elegante e type-safe. Ela incorpora recursos de linguagens orientadas a objetos e funcionais. Também é plenamente interoperável com Java.
        2.  
      5. Julia
        1. Julia é uma linguagem de programação dinâmica de alto nível projetada para atender os requisitos da computação de alto desempenho numérico e científico, sendo também eficaz para a programação de propósito geral.
      6. GNU Octave
      7. Closure
    2. Framework
      1. Hadoop (link)
        1. Hadoop é uma plataforma de software em Java de computação distribuída voltada para clusters e processamento de grandes volumes de dados, com atenção a tolerância a falhas. Foi inspirada no MapReduce e no GoogleFS.
      2. Spark (linkexemplos)
        1. Apache Spark é um framework de código fonte aberto para computação distribuída. Foi desenvolvido no AMPLab da Universidade da Califórnia e posteriormente repassado para a Apache Software Foundation que o mantém desde então. Spark provê uma interface para programação de clusters com paralelismo e tolerância a falhas.
        2. Veja mais aqui.
      3. Flink (link)
        1. O Apache Flink é uma estrutura de processamento de fluxo de código aberto desenvolvida pela Apache Software Foundation. O núcleo do Apache Flink é um mecanismo de fluxo de dados de fluxo contínuo distribuído em Java e Scala.
      4. Storm (link)
        1. O Apache Storm é um framework de computação de processamento de fluxo distribuído escrito predominantemente na linguagem de programação Clojure. Originalmente criado por Nathan Marz e pela equipe do BackType, o projeto foi aberto depois de ter sido adquirido pelo Twitter.
      5. Samza (link)
        1. Apache Samza é um framework open-source assíncrono, quase em tempo real, para o processamento de fluxos desenvolvido pela Apache Software Foundation em Scala e Java.
      6. Databricks (link)
        1. A Databricks é uma empresa fundada pelos criadores do Apache Spark, que tem como objetivo ajudar clientes com processamento de big data baseado em nuvem usando o Spark.
    3. Machine Learning
      1. TensorFlow (link)
        1. TensorFlow é uma biblioteca de código aberto para aprendizado de máquina aplicável a uma ampla variedade de tarefas. É um sistema para criação e treinamento de redes neurais para detectar e decifrar padrões e correlações, análogo à forma como humanos aprendem e raciocinam.
    4. Analytics
      1. Alteryx – É uma plataforma de Self-service Data Analytics que, em um workflow único e intuitivo, fornece os recursos necessários para acessar, preparar, enriquecer, misturar várias fontes de dados e usá-los na preparação para análises avançadas, preditivas e espaciais e na geração de relatórios sofisticados.
  9. Integração
    1. Jenkins (link)
      1. O Jenkins é um servidor de automação de código aberto escrito em Java. O Jenkins ajuda a automatizar a parte não humana do processo de desenvolvimento de software, com integração contínua e facilitando os aspectos técnicos da entrega contínua.
    2. Sonarqube (link)
      1. O SonarQube é uma plataforma de código aberto desenvolvida pela SonarSource para inspeção contínua da qualidade do código para realizar revisões automáticas com análise estática de código para detectar bugs, códigos cheirosos e vulnerabilidades de segurança em mais de 20 idiomas de programação.
    3. Testlink (link)
      1. TestLink é um software web desenvolvido para teste de software que visa facilitar testes e assegurar a qualidade de software. Foi desenvolvido e mantido por várias equipes ao longo de sua existência.
    4. Nexus (link)
    5. Ansible (link)
      1. Ansible é um software de código aberto que automatiza o provisionamento de software, o gerenciamento de configuração e a implantação de aplicativos. O Ansible se conecta via SSH, PowerShell remoto ou por meio de outras APIs remotas.
  10. Test
    1. JUnit
      1. O JUnit é um framework open-source, que se assemelha ao raio de testes software java, criado por Erich Gamma e Kent Beck, com suporte à criação de testes automatizados na linguagem de programação Java. Esse framework facilita a criação de código para a automação de testes com apresentação dos resultados.
    2. Cucumber (link)
      1. Cucumber é uma ferramenta de software usada por programadores de computador para testar outros softwares. Ele executa testes de aceitação automatizados escritos em um estilo de desenvolvimento orientado por comportamento. Central para a abordagem do BDD de pepino é seu parser de linguagem simples chamado Gherkin.
      2. Publicações: Cucumber Linguagem Gherkin / Exemplo prático de Calculadora
    3. Mockito
      1. Mockito é uma estrutura de teste de código aberto para Java lançada sob a licença MIT. A estrutura permite a criação de objetos duplos de teste em testes unitários automatizados para fins de desenvolvimento orientado a testes ou desenvolvimento orientado a comportamento.
    4. TestLink
      1. TestLink é um software web desenvolvido para teste de software que visa facilitar testes e assegurar a qualidade de software. Foi desenvolvido e mantido por várias equipes ao longo de sua existência.
    5. Appium
      1. Appium é uma ferramenta open source e multi-plataforma para automação de aplicações nativas e híbridas, para web e mobile, disponível para os principais sistemas operacionais do mercado, Android e iOS (e agora para FirefoxOS).
    6. REST-assured (link)
    7. TestCafé (link)
    8. Puppeteer (link)
    9. MockMvc (link)
    10. Katalon (link)
  11. Agile
    1. Scrum
      1. Clique aqui para ver mais.
    2. Kanban
    3. SAFe (link)
      1. O Scaled Agile Framework, é um conjunto de padrões de organização e fluxo de trabalho destinados a orientar as empresas no dimensionamento de práticas enxutas e enxutas.
    4. LeSS (link)
    5. DAD (link)
      1. O fornecimento ágil disciplinado é uma estrutura de decisão de processo que permite decisões de processo simplificadas em torno da entrega de solução incremental e iterativa.
  12. Engenharia de Software
    1. YAGNI (link)
      1. YAGNI é uma abreviação da expressão de língua inglesa You Ain’t Gonna Need It. Em engenharia de software, é uma orientação de trabalho que sugere aos programadores que não adicionem funcionalidades ao código fonte de um programa até que estas sejam realmente necessárias.
    2. SOLID (link)
    3. Lean (link)
      1. 7 Princípios (Eliminar desperdício, Fortalecer time, Entregas rápidas, Otimizar o todo, Construir qualidade, Adiar decisões e Amplificar o conhecimento)
  13. Gestão de Negócios
    1. Modelo de Negócio (link)
    2. Canvas
    3. SWOT
    4. Ishikawa
    5. BABOK
    6. BSC (Balanced ScoreCard)
      1. BSC
  14. Monitoramento
    1. Zabbix (link)
      1. O Zabbix é um software de monitoramento de código aberto para redes, sistemas operacionais e aplicativos, criado na Letônia por Alexei Vladishev. Ele é projetado para monitorar e rastrear o status de vários serviços de rede, servidores e outros hardwares de rede.
    2. Grafana (link)
    3. Kibana (link)
  15. Controle de Versão
    1. CVS
      1. O CVS, ou Concurrent Version System é um sistema de controle de versão que permite que se trabalhe com diversas versões de arquivos organizados em um diretório e localizados local ou remotamente, mantendo-se suas versões antigas e os logs de quem e quando manipulou os arquivos.
    2. SVN
      1. Apache Subversion é um sistema de controle de versão desenhado especificamente para ser um substituto moderno do CVS, que se considera ter algumas limitações. O Subversion utiliza banco de dados Berkeley BD.
    3. Git
      1. Git é um sistema de controle de versões distribuído, usado principalmente no desenvolvimento de software, mas pode ser usado para registrar o histórico de edições de qualquer tipo de arquivo.
  16. Rich Web UI
    1. Semantic UI (link)
    2. Bootstrap (link)
    3. Materialize (link)
  17. DevOps
    1. Kubernetes (link)
      1. Kubernetes é um sistema de orquestração de contêiners open-source que automatiza a implantação, o dimensionamento e a gestão de aplicações em contêiners. Ele foi originalmente projetado pelo Google e agora é mantido pela Cloud Native Computing Foundation.
  18. Demais assuntos
    1. Financeiro
      1. ZBB (Zero-Based Budgeting)
        1. Orçamento base zero é uma abordagem para planejamento e orçamentação que inverte a lógica tradicional do processo de orçamentação.
      2. CAPEX
        1. CAPEX é a sigla da expressão inglesa capital expenditure e que designa o montante de dinheiro despendido na aquisição de bens de capital de uma determinada empresa.
    2. Negócios
      1. Customer Success – Consiste em boas práticas, aplicadas ao gerenciamento de sucesso do Cliente. Tem como foco Onboarding, Expansion, Retention, Voice of Customer, NPS, Customer 360, Customer Journey, Upsells, etc.
      2. C-Level – Posições de liderança, que iniciam com “C” (Chief – CEO, CFO, CIO, CTO, etc)
  19. Segurança
    1. WAF – Web Application Firewall
    2. Injection;
    3. Broken Authentication and Session Management;
    4. Cross-Site Scripting (XSS);
    5. Broken Access Control;
    6. Security Misconfiguration;
    7. Sensitive Data Exposure
    8. Insufficient Attack Protection;
    9. Cross-Site Request Forgery (CSRF);
    10. Using Components with Known Vulnerabilities;
    11. Underprotected APIs.
    12. OAuth 2.0
    13. OpenID Connect
    14. Keycloak
    15. SAML 2.0
    16. ISRM (Information Security Risk Management)
  20. Collaboration and work management
    1. Jira
    2. Asana
    3. ClickUp
    4. Trello
    5. ProofHub
    6. Workzone
    7. Podio
    8. Wrike
    9. MeisterTask
    10. Airtable
  21. Java Compliance Checker
    1. JAPICC (Link Link2) – japi-compliance-checker OLD.jar NEW.jar
    2. pkgdiff (Link) – pkgdiff OLD.jar NEW.jar
    3. Clirr (Link) – java -jar clirr-core-0.6-uber.jar -o OLD.jar -n NEW.jar
    4. zipdiff (Link)
    5. Revapi (Link)
    6. Animal Sniffer (Link)

Links:
System Design Blueprint: The Ultimate Guide
8 System Design Courses to learn Distributed System Architecture (2025)
Diagrams as Code 2.0

Implementação CRUD Java com MongoDB

Introdução

Este artigo demonstra a integração do MongoDB com CRUD em Java.

Pré-requisitos

Instalação do MongoDB – Veja artigo Instalando MongoDB

Projeto GitHub

Você pode baixar o projeto whs-test

O Projeto

Trata-se de um Projeto Maven com dependência com o mongo-java-driver e gson.

O Código

Método create

Conectando ao MongoDB


MongoClient mongoClient = new MongoClient( "localhost" , 27017 );

Acessando um Banco de Dados


MongoDatabase db = mongoClient.getDatabase("test");

Acessando uma Collection

Através desse acesso é possível efetuar as operações no Banco de Dados como consulta, inclusão, alteração e exclusão.

MongoCollection<Document> collection = database.getCollection("test");

Criando o objeto Document


Map<String, Object> map = g.fromJson(jsonContent, new TypeToken<Map<String, Object>>() {}.getType());

Document doc = new Document(map);

Inserindo o registro


collection.insertOne(doc);

Método update

Listando todos os registros

Para este exemplo, buscamos todos os registros e atualizamos o campo “updated”. Pode-se utilizar uma buscas específica de um determinado registo.

MongoCursor<Document> cursor = collection.find().iterator();

Atualizando os objetos Document

while (cursor.hasNext()) {
Document doc = cursor.next();
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
Map<String,Object> mapDoc = (Map)gson.fromJson(doc.toJson(), Map.class);
mapDoc.put("updated", new Date().toString());
Document docUp = new Document(mapDoc);
}

Atualizando os registros no Banco de Dados

No bloco while, invocamos o método updateOne (atualiza o primeiro registro a encontrar o critério).

collection.updateOne(doc, new Document("$set", new Document("updated", new Date())));

Método delete

Para o exemplo abaixo, buscamos o registro a ser excluído através de uma busca pelo campo “tableName” igual a “Customer”.

MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoDatabase db = mongoClient.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("test");
collection.deleteOne(Filters.eq("tableName","Customer"));

Método list

No método list, buscamos todos os registros do banco “test” e escrevemos no console o respectivo JSON.

MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoDatabase db = mongoClient.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("test");
MongoCursor<Document> cursor = collection.find().iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}

Instalando MongoDB no Windows

Introdução

Este artigo demonstra a instalação do banco de dados MongoDB.

Procedimento

  1. Acesse a página de download do MongoDB
  2. Na aba Windows, baixar “Windows Server 2008 R2 64-bit and later, without SSL support x64”
  3. Execute a instação do arquivo .msi
  4. Criar a pasta “c:\data\db”
  5. Adicionar a pasta “bin” da instalação do MongoDB no “Path” (Variáveis de Ambiente)
  6. Para subir o servidor, digitar no prompt de comando “mongod”

Configurando como serviço do Windows

  1. Podemos adicionar o servidor no serviços do Windows
  2. Abra o prompt de comando e digite

mongod –dbpath=C:\data\db –logpath=C:\data\db\log.txt —install

Para verificar, chame o “executar” e digite “services.msc”

  • dbpath – Pasta de destino do banco
  • logpath – Arquivo destino de log