Hibernate4在JBoss7上不工作

Hibernate4在JBoss7上不工作,hibernate,jboss7.x,wildfly,spring-transactions,hibernate-4.x,Hibernate,Jboss7.x,Wildfly,Spring Transactions,Hibernate 4.x,当我在Jboss7上部署Spring4-Hibernate-4应用程序时,它抛出错误,部署失败。详情: 配置代码: @Configuration @EnableTransactionManagement @ComponentScan(basePackages = { "com.arg.utility.hibernate" }) @PropertySource(value = { "classpath:application.properties" }) public class Hibernat

当我在Jboss7上部署Spring4-Hibernate-4应用程序时,它抛出错误,部署失败。详情:

配置代码:

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = { "com.arg.utility.hibernate" })
@PropertySource(value = { "classpath:application.properties" })
public class HibernateConfigWS {

@Bean
public LocalSessionFactoryBean sessionFactoryWS() throws SQLException, NamingException {
    LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
    sessionFactory.setDataSource(dataSourceWS());
    sessionFactory.setPackagesToScan(new String[] { "com.arg.utility.hibernate.model" });
    sessionFactory.setHibernateProperties(hibernateProperties());
    return sessionFactory;
 }


@Bean
@Lazy
public DataSource dataSourceWS() throws SQLException, NamingException {
    InitialContext initContext = new InitialContext();
    DataSource ds = null;
    try{
         ds = (DataSource)initContext.lookup(System.getProperty(UtilityConstants.JNDI_WS_DATASOURCE));
    }catch(Exception e){
        LOGGER.error("Datasource lookup failed :"+e.getStackTrace());
    }
    return ds;
}


@Bean
public HibernateTransactionManager transactionManagerWS(SessionFactory sessionFactoryWS) {
   HibernateTransactionManager txManager = new HibernateTransactionManager();
   txManager.setSessionFactory(sessionFactoryWS);
   return txManager;
}

  //----------------------HIBERNATE COMMON PROPERTIES CONFIG---------------------//
/**
 * 
 * @return properties object
 */
private Properties hibernateProperties() {
    Properties properties = new Properties();
    properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
    properties.put("hibernate.show_sql", "false");
    properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
    /*properties.put("hibernate.connection.provider_class", "org.hibernate.c3p0.internal.C3P0ConnectionProvider");  // commented
    properties.put("hibernate.c3p0.min_size", "5");  // commented
    properties.put("hibernate.c3p0.max_size", "20");  // commented
    properties.put("hibernate.c3p0.timeout", "1800");  // commented
    properties.put("hibernate.c3p0.max_statements", "50");*/  // commented
    return properties;        
}

}
JBoss 7 standalone.xml中的数据源条目:

<datasource jndi-name="java:/WSDataSource" pool-name="WSDataSource" enabled="true" use-java-context="true">
                <connection-url>jdbc:mysql://dshost:3306/ds_name</connection-url>
                <connection-property name="zeroDateTimeBehavior">
                    convertToNull
                </connection-property>
                <driver>com.mysql</driver>
                <pool>
                    <min-pool-size>0</min-pool-size>
                    <max-pool-size>10</max-pool-size>
                    <prefill>true</prefill>
                </pool>
                <security>
                    <user-name>abc</user-name>
                    <password>abc@123</password>
                </security>
                <validation>
                    <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
                    <validate-on-match>false</validate-on-match>
                    <background-validation>true</background-validation>
                    <background-validation-millis>30000</background-validation-millis>
                    <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
                </validation>
    </datasource>

jdbc:mysql://dshost:3306/ds_name
敞篷车
com.mysql
0
10
真的
abc
abc@123
假的
真的
30000
部署应用程序时,出现以下错误:

    <<< ServerService Thread Pool -- 68:2017/04/07 16:20:54.676:org.springframework.web.context.ContextLoader::::: Context initialization failed  >>>
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerWS' defined in com.arg.hibernate.config.HibernateConfigWS: Invocation of init method failed; nested exception is org.hibernate.service.UnknownUnwrapTypeException: Cannot unwrap to requested type [javax.sql.DataSource]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
    at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:187)
    at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:198)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:100)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: org.hibernate.service.UnknownUnwrapTypeException: Cannot unwrap to requested type [javax.sql.DataSource]
    at org.hibernate.engine.jdbc.connections.internal.UserSuppliedConnectionProviderImpl.unwrap(UserSuppliedConnectionProviderImpl.java:55)
    at org.springframework.orm.hibernate4.SessionFactoryUtils.getDataSource(SessionFactoryUtils.java:106)
    at org.springframework.orm.hibernate4.HibernateTransactionManager.afterPropertiesSet(HibernateTransactionManager.java:356)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
    ... 22 more
>
org.springframework.beans.factory.BeanCreationException:使用com.arg.hibernate.config.HibernateConfigWS中定义的名称“transactionManagerWS”创建bean时出错:调用init方法失败;嵌套异常为org.hibernate.service.unknownNunWraptypeException:无法展开到请求的类型[javax.sql.DataSource]
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
位于org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
位于org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
位于org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.PreInstanceSingleton(DefaultListableBeanFactory.java:761)
位于org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
位于org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
位于org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
位于org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
位于io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:187)
位于io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:198)
位于org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:100)
位于org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82)
位于java.util.concurrent.Executors$RunnableAdapter.call(未知源)
位于java.util.concurrent.FutureTask.run(未知源)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(未知源)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(未知源)
位于java.lang.Thread.run(未知源)
位于org.jboss.threads.JBossThread.run(JBossThread.java:320)
原因:org.hibernate.service.unknownWrapTypeException:无法展开为请求的类型[javax.sql.DataSource]
位于org.hibernate.engine.jdbc.connections.internal.UserSuppliedConnectionProviderImpl.unwrap(UserSuppliedConnectionProviderImpl.java:55)
位于org.springframework.orm.hibernate4.SessionFactoryUtils.getDataSource(SessionFactoryUtils.java:106)
位于org.springframework.orm.hibernate4.HibernateTransactionManager.afterPropertieSet(HibernateTransactionManager.java:356)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)
... 还有22个
当我在配置文件中取消对c3p0属性设置行的注释时,应用程序已成功部署(但稍后在创建连接时引发异常)。然而,我的要求是我不必使用c3p0。因此,我的问题是:

  • 是否可以在JBoss7上运行Hibernate4而不使用c3p0
  • 如果是,如何进行?是否需要其他配置
    如果查看堆栈跟踪,它指的是
    UserSuppliedConnectionProviderImpl
    。这就是引发异常的地方。根据您的配置和
    ConnectionProviderInitiator.initiateService
    中的代码,我原以为这将是
    DatasourceConnectionProviderImpl
    的实例


    AvailableSettings.DATASOURCE
    LocalSessionFactoryBuilder.LocalSessionFactoryBuilder
    构造函数设置,前提是您提供了
    DATASOURCE
    。你确定你的JNDI查找没有自动返回
    null

    你能提供
    System.getProperty(UtilityConstants.JNDI\u WS\u DATASOURCE)的值吗?
    @AlexBarnes它是属性文件中的一个常量,其值为“java:/WSDataSource”。jndi查找成功,没有问题。很高兴知道。您使用的是Hibernate 4版本的
    LocalSessionFactoryBean
    ,即
    org.springframework.orm.hibernate4.LocalSessionFactoryBean
    是的,
    org.springframework.orm.hibernate4.LocalSessionFactoryBean
    org.springframework.orm.hibernate4.HibernateTransactionManager
    谢谢。这确实是一个错误