You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by Benoît Clouet <be...@gmail.com> on 2008/08/04 23:00:30 UTC

Re: Enterprise parameters externalization

Hi all,

finally, I managed to get rid of this error, but the solution doesn't
satisfies me :
- for each SU where I wanted to do JNDI name resolution, I moved the
dependency in the web app. For example I had to define the destination
dir of a file-sender SU, so I added the dependency servicemix-file to
the webapp
- for each SU where I wanted to do JNDI name resolution, I added a
classpath.xml just before the xbean.xml containing <classpath
inverse="true" />

This way, the services units are able to access JNDI env values
defined in the application context.

This makes me modify the apache-servicemix-web and I don't like this.
Maybe someone knows another way to do ?

On Tue, Jul 29, 2008 at 1:51 AM, Benoît Clouet <be...@gmail.com> wrote:
> Hello the list,
>
> I'm currently stuck on an I can't manage to solve. Don't know if it is
> a Servicemix or a Tomcat related issue.
> First my environment :
> - Tomcat 5.5.26
> - Servicemix 3.2.1 deployed as a war inside Tomcat
> - Java 1.5
>
> I've configured a service-assembly where there is a file-sender
> service-unit that I would like to configure through parameters coming
> from the Tomcat JNDI tree (the target dir). I'm hoping that by doing
> this way, I can avoid to rely on the deployment layout.
>
> The servicemix.xml of the webapp contains (it's only a snip)  :
>  <sm:container id="jbi"
>                rootDir="${jbi.root}/data"
>                MBeanServer="#server"
>                monitorInstallationDirectory="true"
>                installationDirPath="${jbi.root}/deploy"
>                monitorDeploymentDirectory="true"
>                deploymentDirPath="${jbi.root}/deploy">
>
> I've added in my file service unit this xbean.xml :
>    <file:sender service="b:File" endpoint="endpoint">
>        <property name="directory">
>            <bean class="org.springframework.jndi.JndiObjectFactoryBean">
>                <property name="jndiName">
>                    <value>java:comp/env/Inbox</value>
>                </property>
>            </bean>
>        </property>
>    </file:sender>
>
> In my Tomcat server.xml I've got :
> <Context docBase="/Users/benoitclouet/apache-servicemix-web-3.2.1"
> path="/apache-servicemix-web"
>                    reloadable="true" useNaming="true">
>                    <Environment name="Inbox" type="java.lang.String"
> value="/Users/benoitclouet/Documents/temp/inbox" />
> </Context>
>
> I customized a bit the servicemix webapp so my web.xml contains :
>    <resource-env-ref>
>        <description>My dir</description>
>        <resource-env-ref-name>Inbox</resource-env-ref-name>
>        <resource-env-ref-type>java.lang.String</resource-env-ref-type>
>    </resource-env-ref>
>
> I also added in the webapp a META-INF/context.xml containing :
> <ResourceLink name="Inbox global="Inbox" type="java.lang.String" />
>
> But I doesn't work as expected (the file sender is expected to write
> his files in the dir /Users/benoitclouet/Documents/temp/inbox).
>
> In fact, I even get an error at service-archive deployment :
> org.apache.xbean.kernel.ServiceRegistrationException:
> org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name
> 'org.apache.servicemix.file.FileSenderEndpoint' defined in file
> [/Users/benoitclouet/Documents/temp/data/service-assemblies/inbound-sa/version_2/sus/servicemix-file/inbound-su-file/xbean.xml]:
> Cannot create inner bean
> 'org.springframework.jndi.JndiObjectFactoryBean#1b289f' of type
> [org.springframework.jndi.JndiObjectFactoryBean] while setting bean
> property 'directory'; nested exception is
> org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name
> 'org.springframework.jndi.JndiObjectFactoryBean#1b289f' defined in
> file [/Users/benoitclouet/Documents/temp/data/service-assemblies/inbound-sa/version_2/sus/servicemix-file/inbound-su-file/xbean.xml]:
> Invocation of init method failed; nested exception is
> javax.naming.NameNotFoundException: Name java:comp is not bound in
> this Context
>    at org.apache.xbean.kernel.standard.ServiceManagerRegistry.registerService(ServiceManagerRegistry.java:424)
>    at org.apache.xbean.kernel.standard.StandardKernel.registerService(StandardKernel.java:220)
>    at org.apache.xbean.server.spring.loader.SpringLoader.load(SpringLoader.java:152)
>    at org.apache.servicemix.common.xbean.AbstractXBeanDeployer.deploy(AbstractXBeanDeployer.java:83)
>    at org.apache.servicemix.common.BaseServiceUnitManager.doDeploy(BaseServiceUnitManager.java:88)
>    at org.apache.servicemix.common.BaseServiceUnitManager.deploy(BaseServiceUnitManager.java:69)
>    at org.apache.servicemix.jbi.framework.DeploymentService.deployServiceAssembly(DeploymentService.java:508)
>    at org.apache.servicemix.jbi.framework.AutoDeploymentService.updateServiceAssembly(AutoDeploymentService.java:350)
>    at org.apache.servicemix.jbi.framework.AutoDeploymentService.updateArchive(AutoDeploymentService.java:253)
>    at org.apache.servicemix.jbi.framework.AutoDeploymentService.monitorDirectory(AutoDeploymentService.java:647)
>    at org.apache.servicemix.jbi.framework.AutoDeploymentService.access$2(AutoDeploymentService.java:623)
>    at org.apache.servicemix.jbi.framework.AutoDeploymentService$1.run(AutoDeploymentService.java:614)
>    at java.util.TimerThread.mainLoop(Timer.java:512)
>    at java.util.TimerThread.run(Timer.java:462)
>
> After spending some time crawling, and debugging the deployment
> process to find a way forward, I must confess, I'm completely stuck.
> The only post I found wasn't answered :
> http://www.nabble.com/JNDI-issue-running-under-Tomcat-tp8930143p8930143.html
> By reading this post I'm prety sure samg was trying to do the same as
> me, maybe he has found a solution he could provide ?
>
> Any help welcome.
>
> Benoît
>