HIbernate + Scala + Atores ???

34 views
Skip to first unread message

Tássio Virgínio

unread,
May 20, 2012, 2:10:28 PM5/20/12
to scal...@googlegroups.com
Boa Tarde,

estou fazendo uma pesquisa pra saber a melhor maneira de implementar o hibernate dentro de um sistema Scala com Atores.
Alguem tem alguma ideia ??? 
Achei essa ideia na internet -> http://markmail.org/message/lhc6zdikf6o34g63


Aristofanio Garcia de Araújo

unread,
May 20, 2012, 8:47:10 PM5/20/12
to scal...@googlegroups.com
Com agentes ainda não testei, mas testei com Spring... veja se ajuda:


Ari


Date: Sun, 20 May 2012 11:10:28 -0700
From: tassiov...@gmail.com
To: scal...@googlegroups.com
Subject: [scala-br] HIbernate + Scala + Atores ???

Paulo "JCranky" Siqueira

unread,
May 21, 2012, 9:54:59 AM5/21/12
to scal...@googlegroups.com

Detalhe: prefira usar Akka ao invés dá implementação padrão de atores do scala.

[]s,

Paulo "JCranky" Siqueira
http://jcranky.com

Gilberto Garcia

unread,
May 21, 2012, 10:28:16 AM5/21/12
to scal...@googlegroups.com
E já existe bons frameworks ORM nativos em Scala, por exemplo
http://squeryl.org/


2012/5/21 Paulo "JCranky" Siqueira <paulo.s...@gmail.com>:

Aristofanio Garcia de Araújo

unread,
May 21, 2012, 10:33:20 AM5/21/12
to scal...@googlegroups.com
O melhor que estou achando é o Activate Persistence Framework... rápido, simples e fácil...

Gilberto Garcia

unread,
May 21, 2012, 11:08:33 AM5/21/12
to scal...@googlegroups.com
Não usei ainda.. Já usei o Squeryl e o Mapper do lift. Gostei de ambos.

2012/5/21 Aristofanio Garcia de Araújo <arist...@hotmail.com>:

Tássio Virgínio

unread,
May 21, 2012, 12:42:48 PM5/21/12
to scal...@googlegroups.com
Tenho o problema de ter que usar o Domínio(Entidades) da aplicação legado !
Entre outras coisas... e nesse caso não posso sair do Hibernate !

Tássio G. A. Virgínio - Software Engineer
tassiov...@gmail.com , tassiov...@hotmail.com
+55 85 9659-4497 (TIM)

Aristofanio Garcia de Araújo

unread,
May 21, 2012, 12:55:04 PM5/21/12
to scal...@googlegroups.com
Veja o que consegue... a noite vou pegar um exemplo MUITO simples da utilização de Scala com Hibernate... lembrando que existem algumas peculiaridades sobre os Collections e outras classes que o próprio Hibernate implementa... assim dependendo da profundidade da sua utilização do hibernate com o Scala, isto pode requer um maior ou menor estudo da sua parte. Se quiser podemos fazer isto junto, dado que estou realizando testes essa semana no Activate Persistence Framework, ai posso fazer um paralelo entre isso... só que meu tempo tá bem curto então vamos trocando figurinha até o final de semana, quando terei mais tempo e finalizamos os testes.

Se for o caso, coloque aqui os desafios (problemas) que vamos tratando-os durante a semana... um a um e quem mais puder ir ajudando, melhor...


Ari


From: tassiov...@gmail.com
Date: Mon, 21 May 2012 13:42:48 -0300

Tássio Virgínio

unread,
May 21, 2012, 2:05:42 PM5/21/12
to scal...@googlegroups.com
Conseguir desenvolver uma ideia...

Fiz um AbstractDaoActor, e transformei todo Dao em um ator, e eu gravor as entidades por Mensagem,
vou postar aqui depois como ficou. Mas ainda não estou achando a melhor forma de trabalhar. 
Fiz alguns teste de persistencia e foram muito rapidas.
No meu exemplo, eu recebo varias informações por RMI de varias entidades diferentes, para cada 
entidade eu crio um ator e todos esses atores enviam informações para o DaoAtor especifico.

até mais...

Tássio G. A. Virgínio - Software Engineer
tassiov...@gmail.com , tassiov...@hotmail.com
+55 85 9659-4497 (TIM)



Aristofanio Garcia de Araújo

unread,
May 21, 2012, 2:29:47 PM5/21/12
to scal...@googlegroups.com

Show!
Depois posta ai!



From: tassiov...@gmail.com
Date: Mon, 21 May 2012 15:05:42 -0300

Wilson de Carvalho

unread,
May 22, 2012, 8:58:26 AM5/22/12
to scala-br
Oi pessoal,

On 21 maio, 10:54, "Paulo \"JCranky\" Siqueira" wrote:
> Detalhe: prefira usar Akka ao invés dá implementação padrão de atores do
> scala.

Concordo com a sugestão dada pelo Paulo Siqueira, mas com ressalvas:

Prefiram o Akka ao invés de utilizar a versão nativa de Scala para
atores, mas estejam atentos sobre o versionamento. Tenho um sistema
rodando com Akka 1.3 e ao tentar migrar para a versão 2.0 descobri que
o trabalho não seria muito simples, pois houve uma mudança
relativamente grande na API. Sugiro começar com a versão 2.0
diretamente para evitar maiores problemas.
Se optarem por utilizar os atores nativos de Scala, tomem cuidado com
a quantidade de atores que serão criados. Se o mapeamento for 1:1 de
ator para entidade vocês vão enfrentar problemas de desempenho
relativamente grandes quando tiverem um volume alto de entidades. Fica
a sugestão para utilizarem o Reactor ao invés do Actor.


Abraço,

--
Wilson de Carvalho

Aristofanio Garcia de Araújo

unread,
May 22, 2012, 9:01:25 AM5/22/12
to scal...@googlegroups.com
Wilson,

Tudo bem. Fiquei interessado neste problema... poderia explicar melhor esse problema de desempenho? Fiz alguns testes, não de performance, e não percebi essa falha. Por qual motivo ela se daria e como posso fazer a reprodução disso? Você conviveu com esse problema?


Ari

> Date: Tue, 22 May 2012 05:58:26 -0700
> Subject: [scala-br] Re: HIbernate + Scala + Atores ???
> From: wcmj...@gmail.com
> To: scal...@googlegroups.com

Felipe Hummel

unread,
May 22, 2012, 9:41:03 AM5/22/12
to scal...@googlegroups.com
Os Actor que vem com a linguagem Scala criam uma thread distinta pra cada Actor criado. Como uma thread em Java não é tão lightweight assim, se começares a criar muitos actors pode dar problema.
Por outro lado, os actors do Akka são mais leves pois compartilham threads de um threadpool (através de um dispatcher).

Felipe Hummel

2012/5/22 Aristofanio Garcia de Araújo <arist...@hotmail.com>

Aristofanio Garcia de Araújo

unread,
May 22, 2012, 9:54:59 AM5/22/12
to scal...@googlegroups.com
Perae, perae....

Entendi agora a colocação "1:1" do Wilson...  
Estamos usando Actors como Entities do Banco de Dados, né isso? 
Minha primeira pergunta é: por que?
Supondo que a resposta anterior tenha sido dada, pergunto: por que não usar um case class apenas?

Veja, nos testes que fiz utilizei case class e foi tudo uma maravilha... não tive tempo ainda de mandar milhoes de consultas com JMetter, mas ainda vou fazer... Então para adiantar pergunto: supondo a utilização do Actors como Entities, o fato de termos entidades um relacionamento 1:1 (Actor, Entity) precisaria de muita coisa para quebrar a performance realmente, você (ou alguem) já fez este teste para poder justificar a utilziação do Akka realmente para isto?


Ari


From: felipe...@gmail.com
Date: Tue, 22 May 2012 09:41:03 -0400
Subject: Re: [scala-br] Re: HIbernate + Scala + Atores ???
To: scal...@googlegroups.com

Daniel Sobral

unread,
May 22, 2012, 4:41:52 PM5/22/12
to scal...@googlegroups.com
2012/5/22 Felipe Hummel <felipe...@gmail.com>:
> Os Actor que vem com a linguagem Scala criam uma thread distinta pra cada
> Actor criado. Como uma thread em Java não é tão lightweight assim, se
> começares a criar muitos actors pode dar problema.

Isso não é verdade em dois aspectos. Em primeiro lugar, não existe
mapeamento 1:1 de atores para scala -- é usado um thread pool.

Em segundo lugar, os atores podem compartilhar threads normalmente --
esse é o uso recomendado. A diferença está na forma como você escreve
o código:

while(true) {
receive {
case Msg(x) =>
}
}

vs

loop {
react {
case Msg(x) =>
}
}

No primeiro caso, o ator nunca larga o thread, enquanto no segundo
caso o ator compartilha o thread tanto no "loop" quanto no "react".

A recomendação é usar o primeiro caso somente para atores que façam
serviço de dispatch -- atores relativamente únicos, mas que processem
um grande número de mensagens com pouca computação em cima delas. Os
demais atores devem usar o segundo padrão.
--
Daniel C. Sobral

I travel to the future all the time.

Felipe Hummel

unread,
May 22, 2012, 4:48:40 PM5/22/12
to scal...@googlegroups.com
Valeu pela correção Daniel. Comecei com actors direto pelo Akka, nunca usei o do Scala =|

Felipe Hummel

2012/5/22 Daniel Sobral <dcso...@gmail.com>

Wilson de Carvalho

unread,
May 23, 2012, 8:56:59 AM5/23/12
to scala-br
Aristofanio,

Desculpe por não ter respondido ontem, pois só vejo as mensagens do
grupo na compilação que recebo. O Daniel Sobral deu uma resposta mais
precisa sobre o que eu queria falar. Na verdade me enganei em falar
sobre Actor e Reactor, o certo é Receive e React (Actor e Reactor são
classes e traits).

Quando comecei a fazer desenvolvimentos com Actors, li um livro
chamado Actors in Scala. Esse livro contém uma série de recomendações
e dá alguns exemplos interessantes. Um desses exemplos está no tempo
para se instanciar Actors que utilizam Receive e React. Nesse exemplo
é feito um teste simples criando algumas centenas de milhares de
Actors usando cada tipo. Como as operações usando Receive bloqueiam as
threads do pool, essa implementação fica com um desempenho muito pior
nos testes. Esse problema eu tive na prática, pois minha implementação
inicial utilizava Receive. Quando troquei para o React e li mais
detalhadamente a API o desempenho ficou muito bom!

Fiz algumas implementações usando a biblioteca nativa do Scala de
Actors, mas depois mudei para Akka porque é relativamente mais
simples. O único problema que tive com Akka foi que esbarrei em
algumas mudanças na API quando lançaram a versão 2.0 e vou ter que
reescrever uma parte da minha biblioteca para me adequar...

--
Wilson de Carvalho

Flávio W. Brasil

unread,
May 23, 2012, 10:01:32 AM5/23/12
to scal...@googlegroups.com
Legal essa discussão. Precisamos agitar mais esse grupo! :)

Meu pitaco… é necessário tomar cuidado para utilizar o Hibernate em um ambiente com vários actors. O Hibernate não tem um controle de consistência forte e você tem que ter uma preocupação maior com concorrência.

-- 
Flávio W. Brasil

Aristofanio Garcia de Araújo

unread,
May 23, 2012, 11:27:03 AM5/23/12
to scal...@googlegroups.com

Opa Wilson...


Cara fui dormir tarde lendo sobre isso!! Vlw pela correção... 

Flávio,

Aproveitei ontem a noite para fazer um teste com JMeeter... Várias threads inserindo, alterando e localizando dados... Ainda vou melhorar o algoritmo, mas num primeiro momento posso assegurar que o Hibernate (em conjunto com o Spring) está gerenciando muito bem os dados e a performance é muito boa... como não fiz um teste igual ainda para o Java, não posso afirmar, mas a impressão que tive foi de que é mais rápido que em aplicações Java...

Detalhe, não utilizei o Akka!

Se alguem tiver algum algoritmo que possa auxiliar no teste por favor passem ai.
Depois vou reuniar todos esse material que tenho sobre testes e criar um post, para ficar mais organizado, mas por hora vou fazendo e conversando por aqui.

Ari




Date: Wed, 23 May 2012 11:01:32 -0300
From: fwbr...@gmail.com
To: scal...@googlegroups.com
Subject: Re: [scala-br] Re: HIbernate + Scala + Atores ???

AriGarcia

unread,
May 23, 2012, 12:39:42 PM5/23/12
to scala-br
Corrigindo o texto anterior para ficar mais claro:

Opa Wilson...
Cara fui dormir tarde lendo sobre isso!! Vlw pela correção...

Flávio,
Aproveitei ontem a noite para fazer um teste com JMeeter sobre
Actors... Várias threads inserindo, alterando e localizando dados...
Ainda vou melhorar o algoritmo, mas num primeiro momento posso
assegurar que o Hibernate (em conjunto com o Spring) está gerenciando
muito bem os dados e a performance é muito boa... como não fiz um
teste igual ainda para o Java, não posso afirmar, mas a impressão que
tive foi de que é mais rápido que em aplicações Java...
Detalhe, não utilizei o Akka!

Se alguem tiver algum algoritmo que possa auxiliar no teste para
quebrar o hibernate utilizando actors por favor passem ai. E Flávio,
acho que podemos utilizar estes mesmos testes no Activate, que tal?

Flávio W. Brasil

unread,
May 23, 2012, 1:25:33 PM5/23/12
to Ari Garcia, scal...@googlegroups.com
Ari,

Estou desenvolvendo um projeto para teste de performance com vários frameworks de persistência e nele cada framework irá lidar também com concorrência.
Por enquanto não implementei para Hibernate, porém com Squeryl já vi que ficou inconsistente com várias threads. Vou analisar e ver quais as alternativas que o framework dá para resolver essa inconsistência.
Com implementações Activate, Prevayler e Db4o, não tive problemas com concorrência.

-- 
Flávio W. Brasil

Reply all
Reply to author
Forward
0 new messages