我有一个Spring引导应用程序,Hibernate作为ORM从sybase数据库中获取数据。
我有一个非常基本的设置,它与嵌入式服务器一起工作正常。 我使用以下站点生成战争并成功部署到本地tomcat服务器。 https://www.mkyong.com/spring-boot/spring-boot-deploy-war-file-to-tomcat/
我能够通过覆盖TOMEE持久性设置将应用程序部署到TOMEE服务器上 CATALINA_OPTS = -javax.persistence.provider = org.hibernate.ejb.HibernatePersistence abd在TOMEE / lib中放置所需的hibernate jar。
问题是当我尝试访问数据时,DAO中的请求调用sessionfactory.getcurrentsession()我收到以下错误:
org.hibernate.HibernateException: Could not obtain transaction-synchronized
Session for current thread
org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:134)
我正在使用Spring Boot:1.3.0 TOMEE 1.7.4
请不要在编码时判断我,因为这只是一个片段和我的应用配置
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
我的主要申请
@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
public class WelcomeController {
@Autowired
UserService service
@RequestMapping("/authenticate")
public String authenticate(httpServletRequest req, HtttpServletResponse res)
{
return service.authenticate(req.getParameter("userId"));
}
}
服务
@Service
public class UserServiceImpl implements UserService{
@Autowired
UserManager userManager
@override
public String authenticate(String userId)
{
return userManager.authenticate(userId);
}
}
其他经理层
@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图层
@Repository
public class UserDaoImpl implements UserDao{
@Autowired
SessionFactory sessionFactory
@override
public User authenticate(String userId)
{
Criteria criteria = sessionFactory.getCurrentSession().createCriteria;
----
}
}
应用程序在我的本地Tomcat 7服务器上运行正常 但得到错误的是在TOMEE服务器上获得交易。
我是否需要对代码或TOMEE服务器进行任何更改? 请帮忙
答案 0 :(得分:0)
如果隐式使用JTA,您可以通过查找或工厂访问(OpenEJB.getTransactionManager())配置事务管理器访问。