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: 184
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
The Fratech way
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: 184
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
The Fratech way
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: 184
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
The Fratech way
softwork
JavaBaby
[Avatar]

Membro desde: 15/04/2006 23:22:33
Mensagens: 90
Localização: São Paulo - SP - Brasil
Offline

Amigo feliperod.

Estou para iniciar um novo projeto e gostaria de utilizar o BoxSQL, porém gostaria de saber se você já tem uma previsão do lançamento do BoxSQL 2.0 (ou o novo nome) ainda este ano de 2010 ?

Abraços e parabéns pelo projeto.

Dennys S. Sobrinho

Analista e Desenvolvedor Sênior
Chefe adjunto do Centro de Informática - FAESP-SENAR/SP
http://www.faespsenar.com.br
(11) 3258-7233 Ramal 174

Plante, cultive e colha a Paz.
[WWW] [MSN]
feliperod
JavaTeenager
[Avatar]

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

Cara... estou trabalhando nele, mas numa velocidade menor do que eu gostaria. Se alguém estiver a fim de me ajudar, numa atividade open source, eu ficaria muito feliz e o projeto!


Felipe Rodrigues de Almeida
No Twitter: @felipero
www.fratech.net
The Fratech way
softwork
JavaBaby
[Avatar]

Membro desde: 15/04/2006 23:22:33
Mensagens: 90
Localização: São Paulo - SP - Brasil
Offline

Acredito que eu possa ajudar...

Quais as necessidades do Projeto ?


Dennys S. Sobrinho

Analista e Desenvolvedor Sênior
Chefe adjunto do Centro de Informática - FAESP-SENAR/SP
http://www.faespsenar.com.br
(11) 3258-7233 Ramal 174

Plante, cultive e colha a Paz.
[WWW] [MSN]
rubensmm
Smalltalk

Membro desde: 26/05/2011 09:42:28
Mensagens: 1
Offline

Olá amigos todo bem?

Vê se vocês podem me ajudar.

Estou com a seguinte dúvida sobre o BoxSQL, que em sua atual versão "2.21" não aceita alguns dos códigos que na versão 1.5 aceitava.

Minha dúvida é? Como faço para instanciar a Classe BoxSQL na versão atual, sendo que não há um construtor visível nesta classe?

O erro acontece quando tento instanciar a classe. Veja.

BoxSQL box = new BoxSQL(); o seguinte erro é mostrado ( The constructor BoxSQL() is not visible )

e também não à mais o método release, que é responsavel por fechar a conexão.

Bom, tentei da seguinte forma:

public List<Sales> getLast6MonthSales(){
BoxSQL box = BoxSQL.getInstance();
List<Sales> sales = box.getList("list6MonthSales.sql", Sales.class);
BoxSQL.closeConnection();
return sales;
}

Até aí tudo bem más quando executo o teste no JUnit a seguinte mensagem aparece:

BoxSQL - Mensagem de erro: Problemas ao ler ou encontrar arquivo.
BoxSQL - Mensagem de erro: Erro DB: null

O que pode está acontecendo? Os arquivos estão corretos.
Outra pergunta.

Como o arquivo boxsql.properties é iniciado?


Agradeço.
dennys.santos.sobrinho
What is classpath?
[Avatar]

Membro desde: 02/05/2011 20:52:05
Mensagens: 7
Offline

Caro amigo rubensmm.
Eu já tive a oportunidade de utilizar o BoxSQL e gostei muito, pena que seu código não recebe a devida atenção e por este motivo esta praticamente descontinuado.
Procurando na internet alguma solução viável, eu acabei encontrando o QueryDSL-SQL, o qual possui semântica parecida com o BoxSQL, porém mais poderoso e com seu código sendo mantido até a presente data.

Dê uma olhada nos exemplos e surpreenda-se com as facilidades de programação...

This message was edited 3 times. Last update was at 26/05/2011 10:56:37

 
Índice dos Fóruns » Notícias
Ir para:   
Powered by JForum 2.1.8 © JForum Team