2 Replies Latest reply on Feb 23, 2012 3:46 AM by jobame

    jee:jndi-lookup delivers org.jboss.jca.adapters.jdbc.WrapperDataSource

    jobame

      Hello,

       

      in a MyFaces project on JBoss AS 7 I configured JTA successfully (schema e.g. gets created on the database) via

       

      <jee:jndi-lookup id="entityManagerFactory" jndi-name="java:jboss/datasources/MySqlDS"/>

       

      I am using Spring to configure beans to be injected. One of them

       

      <bean id="persistentContextFactory"
            class="org.apache.myfaces.orchestra.conversation.spring.JpaPersistenceContextFactory">
              <property name="entityManagerFactory" ref="entityManagerFactory"/>
      </bean>

       

      needs the entity manager created earlier. However, the application cannot be deployed because the target bean needs a javax.persistence.EntityManagerFactory but the jndi-lookup delivers org.jboss.jca.adapters.jdbc.WrapperDataSource. See the full error message at the bottom of this posting.

       

      Is there any solution to this?

       

      I tried to search on how to properly integrate spring, hibernate, jta with JBoss and read some posts like
      https://community.jboss.org/message/565183#565183
      https://community.jboss.org/wiki/CombiningESBJPAHibernateJTAAndSpring
      https://community.jboss.org/thread/111654?tstart=0
      https://community.jboss.org/wiki/JBossSpringIntegration

       

      However, they are either not helping me or seem to be outdated. Since I am unsure on whether my config is correct I do attach it here.

       

      <persistence xmlns="http://java.sun.com/xml/ns/persistence"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
      version="1.0">
      <persistence-unit name="jatPU" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source>
        <class>de.kdb.domain.User</class>
        <class>de.kdb.domain.Department</class>
        <properties>
         <!-- as defined in org.hibernate.cfg.Environment -->
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
         <property name="hibernate.show_sql" value="true" />
         <property name="hibernate.format_sql" value="true" />
         <property name="hibernate.use_sql_comments" value="true" />
         <property name="hibernate.connection.autocommit" value="false" />
         <property name="hibernate.cache.use_query_cache" value="false" />
         <property name="hibernate.cache.use_second_level_cache" value="false" />
         <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>
      </persistence-unit>
      </persistence>

       

      spring.xml

       

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
      xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
      xmlns:jee="http://www.springframework.org/schema/jee"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/jee
        http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">
      <context:component-scan base-package="de.kdb">
        <context:include-filter type="regex" expression=".service|.dao" />
      </context:component-scan>
      <context:annotation-config />
      <jee:jndi-lookup id="entityManagerFactory" jndi-name="java:jboss/datasources/MySqlDS"/>
      <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
              <property name="transactionManagerName" value="java:/TransactionManager" />
          </bean>
          <tx:annotation-driven transaction-manager="transactionManager" />
      </beans>

       

      web.spring.xml (obviously needs to be separate for conversation scope definition)

       

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:aop="http://www.springframework.org/schema/aop"
             xmlns:context="http://www.springframework.org/schema/context"
             xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/aop
              http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
              http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context-3.0.xsd">
          <context:component-scan base-package="de.kdb.gui"/>
          <!-- Import Orchestra Spring configuration -->
          <import resource="classpath*:/META-INF/spring-orchestra-init.xml"/>
          <!-- Configure view scope and additional Orchestra scopes -->
          <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
              <property name="scopes">
                  <map>
                      <entry key="view">
                          <bean class="de.kdb.spring.ViewScope"/>
                      </entry>
                      <entry key="manual">
                          <bean class="org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope">
                              <property name="timeout" value="30"/>
                              <property name="advices">
                                  <list>
                                      <ref bean="persistentContextConversationInterceptor"/>
                                  </list>
                              </property>
                          </bean>
                      </entry>
                      <entry key="access">
                          <bean class="org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope">
                              <property name="timeout" value="30"/>
                              <property name="advices">
                                  <list>
                                      <ref bean="persistentContextConversationInterceptor"/>
                                  </list>
                              </property>
                              <property name="lifetime" value="access"/>
                          </bean>
                      </entry>
                      <entry key="viewController">
                          <bean class="org.apache.myfaces.orchestra.viewController.spring.SpringViewControllerScope">
                              <property name="advices">
                                  <list>
                                      <ref bean="persistentContextConversationInterceptor"/>
                                  </list>
                              </property>
                          </bean>
                      </entry>
                  </map>
              </property>
          </bean>
          <!-- Advice to ensure correct persistence context in Orchestra-scoped beans -->
          <bean id="persistentContextConversationInterceptor"
                class="org.apache.myfaces.orchestra.conversation.spring.PersistenceContextConversationInterceptor">
              <property name="persistenceContextFactory" ref="persistentContextFactory"/>
          </bean>
          <!-- Define persistence context factory for JPA -->
          <bean id="persistentContextFactory"
                class="org.apache.myfaces.orchestra.conversation.spring.JpaPersistenceContextFactory">
              <property name="entityManagerFactory" ref="entityManagerFactory"/>
          </bean>
      </beans>

       


      10:15:44,363 ERROR [org.springframework.web.context.ContextLoader] (MSC service thread 1-2) Context initialization failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.beans.factory.config.CustomScopeConfigurer#0' defined in ServletContext resource [/WEB-INF/web.spring.xml]: Cannot create inner bean 'org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope#eb0945' of type [org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope] while setting bean property 'scopes' with key [TypedStringValue: value [manual], target type [null]]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.myfaces.orchestra.conversation.spring.SpringConversationScope#eb0945' defined in ServletContext resource [/WEB-INF/web.spring.xml]: Cannot resolve reference to bean 'persistentContextConversationInterceptor' while setting bean property 'advices' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'persistentContextConversationInterceptor' defined in ServletContext resource [/WEB-INF/web.spring.xml]: Cannot resolve reference to bean 'persistentContextFactory' while setting bean property 'persistenceContextFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'persistentContextFactory' defined in ServletContext resource [/WEB-INF/web.spring.xml]: Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.jboss.jca.adapters.jdbc.WrapperDataSource' to required type 'javax.persistence.EntityManagerFactory' for property 'entityManagerFactory'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.jboss.jca.adapters.jdbc.WrapperDataSource] to required type [javax.persistence.EntityManagerFactory] for property 'entityManagerFactory': no matching editors or conversion strategy found
      at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:281) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:120) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedMap(BeanDefinitionValueResolver.java:378) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:161) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1360) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1118) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1097) [spring-context-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:661) [spring-context-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:446) [spring-context-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE]
      at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3392) [jbossweb-7.0.10.Final.jar:]
      at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850) [jbossweb-7.0.10.Final.jar:]
      at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.0.Final.jar:7.1.0.Final]
      at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
      at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
      at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_26]
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_26]
      at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_26]