在TOMEE服务器

时间:2017-11-17 18:27:49

标签: hibernate spring-boot tomee apache-tomee

我有一个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服务器进行任何更改? 请帮忙

1 个答案:

答案 0 :(得分:0)

如果隐式使用JTA,您可以通过查找或工厂访问(OpenEJB.getTransactionManager())配置事务管理器访问。