spring2.5.6+Hibernat

发布时间:2019-07-07 16:27:11编辑:auto阅读(1500)

    今天做spring2.5.6+Hibernate3+RMI整合的程序

    昨天的问题:  Unable to create Java 1.5 dependent parser: org.springframework.context.annotation.ComponentScanBeanDefinitionParser
    编译程序遇到的问题,应该是spring版本和配置文件之间的问题。
    解决方法:
    要将编译工程的jre改为1.6.0.3+spring2.5.6+hibernate3.3.2这样才匹配
    另外,要将applicationContext.xml放在src目录下才能直接通过
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");配置文件导入成功
    还有,对应类的****.hbm.xml文件最好一定和类文件放在一起,否则也容易找不到!!
    并且要在配置文件中加相对路径

    错误spring+Hibernate整合普通java工程,
    网上很多都是web工程
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    少包conmons—logging.jar包

    j今天的 问题:在正确整合spring2.5.6+hibernate3之后配置文件加入RMI服务配置,即报错:
    Exception in thread "main" org.springframework.beans.factory.BeanCreationException:
    Error creating bean with name 'logPersonService' defined in class path resource [server.xml]:
    Cannot resolve reference to bean 'logPerson' while setting bean property 'service';
     nested exception is org.springframework.beans.factory.BeanCreationException:
     Error creating bean with name 'logPerson' defined in class path resource [server.xml]:
     Invocation of init method failed; nested exception is java.lang.IllegalArgumentException:
      'sessionFactory' or 'hibernateTemplate' is required

    at com.test.ServicTest.main(ServicTest.java:15)
    Caused by: org.springframework.beans.factory.BeanCreationException:
    Error creating bean with name 'logPerson' defined in class path resource [server.xml]:
    Invocation of init method failed; nested exception is java.lang.IllegalArgumentException:
    'sessionFactory' or 'hibernateTemplate' is required

    解决方法:去掉重复定义的bean id原来有问题的配置文件如下(注意黑体字的地方):

    <!-- Pass the session factory to our UserDAO -->
    <bean id="PersonTarget" class="com.hibernate.LogPerson">
     <property name="sessionFactory"><ref local="SessionFactory"/></property>
    </bean>

    <!-- RMI service -->

    <bean id="logPerson" class="com.hibernate.LogPerson"/>  
    <bean id="logPersonService"
         class="org.springframework.remoting.rmi.RmiServiceExporter">
     <!-- RmiServiceExporter 对服务名没有特殊要求 -->  
      <property name="serviceName">    <value>LogPerson</value>   </property>  
      <property name="service">    <ref bean="logPerson"/>   </property>
      <property name="serviceInterface">    <value>com.rmi.ILogPerson</value>   </property>      
    <!-- 避免与默认的RMI注册端口冲突,因此修改为1200 -->
      <property name="registryPort">    <value>1200</value>   </property>

    </bean>

    修改过正确的配置文件如下:

    <!-- Pass the session factory to our UserDAO -->
    <bean id="PersonTarget" class="com.hibernate.LogPerson">
     <property name="sessionFactory"><ref local="SessionFactory"/></property>
    </bean>

    <!-- RMI service -->

    <bean id="logPersonService"
    class="org.springframework.remoting.rmi.RmiServiceExporter">
     <!-- RmiServiceExporter 对服务名没有特殊要求 -->  
      <property name="serviceName">    <value>LogPerson</value>   </property>  
      <property name="service">    <ref bean="logPerson"/>   </property>
      <property name="serviceInterface">    <value>com.rmi.ILogPerson</value>   </property>      
    <!-- 避免与默认的RMI注册端口冲突,因此修改为1200 -->
      <property name="registryPort">    <value>1200</value>   </property>

    </bean>

    总结: 对于spring+hibernate+RMI合并的配置文件,所有的类都不要进行bean id的重复定义。
    例如在<!-- Pass the session factory to our UserDAO -->部分已经定义了com.hibernate.LogPerson类
    <bean id="PersonTarget" class="com.hibernate.LogPerson">
      <property name="sessionFactory"><ref local="SessionFactory"/></property>
    </bean>
    后面的部分就不能再重复定义,否则就会报错
    <!-- RMI service -->重复定义
    <bean id="logPerson" class="com.hibernate.LogPerson"/>


关键字