You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by Gert Vanthienen <ge...@gmail.com> on 2009/12/01 13:45:56 UTC

Re: (Resolved) xbean.xml Cannot create inner bean (defined in jndi.xml)

L.S.,

Another way of solving this would be using the JNDI integration to get
at the bean.  All the beans in the jndiEntries map can be accessed by
doing a JNDI lookup without requiring the import of the entire
jndi.xml file.

E.g. if you add a JPA EntityManager bean in this map under key
java:/comp/env/EntityManager, you can access it from your SU by doing
a JNDI lookup like
  <bean id="entityManager"
class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:/comp/env/EntityManager"/>
  </bean>

Regards,

Gert Vanthienen
------------------------
Open Source SOA: http://fusesource.com
Blog: http://gertvanthienen.blogspot.com/



2009/11/30 S_BN <Si...@nsn.com>:
>
>
> Resolved!
> Solution is to import the jndi.xml inside the xbean of the SU
> <import resource="classpath*:jndi.xml"/>
>
> my xbean now looks like
>
> <?xml version="1.0"?>
> <beans xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0"
>       xmlns:sm="http://servicemix.apache.org/config/1.0"
>       xmlns:b="http://servicemix.apache.org/samples/bridge"
>           xmlns:util="http://www.springframework.org/schema/util">
>
>
> <import resource="classpath*:jndi.xml"/>
>  <cxfse:endpoint service="b:testcxfse"
>                 endpoint="endpoint">
>
>
>   <cxfse:pojo>
>     <bean class="com.nsn.oss.nat.lct.mediation.snmp_udp.advise.AdviseImpl">
>       <property name="localIp">
>          <value>10.254.126.23</value>
>        </property>
>                 <property name="localPort">
>          <value>1612</value>
>        </property>
>                 <property name="neDataAccess" ref="neDataAccessDao"/>
>     </bean>
>  </cxfse:pojo>
> </cxfse:endpoint>
>
> ======================================
>
>
> S_BN wrote:
>>
>> Hello,
>>
>> I am using JPA/Hibernate in servicemix.
>> Here is my usecase:
>> I have created a jar for the database helper using JPA/Hibernate. I have
>> put this in servicemix\lib
>> I have created a SA containing SU which will need to access methods from
>> dbHelper.jar
>>
>> I have added the following to the jndi.xml under servicemix\conf
>> <util:map id="jndiEntries">
>>               <entry key="JPAEntityManager" value-ref="entityManagerFactory" />
>> .
>> .
>> </util:map>
>>
>> <bean id="entityManagerFactory"
>>
>> class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
>>               <property name="persistenceUnitManager" ref="persistenceUnitManager" />
>>               <property name="dataSource" ref="dataSource" />
>>               <property name="jpaVendorAdapter">
>>                       <bean
>> class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
>>                               <property name="showSql" value="true" />
>>                               <property name="generateDdl" value="false" />
>>                               <property name="databasePlatform"
>> value="org.hibernate.dialect.HSQLDialect" />
>>                               <!--property name="databasePlatform"
>> value="org.hibernate.dialect.Oracle9Dialect" /-->
>>                       </bean>
>>               </property>
>>               <property name="loadTimeWeaver">
>>                       <bean
>> class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver"/>
>>               </property>
>>       </bean>
>>
>>       <bean id="JPAtransactionManager"
>> class="org.springframework.orm.jpa.JpaTransactionManager">
>>               <property name="dataSource" ref="dataSource" />
>>               <property name="entityManagerFactory" ref="entityManagerFactory" />
>>       </bean>
>>
>>
>>       <bean
>> class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"
>> />
>>       <bean
>> class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"
>> />
>>
>>       <bean id="dataSource_oracle"
>> class="org.springframework.jdbc.datasource.DriverManagerDataSource">
>>               <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"
>> />
>>               <property name="url" value="jdbc:oracle:thin:@10.58.116.101:1521:OSS" />
>>               <property name="username" value="omc" />
>>               <property name="password" value="omc" />
>>       </bean>
>>
>>       <bean id="dataSource"
>> class="org.springframework.jdbc.datasource.DriverManagerDataSource">
>>               <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
>>               <property name="url" value="jdbc:hsqldb:." />
>>               <property name="username" value="sa" />
>>               <property name="password" value="" />
>>       </bean>
>>
>>       <bean id="persistenceUnitManager"
>>
>> class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
>>               <property name="persistenceXmlLocations">
>>                       <list>
>>                               <value>classpath*:lctMediation-dataAccess-persistence.xml</value>
>>                       </list>
>>               </property>
>>               <property name="defaultDataSource" ref="dataSource" />
>>
>>       </bean>
>>
>> Here is the xbean i have used for the SU
>> <?xml version="1.0"?>
>> <beans xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0"
>>        xmlns:sm="http://servicemix.apache.org/config/1.0"
>>        xmlns:b="http://servicemix.apache.org/samples/bridge">
>>
>>   <cxfse:endpoint service="b:testcxfse"
>>                  endpoint="endpoint">
>>
>>
>>    <cxfse:pojo>
>>      <bean
>> class="com.nsn.oss.nat.lct.mediation.snmp_udp.advise.AdviseImpl">
>>        <property name="localIp">
>>           <value>10.254.126.23</value>
>>         </property>
>>                <property name="localPort">
>>           <value>1612</value>
>>         </property>
>>                <property name="neDataAccess" ref="neDataAccessDao"/>
>>
>>      </bean>
>>  </cxfse:pojo>
>>
>> </cxfse:endpoint>
>>
>> When I deploy the SU, i get the following exception
>> (The same error does not occur if i remove bean definitions from jndi.xml
>> and put it inside the xbean.xml itself!!!. But, I will have multiple SUs
>> in different SA which need to use the same dbHelper.
>> So I would prefer to have JPA/HIbernate dependency injection from jndi.xml
>> rather than in xbean.xml of SU)
>>
>> Exception:
>> DEBUG - CxfSeComponent                 - Looking for
>> D:\NetActTransport1.0\Tools\apache-servicemix-3.3.1\data\smx\service-assemblies\nat-common-cxf-sa\version_1\sus\servicemix-cxf-se\nat-common-cxf-se-su\xbean.xml:
>> true
>> ERROR - CxfSeComponent                 -
>> org.springframework.beans.factory.BeanCreationException: Error creating
>> bean with name 'org.apache.servicemix.cxfse.CxfSeEndpoint#0' defined in
>> file
>> [D:\NetActTransport1.0\Tools\apache-servicemix-3.3.1\data\smx\service-assemblies\nat-common-cxf-sa\version_1\sus\servicemix-cxf-se\nat-common-cxf-se-su\xbean.xml]:
>> Cannot create inner bean
>> 'com.nsn.oss.nat.lct.mediation.snmp_udp.advise.AdviseImpl#0' of type
>> [com.nsn.oss.nat.lct.mediation.snmp_udp.advise.AdviseImpl] while setting
>> bean property 'pojo'; nested exception is
>> org.springframework.beans.factory.BeanCreationException: Error creating
>> bean with name
>> 'com.nsn.oss.nat.lct.mediation.snmp_udp.advise.AdviseImpl#0' defined in
>> file
>> [D:\NetActTransport1.0\Tools\apache-servicemix-3.3.1\data\smx\service-assemblies\nat-common-cxf-sa\version_1\sus\servicemix-cxf-se\nat-common-cxf-se-su\xbean.xml]:
>> Cannot resolve reference to bean 'neDataAccessDao' while setting bean
>> property 'neDataAccess'; nested exception is
>> org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean
>> named 'neDataAccessDao' is defined
>>
>>
>> I do not understand why SU's xbean.xml is unable to refer to the bean
>> created in jndi.xml of servicemix\conf
>>
>> Is there any other configuration to be done?
>>
>> Thanks in advance.
>> Best Regards,
>> Sindhu
>>
>>
>
> --
> View this message in context: http://old.nabble.com/xbean.xml-Cannot-create-inner-bean-%28defined-in-jndi.xml%29-tp26535002p26570012.html
> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>
>