2015-02-05 12 views
2

이것은 정말 쉽게 찾을 수 있어야하는 매우 기본적인 것 같지만 응답을 찾을 수 없었습니다! http://docs.spring.io/autorepo/docs/spring-framework/3.2.4.RELEASE_to_4.0.0.M3/changes/pkg_org.springframework.orm.jpa.vendor.htmlSpring ORM/JPA 후계자 또는 TopLinkJpaVendorAdapter의 대안이 있습니까?

하지만 갑자기 나는이 클래스를 사용하는 대안이 실제로 무엇인지 찾을 수 있습니다 - 모든 예제 : 봄 3.2.4 문서에서

, 그것은 TopLink Essentials를위한 공급 업체의 지원이 제거되었음을 나타냅니다 Spring을 사용하여 Toplink를 설정하는 것은 Spring 2.5 정도에서 시작된 것 같습니다. https://community.oracle.com/thread/597157

누구나 지금 Toplink JPA 구현을위한 스프링 응용 프로그램 컨텍스트를 정의하기 위해 허용되는 접근 방식을 말할 수 있습니까?

내가 사용하고 있습니다 :

  • 봄 (4.1.4)
  • TopLink Essentials를 (2.1-60f)
  • 임베디드 Derby DB (10.11.1.1)
  • 톰캣 (8.0.18를)

내 현재 코드 및 구성 설정은 아래에 나와 있으며 작동합니다. 즉, 모의 웹 응용 프로그램에서 /help으로 이동하면 DB가 생성됩니다 ication -하지만 엔티티 테이블을 자동으로 생성하지는 않는다. 이것은 내가 현재 주로 솔루션을 찾고자하는 것이다. 나는 그것이 아래에 정의 된 모든 것들이 그 여분의 마일을 가지고 나 자신을 위해 모든 엔티티를 자동으로 생성 할 수있는 적절한 JPA 엔티티 관리자 팩토리가 아니라 간단한 JDBC 데이터 소스이기 때문이라고 생각한다.

이것을 WAR로 마이그레이션하고 Tomcat에 배포하기 전에 동일한 persistence.xml을 사용하는 독립형 Java 응용 프로그램이 있었으며 잘 작동했습니다 (자동으로 데이터베이스 및 엔티티 테이블 생성). 이제 웹 애플리케이션으로 옮겨서 Spring을 믹스에 넣었습니다 .--(

기본적으로 스프링 애플 리케이션 컨텍스트 어딘가에 create-tables (또는 generateDdl=true)을 지정해야합니다. persistence.xml 파일에,하지만 난 아래 TopLinkJpaVendorAdapter 클래스의 좋아하는 (applicationContext.xml의 주석 요소 참조)없이 그렇게하는 방법을 모르겠어요.

봄의 엔티티 관리자 팩토리는 정의 된 퍼시스턴스 유닛 이름을 참조 할 것 persistence.xml에 있지만, 거기에 정의 된 것의 나머지 부분을 주목하지 않는 것 같습니다. Spring이 이러한 다른 설정을 취할 수있는 방법이 있습니다 (예 : Toplink 엔티티 관리자 팩토리 공급자 클래스, d JDBC 세부 사항 등)을 persistence.xml에 정의 된 것부터? 또는 Spring이 벤더 구현을 중단했다면 Toplink의 길을 계속 이어갈 가치가 있습니까? 대신 Eclipselink 또는 Hibernate를 사용하십시오. (이 구현 클래스가 처음에 떨어졌다 이유를 제쳐두고, 아는 사람 있나요?)

META-INF/persistence.xml을 :

<?xml version="1.0" encoding="UTF-8"?> 
<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 persistence_1_0.xsd"> 

    <persistence-unit name="xyz-jpa" transaction-type="RESOURCE_LOCAL"> 

     <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider> 

     <class>org.xyz.MyDbEntity</class> 

     <properties> 
      <!-- 
       <property name="toplink.jdbc.user" value="league"/> 
       <property name="toplink.jdbc.password" value="league"/> 
      --> 
      <property name="toplink.jdbc.url"  value="jdbc:derby:xyz;create=true"/> 
      <property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/> 
      <property name="toplink.ddl-generation" value="create-tables"/> 
     </properties> 

    </persistence-unit> 
</persistence> 

WEB-INF/봄/ApplicationContext를. XML :

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
          http://www.springframework.org/schema/mvc  http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 

    <mvc:annotation-driven/>  
    <context:component-scan base-package="org.xyz.web" /> 

    <!-- <context:spring-configured /> --> 
    <context:load-time-weaver aspectj-weaving="autodetect"/> 

    <!--+ 
     | (1) Define a Spring JDBC datasource wrapper for an embedded Derby database 
     +--> 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver"/> 
     <property name="url"    value="jdbc:derby:xyz;create=true"/> 
    </bean> 

    <!--+ 
     | (2) Define a Spring ORM entity manager factory bean wrapper for a Toplink JPA implementation 
     +--> 
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceUnitName" value="xyz-jpa"/> 
     <property name="dataSource"   ref="dataSource"/> 
     <!-- 
      <property name="jpaVendorAdapter"> 
       <bean class="org.springframework.orm.jpa.vendor.TopLinkJpaVendorAdapter"> 
        <property name="showSql"   value="true"/> 
        <property name="generateDdl"  value="true"/> 
        <property name="databasePlatform" value="oracle.toplink.essentials.platform.database.DerbyPlatform"/> 
       </bean> 
      </property> 

      <property name="jpaProperties"> 
       <props> 
        <prop key="toplink.weaving">static</prop> 
        <prop key="toplink.logging.level">FINEST</prop> 
        <prop key="toplink.ddl-generation">create-tables</prop> 
        <prop key="toplink.ddl-generation.output-mode">both</prop> 
        <prop key="toplink.drop-ddl-jdbc-file-name">generated_jpa.sql</prop> 
       </props> 
      </property> 

      <property name="loadTimeWeaver"> 
       <bean class="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader" /> 
      </property> 
     --> 
    </bean> 

    <!-- (3) Define a Spring ORM transaction manager wrapper for (1) and (2) --> 
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory"/> 
     <property name="dataSource"   ref="dataSource"/> 
    </bean> 


    <bean id="helpController" class="org.xyz.web.HelpController"> 
     <property name="entityManagerFactory" ref="entityManagerFactory"/> 
    </bean> 


</beans> 

WEB-INF/웹.XML :

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
     version="2.5"> 

    <display-name>XYZ</display-name> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/applicationContext.xml</param-value> 
    </context-param> 

    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value></param-value> <!-- No servlet specific context config file (i.e. "dispatcher-servlet.xml") => use applicationContext.xml --> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

</web-app> 

META-INF/context.xml에 :

<Context path="/" reloadable="true"> 
    <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/> 
</Context> 

org.xyz.web.HelpController : TopLink에서의 Wikipedia page에서

@RestController 
public class HelpController { 

    private EntityManagerFactory entityManagerFactory; 

    public HelpController() { 
    } 


    public EntityManagerFactory getEntityManagerFactory() { 
     return entityManagerFactory; 
    } 


    public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) { 
     this.entityManagerFactory = entityManagerFactory; 
    } 


    @RequestMapping(value="/help", produces=MediaType.TEXT_HTML_VALUE) 
    public @ResponseBody String getHelp() { 

     EntityManager entityManager = entityManagerFactory.createEntityManager(); 

     return "Helpy Mc Help-Help"; 
    } 
} 

답변

2

:

2007 년, TopLink 소스 코드가 Eclipse Foundation에 기증되었고 EclipseLink 프로젝트가 탄생했습니다.

그래서 TopLink의 오픈 소스 버전은 JPA 2.0의 참조 구현 인 EclipseLink로 계속 존재합니다.

TopLink Essentials (스프링 프레임 워크와 Tomcat의 최신 버전을 사용하고 있기 때문에 보이지 않는)를 사용하는 특별한 이유가없는 한, 다른 JPA 구현 중 하나를 사용해야합니다.

+0

감사합니다. manish - 나는 그 관점까지도 돌아 오기 시작했습니다. 그래도 이런 배경에 대해 Wikipedia를 보려고 생각조차하지 않았습니다! 다음에 기억할 것이다. 내가 한 일은 JAR 크기에 엄청난 차이가있는 것 같습니다 ... eclipselink.jar는 약 8.5Mb입니다. 8 년 후에 많은 일이 발생합니다 :-) – gaelicyoda