淡淡回忆 发表于 2015-8-11 13:35:40

在tomcat中使用toplink essentials的方法

看了看toplink-essentials-agent的代码,发现使用这个jpa的web app,对部署的要求挺高, 而且侵入性较高,有一个比较简单的方法来解决这个问题。
比如在tomcat中使用Toplink-essentials jpa的比较方便的办法,就是直接调用toplink-essentials-agent的Instrumentation premain方法, 传入2个null参数即可,这样对OneToOne的LazyLoad会有一些影响,这里是示范代码

spring's application-context.xml:

    <bean id="persistenceManager" class="ip.es.utils.EsManagerFactoryBean">
   <property name="premainClass" value="oracle.toplink.essentials.internal.ejb.cmp3.JavaSECMPInitializerAgent" />
   <property name="persistenceUnit" value="pu1" />
   <property name="propMap">
      <map>
       <entry key="toplink.jdbc.driver" value="${db0.xdbcp.driver-class}" />
       <entry key="toplink.jdbc.url" value="${db0.xdbcp.driver-url}" />
       <entry key="toplink.jdbc.user" value="${db0.user}" />
       <entry key="toplink.jdbc.password" value="${db0.password}" />
      </map>
   </property>
    </bean>

<bean id="dao" class="ip.es.dao.jpa.BaseDaoImpl" autowire="byType" />

// ----> spring's factory bean code piece:
public void afterPropertiesSet() throws Exception {
try {
   Class cls = Class.forName(premainClass);
   Method method = cls.getDeclaredMethod("premain", new Class[] {
   String.class, Instrumentation.class });
   method.invoke(null, new Object[] { null, null });
   entityManagerFactory = Persistence.createEntityManagerFactory(
   persistenceUnit, propMap);
} catch (Throwable e) {
   throw new RuntimeException(e);
}
}

注:createEntityManagerFactory的propMap参数会自动和META-INF/persistence.xml中的properties合并

jpa的文档的确是太少了
页: [1]
查看完整版本: 在tomcat中使用toplink essentials的方法