2017-11-17 2 views
0

Hallo ich habe eine Spring-Boot-Anwendung mit Hibernate als ORM, um Daten aus Sybase-Datenbank zu holen.Spring Boot und Hibernate-Anwendung auf TOMEE-Server

Ich habe eine sehr einfache Einrichtung und es funktioniert gut mit Embedded-Server. Ich habe diese folgende Website verwendet, um einen Krieg zu generieren und ihn erfolgreich auf dem lokalen Tomcat-Server bereitzustellen. https://www.mkyong.com/spring-boot/spring-boot-deploy-war-file-to-tomcat/.

konnte ich die Anwendung auf TOMEE Server durch Überschreiben TOMEE persistance Einstellung CATALINA_OPTS = -javax.persistence.provider org.hibernate.ejb.HibernatePersistence = abd Platzierung erforderlichen Hibernate Gläser in TOMEE/lib implementieren.

Problem ist, wenn ich versuche, auf Daten zuzugreifen, ruft der Anfrage im DAO sessionfactory.getcurrentsession() Ich erhalte folgende Fehlermeldung:

org.hibernate.HibernateException: Could not obtain transaction-synchronized 
Session for current thread  
org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:134) 

I Frühlings-Boot bin mit: 1.3.0 TOMEE 1.7. 4

Bitte nicht mich auf meine Codierung beurteilen, da dies nur ein Ausschnitt und meine app Konfigurationen ist

Application.properties

spring.datasource.url = jdbc:mysql://localhost:3306/netgloo_blog 
spring.datasource.username = root 
spring.datasource.password = root 
spring.jpa.properties.hibernate.dialect = 
org.hibernate.dialect.MySQL5Dialect 
spring.jpa.properties.hibernate.current_session_context_class= 
org.springframework.orm.hibernate4.SpringSessionContext 

MY Hauptanwendung

@SpringBootApplication 
    public class SpringBootWebApplication extends 
SpringBootServletInitializer { 

@Override 
protected SpringApplicationBuilder configure(SpringApplicationBuilder 
application) { 
    return application.sources(SpringBootWebApplication.class); 
} 

public static void main(String[] args) throws Exception { 
    SpringApplication.run(SpringBootWebApplication.class, args); 
} 

@Bean 
public HibernateJpaSessionFactoryBean sessionFactory() { 
    return new HibernateJpaSessionFactoryBean(); 
} 

} 

-Controller

@Controller 
public class WelcomeController { 

    @Autowired 
    UserService service 

@RequestMapping("/authenticate") 
public String authenticate(httpServletRequest req, HtttpServletResponse res) 
{ 
    return service.authenticate(req.getParameter("userId")); 
} 

} 

Dienst

@Service 
public class UserServiceImpl implements UserService{ 

@Autowired 
UserManager userManager 

@override 
public String authenticate(String userId) 
{ 
    return userManager.authenticate(userId); 
} 

}

Zusätzliche Manager-Schicht

@Service 
@Transactional 
public class UserManagerImpl implements UserManager{ 

@Autowired 
UserDao userDao 

@override 
public String authenticate(String userId) 
{ 
    User user = userDao.CheckUserIsPresentInDB(userId); 
    if(user != null){ 
    return "success"; 
    } 
} 

} 

DAO Schicht

@Repository 
public class UserDaoImpl implements UserDao{ 

@Autowired 
SessionFactory sessionFactory 

@override 
public User authenticate(String userId) 
{ 
    Criteria criteria = sessionFactory.getCurrentSession().createCriteria; 
    ---- 

} 

} 

Anwendung läuft auf meinem lokalen Tomcat 7 Server in Ordnung, aber errror bekommen Transaktion auf TOMEE Server zu erhalten.

Muss ich Änderungen am Code oder am TOMEE-Server vornehmen? Bitte helfen Sie

+0

Ich habe das Problem durch Entfernen der Bohne @Bean öffentliche HibernateJpaSessionFactoryBean session() { return new HibernateJpaSessionFactoryBean() gelöst; } und autowirinng Persistance Kontext als Entity Manager Ich entpackte dann die zugrunde liegende sessionFactory aus EntityManager mit entityManager.unWrap() – Brayan

Antwort

0

Wenn Sie JTA implizit verwenden, können Sie den Zugriff auf den Transaktionsmanager entweder über einen Lookup oder einen Factory-Zugriff konfigurieren (OpenEJB.getTransactionManager()).