zoukankan      html  css  js  c++  java
  • google app engine中配置spring管理jdo

    开始是因为不知道jdo的update方法是如何设计,然后想参考一下其他一些用泛化操作update时直接传入对象时的具体操作,继而下载了一整套spring的源码下来参详,结果给我发现了spring的orm包里面除了封装了现金主流的存储方式外,同样也支持jdo以及jpa,因此我亦根本不再需要自己去写基类对jdo的封装了,那就直接使用它吧。由于网上对spring以及jdo的结合例子相对较少,我亦十分之郁闷之后,怎么也配置不好

    <bean id="persistenceManagerFactory" class="org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean">

    这个bean下面一些相关配置信息。之前在没有spring的时候通过一个工厂类直接返回persistenceManagerFactory,

    如下:private static final PersistenceManagerFactory pmfInstance =JDOHelper.getPersistenceManagerFactory("transactions-optional");

    因此在网上看到如下类似的配置的时候,我特别敏感,<property name="persistenceManagerFactoryName" value="transactions-optional"/>,当然我亦会去看看这个class里面是否真的有这个parameter,小弟对spring的源码还没有理解透切,稍微看了下,在这个类里面发现有这个class,就不顾一起,先试试先。可惜当你真正使用的时候,结果是会抛错的。在艰难寻找之下,在该地址找到了一份令我启动服务不再抛错的代码(http://wjing63.javaeye.com/blog/464310),但出乎意料的是,在进行makePersistent操作的时候,可恶的错误又来了,exception如下:
    java.lang.NoSuchMethodError: javax.jdo.PersistenceManager.makePersistent(Ljava/lang/Object;)V
    at org.springframework.orm.jdo.JdoTemplate$9.doInJdo(JdoTemplate.java:374)
    at org.springframework.orm.jdo.JdoTemplate.execute(JdoTemplate.java:228)
    at org.springframework.orm.jdo.JdoTemplate.makePersistent(JdoTemplate.java:372)
    由于此时此刻我已被疲劳轰炸得体无完肤,因此继续google,找到了相当具说服力的一个论坛中的帖子(http://www.jpox.org/servlet/forum/viewthread?thread=3500)按图索引,重新更新应用中的spring.jar,结果就好了。

    完整的配置总结如下:
        <bean id="persistenceManagerFactory"
            class="org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean">
            <property name="jdoProperties">
                <props>
                    <prop key="javax.jdo.PersistenceManagerFactoryClass">
                          org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory
                        </prop>
                    <prop key="javax.jdo.option.ConnectionURL">
                          appengine
                    </prop>
                    <prop key="javax.jdo.option.NontransactionalRead">
                          true
                    </prop>
                    <prop key="javax.jdo.option.NontransactionalWrite">
                          true
                    </prop>
                    <prop key="javax.jdo.option.RetainValues">
                          true
                    </prop>
                    <prop key="datanucleus.appengine.autoCreateDatastoreTxns">
                          true
                        </prop>
                </props>
            </property>
            <!-- property name="persistenceManagerFactoryName" value="transactions-optional"/-->
            
        </bean>
        
    <bean id="jdoTransactionManager" class="org.springframework.orm.jdo.JdoTransactionManager">
            <property name="persistenceManagerFactory" ref="persistenceManagerFactory"/>
        </bean>

    <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager" ref="jdoTransactionManager"/>
            <property name="target" ref="employeeService"/>
            <property name="transactionAttributes">
                <props>
                    <prop key="save*">PROPAGATION_REQUIRED</prop>
                    <prop key="update*">PROPAGATION_REQUIRED</prop>
                    <prop key="del*">PROPAGATION_REQUIRED</prop>
                    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
                </props>
            </property>
        </bean>

  • 相关阅读:
    为什么要提倡"Design Pattern"呢? 开闭原则 系统设计时,注意对扩展开放,对修改闭合。
    面向对象、接口编程的重要性 python 为什么引入接口interface
    ON DUPLICATE KEY UPDATE
    Starting Session of user root.
    DRDS和RDS主要用来存储用户交易信息,MongoDB主要用来存储商品维度信息
    抽象不应该依赖于具体,具体应该依赖于抽象。 要针对接口编程,而不是针对实现编程。
    高层次的模块不应该依赖于低层次的模块
    系统设计的次要目的
    存储方案和底层数据结构的设计获得评审一致通过,并沉淀成为文档
    JVM 的 Xms 和 Xmx 设置一样大小的内存容量
  • 原文地址:https://www.cnblogs.com/jifeng/p/1710948.html
Copyright © 2011-2022 走看看