Persistência flexível com BoxSQL  XML
Índice dos Fóruns » Notícias
Autor Mensagem
feliperod
JavaTeenager
[Avatar]

Membro desde: 07/11/2006 14:10:54
Mensagens: 180
Offline

Gilberto,

Como eu falei antes, o problema é que os recursos estão em um arquivo compactado (.jar ou .war por exemplo). Esse tipo de arquivo possue um classpath interno apenas. Isso quer dizer que ele só enxerga as classes e pacotes que estão dentro dele, a não ser que seja especificado outros jars para que ele busque.

Esse é o problema. Esse também é o motivo pelo qual o projeto funciona no Eclipse e nõa funciona fora dele.

Uma pequena busca no google sobre essa exception trouxe a solução.

http://www.google.com/search?client=opera&rls=en&q=java.lang.IllegalArgumentException:+URI+is+not+hierarchical+at+java.io.File.%3Cinit%3E(File.java:363)&sourceid=opera&ie=utf-8&oe=utf-8

http://www.velocityreviews.com/forums/t644143-accessing-file-in-jar.html

Você terá que adaptar o seu deploy ou a criação do Jar.

Espero ter ajudado...

Felipe Rodrigues de Almeida
No Twitter: @felipero
www.fratech.net
infoq.com/br - Participe!
gilberto.bsousa
What is classpath?

Membro desde: 14/05/2009 15:49:58
Mensagens: 7
Offline

Oi Felipe,

Muito obrigado. Sem dúvida o caso que vc descobriu é igual ao meu. Porém existe uma pequena diferença que talvez vc tenha alguma dica de como solucionar.

No meu caso, seguindo o seu framework, eu uso o getList para recuperar o template, e este vai buscá-lo de acordo com a linha box.pathBase=br/com/atchik/resources, ou seja, eu não busco por este arquivo .sql diretamente pois pelo que entendi é preciso usar a propriedade box.pathBase.

Como meu procedimento ANT gera um arquivo .jar com o projeto, segundo o artigo em questão, eu deveria acessar os templates usando ClassLoader.getSystemResourceAsStream (DEFAULT_PATH + FILE). A questão é que não sei se é possível fazer isso utilizando o boxsql.

Enfim, a questão é como usar ou substituir o box.getList para que ele pegue o template via ClassLoader.getSystemResourceAsStream.

Novamente agradeço muito a ajuda.

Abs

feliperod
JavaTeenager
[Avatar]

Membro desde: 07/11/2006 14:10:54
Mensagens: 180
Offline

Neste caso, se não der mesmo pra não colocar dentro do Jar, a solução é baixar o fonte do BoxSQL e modificar a classe org.boxsql.IOEngine na linha 23. Assim você pode colocar a alteração necessária. Depois gera um jar do BoxSQL e pronto.

O BoxSQL é um framework de 7 classes em sua versão 1.5.1. Muito simples de customizar. =)

Felipe Rodrigues de Almeida
No Twitter: @felipero
www.fratech.net
infoq.com/br - Participe!
gilberto.bsousa
What is classpath?

Membro desde: 14/05/2009 15:49:58
Mensagens: 7
Offline

OI Felipe

Na verdade os templates estão todos dentro do jar, porém a aplicação não consegue exergá-los.

Não existe um caminho fisico ou logico que colocando no boxsql.properties, a aplicação conseguiria encontrar os templates?

Afinal eles estão dentro do jar, e se a aplicação consegue encontrar os arquivos .properties, não há uma forma de fazê-la encontrar os .sql (pois posso colocá-los em qualquer pasta do projeto)?

Queria realmente evitar mexer nos fontes do boxsql...

feliperod
JavaTeenager
[Avatar]

Membro desde: 07/11/2006 14:10:54
Mensagens: 180
Offline

Gilberto,

Você tem algumas opções aqui:

1) Porque esses arquivos estão dentro de um jar?
Você pode retirá-los do jar como acontece com aplicações web normal. Pelo menos os .sql

2) A linha de código da classe IOEngine.java que lê o arquivo é essa:


onde "file" é o pathBase + nomeDoTemplate passado para o getList()

Você pode mudar essa linha de código, o que seria mais rápido do que responder aqui no fórum.

3) Gerar um Manifest melhor para seu jar
No Manifest você consegue indicar quais outros jars fazem parte do classpath de seu jar. Isso quer dizer que no .war de sua aplicação você precisa ter um Manifest decente, se esse war não for descompactado.

4) Ir até o issue tracker do BoxSQL e cadastrar um issue para que verifiquemos isso.
Pode demorar bastante.

Particularmente, eu acho a 1 opção mais sensata. A segunda opção não é tão ruim assim também.
Esse também é um problema da forma que voc6e escolheu para fazer o deploy de sua aplicação.

Grande Abraço,

This message was edited 1 time. Last update was at 15/05/2009 17:52:55


Felipe Rodrigues de Almeida
No Twitter: @felipero
www.fratech.net
infoq.com/br - Participe!
 
Índice dos Fóruns » Notícias
Ir para:   
Powered by JForum 2.1.8 © JForum Team