이것은 정말 쉽게 찾을 수 있어야하는 매우 기본적인 것 같지만 응답을 찾을 수 없었습니다! 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";
}
}
감사합니다. manish - 나는 그 관점까지도 돌아 오기 시작했습니다. 그래도 이런 배경에 대해 Wikipedia를 보려고 생각조차하지 않았습니다! 다음에 기억할 것이다. 내가 한 일은 JAR 크기에 엄청난 차이가있는 것 같습니다 ... eclipselink.jar는 약 8.5Mb입니다. 8 년 후에 많은 일이 발생합니다 :-) – gaelicyoda