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
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