| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2010 12:28:22
|
barenko
JavaBaby
![[Avatar]](/images/avatar/4c32ad344b09ff872f942b6d2196e720.jpg)
Membro desde: 07/04/2008 21:09:30
Mensagens: 81
Offline
|
Olá pessoal, cá estou com outra dúvida complicada...
é o seguinte:
Fiz um framework baseado em anotações, a idéia é o programador apenas utilizar o jar do framework, anotar as classes dele com minhas anotações e tudo funcionar como mágica.
Rodando pelo eclipse, funcionava muito bem nos casos de teste. Mas quando eu criava o pacote jar, ocorria erros diversos de null pointer.
Estudando mais o processo, eu vi que a implementação estava funcionando porque obtinha os .class da estrutura de diretórios da pasta bin, mas quando empacoto, a estrutura fica interna no jar. Blz, é só eu ler o conteúdo do jar e tudo volta a funcionar.
Só que tem um problema a mais: as classes anotadas da aplicação não ficarão no meu jar, ou seja: não conseguirei encontrá-las sem mapear as classes em algum arquivo de configuração(o q eu acho bem ruim).
Não conheço classloader, mas pelo q eu vi, ele só armazena as classes carregadas naquele momento, então não há garantias que todas as classes da aplicação estejam listadas.
Há alguma forma de obter todas as classes da aplicação? (tudo o q o sandbox daquela aplicação puder ver, eu tb gostaria de ver).
Alguém tem alguma idéia sobre isso?
This message was edited 2 times. Last update was at 20/01/2010 11:27:34
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2010 12:42:14
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
barenko wrote:O
Há alguma forma de obter todas as classes da aplicação? (tudo o q o sandbox daquela aplicação puder ver, eu tb gostaria de ver).
Não existe uma forma direta, mas existe forma sim.
A forma mais simples, usada por todos os frameworks que usam esse tipo de feature é deixar o programador definir o(s) pacote(s) onde estão as classes que devem ser analizadas. Dê uma olhada no método getPackageClasses doMiddleHeaven
Em tese vc pode iterar nos pacotes e sub pacotes mas isso é complexo a menos que vc tenha um sistema de arquivos virtuais incluso na sua API
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2010 14:03:41
|
plic_ploc
JavaChild
Membro desde: 11/06/2006 18:55:12
Mensagens: 137
Localização: Ibitinga - SP
Offline
|
Segue um exemplo de como você pode fazer:
Como usar:
Para obter as classes use:
This message was edited 1 time. Last update was at 19/01/2010 14:14:57
|
Java MVC - Brutos framework
Faça o download de um WebChat feito usando o Brutos MVC |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2010 15:11:35
|
barenko
JavaBaby
![[Avatar]](/images/avatar/4c32ad344b09ff872f942b6d2196e720.jpg)
Membro desde: 07/04/2008 21:09:30
Mensagens: 81
Offline
|
plic_ploc, bacana o exemplo, é parecido com o meu... só q tb cai na mesma limitação . Se vc empacotar ele num jar, ele já não acha as referencias das classes... Ele funciona bem em aplicações web já q as classes ficam "explodidas", mas falha em aplicações desktop.
sergiotaborda, tb olhei esse exemplo q vc me passou e fiz um projeto de teste. Notei que ele não acha nada que ainda não tenha sido utilizado. Você pode me dar algum exemplo de um framework que faça isso (que não seja voltado a web)? Como os pacotes são mapeados?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2010 15:16:32
|
plic_ploc
JavaChild
Membro desde: 11/06/2006 18:55:12
Mensagens: 137
Localização: Ibitinga - SP
Offline
|
para isso você deve usar o método:
esse método acessa o arquivo META-INF/MANIFEST.MF de todos os jars.
exemplo de um arquivo MANIFEST.MF:
This message was edited 1 time. Last update was at 19/01/2010 15:26:44
|
Java MVC - Brutos framework
Faça o download de um WebChat feito usando o Brutos MVC |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2010 16:26:13
|
barenko
JavaBaby
![[Avatar]](/images/avatar/4c32ad344b09ff872f942b6d2196e720.jpg)
Membro desde: 07/04/2008 21:09:30
Mensagens: 81
Offline
|
Usei o método e estava dando erro de acesso negado
Ai, adicionei um if no metodo manifest e funcionou:
Manifest 1 testado:
Manifest 2 testado:
Brilhante! Agora preciso ver uma forma dinâmica de pegar o nome da package da classe. Sabe como fazer isso?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2010 16:42:32
|
barenko
JavaBaby
![[Avatar]](/images/avatar/4c32ad344b09ff872f942b6d2196e720.jpg)
Membro desde: 07/04/2008 21:09:30
Mensagens: 81
Offline
|
Melhor ainda:
Tendo como premissa que a classe que faz a carga das classes anotadas NUNCA estará no mesmo pacote das classes que ela mapeará, o if se transforma nisso:
Assim não preciso perder tempo p/ descobrir o nome da package
Vlw plic_ploc e sergiotaborda pela ajuda! Vou fazer mais uns testes. Qq coisa eu posto aqui!
This message was edited 1 time. Last update was at 19/01/2010 16:43:29
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2010 16:48:01
|
plic_ploc
JavaChild
Membro desde: 11/06/2006 18:55:12
Mensagens: 137
Localização: Ibitinga - SP
Offline
|
Essa classe não prevê todos os casos.
No meu entendimento "." equivale ao diretório atual, ou seja, quando ele encontrar "." ele deve verificar o diretório atual.
Troque o código entre as linhas 103 e 106 do código original pelo que se segue:
Não testei o código.
|
Java MVC - Brutos framework
Faça o download de um WebChat feito usando o Brutos MVC |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2010 17:29:29
|
barenko
JavaBaby
![[Avatar]](/images/avatar/4c32ad344b09ff872f942b6d2196e720.jpg)
Membro desde: 07/04/2008 21:09:30
Mensagens: 81
Offline
|
Pronto, trecho substituído. Só faltou indicar o "file:/" na URL, como abaixo.
Código testado e funcionando! Obrigado!
|
|
|
 |
|
|