Leitura de Arquivo em EJB

3 respostas
F

Pessoal,
Eu preciso que um EJB (no caso um MDB) consiga ler um arquivo XSD para validar um XML.
Li em vários lugares que operações de I/O não devem ser feitas pelo EJB. Mas acredito que leitura de arquivos não seja problema, desde que o caminho não seja absoluto (para não ter problemas com cluster).
Eu tinha caminhos absolutos e agora desejo corrigir esta situação.
Alguém tem alguma sugestão?
Tentei usar URLs, obtidas através da aplicação Web, as quais guardei em variáveis estáticas. Porém os EJBs não reconhecem o caminho da URL (“jndi:/localhost/Aplicacao/…/arquivo.xsd”).

Obrigada pela ajuda,
Fernanda

3 Respostas

Emerson_Macedo

Fernanda,

No Caso o uso de I/O deixa o seu EJB sem a garantia de ser portável entre os servidores de aplicação pois a especificação diz para não utilizar, ou seja, o container deveria barrar. Porém alguns podem ser que permitam.

Acredito que para seu problema uma alternativa seria o uso de JAXB que transforma o XML em objeto. Com ele você conseguirá além de validar seu xml, transforma-lo em objeto e trabalhar de maneira mais simples. O JAXB vai utilizar seu XSD para a transformação pois a partir do XSD são geradas as classes de marshaling e unmarshaling.

Da uma olhadinha nesse link: http://www.onjava.com/pub/a/onjava/2004/12/15/jaxb.html

Abraço e espero ter ajudado.

T

De fato, o problema do XSD é que as APIs que conheço exigem que você use o nome de um arquivo de verdade - elas deveriam poder usar “resources” ou URLs, mas elas normalmente só aceitam nomes de arquivos (absolutos ou relativos; o problema dos relativos é que normalmente são relativos ao diretório em que o seu application server for iniciado, ou seja, sei lá qual.), ou então URLs na Internet (como http://blablabla), que normalmente demoram muito para serem acessadas pelo seu programa.

O melhor que você pode fazer é pôr o nome absoluto de um arquivo em um diretório conhecido (por exemplo, um diretório compartilhado via NFS).

Emerson_Macedo

No caso do JAXB você vai utilizar o XSD antes para gerar as classes. No momento da validação/transformação não vai precisar fazer I/O o que não vai ferir a regra da especificação EJB

Criado 20 de dezembro de 2006
Ultima resposta 22 de dez. de 2006
Respostas 3
Participantes 3