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
Etapa 1. Faça o download do plug-in do IBM Bluemix para Eclipse
- Clique em Ajuda > Eclipse Marketplace.
- Procure pela palavra “Bluemix”.
- Selecione a tecnologia IBM Eclipse Tools for Bluemix.

- Instale o plug-in.
- Na caixa de diálogo Server , clique em New > Server > A família IBM > O IBM Bluemix.
- Insira o ID do e-mail e a senha da sua conta do Bluemix.
- Valide sua conta.
- Copie o Git URL do lado direito da página do projeto.
- No Eclipse, selecione Arquivo > Import.
- Na janela Import, selecione Git > Projects from Gite clique em Next.
- Selecione a tecnologia Clone URI e clique em Next.
- Cole a Git URL copiada no campo URI . Insira seu ID Jazz e senha do ID IBM na seção Authentication. Clique em Next.
- Selecione as ramificações em que deseja trabalhar e clique em Next.
- Atualize o Local Destination do repositório clonado se necessário e clique em Next.
- Clique em Next e então Concluir.
Implemente seu aplicativo no Bluemix
- Clique com o botão direito no servidor do Bluemix e clique em Connect;
- Clique com o botão direito no servidor do Bluemix e selecione Add and Remove;
- Selecione seu projeto BlueTraining na janela à esquerda e clique em Add;
- Clique em Finish;
- Insira um nome para seu aplicativo e selecione Next;
- A URL implementada é criada com base no nome do aplicativo. É possível alterá-lo ou manter o padrão e clicar em Next;
- 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;
- Por fim, clique em Concluir. Agora seu aplicativo está publicado no Bluemix;
- Abra um navegador e insira a URL (https://ace.ng.bluemix.net) para efetuar login no Bluemix;
- 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;
- 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;

- 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.warObservação: “MyTrainingApp” é o nome do aplicativo.
- Reinicie seu aplicativo no Bluemix;
- Acesse o aplicativo por http://<appname>/login.html. Você verá uma tela semelhante à mostrada abaixo:

- 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:
Implemente seu aplicativo em qualquer servidor de aplicativos
- 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;
- Instale o arquivo war em qualquer servidor de aplicativos e lembre-se de fornecer a raiz de contexto do seu aplicativo como Treinamento
; - Inicie o aplicativo Training;
- Acesse o aplicativo por http://hostname:port/training/login.html.
- Exporte o conteúdo da tabela como um arquivo CSV do seu aplicativo J2EE tradicional;
- Efetue login no Bluemix em http://ace.ng.bluemix.net;
- Clique no seu aplicativo de treinamento: sqldb service;
- Na seção Get Started, clique em Launch. Isso inicia o console para começar a trabalhar com o SQL Database;
- O console “Welcome to the Managed Database” é exibido;
- Clique em Load Data;
- Navegue e selecione o arquivo CSV do sistema de arquivos local, como mostrado abaixo;

- Clique na guia Load File;
- É mostrada uma visualização da tabela. Clique em Next;
- 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;
- 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;

- 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.
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.
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.
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.
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ãoEsse 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.
Artigo escrito com a colaboração de Bharathi Venkatasubramanian, Engenheira de software senior da IBM.













