2014-10-22 2 views
2

создать конфигурацию Spring + JPA/Hibernate/C3P0 на этом пути:Spring 4 и Hibernate 4/C3P0 с Entity Manager, не начинайте

весна-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> 

    <context:component-scan base-package="com.nassoft.erpweb"/> 

    <mvc:resources mapping="/resources/**" location="/WEB-INF/resources/" /> 

    <mvc:annotation-driven /> 

    <mvc:interceptors> 
     <bean class="com.nassoft.erpweb.login.interceptor.AuthenticatorInterceptor" /> 
    </mvc:interceptors> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/view/"></property> 
     <property name="suffix" value=".jsp"></property> 
    </bean> 

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="myDataSource" /> 
     <property name="packagesToScan" value="com.nassoft.erpweb.*" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /> 
     </property> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
     <property name="driverClass" value="com.mysql.jdbc.Driver" /> 
     <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/nsm_erp" /> 
     <property name="user" value="root" /> 
     <property name="password" value="1234" /> 

     <property name="minPoolSize" value="5" /> 
     <property name="maxPoolSize" value="20" /> 
     <property name="maxStatements" value="50" /> 
     <property name="idleConnectionTestPeriod" value="3000" /> 
     <property name="loginTimeout" value="300" /> 
    </bean> 

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

    <tx:annotation-driven /> 

    <bean id="persistenceExceptionTranslationPostProcessor" class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 

</beans> 

I 'm не использовать persistence.xml, потому что я читал в некоторых местах его не нужно весной 4 с Hibernate.

Когда я запускаю сервер, он все еще загружается и не запускается через 45 секунд (или 180 секунд) в Tomcat7.

создать фабрику EntityManager для использования в моем проекте:

package com.nassoft.erpweb.factory; 

import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 
import javax.persistence.PersistenceUnit; 

public class ConnectionFactory { 

     @PersistenceUnit 
     private static EntityManagerFactory entityManagerFactory; 

     public static EntityManager getEntityManager(){ 
      if (entityManagerFactory == null){ 
       entityManagerFactory = Persistence.createEntityManagerFactory("ERPWeb"); 
      } 

      return entityManagerFactory.createEntityManager(); 
     } 
} 

Я думаю, что моя конфигурация не правильно, но я не нашел ни одного места с хорошим текстом о нем.

Может ли кто-нибудь помочь мне?

Отредактировано.

Проблема решена! Во-первых: я применил Инъекция зависимостей в каждом контроллере для приведения DAO с IoC. Во-вторых: я использую аннотацию @Repository для создания репозитория в каждом DAO, который будет получать мои методы баз данных. Третье: я создал EntityManage таким образом для каждого DAO:

@PersistenceContext 
private EntityManager manager; 

ответ

0

Это не полный ответ. Я просто указываю вам направление.

Spring не может найти ваш класс ConnectionFactory, поэтому он не будет вводить entityManagerFactory. Не требуется, чтобы вы снова создавали синглтон для передачи entityManager, поэтому нет класса ConnectionFactory не требуется. Весна будет делать это для вас, вводя в DAO или контроллер и т.д., например, вы следующий DAO, который получает данные.

@Service 
public class SomeDAO { 

    @AutoWire -- i'm not sure what you call for the entityManager. 
    private static EntityManagerFactory entityManagerFactory; 

} 

Существуют больше информации here. Вместо @autowiring он с помощью ручного впрыска. Я в вашем случае, вы можете попробовать автоувеличивать.

Также убедитесь, что у вас есть эти классы в пути <spring:component-scan /> файла контекста приложения, иначе весна не сможет распознать и ввести менеджера сущностей.

+0

Ваше сообщение не является тем, что я ожидаю, но оно очень помогает, как anwser! Большое спасибо! –

+0

@felipeocr Вероятно, отправьте свой ответ так, чтобы другие посчитали его полезным :) – Zeus

+0

Я отправлю его, когда закончу все мое решение! Большое спасибо. :) –

Смежные вопросы