Serviço Web passnado dados binários, parte 2: Criando o módulo EJB
O objetivo deste tutorial é criar um módulo EJB que exponha dois métodos, o primeiro para fornecer uma única imagem, o segundo para fornecer todas as imagens. Normalmente, as imagens viriam de um banco de dados. Já que a recuperação do banco de dados não é o foco deste tutorial, simplesmente colocamos a imagem em uma pasta resource dentro do nosso módulo EJB.
No procedimento seguinte, você cria um Enterprise Java Bean (EJB) que contém as imagens que serão passadas pelo serviço Web como dados binários.
Para criar o módulo EJB:
Escolha Arquivo > Novo projeto (Ctrl-Shift-N). É exibido o assistente para Novo projeto. Selecione Módulo EJB na categoria Empresa e clique em Próximo. A página Nome e localização se abre.
Digite FlowerAlbum no campo Nome do projeto. Selecione a localização desejada para esse projeto — use a mesma localização dos outros projetos criados para esse aplicativo ponto a ponto. Mantenha as configurações padrão das outras opções e clique em Próximo. A página Servidor e configuração se abre.
Selecione o servidor da aplicação e a versão do Java EE. Isso deve ser igual para todos os projetos no aplicativo ponta a ponta. O IDE cria um projeto do módulo EJB que se parece com este na janela Projetos:
Clique com o botão direito do mouse no nó do projeto FlowerAlbum e escolha Novo > Bean de sessão. Como alternativa, clique com o botão direito do mouse no nó do projeto e escolha Novo > Outro. No assistente para Novo arquivo, escolha Bean de sessão em Empresa. O novo assistente para Bean de sessão aparece.
Chame o bean de sessão de Flower, junto com flower.album como o nome do pacote. Garanta a seleção de Sem estado e Remota. Agora você deve ver o seguinte:
Clique em Terminar.
O IDE adiciona um bean de sessão ao nó Pacotes de códigos-fonte, junto com uma interface remota, como mostrado aqui. No nó Enterprise Beans, é adicionado um novo nó para seu novo FlowerBean:
Clique com o botão direito do mouse no nó FlowerBean e escolha Adicionar > Método comercial. A caixa de diálogo Método comercial se abre.
Digite os valores seguintes na caixa de diálogo Método comercial:
Nome:getFlower
Tipo de retorno:byte[]
Clique em Adicionar. Em Nome, digite nome. Deixe os outros valores inalterados. Agora você deve ver o seguinte:
Clique na aba Exceções. Clique em Adicionar. A caixa de diálogo Localizar tipo se abre. Digite ES e selecione IOException (java.io).
Clique em OK. Retorne à caixa de diálogo Método comercial, que mostra IOException.
Clique em OK. Agora você tem a base de um método em sua classe bean, e uma declaração de método na classe interface remota.
Chame a caixa de diálogo Método comercial novamente. Dessa vez, indique os seguintes valores:
Nome:allFlowers
Tipo de retorno:List<byte[]>
Como antes, adicione IOException à aba Exceções. Clique nas caixas de diálogo e o IDE cria o método.
Na classe interface remota, observe que os métodos foram gerados com êxito pelas etapas anteriores:
Examine a classe bean e observe que os stubs foram criados para os métodos declarados:
@Stateless
public class FlowerBean implements FlowerRemote {
public byte[] getFlower(String name) throws IOException {
return null;
}
public List<byte[]> allFlowers() throws IOException {
return null;
}
}
Como alternativa, em vez de usar a caixa de diálogo Método comercial, você pode adicionar o código manualmente à classe bean e à classe interface remota. Entretanto, se você usar a caixa de diálogo Método comercial, o IDE adicionará o código à classe bean e à classe interface remota, simultaneamente.
Corrija as importações nas classes bean e interface remota. Em cada classe, coloque o cursor em qualquer lugar no código, clique com o botão direito do mouse para abrir o menu de contexto e selecione Corrigir importações. É aberta uma caixa de diálogo mostrando todas as importações necessárias. Pressione OK e o NetBeans gera as instruções de importação. Como alternativa, pressione Ctrl-Shift-I em cada classe para abrir a caixa de diálogo Importação.
Agora você declarou seus métodos na interface remota e implementou stubs na classe bean.
A janela Projetos agora deve mostrar dois novos nós no nó Enterprise Beans, dos seus novos métodos, como mostrado aqui:
Preencha a classe bean com o código seguinte, para expor uma única imagem e para expor todas as imagens:
@Stateless
public class FlowerBean implements FlowerRemote {
private static final String[] FLOWERS = {"aster", "honeysuckle", "rose", "sunflower"};
public byte[] getFlower(String name) throws IOException {
URL resource = this.getClass().getResource("/flower/album/resources/"+name+".jpg");
return getBytes(resource);
}
public List<byte[]> allFlowers() throws IOException {
List<byte[]> flowers = new ArrayList<byte[]>();
for (String flower:FLOWERS) {
URL resource = this.getClass().getResource("/flower/album/resources/"+flower+".jpg");
flowers.add(getBytes(resource));
}
return flowers;
}
private byte[] getBytes(URL resource) throws IOException {
InputStream in = resource.openStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
for(int read; (read = in.read(buf)) != -1;) {
bos.write(buf, 0, read);
}
return bos.toByteArray();
}
}
Crie um novo subpacote chamado resources. Copie as imagens seguintes para esse pacote:
Na visualização Projetos, as imagens devem aparecer como mostradas aqui:
Em seu código, observe que os métodos getFlower e allFlowers usam as imagens deste pacote.
Seu módulo EJB agora está completo! Na próxima seção, você cria um serviço Web que delega para o módulo EJB, a fim de recuperar as imagens nos pontos apropriados no código.
Para enviar comentários e sugestões, obter suporte e se manter informado sobre os mais recentes desenvolvimentos dos recursos de desenvolvimento de Java EE do NetBeans IDE, inscreva-se na lista de endereçamento de .