Weblogic 10.3.x에 Spring+JPA 2.0 어플 구동시키기

381 views
Skip to first unread message

Ahn Jisung

unread,
May 25, 2013, 12:35:35 AM5/25/13
to ks...@googlegroups.com
요즘 매일 같이 험난한 장벽이 앞을 가로 막네요… -_-

웹로직을 처음 써보다보니 이게 내문제인지 웹로직문제인지… 암튼 한 12시간 정도 걸려 어플을 구동시켰네요. 

웹로직에 어플을 올리려고 하다 만난 문제중 가장 위험한 문제였던 JPA 버전 미스매치 문제에 대한 나름대로의 해결책을 적어 보았습니다. 



Weglogic 10.3.x는 기본적으로 JPA 1.0 기반의 WAS이죠  
여기에서 JPA 2.0 어플을 기동시키면 Weblogic에서 제공하는 JPA 1.0 라이브러리들과 충돌을 일으킵니다. 
Webllogic 구동 스크립트에 Classpath를 지정하면 hibernate-validator와 충돌을 일으키거나 또는 classpath에서 EntityManager를 찾을수 없다고 나오는등 매우 다양한 오류가 발생합니다. 


장시간의 조사결과 매우 간단하게 해결 하는 방법을 알아 냈습니다. 





다음 과정을 거치면 서버 설정 또는 구동 스크립트의 변경없이 JPA 2.0 어플을 구동시킬수 있다. 

1. META-INF/persistence.xml의 파일명을 project-persistence.xml로 변경한다. 
웹로직은 웹어플리케이션의 /WEB-INF/classes/META-INF/persistence.xml 이 존재하면 JPA 엔진을 구동시키는데,  파일명을 변경하면 이를 회피할수 있게 된다. 


2. Spring에서 JPA 2.0 구동 설정을 1번에서 변경한 파일을 사용하게 변경한다. 
@Bean
public EntityManagerFactory entityManagerFactory() {
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setPersistenceXmlLocation("classpath:META-INF/project-persistence.xml");
factory.setDataSource(dataSource);
factory.setPersistenceUnitName(persistentUnitName);
factory.setPackagesToScan(packagesToScan);
factory.setJpaVendorAdapter(jpaVendorAdapter);
factory.afterPropertiesSet();
return factory.getObject();
}


3. /WEB-INF/weblogic.xml에 <prefer-application-packages> 설정을 추가한다. 
이 설정을 통해 weblogic의 라이브러리가 아닌 어플리케이션의 라이브러리를 사용하게 된다. 
JPA 뿐만이 아니고 Spring도 포함시켜야 weblogic에 포함된 예전 버전의 스프링을 사용하지 않게 된다. 


<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app
<wls:container-descriptor>
<wls:prefer-application-packages>
    <wls:package-name>antlr.*</wls:package-name>
    <wls:package-name>org.apache.commons.*</wls:package-name>
    <wls:package-name>org.apache.xmlbeans.*</wls:package-name>
    <wls:package-name>org.springframework.*</wls:package-name>
    <wls:package-name>org.hibernate.*</wls:package-name>
    <wls:package-name>javax.persistence.*</wls:package-name>
    <wls:package-name>org.joda.*</wls:package-name>
  </wls:prefer-application-packages>
  </wls:container-descriptor>
 </wls:weblogic-web-app>


이상의 과정을 거치면 간단하게 JPA 2.0 기반의 어플리케이션을 weblogic 10.3.X에 올릴수 있다. 

유사한 문제들이 JPA 1.0 기반의 WAS들에서 발생하는데 이 방법을 통해 대체로 해결 되는것으로 보입니다. 

Reply all
Reply to author
Forward
0 new messages