Olá amigos, desculpem a minha ignorancia, mas qual a melhor solução para um ambiente de produção para JPA, RESOURCE_LOCAL ou JTA e qual a diferença entre eles?
Abraços
Jomello
Olá amigos, desculpem a minha ignorancia, mas qual a melhor solução para um ambiente de produção para JPA, RESOURCE_LOCAL ou JTA e qual a diferença entre eles?
Abraços
Jomello
Ta, pelo que entendi, basicamente é se eu for utilizar apenas uma base de dados posso usar RESOURCE_LOCAL, mas se tenho que “trocar informações com outras bases de dados” ai uso JTA, como fica a questão de ter por exemplo 1.000 ao mesmo tempo?? vai ter alguma diferença entre um e outro?
Abraços
Jomello
Na verdade, funciona, bem basicamente, da seguinte forma. Se você usar RESOURCE_LOCAL, você controla as transações. Se você usar JTA, tá dizendo pro servidor de aplicação que ele é quem tem que controlar as transações.
Teoricamente, existem certas coisas que JTA faz que com RESOURCE_LOCAL você não consegue fazer (pelo menos dizem que com JTA fica mais viável). Dá uma lida neste link que pode ficar mais claro.
Na verdade é o contrário.
Usando transação declarativa vc fica meio travado, mas ela funciona para o caso de transação chamada - Flat Transaction.
Se vocÊ precisar de algo mais específico e avançado, o ideal é controlar na mão.
É bem aquilo que desconfiava, se eu usar RESOURCE_LOCAL, tenho que “cuidar” das minhas transações e com JTA eu “confio” no meu servidor de aplicação.
Mas ai entra uma outra questão, relendo artigos antigos da minha revista de JAVA, tem um tutorial que fala sobre performance ao extremo, e ai relendo vi que nada mais é do que voltar a usar ResultSet, e ai eu pergunto até porque estou tendo problemas de performance e fiquei achando que tem a ver com excesso de conexões ou algo do genero.
Sendo que da forma antiga não tinha esses problemas, claro que tenho muito mais trabalho fisico, pois tenho que criar todos os DAO´s, etc
Mas sei lá, não acho que usar persitence seja ruim, só acho que estou usando de forma errada, mas que o ResultSet é bem mais rapido que o JPA isso não tenho a menor duvida.
Agora porque???
Abraços
Jomello
Conhecer o gargalo é o ideal…
Mas como ?
Geralmente o container te da um pool de conexões e isso é uma mão na roda. Acredito que não seja o gargalo para criar a conexões.
Se utilizar uma ferramentas ORM como hibernate seus existem custos.
O ideal é descobrir onde está seu gargalo… coisa dificil de se fazer.
Um mapeamento errado pode ocasionar consultas incorretas e demora
Obrigado Thiago pela sua ajuda, mas voltamos ao inicio da questão
Sinceramente na minha modesta opinião o meu problema é esponencial, ou seja cada vez que meu sistema crescer mais gargalo eu crio e não tenho por enquanto nenhuma query que não seja o basico select * from tabela where id = 1, etc
Mas vejo que a cada modulo novo mais lento o meu sistema se torna, eu li em algum lugar que existe uma ferramenta que faz varios testes de performance e te da relatorios, alguem sabe algo a respeito???
Abraços
Jomello
Existem algumas ferramentas de profiling e ferramentas de testes de performance como por exemplo JMeter.
Você pode utilizar ferramentas ORM (JPA) e ter queries complexas. Mas deve saber como mapear corretamente suas entidades.
É dificil que toda sua aplicação fique lenta por causa do uso de ORM e transação JTA, mas algumas partes onde possui consultas pesadas.
Se sua aplicação está inteiramente lenta, veja se não é problemas com hardware ou lentidão na rede.
[quote=thiagomoraes]Na verdade é o contrário.
Usando transação declarativa vc fica meio travado, mas ela funciona para o caso de transação chamada - Flat Transaction.
Se vocÊ precisar de algo mais específico e avançado, o ideal é controlar na mão.[/quote]
Thiago, desculpa, eu falei errado? - (Não quero que essa pergunta parece retórica, sarcástica ou qualquer outra coisa, por favor, não leve para o lado da pancadaria e do flame).
Usando JTA o conteiner cuida de tudo, não cuida? Se precisar de algo mais específico (como você disse), dá pra usar a RESOURCE_LOCAL (ou, dependendo da situação, deixar um Bean específico controlar, se estiver usando EJB).
Acho que o que falei ficou estranho porque falei que usando RESOURCE_LOCAL você não consegue fazer as coisas mais ‘intensas’, mais específicas da transação (que o conteiner faria tudo, se fosse usado JTA). É isso?
Na verdade também estou confuso com a afirmação sua rs…
“existem certas coisas que JTA faz que com RESOURCE_LOCAL você não consegue fazer”
Com RESOURCE Local vc consegue alcançar mais tipos de transações.
Na especificação, o container deve suportar somente Flat TRansactions.
Ahmmm… Então JTA é mais restrito porque o desenvolvedor não tem controle sobre as transações como ele teria em RESOURCE_LOCAL?
Isso mesmo.
Mesmo sendo restrito ela consegue coordenar a maioria dos casos.
Alguns containers / frameworks implementam outros tipos de datasources que te dão mais recursos como Suporte ao protocolo Two phase commit nas transaçãoes ( JBoss )