DevSecOpsARTIGO

Migre seus aplicativos da web para o Bluemix

Neste artigo, saiba como migrar um aplicativo J2EE para o IBM® Bluemix™.

A maioria dos aplicativos corporativos desenvolvidos na última década foi aplicativo Java™ 2 Platform, Enterprise Edition (J2EE) tradicionais em execução em um servidor de aplicativos. Quase 90% desses aplicativos usam funções de banco de dados e de outros tipos, como o Serviço de Mensagens Java (JMS), e-mail etc. Neste artigo, saiba como migrar um aplicativo J2EE para o IBM® Bluemix™. O processo de migração de cada um dos componentes individuais, que explora os serviços mais recentes oferecidos no Bluemix, é descrito nas etapas a seguir:

“Nosso aplicativo J2EE de amostra é um aplicativo de treinamento simples que fornece funções para um novo usuário se registrar, efetuar login e visualizar o treinamento disponível. O usuário pode assinar um treinamento para que ele seja notificado por e-mail sempre que ele for disponibilizado.”

O aplicativo J2EE de amostra fornecido nesse artigo usa funções de Java Database Connectivity (JDBC), JMS e e-mail tradicionais. Nessa amostra, usamos o DB2® como o banco de dados, o provedor de sistema de mensagens padrão JMS e a API do JavaMail para enviar e-mails. No Bluemix, usamos o SQL Database como o banco de dados, o serviço MQ Light para JMS e o serviço SendGrid para o e-mail. O aplicativo da web é executado no servidor Liberty. Esseartigo demonstra a facilidade com que é possível migrar cada componente J2EE para o Bluemix.

O que será necessário para desenvolver o aplicativo

  • Familiaridade com programação em J2EE
  • Uma conta do Bluemix
  • Eclipse com o plug-in do Bluemix instalado

ibm2

 

ibm3

Etapa 1. Faça o download do plug-in do IBM Bluemix para Eclipse
  1. Clique em Ajuda > Eclipse Marketplace.
  2. Procure pela palavra “Bluemix”.
  3. Selecione a tecnologia IBM Eclipse Tools for Bluemix.
    image001
  4. Instale o plug-in.
  5. Na caixa de diálogo Server , clique em New > Server > A família IBM > O IBM Bluemix.
  6. Insira o ID do e-mail e a senha da sua conta do Bluemix.
  7. Valide sua conta.
Etapa 2. Importe o projeto no Eclipse
  1. Copie o Git URL do lado direito da página do projeto.
  2. No Eclipse, selecione Arquivo > Import.
  3. Na janela Import, selecione Git > Projects from Gite clique em Next.
  4. Selecione a tecnologia Clone URI e clique em Next.
  5. Cole a Git URL copiada no campo URI . Insira seu ID Jazz e senha do ID IBM na seção Authentication. Clique em Next.
  6. Selecione as ramificações em que deseja trabalhar e clique em Next.
  7. Atualize o Local Destination do repositório clonado se necessário e clique em Next.
  8. Clique em Next e então Concluir.
Etapa 3. Implemente o aplicativo No projeto MigrateJ2EE do DevOps Services, você encontrará dois projetos Eclipse: Training (um aplicativo J2EE tradicional que pode ser implementado em qualquer servidor de aplicativos) e BlueTraining (um aplicativo migrado que deve ser implementado no Bluemix). As etapas a seguir envolvem o BlueTraining.

Implemente seu aplicativo no Bluemix

  1. Clique com o botão direito no servidor do Bluemix e clique em Connect;
  2. Clique com o botão direito no servidor do Bluemix e selecione Add and Remove;
  3. Selecione seu projeto BlueTraining na janela à esquerda e clique em Add;
  4. Clique em Finish;
  5. Insira um nome para seu aplicativo e selecione Next;
  6. A URL implementada é criada com base no nome do aplicativo. É possível alterá-lo ou manter o padrão e clicar em Next;
  7. Crie e vincule um serviço SQLDB. Se o SQLDB ainda não tiver sido criado, selecione o ícone na parte superior direita e escolha o SQLDB;
  8. Por fim, clique em Concluir. Agora seu aplicativo está publicado no Bluemix;
  9. Abra um navegador e insira a URL (https://ace.ng.bluemix.net) para efetuar login no Bluemix;
  10. Clique na página CATALOG (guia) e selecione o serviço SendGrid na seção Web and Application. Na janela que abre, selecione o aplicativo como MyTrainingApp e clique emCreate. Agora seu aplicativo MyTrainingApp e o serviço SendGrid estão vinculados;
  11. De maneira semelhante, vincule o serviço MQ Light na seção Web and Application ao MyTrainingApp. Ao concluir, é possível ver que seu aplicativo está vinculado aos seguintes serviços: Liberty for Java Runtime, serviço SendGrid, serviço MQ Light e serviço SQL Database. Reinicie seu aplicativo;
    image002
  12. O arquivo build.xml no projeto BlueTraining pode ser usado para desenvolver o projeto e gerar o arquivo BlueTraining.war. Implemente o arquivo BlueTraining.war usando a ferramenta de linha de comando cloud foundry como mostrado abaixo. Execute os comandos a seguir do prompt de comandos:
     C:/bluemix> cf login -a https://api.ng.bluemix.net
        [Enter your Bluemix credentials here.]
        C:/bluemix> cf push MyTrainingApp -p BlueTraining.war

    Observação: “MyTrainingApp” é o nome do aplicativo.

  13. Reinicie seu aplicativo no Bluemix;
  14. Acesse o aplicativo por http://<appname>/login.html. Você verá uma tela semelhante à mostrada abaixo:
    image003
  15. Se você for um novo usuário, clique no link registrar para incluir seus detalhes de usuário. Após efetuar login com seu ID do e-mail e senha, será exibida uma página inicial mostrando dois links (Veja a figura a seguir). Clique em View all Trainings para obter uma lista dos treinamentos:

image004

Implemente seu aplicativo em qualquer servidor de aplicativos

  1. No Eclipse Luna R, clique com o botão direito no projeto Treinamento. Selecione a opção exportar > Web > WAR File. Isso gera o arquivo Training.war. Salve-o em seu disco local;
  2. Instale o arquivo war em qualquer servidor de aplicativos e lembre-se de fornecer a raiz de contexto do seu aplicativo como Treinamento;
  3. Inicie o aplicativo Training;
  4. Acesse o aplicativo por http://hostname:port/training/login.html.
Etapa 4. Migre o banco de dados como um serviço SQLDB no Bluemix
  1. Exporte o conteúdo da tabela como um arquivo CSV do seu aplicativo J2EE tradicional;
  2. Efetue login no Bluemix em http://ace.ng.bluemix.net;
  3. Clique no seu aplicativo de treinamento: sqldb service;
  4. Na seção Get Started, clique em Launch. Isso inicia o console para começar a trabalhar com o SQL Database;
  5. O console “Welcome to the Managed Database” é exibido;
  6. Clique em Load Data;
  7. Navegue e selecione o arquivo CSV do sistema de arquivos local, como mostrado abaixo;
    image005
  8. Clique na guia Load File;
  9. É mostrada uma visualização da tabela. Clique em Next;
  10. Na caixa de diálogo Choose the target (guia), é possível carregar uma tabela existente ou criar uma nova tabela e carregar. Nessa amostra, escolhemos a opção create a new table e carregamos. Clique em Next;
  11. Na caixa de diálogo Select a table (guia), revise o nome da tabela, edite os nomes das colunas para corresponder à tabela e revise seus tipos de dados e comprimentos;
    image006
  12. Por fim, clique em Concluir.

Observação: Ao configurar as tabelas, é necessário se certificar de que o nome de usuário é usado como o nome do esquema, que é o padrão do Bluemix. É possível encontrar o nome de usuário nas credenciais do SQLDB. Além disso, certifique-se de que a tabela tem um registro com o email admin@in.ibm.com. Isso permite que o aplicativo deixe você incluir novos treinamentos.

De maneira semelhante, repita esse processo para as outras tabelas (treinamentos e assinaturas). Após isso ser concluído, você terminou a configuração do banco de dados. As tabelas para os usuários, treinamentos e assinaturas foram criadas.

A próxima etapa é modificar o TrainingDB, que é a classe do utilitário do banco de dados encontrada no projeto BlueTraining, para usar a API do SQLDB do Bluemix. Modifique o parâmetro de configuração TrainingDB(classe) para criar a URL do JDBC a partir do serviço SQL Database. Consulte o arquivo TrainingDB.java para encontrar o código para recuperar os detalhes de conexão do serviço SQLDB no Bluemix. A imagem a seguir mostra as credenciais do SQLDB que são usadas para criar a URL do JDBC.

image007

O código para obter a fonte de dados usando o SQL Database é o seguinte:

String VCAP_SERVICES = System.getenv("VCAP_SERVICES");
		    	  
		    	  if (VCAP_SERVICES != null) {
		    			BasicDBObject obj = (BasicDBObject) JSON.parse(VCAP_SERVICES);
		    			String thekey = null;
		    			Set<String> keys = obj.keySet();
		    			for (String eachkey : keys)
		    			{
		    				if (eachkey.toUpperCase().contains("SQLDB"))
		    					thekey = eachkey;
		    			}
		    			
		    			 BasicDBList list = (BasicDBList) obj.get(thekey);
		    			 obj = (BasicDBObject) list.get("0");
		    			 obj = (BasicDBObject) obj.get("credentials");
		    			 databaseHost = (String) obj.get("host");
		    			 databaseName = (String) obj.get("db");
		    			 port = Integer.parseInt(obj.get("port").toString());
		    			 user = (String) obj.get("username");
		    			 password = (String) obj.get("password");
		    			 url = (String) obj.get("jdbcurl");
		    	   }
		    	    ds = new DB2SimpleDataSource();
		  	    	ds.setServerName(databaseHost);
			  	    ds.setPortNumber(port);
			  	    ds.setDatabaseName(databaseName);
			  	    ds.setUser(user);
			  	    ds.setPassword (password);
			  	    ds.setDriverType(4);
Etapa 5. Migre o JMS como um serviço MQ Light no Bluemix No aplicativo J2EE tradicional, usamos o provedor de sistema de mensagens padrão para o JMS. Criamos um barramento de integração de serviços (JMSBus), um connection factory da fila (jms/TrainingQCF) e uma fila (jms/TrainingQueue). O aplicativo coloca uma mensagem na fila quando um usuário assina um treinamento (consulte a classe JMSSender.java para encontrar detalhes sobre a colocação e o recebimento de uma mensagem na fila).

Efetue login no aplicativo como um usuário e clique em Subscribe for Training para ser notificado por email sobre o treinamento no qual está interessado. Insira o treinamento e clique em Subscribe.

image008

O encadeamento JMSScheduler.java é executado a cada três minutos e recebe as mensagens da fila. Ele processa a mensagem e insere um registro na tabela de assinatura com o ID do e-mail do assinante e os detalhes do treinamento.

No Bluemix, o MQ Light é o serviço que fornece a função do Serviço de Mensagens Java para tornar o sistema de mensagens assíncrono muito mais fácil. Usando o MQ Light, não há necessidade de criar ou administrar um barramento de mensagem, connection factory, filas ou tópicos no seu servidor de aplicativos. Nós modificamos a classe JMSSender.java, que é o utilitário para receber e colocar mensagens na fila do JMS, para usar a API do MQ Light.

No seu arquivo web.xml J2EE, declare o ConnectionFactory que é necessário para colocar e receber mensagens nas filas por meio do serviço MQ Light.

Clique aqui para ver lista de códigos

No seu código, crie uma fila inicialmente:

Clique aqui para ver lista de códigos

Código para colocar mensagens na fila:

 final Connection connection = myCf.createConnection();           
            final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            final MessageProducer producer = session.createProducer(myRequestQueue);
            connection.start();
            final ObjectMessage message = session.createObjectMessage(ntfyEvent);           
            producer.send(message);           
            producer.close();
            session.close();
            connection.close();

Código para receber mensagens da fila:

 final Connection connection = myCf.createConnection();
            final Session sess = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            connection.start();
            final Queue queue = sess.createQueue("jms/requestQueue");
            final MessageConsumer consumer = sess.createConsumer(queue);

            while ( (omsg  = (ObjectMessage) consumer.receiveNoWait()) != null)
            {
                event = (NotifyEvent) omsg.getObject();
                ntfEvents.add(event);
            }    
            consumer.close();
            sess.close();
            connection.close();

Esse é o mínimo de código que é necessário para fazer seu aplicativo usar o JMS.

Etapa 6. Migre a função de email como um serviço SendGrid no Bluemix No aplicativo J2EE tradicional, usamos a API do JavaMail para enviar um e-mail para os usuários que assinaram o treinamento. Sempre que um administrador inclui um treinamento, o aplicativo verifica a tabela de assinaturas para ver se há um usuário que solicitou o treinamento. Se houver uma assinatura nela, um e-mail é enviado para o usuário.

No IBM Bluemix, tentaremos explorar o novo recurso de e-mail fornecido pelo SendGrid. Os clientes podem integrar um mecanismo de email baseado em nuvem simples utilizando a infraestrutura de entrega comprovada do SendGrid em seus aplicativos móveis e da web. Como o aplicativo vincula o serviço SendGrid, ele pode enviar emails usando a API do SendGrid.

Agora, no aplicativo Training, efetue login como administrador (email:admin@in.ibm.com). Clique em Add new Training e inclua o treinamento Bluemix.

image009

O aplicativo verifica a tabela de assinaturas e descobre que o usuário <your_userid> solicitou o treinamento Bluemix. O aplicativo envia imediatamente um email para o usuário. Veja sua caixa de entrada para verificar se o e-mail foi enviado com sucesso.

image010

Nós modificamos a classe EmailUtil.java (utilitário), que é o utilitário para enviar o email, para usar a API do SendGrid.

O código de amostra para enviar email usando o SendGrid é:

Clique aqui para ver lista de códigos

É isso. Migramos nosso aplicativo da Web J2EE para os novos serviços oferecidos no Bluemix.

Conclusão

Esse artigo forneceu etapas detalhadas sobre como migrar um aplicativo J2EE tradicional para o Bluemix usando os serviços mais recentes oferecidos. O artigo e o código de amostra fornecido descreveram como migrar para o Bluemix um aplicativo que usa funções de email, JMS e banco de dados. Em geral, esse foi um rápido tour interativo do IBM Bluemix, a plataforma de nuvem aberta da IBM para desenvolvimento e implementação de aplicativos móveis e da web.

ibm bluemix***

Artigo escrito com a colaboração de Bharathi Venkatasubramanian, Engenheira de software senior da IBM.

É engenheira de software sênior da IBM.

Ver perfil