Eu estava trocando email sobre uma funcionalidade para o Andre. Mas
acabei que deixei ele esperando um tempão.
Vou colocar ele na lista para que outras pessoas possam ajuda-lo.
Veja o que ele disse:
****
Estou pensando aqui comigo também numa solução pra que eu possa
contribuir. Acho que cheguei num ponto que não consigo mais ir pra
frente sem discutir com você (já pensei em criar uma classe
EclipseLinkDeployer que é subclasse de JPADeployer, mas não
funcionaria – pensei nisso porque vi que a JPADeployer está muito
‘amarrada’ com o Hibernate). Consultando o source do EclipseLink, que
é só focado na persistência (e não em EJB3), a classe
Ejb3Configuration não existe. Então cheguei a conclusão que vocês não
estão usando o Hibernate só pra persistência, mas sim pra EJB também,
certo?
Pensando dessa forma (se eu estou pensando no caminho certo), gostaria
de trocar umas ‘figurinhas’ com você, pra saber no que posso ajudar.
Se eu pensei certo, temos que encontrar uma forma de trocar a parte de
EJB 3 do Hibernate por outra, certo? Segundo o arquiteto aqui da
empresa, foi feito isso com o JBoss (antes de eu entrar na empresa).
Pelo que foi falado, o JBoss veio com Hibernate junto. Depois, pelo
fato de não funcionar direito com Jaybird / Firebird, foi trocado por
algo diferente (que estou procurando agora). Esse meu pensamento,
teria alguma relação com o problema que tive com o MyContainer ou nada
a ver?
****
Andre,
O que você percebeu é correto. Na verdade como eu não conheco de
eclipse link. Você poderia postar um exemplo de código de como é
possível "embedda-lo".
Por exemplo, as entidades são anotadas? Como você "iniciar" o
EclipseLink e obtem o que seria o EntityManager ou o hibernate Session
para poder fazer persist (save), delete, load (find), etc?
Dessa forma posso ajudar melhor.
[]s,
Murer
Não sei como foi o desenrolar da conversa, estou pegando o bonde pela metade.
Murer, me corrija se eu estiver errado,
Está utilizando o EJB3Configuration, porém ele pode muito bem utilizar
o HibernateProvider, uma vez que este usa por baixo o
EJB3Configuration.
public EntityManagerFactory createEntityManagerFactory(String
persistenceUnitName, Map properties) {
Ejb3Configuration cfg = new Ejb3Configuration();
Ejb3Configuration configured = cfg.configure( persistenceUnitName,
properties );
return configured != null ? configured.buildEntityManagerFactory() : null;
}
Dessa forma deixariamos o código mais JPA like...
Dessa forma podemos deixar o JPADeploy mais genérico e criariamos um
HibernateJPADeploy e possibilitariámos a extensão para outros vendors
como o EclipseLink.
Os pontos de extensão seriam:
protected abstract PersistenceProvider getPersistenceProvider();
protected abstract void overrrideConfig(PersistenceUnitInfo info);
protected abstract TransactionManager getTransactionManager(
PersistenceUnitInfo info);
O primeiro método irá retornar o PersistenceProvider do vendor
(HibernatePersistence,
org.eclipse.persistence.jpa.PersistenceProvider, etc)
O segundo deverá adicionar configs "default" de cada vendor no info
E o terceiro deverá retornar o TM a partir de dados na info (Murer,
não estou muito certo da necessidade deste método, porém, segundo a
impl atual precisariámos sim)
A partir disso, teríamos que depois ver se isso é suficiente para
intergrar com o Eclipse Link ou não. Acredito que sim...
P.S.: Murer, já implementei o isolamento do HibernateJPADeployer do
JPADeployer na revisão 888 e está funcionando normalmente.
Abs,
--
Raoni Fortes Normanton
2011/7/2 Paulo Murer <fuw...@gmail.com>:
Nice.
> acabei que deix...