| Autor |
Mensagem |
|
|
Olá,
hoje em dia são tantas opções de persistência de dados que deixa a gente perdido. Estou tentando entender quais são os casos de uso para cada uma dessas tecnologias de persistência de dados, seja SQL ou NoSQL. O projeto Spring Data me parece um bom indício de quais mecanismos de persistência são boas opções para aplicações Java. Mas quando usar um ou outro? Em que cenário devemos usar o Redis? Ou o Cassandra, ou o MongoDB, ou o Riak, ou HBase, ou.....
Alguém saberia dizer em quais casos devemos usar um ou outro?
Abcs
felipenasc
|
 |
|
|
É né....
será que eu to ficando viciado nele??? Acho que sim...
Mas realmente ele tem me impressionado a cada dia....
Vale conhecer.
Não é que quem não conhecer estará ferrado, mas quem conhecer terá nas mãos um framework com uma produtividade enorme, e poderoso como qualquer framework java que pode se fazer utilizar de outros projetos java que a gente usa: lucene, http commons, log4j, quartz, e por aí vai.... É desenvolvimento ágil em java. Quem diria... Eu que já usei muito Struts, Tiles e SpringMVC, sei o quanto não é produtivo toda aquela configuração em xml. Fica bom no final, boa arquitetura, etc, mas a produtividade fica comprometida, na minha opinião.
Um abraço
Felipe
|
 |
|
|
Como é esta ferramenta e a linguagem??? E ela se compara a qual linguagem?
A linguagem é Groovy. Você pode ver mais detalhes em http://groovy.codehaus.org/.
Groovy é uma linguagem de script, dinamicamente tipada, como PHP, Ruby, Python, etc. Mas a diferença é que ela é uma linguagem interpretada pela JVM (de java mesmo). Ou seja, no final das contas, sendo java ou groovy, é tudo bytecode interpretado pela JVM. Por isso a integração entre as duas linguagens é tão natural. O mais legal é que se você quiser, você pode usar a tipagem estática em groovy também. ou seja, você pode fazer assim:
O Grails é um framework MVC feito em Groovy, inspirado no Rouby on Rails, porém com algumas diferenças por conta da plataforma java e experiência dos seus desenvolvedores. O framework é uma abstração dos nossos já conhecidos SpringMVC, Spring, Hibernate, Sitemesh, entre outros, subindo bastante o nível de abstração. Isso torna o desenvolvimento web com o Grails muito simples, MUITO SIMPLES. Mas ao mesmo tempo, por ser feito sobre a plataforma java, ele é muito poderoso, tanto quanto qualquer aplicação web java.
No meu blog eu tenho este post que mostra os níveis de abstração subindo ao longo dos últimos anos:
http://felipenasc.blogspot.com/2006/12/hibernate-spring-appfuse-grails.html
Este outro dá uma introdução ao grails:
http://felipenasc.blogspot.com/2006/12/grails-desenvolvimento-gil-de-aplicaes.html
E este outro mostra dá indicações de outros posts que mostram aplicações Grails sendo integradas ao Apache Lucene e ao Compass, para implementar um mecanismo de busca no seu sistema:
http://felipenasc.blogspot.com/2007/01/grails-simplicidade-e-poder.html
Um abraço
Felipe
|
 |
|
|
Olá pessoal,
gostaria de saber se alguém conhece e está tendo experiências com o Grails (http://www.grails.org).
Eu já desenvolvi algumas aplicações usando Struts e SpringMVC, com Hibernate, além de Log4j, Quartz, Lucene, Commons Http, etc. E há pouco tempo estou usando o Grails. Estou tendo uma ótima impressão: Muita produtividade, desenvolvimento realmente ágil, qualidade, uso da frameworks consagrados (Hibernate, Spring, Log4j, etc).
Gostaria de saber opiniões.
Para quem não conhece, comecei a escrever algumas coisas no meu blog:
http://felipenasc.blogspot.com
Abcs
Felipe
|
 |
|
|
Olá,
para quem gosta da plataforma Java e implementa aplicações web, eu recomendo conhecer o Grails (http://www.grails.org ).
Depois do Ruby on Rails apresentar o desenvolvimento por convenção ao mundo de aplicações web, o pessoal com experiência em Java e cansado de tanta configuração xml criou o Grails: um framework MVC em Groovy, no estilo Ruby on Rails, desenvolvido sobre o Spring, SpringMVC, Hibernate, Quartz, Log4j, etc. É desenvolvimento web com Agilidade, simplicidade e poder.
Por ser em Groovy, é naturalmente integrado a Java. É ótimo você poder, a partir de uma classe Groovy, instanciar uma classe Java sua, ou uma classe do Commons Http, ou do Lucene, ou do....., tudo "como se estivesse programando em Java".
Abcs
Felipe
http://felipenasc.blogspot.com
|
 |
|
|
Acho que o lugar ideal para vc perguntar isso é no próprio fórum do hibernate. Sem dúvida lá vc terá respostas mais precisas. Tente lá
discussão sobre problemas com hibernate e firebird
Se vc ainda nem conseguiu conexão, comece do começo, por aqui. Nada como ler a documentação e o passo a passo para iniciar em uma tecnologia.
|
 |
|
|
Alexandre wrote:Futuramente migraremos para o
Hibernate.
Mesmo usando um Hibernate, ou outro, a dúvida permanece. Imagine que seus chefes desejem HOJE Stored Procedures. Amanhã, Hibernate, Depois, JDO, e por aí vai.
Qual design/paradigma seria melhor para facilitar esta troca?
dao.insert(objeto)
ou
objeto.save()
????????????
Ambos apresentam ou podem apresentar esta flexibilidade, já que o DAO em si já padroniza isso, enquanto que o caminho objeto.save() pode ser bem arrumado para padronizar isso, possuindo um Data Mapper no seu caso, ou algum objeto que seja a implementação de uma interface de persistencia, que saberia onde e como persistir: Hibernate, JDO, Data Mapper, ou Stored Procedures.
|
 |
|
|
Olá,
ando olhando alguns padrões, frameworks, livros, etc....
Bem.... tentando encontrar uma arquitetura interessante para a camada de negócios juntamente com a de persistência, temos algumas opções:
- DAO
- Data Mapper, Repository, Query Object - padrões do Fowler
- Ou ainda uma estrutura meio "EJB like", algo como a estrutura de business layer foundation do Broemmer.
Alguém tem opiniões/considerações sobre este assunto?
Quando há uma estrutura em camadas, digamos:
+------------------
| Apresentação
+------------------
| Controle
+------------------
| Negócios
+------------------
| Persistência
+------------------
Teoricamente, uma camada deve falar com a camada vizinha, certo?
Na minha opinião, o DAO, faz com que tenhamos algum objeto de controle fazendo dao.insert(objeto), ou seja, faz com que ele conheça DAO que é da camada de persistência. Logo, mistura um pouco as camadas....não? Será que estou errando em algo aqui?
Se fosse algo como do Broemmer, uma interface de objeto de negócio existe, definindo que os objetos de negócio terão métodos como save(), update() e delete(). E aí sim a implementação destes métodos conhecem a lógica de inserção, etc. Ou seja, a camada de negócios fala com a de persistência. E a de controle com a de negócios. Mas isso faz com que meu objeto de negócio ( persistente ) implemente uma interface. Há mal nisso?
Eu penso em ir por um caminho como o do Broemmer, ainda aplicando alguns padrões do Fowler, como o Data Mapper, Repository, etc...
Gostaria de ouvir opiniões....
|
 |
|
|
Eu tenho feito algumas coisas pra web com Java. Ao mesmo tempo tenho estudado alguns desses frameworks.
Tenho usado o struts, apenas porque comecei nele há algum tempo, antes de existir o WebWork. Muito tem se falado do WW. Acho que vale olhar. Não aconselho vcs montarem uma estrutura Servlets+JSP do zero. Vcs certamente irão encontrar problemas já encontrados e irão dar soluções que provavelmente já foram criadas. E provavelmente melhores. Então porque não reutilizar. Além disso, já que vcs têm pouca experiência em Java + Web, aproveita a experiência de quem criou estes frameworks. Eles não foram criados a toa.
Então, MVC pra web, sugiro Struts ou WebWork. Para persistência, independente de vc usar SP ou não, o hibernate (ou algum outro) vai lhe ser útil. É fácil de aprender, e poupa uma trabalheira grande. Já que vc está em fase de aprendizado, vale a pena olhar com carinho.
Tão importante ou mais que isso tudo, é a arquitetura da sua aplicação. Planeje ela direitinho, já que vc pensa em usar Swing tbem. Nao coloque suas regras de negócio nas Actions do Struts (no WW acho que é diferente, pois as Actions não estão atreladas ao mundo Http www.opensymphony.com).
Mas uma coisa é certa. Esse frameworks ajudam, diminuem o tempo de desenvolvimento e padronizam sua aplicação (pelo menos parte dela). O esforço de aprender certamente será menor do que o esforço de criar tudo do zero. Pior, certamente será menor do que dar manutenção neste sistema depois que ele estiver pronto como "A camada do meio: será toda em servlet". Invista antes, para gastar menos depois.
É a minha opinião. Posso estar errado.
|
 |
|
|
Obrigado Luca.
Suas dicas são ótimas.
Já estou providenciando o material sugerido para leitura. Até a próxima e parabéns!
Abcs
Felipe
|
 |
|
|
Oi Luca.....
se me permitir mais perguntas....
em relação aos seus itens:
1- "Swing acessando servlets por http". Ou seja, swing apenas para dar riqueza ao cliente. Mas então ele apenas faz o papel de um browser "cheio de JavaScript". A cada tela, faz um request e aguarda a resposta para gerar a nova tela. Ele só tem inteligência de apresentação e validação de input de dados. É isso?
Desculpe mas....quem são os observadores e os observados do seu observer? Não entendi esta consistência local.
2- Este servidor local, além de armazenar logs e transações temporárias (entendo por temporárias as que existem no servidor local mas ainda não no central), será necessário armazenar as infos dos produtos tbem. Pois se não, na hora de passar no caixa, caso não se tenha conexão com o servidor central, não há como mostrar as infos do produto. Certo?
3- ok
4- ok
5- ok
6- ok na teoria, na prática....
7- ok
8- é engraçado como a teoria é uma coisa, a prática é outra. Esse Chain of Resp.... não tô visualizando.
9- ok
valeu as outras dicas abaixo do "Importante:"
|
 |
|
|
Oi Luca,
valeu pela resposta. Acho que todos aqui vão apreciar este conjunto de conceitos. Mesmo sendo alguns desconhecidos inclusive para mim, é um excelente começo do que procurar.
Dá pra ver que vc tem experiência no assunto, se um dia eu tiver um caso profissional deste estudo de caso, e neste tempo ainda não conseguir fazer algo desta natureza, ou ainda não me sentir seguro o bastante, pode ter certeza que lhe indicarei (caso interesse).
Em relação ao que estou lhe devendo agora, como vc pediu:
Curso: Mestrado em Engenharia de Software pela PUC-Rio - Dpto de Informática
Cadeira: não há.
Prof Orientador: Carlos José Pereira de Lucena
Prof Co-Orientador: Arndt Von Staa
Alunos envolvidos: 3 (eu e mais 2)
Eu, como os outros dois, faço mestrado em tempo integral (apesar de ainda desenvolver para terceiros, mas sem vínculo empregatício, quando pinta alguma coisa.). Sendo assim, temos interesse e tempo em pesquisar coisas novas (ao menos novas para nós), mesmo que fora das disciplinas (ficamos o dia inteiro dentro do lab). Estávamos conversando outro dia, e estes requisitos foram montados a partir da pergunta de como seria uma solução para uma aplicação de uma rede de farmácias, ou então de como é a solução usada nos bancos, ou em supermercados como o zona sul, que oferece lojas e site, e entrega a domicilio. Em fim....foi isso. Resolvemos tentar montar uma solução, e muitas perguntas ficaram no ar.
Eu fiz eng. elétrica na graduação, e comecei a trabalhar com software no final da graduação....então muitos conceitos e experiência em software eu não adquiri quando mais jovem..... tentando correr atras do tempo perdido.....
estou querendo propor minha dissertação em algo do tipo "Um framework de integração de frameworks e bibliotecas open-source para o desenvolvimento de sistemas de informãção web J2EE". Isso para propor um framework que disponibilize uma arquitetura "legal" integrando Struts, Hibernate, Log4j, Quartz,... e ao mesmo tempo fornecendo serviços parar envio de mensagens eletrônicas, manipulação de erros no nível de objetos de negócio, internacionalização, autenticação e autorização, etc.... O único exemplo que "vi" parecido é o Expresso, mas ele é muito preso em si próprio. Procuro por algo mais flexível que permita a troca de um componente por outro, ex.: hibernate por castor, ou Struts por WebWork.....será que dá, que fica legal?? Não sei, é isso que quer ver!
Mas apesar de conhecer um pouco de web, nunca fiz nada com standalone ou cliente servidor ("pré-web"). Por isso o interesse em um estudo de caso como este, que junte os dois mundos. E ainda, como fazer de tal forma que se possa reaproveitar o máximo de código, já que temos Swing, Servlets, JSP , MVC, Persistência, distribuição, transações temporárias, etc, etc.....
Valeu e abraço
|
 |
|
|
O Eclipse tem um plugin legalzinho que executa os testes.
Eu faria com ANT, que além de executar pode gerar um relatório do resultado dos testes e ainda lhe enviar por email este relatório.
Ainda com ANT, se vc trabalha com web, ainda pode fazer os testes com Canoo Web Test , e ter os testes de unidade e de interface web realizados automaticamente, gerados relatórios e enviados emails com estes relatórios.
Fica bem legal.....na minha opinião.
Abcao
|
 |
|
|
Luca, não entendi muito bem a sua resposta, mas.....
Acho que se vc tem alguma solução que vc ache interessante, vc poderia compartilhar pelo menos alguns conceitos, para ajudar a todos aqui. Não é para isso que serve este fórum? mas em fim.... tudo bem.....
Eu trabalho com web há algum tempo, mas justamente por isso não tenho a resposta para este caso. Nunca trabalhei com uma estrutura cliente servidor. E acho que neste caso, isso talvez possa ser interessante para as lojas, caso elas tenham cada uma um servidor próprio.
Conversando com alguns amigos, acho que chegamos numa solução mais ou menos assim....
. cada loja tem seu servidor próprio.
. os caixas teriam aplicações Swing.
Isso para que o ambiente dos caixas das lojas seja rápido na conexão com o servidor, e a interface seja rica. Neste caso, a inteligência de negócios está no swing e na hora H abre uma conexão remota com o servidor de banco de dados e faz o que tem que fazer lá? Ou de repente apenas empacota um XML com os dados e acessa um Web Service no servidor da loja. Se sim, entao a inteligência de negócios tá no servidor. Mas alguma precisa estar tbem no swing, para validações e tal, não? XML pra cá e pra lá poderia ficar lento?
. Como "avisar" o servidor da distribuidora que o estoque caiu? Webservices? Pode ser!
. Por outro lado, os servidores de cada loja teriam que ter algo como um web service para que, quando um usuário final acessasse o site (que seria no servidor da distribuidora), este servidor falaria com os servidores das lojas mais próximas ao usuário, para saber se tem estoque.
. Ao mesmo tempo, o servidor da distribuidora precisa saber todos os dados de todas as lojas, para poder fazer um BI, um datamining, etc. Como sincronizar estes dados?
--------
E se a solução fosse um servidor centralizado?
. aí os caixas das lojas teriam uma aplicação standalone que não dependa da instabilidade da conexão. Mas como sincronizar os dados de estoque da própria loja, se ela tem 3 caixas com 3 aplicações standalone rodando? Já precisariam de um servidorzinho, não? Então acho que esta opção não é muito boa.
-------
Além disso tudo, como tentar ao máximo reaproveitar código!
. aplicação Standalone, Swing, Web, WebServices......
Acho um puta estudo de caso. Sei que alguém já fez isso.... Pois como funcionam os bancos, com 24h, tudo real time? Como funciona o zonasulatende.com.br , com seus mercados espalhados e um site de compras online? Eu não sei! Por isso gostaria de saber um pouco mais da experiência de cada um .
Alguém já fez algo deste tipo? Pode compartilhar pelo menos os problemas, os erros?
Grande abraço
Felipe
|
 |
|
|
(arcabouço = framework)
Arcabouço é uma aplicação não executável, abstrata, semi-completa e reutilizável, que precisa ser especializada para produzir aplicações executáveis. Não é possível executar um framework, mas sim estendê-lo com código específico da sua aplicação para aí se ter uma aplicação.
Um arcabouço descreve uma arquitetura de um sistema orientado a objetos estruturando seus componentes e como eles interagem.
Arcabouços definem interfaces genéricas que podem ser reutilizadas e/ou estendidas para criar novas aplicações. Parte das funcionalidades destas novas aplicações são providas pelo arcabouço, são fixas e já existem antes de se iniciar o desenvolvimento desta nova aplicação. São os chamados pontos fixos ou frozen spots. Outra parte das funcionalidades da aplicação é criada especificamente para a aplicação em questão, e variam de aplicação para aplicação. São os chamados pontos flexíveis ou hot spots. Portanto, para se criar uma nova aplicação utilizando um arcabouço, deve-se estender as interfaces genéricas fornecendo código específico da aplicação seguindo arquitetura e definições impostas pelo arcabouço.
Um arcabouço promove esta estensibilidade provendo métodos abstratos que devem obrigatoriamente ser estendidos. Estes métodos separam as interfaces e funcionalidades genéricas de um domínio de aplicação, das instâncias de contextos particulares de aplicações.
|
 |
|
|
|
|