Persistência flexível com BoxSQL

Vou tentar preparar 2 exemplos pra postar…

A mesma estrutura, uma usando o BoxSQL e outra usando JPA.

A todo mundo pode decidir qual se encaixe em seu projeto.

Ps.: Com Vantagem temporária eu me referi às vantagens que o JPA tem sobre o BoxSQL, como geração de queries simples automaticamente, porém que estão sendo implementadas no BoxSQL, por isso chamei de temporárias as vantagens.

Perfeito :smiley:
valeu !

[quote=afsrj]JPA e BoxSQL são diferentes.

Eu uso Ibatis e não tenho problema em ter minhas queries em XML, gosto da maneira do Ibatis.

Você deu dois exemplos gerando exceções.
No ibatis você consegueria fazer o mesmo resultando colocando o retorno da query em um dois objetos.(como foram usado no exemplo)

Tem como fazer isso?

<select id="findEmployees" resultMap="empResult">

      SELECT * FROM emp

      <dynamic prepend="WHERE">

            <isNotEmpty prepend="AND" property="id">

                  empno=#id#

            </isNotEmpty>

            <isNotEmpty prepend="OR" property="name">

                  ename=#name#

            </isNotEmpty>

      </dynamic>

</select>

E isso?

[code]

  SELECT * FROM emp

  <dynamic prepend="WHERE">

        <iterate property="departments" open="(" close=")"

              conjunction="OR">

              deptno=#departments[]#

        </iterate>

  </dynamic>

[/code]

[/quote]

Cara, desculpa a demora em responder ao seu tópico… na verdade eu nãotinah visto sua pergunta.

Agora dessa forma com ofoi feita no iBatis, o BoxSQL não faz, porém é possivel criar a clausula WHERE como uma string no código java, ou mesmo obter somente a clausula WHERE a partir de um template separado, e “concatenar” ao resto do código, como se fosse um parâmetro normal.

Resumindo, dá pra fazer isso de uma forma diferente. :wink:

Faz TUDO o que o JPA faz? Não acha que essa afirmativa foi um pouco exagerada?

Faz TUDO o que o JPA faz? Não acha que essa afirmativa foi um pouco exagerada?
[/quote]

Como falei em um dos posts acima. No momento você tem razão, o BoxSQL não faz tudo o que o JPA faz, mas após conseguirmos diminuir a lista de novas features e issues, ele fará tudo o que o JPA faz. Claro que do ponto de vista de um framework de persistência, sem tocar na parte de EJB3.

Eu me pergunto se a galera só olhou no site ou se tentou usar mesmo, sem preconceito e pensou nas possibilidades.

Experimentem o framework e verão que o BoxSQL é um sério framework em termos de persistência e que com um pouco de ajuda (OpenSource precisa da galera mesmo) o BoxSQL pode se tornar melhor e se livrar de alguns issues.

:wink:

Acho legal sua iniciativa, não estou querendo de forma alguma desmerecer ou desvalorizar seu projeto.

A questão que eu coloco no aspecto “fazer tudo” é que o hibernate, que acabou definindo os rumos da especificação da JPA, é um framework extremamente maduro, com um respaldo de milhares de programadores espalhados pelo munto e com anos de estrada.

A correta utilização do hibernate exige um conhecimento profundo, existem casos que talvez não ocorram com frequência, mas que são complicantes em grandes projetos e já passei por várias experiências nesse sentido. Mas a flexibilidade do hibernate é enorme, o framework é extensível o suficiente para permitir features em projetos bem específicos e até hoje consegui contornar qualquer restrição do hibernate de forma simples, porque o próprio hibernate me propicia essa facilidade.

Por isso eu digo que o “fazer tudo” é exagerado. Mais cedo ou mais tarde você irá se deparar com questões não tão simples e verá que uma ou outra decisão do projeto não deixou seu framework tão flexível assim.

As vezes um termo usado pode tirar a credibilidade de uma idéia, por isso precisamos ter cuidado.

Um framework ORM que possa prever todas as possibilidades, ser configurável e extensível o suficiente não é uma coisa relativamente simples, e assim como o hibernate pode exigir muitos anos e a participação direta e indireta de milhares de programadores.

Direcione o foco do seu projeto e não tente concorrer, a pricípio, com o hibernate ou com JPA. Quem sabe um dia, se o framework atigir um grau de aceitação e qualidade suficientes isso aconteça por si só.

Olá Alex,

Você pode ter razão, talvez seja um pouco de pretensão dizer que o BoxSQL faz TUDO que o JPA faz, até por tudo isso que você falou. O Hibernate é bem maduro já e seria difícil entrar numa concorrência.

Mas imagine se a galera começa a usar e começa a colocar as características que eles querem no framework. Pela simplicidade do código do BoxSQL, a maioria seria fácil de implementar. Algumas demorariam mais, mas tenho certeza que seria um sucesso.

E tirando algumas excessões cabeluadas, sem comparar a estabilidade do Hibernate já conquistou e a confiança da comunidade, o BoxSQL tem um potencial gigantesco de se tornar um concorrente à altura para o Hibernate.

Ps.: O sistema de annotations para mapear algumas entidades está quase pronto. (Só não está porque o tempo dos desenvolvedores tá meio escasso).

Você é um piadista Feliperod, isso ai nunca vai ser páreo para o Hibernate.

Cara, achei seu comentário de uma inteligência extraordinária. Demonstra de forma bem clara que ou você não leu, ou você não entendeu tudo que foi escrito acima. De qualquer forma peço que deixe os comentários para pessoas capazes.

Olá,

Bem interessante :stuck_out_tongue:

Eu já passei muito stress com Hibernate, e acho q tem configuração d+, para projetos grandes que é exigido uma analise mais complexa, pode ser indispensável, mas se eu quero fazer um projeto pequeno e rápido o BoxSql parece vir de encontro com esta necessidade.

Apenas passei o olho por cima do site e li aqui praticamente todas as mensagens.

E já tenho uma dúvida e uma sugestão :roll:

Dúvida: É preciso usar o boxsql.properties? Por exemplo numa aplicação que eu trabalho com vários banco de dados, eu tenho como fazer isto? Teria que ser dois boxsql.properties ou o BoxSql() suporta setar as configurações pro código como o Hibernate? Ou dizer qual “boxsql.properties” deve ser utilizado? Se puder me dar um exemplo agradecia.

Sugestão: Pelo que eu entendi neste exemplo: NOME=’:NOME’, … o :NOME se refere ao método getNome que a classe vai ter associada a esta query, logo sendo assim já deve dar para saber q o método retorna uma String… logo já poderia se por o ’ ’ automáticamente e também fazer o controle/proteção de sql injection, isso ajudaria muito a proteger mais as queres e também não se preocupar na query em colocar os ’ '.

Parabéns pelo projeto e sucesso, vou tentar usar o BoxSql em novos projetos que de para usa-lo, e depois se surgir mais alguma coisa digo :wink:

Valew

Pra que usar um framework que ninguém usa ? e se você precisa de alguma documentação ou ajuda ?
ninguém sabe de nada…

por favor isso é coisa de desenvolvedor que quer se aparecer… dizer que faz projetos e tal, quer se aparecer ? trabalhe.

Tanto que esse boxsql está sempre uns 10 passos atrás dos principais frameworks ORM de verdade do mercado, quando
vc disse que vai ter annotations mesmo ???

Isso ai só serve pra fazer gambiarra de fundo de quintal, ou vc acha que alguém vai usar EJB com boxsql ?

fui.

[quote=Alucard33]Pra que usar um framework que ninguém usa ? e se você precisa de alguma documentação ou ajuda ?
ninguém sabe de nada…

por favor isso é coisa de desenvolvedor que quer se aparecer… dizer que faz projetos e tal, quer se aparecer ? trabalhe.

Tanto que esse boxsql está sempre uns 10 passos atrás dos principais frameworks ORM de verdade do mercado, quando
vc disse que vai ter annotations mesmo ???

Isso ai só serve pra fazer gambiarra de fundo de quintal, ou vc acha que alguém vai usar EJB com boxsql ?

fui.

[/quote]

Eu participo e lidero alguns projetos open source… e digo… tu é o cara mais ignorante que já vi, sem saber pra que existe varios projetos com o mesmo fim, é uma ignorancia sem tamanho…

Se fose assim não precisariamos do Gnome nem do Kde basta um dos dois, e então Fluxbox, quem usa Fluxbox? Os caras do Fluxbox fizeram para se aparecer? Sim talvez, mas me deram uma alternativa que gosto e uso!

É mais um projeto de persistência é! Mas é diferente! Não te agrada, ok… mas agrada a mim e a outros, eu já vi aonde isto pode me ajudar, e tu de tão ignorante que é nem tem capacidade para pensar ou imagina uma utilização.

Como dei o exemplo do Gnome, KDE, Fluxbox, pode se aplicar a varios outros projetos, pra tudo tu tem alternativas boas num aspecto e más em outro. Basta ter imaginação e saber usar aonde é preciso.

E o BoxSQL q tem 50kb, tu precisa tanto assim de ajuda é sinal q tu é um péssimo programador e nem capacidade para olhar código opensource consegue…

Te encherga meu, pra q dar uma de flamer, isto te faz feliz?

Pesso desculpa ter decido o nível, mas não consegui evitar!

Seja para se aparecer ou não, tudo isto contribui para a maior diversificação!

Ninguém pode ter opinião aqui que já vem ignorantes detonar.

Programador bom deve ser a turma que desenvolve o BoxSql.

Essas “facilidades” que dizem que o boxsql tem pode seduzir muita gente, afinal não precisa saber de muita coisa pra usar isso ai.

Mas quem começa com isso ai já começa mal, é melhor usar JDBC puro mesmo que usar algum framework que ninguém sabe e nem testa pra saber se
funciona.

E se der pau, bug quem vai corrigir ? nem versão nova sai meu amigo … me poupe, inventar a roda é fácil agora que já está pronta.

[quote=Alucard33]Ninguém pode ter opinião aqui que já vem ignorantes detonar.

Programador bom deve ser a turma que desenvolve o BoxSql.

Essas “facilidades” que dizem que o boxsql tem pode seduzir muita gente, afinal não precisa saber de muita coisa pra usar isso ai.

Mas quem começa com isso ai já começa mal, é melhor usar JDBC puro mesmo que usar algum framework que ninguém sabe e nem testa pra saber se
funciona.

E se der pau, bug quem vai corrigir ? nem versão nova sai meu amigo … me poupe, inventar a roda é fácil agora que já está pronta.
[/quote]

realmente… tu deve viver em outro mundo…

bugs em projetos opensource!? quando ha se a equipe que desenvolve nao esta ativa eu posso corrigir, e me virar, claro q um projeto pequeno e novo tem mais probabilidade de ficar abandonado, mas, se eu vejo que o projeto ja atende as minhas necessidades, fico satisfeito, no futuro se precisar de mais uso outro projeto, e assim por diante, e uma boa iniciativa, nao vejo problemas mas se tu nao quer usar, e se tu acha q e melhor usar JDBC puro ok boa sorte! :twisted:

pois e, tem gente q prefere arrastar as pedras do q rolar…

(desculpa este pc esta com problemas nos acentos :stuck_out_tongue: )

[quote=eduveks]Olá,

Bem interessante :stuck_out_tongue:

Eu já passei muito stress com Hibernate, e acho q tem configuração d+, para projetos grandes que é exigido uma analise mais complexa, pode ser indispensável, mas se eu quero fazer um projeto pequeno e rápido o BoxSql parece vir de encontro com esta necessidade.[/quote]

Obrigado pelo feedback. Obrigado por se importar em defender o projeto e a liberdade de iniciativa no mundo openSource. Só sugiro não gastar as teclas com flamers, não vale a pena. :wink:

Bom, no construtor do BoxSQL você pode passa o nome do arquivo de properties, podendo assim ter várias configurações num mesmo projeto. Ele não permite setar as configurações pelo código, mas isso é fácil de resolver. Basta criar setters na classe GlobalSettings para poder setar via código e resolver possíveis erros na falta do arquivo de properties. Mas eu recomendo fortemente que use o arquivo.

Ótima sugestão. Na verdade é preciso analisar todos os possíveis casos para isso. Imagine em que o atributo seja int, aí não sei como vai se comportar. O ideal é criar a logica e por nos testes. Você pode criar um issue no projeto, assim nos comprometemos a resolver.

Obrigado mais uma vez. Olha as annotations estão prontas, apenas faltando construir os testes completos. Estou com umas outras idéias pra implementar, mas peguei um projeto grande pra fazer a arquitetura agora e também tô construindo um projeto openSource para controle de projetos. Mas esse ainda é segredo. :smiley:

De qualquer forma, aproveito o post para agradecer a todos aqueles que tem enviado feedback do projeto e que tem colaborado se cadastrando como desenvolvedor no site do java.net. Peço também para aqueles que tiverem dúvida, utilizar o forum no próprio site do projeto.

Tenho percebido que o BoxSQL facilita em muito para os iniciantes que não tem idéia de como configurar o JPA ou Hibernate. Muitos professores de universidades disseram usar o BoxSQL para ensino.

Por enquanto o BoxSQL não passa de um Wrapper para o JDBC baseado no já famoso DBUtils da apache.

Abração a todos…

Olá!
Meu nome é Dennys e trabalho a muito tempo com Hibernate, usando anotações, e digo que ele me atende muito bem. Porém o uso de Query Nativas (Named Querys) não me agrada muito já que, NA MINHA OPINIÃO, acaba poluindo muito o código JAVA e infelizmente o Hibernate ou qualquer outro ORM não favorece o desacoplamento destes planos de consultas.
Porém o boxSQL possui um potencial INCRÍVEL, e sei que ainda há muito para amadurecer, principalmente em JOINS por classes, mas sabendo que há a possibilidade atual de faze-lo de forma relativamente simples.
Porém gostaria de saber qual será o critério adotado (futuramente) para o Pool de conexões ?
O boxSQL irá definitivamente assumir a responsabilidade de tratar os tipos de Atributos da classe Persistida, ou seja, iremos deixar de sermos obrigados a colocar as ASPAS nos templates, justamente para o tipo String ou até mesmo char ?

Grato,

Dennys

Olá Dennys,

A prioridade do time é tornar operações básicas de select e insert automáticas. Depois é tratar os tipos. A idéia é que não seja mais necessário colocar aspas no template. Porém há alguns detalhes que precisamos resolver nos templates ainda, como por exemplo, a forma de definir que um trecho é parâmetro. Outro ponto importante é tornar a persistência recursiva automática, que representa o uso dos joins.

O mais importante é conseguir implementar tudo isso sem precisar de mais configurações. O BoxSQL tem o objetivo de ser leve e de fácil uso, então estamos pensando em como conseguir todas essas funcionalidades sem trazer complexidade ao uso.

Sugestões e idéias são sempre bem-vindas, como no caso da sua Dennys.

Abração,

Olá, amigo!
Fico feliz que tenha respondido com tanta rapidez.
Estive percorrendo o site boxsql.dev.java.net e até mesmo o forum de discução, porém as informações (dicas, exemplos e assuntos em geral) estão muito segregadas em varias mensagens, ora aqui no GUJ ora seja no forum oficial. Isto dificulta em muito a aceitação do projeto “boxSQL” pela maioria das pessoas. É claro que esta faltando pessoas para ajudar o projeto em varias partes, mesmo em documentação, porém acredito que se for feita uma CHAMADA para que haja colaboração estruturada, muitos estarão dispostos.
Atualmente esta havendo bastante divulgação do projeto, seja por indicação de uso entre os desenvolvedores, por processo de pesquisa “google, yahoo, etc…” ou até pela DevMidia (através de video aulas), no entanto seria importante centralizar tais informações, favorecendo o perfeito aprendizado e a colaboração com dicas, sugestões e implementação de código “mão-de-obra” para o projeto boxSQL.
Eu mesmo em particular já baixei pelo CVS e o estou estudando, para que de alguma forma possa contribuir, pois tenho a intensão de utiliza-lo em novos projetos, deixando assim de utilizar o Hibernate.
Pergunta:
1º) Há em algum local a centralização de códigos de exemplo, dicas ou qualquer assunto relacionado ao boxSQL ?
2º) Há a possibilidade de implementar um código mais complexo, contendo relacionamentos entre entidades, e não somente o que esta na página princial do site boxsql.dev.java.net ?
3º) E o Pool de Conexão (c3pO, SmartPool, Bitmechanic, etc…), já esta sendo planejado ou já existe a implementação na versão boxSQL-1.6.jar ?
4º) De que forma posso colaborar ?

Muito obrigado,

Dennys

Respondedo as perguntas:

No CVS tem o diretório de test. Queremos utilizar esse diretório para todos os test cases, o que já é uma forma de documentar e exemplificar. Além disso queremos deixar os testes como arquivos anexados do projeto e talvez até colocar links para esses arquivos no site da fratech, pois assim dica mais fácil de encontrar. Realmente, falta gente pra ajudar na documentação do projeto.

O problema é que não há tratamento automático no BoxSQL para relacionamentos. Isso deve acontecer com a recursividade da qual falei no meu post anterior. Para fazer isso, devemos tratar no método que faz uso do BoxSQL, realizando iso explicitamente. Precisamos pensar como realmente fazer isso. Acho que uma convenção de parâmetros seria ótimo para esse caso. O detalhe é que teremos que extender algumas funcionalidades do DBUtils para isso, e por isso deve ser bem pensado por causa da estabilidade garantida pelo DBUtils da apache.

Não está implementado ainda. Provavelmente utilizaremos o Apache DBCP para implementação do tratamento de pool de conexões. Se você tiver alguma sugestão nesse quesito seria ótimo.

Acho que está faltando comunicação entre as pessoas que se interessam pelo projeto. Utilizar o fórum para perguntas sugestões e comentários seria um bom começo. A documentação também é importante. Ajudar a organizar o site é importante também. Trabalhar no código é sempre bem vindo, porém acho que precisamos realizar tudo através de issues registrados no issue tracker do java.net.

Não tenho acesso ao email das pessoas que se inscreveram como desenvolvedores no projeto pelo java.net e, isso dificulta a comunicação. Já coloquei algumas chamadas no fórum do projeto, mas ninguém respondeu.

Portanto se alguém pretende ajudar, o ponto de contato deve ser sempre o fórum do projeto e, como segunda opção meu email e o do manoel pimentel, pois estamos sempre envolvidos com o projeto. Meu email é felipero@gmail.com

abração,

Descupem ressucitar o tópico, mas não consegui postar no forum do projeto.
Ainda não sou usuário, mas gostaria de dizer que tenho um grande interesse em ver o projeto crescer, pois tive inumeros casos onde precisei de algo assim para substituir coisas muito piores que usar querys separadas em arquivos.

Só gostaria de pedir aos desenvolvedores que ao contrário do que muita gente disse aqui e com muitissimo fundamento, há exceções que parecem ser ignoradas por algum motivo (tipo discução de religião ou futebol), que é o fato de existir muitas situações em que o JPA (hibernate ou toplink) não funcionam e ponto final.

Gostaria de pedir que o projeto focasse justamente o contrário do JPA. Sim adoraria que o projeto fosse para outro rumo.
Não estou loco, se é para usar algo como JPA que use o JPA pô, afinal é uma especificação. Agora se não da para usar JPA eu queria uma alternativa facil de usar, configurar e que me de o que a maioria dos projetos que não pode usar JPA me desse.
A possibilidade de deixar os Analistas Funcionais olharem e alterarem as querys, sem precisar do java e sem medo de ser feliz.
Um arquivo sql externo facilita MUITO esse tipo de trabalho. Para esse tipo de projeto seria perfeito. Só não gostei de ter um para cada query (ou entendi errado?).
Outra coisa que combina com esse perfil de projeto (essas situações de querys montadas na unha) é a performance. Seria bom focar esse ponto tambem. Inclusive na leitura dos arquivos SQL.

Gostaria de saber tambem se ele permite chamada de procedures e functions. Isso seria excencial. O Ibatis me permite tudo isso, mas dar manutenção nos XMLs é horrivel. Eu odeio XML, apesar de admitir ser necessário para muitos casos. Mas prefiro usar somente quando realmente necessário. A ultima equipe que trabalhei tambem demonstrou dificudades com o mapeamento do Ibatis e demorou um tempinho até fluir sem erros bestas, mas que consomem tempo a toa.

Muita gente ignora o fato de que a maioria da mão de obra do mercado não é especializada, e muitos não tem conhecimento suficiente para usar um framework complexo como hibernate (facilidade? Ta brincando né? Ja viu como é trabalhar com chave composta em JPA?). E muitas empresas ja tem um perfil definido de trabalho, com profissionais que sabem muito do negócio e de SQL, mas não tem conhecimento nenhum em em java. Antes do código, o mais importante em um produto é o que ele faz.
Ja trabalhei em projeto que o Hibernate foi proibido pelos gerentes por simplismente não encontrar mão de obra disponivel tornando uma dor de cabeça a manutenção do mesmo.

Não trabalhei com hibernate o suficiênte para afirmar nada, mas não consigo ver ele sendo usado em um RP grande. Com tabelas enormes, equipe grande (de desenvolvedores e funcionais) em um mercado comcorrido e com prazos absurdos como no Brasil.
Espero um dia poder fazer parte de um projeto e equipe assim. (Seria um sonho).

Quando o mysql surgiu, muita gente criticou o fato dele não ter coisas básicas que outros banco de dados tinham e eram considearas excenciais por muias pessoas, o fato dessas coisas excenciais deixarem o BD lento tambem éra ignorado, e algum tempo depois a empresa que criou ele foi adquirida pela Sun por $1 bilhão. Claro depois dele ser reconhecido merecidamente como um (ou o mais ) rápido banco de dados do mercado.
Espero que o BoxSql consiga achar o seu espaço.

E por fim gostaria de agradecer a iniciativa e me descupar pelo texto grande.