Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
独立应用程序中的Spring JPA/Hibernate_Spring_Hibernate_Jpa - Fatal编程技术网

独立应用程序中的Spring JPA/Hibernate

独立应用程序中的Spring JPA/Hibernate,spring,hibernate,jpa,Spring,Hibernate,Jpa,我在非web应用程序中使用spring,在DB中使用hibernate。我遇到的问题是,当RegisterShotDownhook;是否关闭spring上下文容器?它没有正确关闭并关闭JPA的资源,因此我与DB的连接已达到最大值 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name

我在非web应用程序中使用spring,在DB中使用hibernate。我遇到的问题是,当RegisterShotDownhook;是否关闭spring上下文容器?它没有正确关闭并关闭JPA的资源,因此我与DB的连接已达到最大值

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceUnitName" value="pu" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="generateDdl" value="false" />
            <property name="showSql" value="false" />
            <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />
        </bean>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
我使用上面介绍的配置启动JPA层,并使用@Transactional注释将EM注入DAO

也许有人可以帮我找出我遗漏了什么,或者我应该如何处理独立环境中JPA会话的正确关闭

谢谢,


另外,我得到的例外是:java.net.SocketException:没有可用的缓冲区空间已达到最大连接数?:connect

1.创建事务管理器,如下所示:

5.将TrasnsactionManager注入到:

private PlatformTransactionManager platformTransactionManager = null;
6.保存对象,如:

platformTransactionManager .persist(obj);

这是带有JPA的application Context.xml的另一个示例。这对我来说很好

       <context:property-placeholder location=”classpath:jdbc.properties”/>

      <!– Connection Pool –>

      <bean id=”dataSource” destroy-method=”close”>

        <property name=”driverClass” value=”${jdbc.driverClass}”/>

        <property name=”jdbcUrl” value=”${jdbc.url}”/>

        <property name=”user” value=”${jdbc.username}”/>

        <property name=”password” value=”${jdbc.password}”/>

    </bean>



      <!– JPA EntityManagerFactory –>

      <bean id=”entityManagerFactory”

                  p:dataSource-ref=”dataSource”>

            <property name=”jpaVendorAdapter”>

                  <bean>

                          <property name=”database” value=”${jdbc.database}”/>

                              <property name=”showSql” value=”${jdbc.showSql}”/>                       

            </bean>          

            </property>

      </bean>

      <!– Transaction manager for a single JPA EntityManagerFactory (alternative to JTA) –>
      <bean id=”transactionManager”

                  p:entityManagerFactory-ref=”entityManagerFactory”/>



      <!– Activates various annotations to be detected in bean classes for eg @Autowired–>

      <context:annotation-config/>



        <!– enable the configuration of transactional behavior based on annotations  –>

        <tx:annotation-driven transaction-manager=”transactionManager”/>



      <!– Property Configurator –>

    <bean id=”propertyConfigurer”>

            <property name=”location” value=”jdbc.properties”/>

      </bean>

    <context:component-scan base-package=”com.test.dao”/>

</beans>

我认为@Transactional不适合注入EMs,是吗?PersistenceAnnotationBeanPostProcessor-据我所知,它扫描@Transactional注释以注入EM。我认为它扫描@PersistenceUnit和@PersistenceContext,而不是头对不起,我错把@Transactional当成了@PersistenceContext。所以我实际上的意思是我使用@PersistenceContext注入EM:例如:@PersistenceContexttype=PersistenceContexttype.EXTENDED private EntityManager EntityManager;我使用-D参数传递信息。问题是我随机得到了java.net.SocketException。有些时候我根本就没有例外。我已经删除了你博客的链接。这不是这个问题的答案。不要像这样再次发布指向它的链接。
 @PersistenceContext
 private EntityManager em = null;
private PlatformTransactionManager platformTransactionManager = null;
platformTransactionManager .persist(obj);
       <context:property-placeholder location=”classpath:jdbc.properties”/>

      <!– Connection Pool –>

      <bean id=”dataSource” destroy-method=”close”>

        <property name=”driverClass” value=”${jdbc.driverClass}”/>

        <property name=”jdbcUrl” value=”${jdbc.url}”/>

        <property name=”user” value=”${jdbc.username}”/>

        <property name=”password” value=”${jdbc.password}”/>

    </bean>



      <!– JPA EntityManagerFactory –>

      <bean id=”entityManagerFactory”

                  p:dataSource-ref=”dataSource”>

            <property name=”jpaVendorAdapter”>

                  <bean>

                          <property name=”database” value=”${jdbc.database}”/>

                              <property name=”showSql” value=”${jdbc.showSql}”/>                       

            </bean>          

            </property>

      </bean>

      <!– Transaction manager for a single JPA EntityManagerFactory (alternative to JTA) –>
      <bean id=”transactionManager”

                  p:entityManagerFactory-ref=”entityManagerFactory”/>



      <!– Activates various annotations to be detected in bean classes for eg @Autowired–>

      <context:annotation-config/>



        <!– enable the configuration of transactional behavior based on annotations  –>

        <tx:annotation-driven transaction-manager=”transactionManager”/>



      <!– Property Configurator –>

    <bean id=”propertyConfigurer”>

            <property name=”location” value=”jdbc.properties”/>

      </bean>

    <context:component-scan base-package=”com.test.dao”/>

</beans>