WebLogic 10.x + Hibernate 3 (JPA) e base Oracle 9+

segunda-feira, 03/05/2010 10:13 am  

Semana passada tive um desentendimento com o Oracle WebLogic 10.x, e um projeto onde neste utilizava o Hibernate 3 com JPA para acessar um datasource de acesso a um base Oracle 9+, configurado no WebLogic, depois de muitos testes para resolver o problema, foi bem simples, confira….


Motivo do problema:

O Oracle WebLogic 10.x, possui “vontade própria”, porém o correto é dizer que ele possui um fluxo de leitura das libs e prioridades de uso delas em um respectivo domínio, com isto a lib primária de JPA utilizada pelo Oracle WebLogic 10.x é o OpenJPA e com isto começou o drama… Como dizer ao Oracle WebLogic 10.x para usar o Hibernate 3 e não o OpenJPA…


Cenário do problema:

O ambiente de desenvolvimento do projeto é o Eclipse Galigeo, java 1.5+, servidor de execução local Apache Tomcat 6+ e este projeto possui uma interface em Adobe Flex, comunicando-se com o java através do BlazeDS. Onde o servidor de produção é o Oracle WebLogic 10.x.


Resolvendo o problema:

Para resolver este problema foi necessário fazer alguns ajustes de configuração no projeto, segue os passos:

1 – criar o arquivo weblogic-application.xml no WEB-INF, onde foi utilizada a configuração abaixo, a qual diz ao Oracle WebLogic 10.x para priorizar o uso das respectivas libs para a aplicação:

1
2
3
4
5
6
7
<weblogic-application>
<prefer-application-packages>
<package-name>org.hibernate.*</package-name>
<package-name>org.apache.*</package-name>
<package-name>antlr.*</package-name>
    </prefer-application-packages>
</weblogic-application>


2 – revisar a configuração do /classes/META-INF/persistence.xml para o respectivo modelo descrito abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<persistence version="1.0"
	xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="datasource">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.connection.datasource" value="jdbc/appName"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9iDialect" />
<property name="hibernate.default_schema" value="DB_OWNER"/>
<property name="hibernate.query.factory_class" value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory"/>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WeblogicTransactionManagerLookup"/>
		</properties>
	</persistence-unit>
</persistence>


a seguir, segue o modelo da classe Java que utilizei para recuperar uma conexão do datasource, para efetuar as manipulações de base de dados utilizando JPA + Hibernate:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package br.com.gvt.cdi.dao.hibernate.base;
 
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
 
public abstract class DaoBase {
	//--------------------------------------------------------------------------
	private static final String PERSISTENCE_UNIT = "datasource";
	//--------------------------------------------------------------------------
	/**
	 * Método que retorna um gerenciador de entidade instânciado
	 *
	 * @return EntityManager
	 */
	protected EntityManager getEntityManager() {
		/*
		 *  criando um factory, pegando as configurações de acesso
		 *  a base de dados da aplicação
		 */
		EntityManagerFactory entityManagerFactory = Persistence
		.createEntityManagerFactory(PERSISTENCE_UNIT);
 
		// retorna a instância do gerenciador de entidades
		return entityManagerFactory.createEntityManager();
	}
}


Com isto, o projeto finalmente funcionou no Oracle WebLogic 10.x, porém no console ainda não visíveis alguns alertas que dizem que o OpenJPA que é o default do Oracle WebLogic 10.x não está sendo usado. Mas é apenas um alerta, não é necessário se preocupar com esta mensagem.


, , , , ,

Este post foi escrito por:

- que escreveu 500 post(s).


Entre em contato