Well,

here is the result of my test.

So, I have changed my SU xbean.xml like this :

<beans xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0";
   xmlns:nsmx="http://www.nanthrax.net/smx";>

   <bean 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="locations">
         <value>classpath:/my-service.properties</value>
      </property>
   </bean>

   <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
      <property name="environment">
         <props>
            <prop key="java.naming.factory.initial">
               ${bos.jndiContextFactory}
            </prop>
            <prop key="java.naming.provider.url">
               ${bos.jndiUrlProvider}
            </prop>
         </props>
      </property>
   </bean>

   <bean id="ejbProxy" 
class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean">
      <property name="jndiName" value="net/nanthrax/ejb/MyServiceSession"/>
      <property name="businessInterface" 
value="net.nanthrax.ejb.MyServiceSession"/>
      <property name="homeInterface" 
value="net.nanthrax.ejb.MyServiceSessionHome"/>
      <property name="refreshHomeOnConnectFailure" value="true"/>
      <property name="cacheHome" value="true"/>
      <property name="lookupHomeOnStartup" value="true"/>
      <property name="resourceRef" value="false"/>
      <property name="jndiTemplate" ref="jndiTemplate"/>
   </bean>

   <cxfse:endpoint service="nsmx:my-service-delegation">
      <cxfse:pojo>
         <bean class="net.nanthrax.services.MyServiceEJBDelegation">
            <property name="proxy" ref="ejbProxy"/>
         </bean>
      </cxfse:pojo>
   </cxfse:endpoint>

</beans>

So I have add a new MyServiceEJBDelegation bean which looks like this :

/**
 * Service delegator to MyServiceSession EJB
 *
 * @author <a href="mailto:[EMAIL PROTECTED]">Jean-Baptiste Onofré</a>
 */
package net.nanthrax.services;

import javax.jws.WebService;

import net.nanthrax.ejb.MyServiceSession;

@WebService(serviceName = "MyServiceEJBProxy", targetNamespace = 
"http://www.nanthrax.net/smx/my-service";)
public class MyServiceEJBDelegation {

  private MyServiceSession proxy;

  // getters and setters
  public void setProxy(MyServiceSession proxy) {
    this.proxy = proxy;
  }

  public MyServiceSession getProxy() {
    return this.proxy;
  }

  // service delegation methods

  public String echo(String message) {
    try {
      return proxy.echo(message);
    }
    catch(Exception exception) {
       return "Error : " + exception.getMessage();
    }
  }

}


It's a first step : it works :)

But, for my point of view, it's not very "agile" service : the delegator needs 
to be updated each time that the service EJB side change (adding method, etc).

So, I'm looking for a way to publish EJB on the fly.

Keep you posted

Regards
-- 
Jean-Baptiste Onofré
[EMAIL PROTECTED]
BuildProcess/AutoDeploy Project Leader
http://buildprocess.sourceforge.net

 On Mon 22/09/08 10:45, " Jean-Baptiste Onofré" [EMAIL PROTECTED] wrote:
> My purpose is to create a EJB proxy (as we can do using JSR181 component)
> using CXF-SE.
> As I need to define the @WebService annotation in the POJO bean used by
> cxf-se component, I can't do it directly
using the SimpleRemoteStatelessSessionProxyFactoryBean provided by Spring
> (I can't change the implementation of this bean).
> So I need to create a FrontendBean and define the call like this in the
> xbean.xml :
> <bean id="ejbProxy"
> class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFact
> oryBean">
[...]
> </bean>
> 
> <cxfse:pojo>
> <bean class="my.package.FrontendBean">
> <property name="proxy" ref="ejbProxy"/>
> </bean>
> </cxfse:pojo>
> 
> The FrontendBean will define the same methods as the EJB, and the
> implementation of each methods will call the EJB side using the Spring
> proxy.
> Is CXF will be able to generate the WDSL dynamically using the POJO (and
> the POJO methods) or should I create my own one manually ?
Is this solution correct ?
> 
> Maybe it can be interesting to create a documentation how to define a EJB
> proxy using CXF-SE (I can write one if you want when my test case will be
> completed :)).
> Regards
> 
> On Mon 22/09/08 09:17, "Freeman Fang" freema
> [EMAIL PROTECTED] wrote:
> Jean-Baptiste Onofré wrote:
> > > Hi all,
> > >
> > > I have setup an SU like this (in the
> xbean.xml)
> :
> >
> > > <beans xmlns:cxfse="http://servicemix.apache.org/cxfse/1.0";
>>>        xmlns:fsb="http://www.fimasys.com/fsb";>
>>>
> > >    <bean
> >
> class="org.springframework.beans.factory.config.PropertyPlaceholderConfigur
> 
> er">
> >       <property name="locations">
> > >         
> >
> <value>classpath:/automatic-validation-service-config.properties</
> 
> value>
> >       </property>
> > >    </bean>
> > >
> > >    <bean id="jndiTemplate"
> >
> class="org.springframework.jndi.JndiTemplate">
>       <property
> > name="environment">
> >          <props>
> > >             <prop
> > key="java.naming.factory.initial">
> >                ${bos.jndiContextFactory}
> > >             </prop>
> > >             <prop
> > key="java.naming.provider.url">
> >                ${bos.jndiUrlProvider}
> > >             </prop>
> > >          </props>
> > >       </property>
> > >    </bean>
> > >
> > >    <cxfse:endpoint
> >
> service="automatic-validation-service-proxy">
>       <cxfse:pojo>
> > >          <bean
> >
> class="org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFact
> 
> oryBean">
> >             <property name="jndiName"
> >
> value="ejb/profinance/back-office/AutomaticSimulationSession"/>
>             <property
> name="businessInterface"
>
> value="com.fimasys.finance.profinance.components.simulation.common.ejb.Auto
> 
> maticSimulationSession"/>
> >             <property
> name="homeInterface"
>
> value="com.fimasys.finance.profinance.components.simulation.common.ejb.Auto
> 
> maticSimulationSessionHome"/>
> >             <property
> > name="refreshHomeOnConnectFailure"
> value="true"/>
>             <property
> name="cacheHome"
> value="true"/>
> >             <property
> name="lookupHomeOnStartup"
> value="true"/>
> >             <property
> name="resourceRef"
> value="false"/>
> >             <property
> name="jndiTemplate"
> ref="jndiTemplate"/>
> >          </bean>
> > >       </cxfse:pojo>
> > >    </cxfse:endpoint>
> > >
> > > </beans>
> > >
> > > In the SU POM dependencies, I have added
> all
> required jar (the jbossall-client providing the JNDI
> context, the Spring
> context to have the
> SimpleRemoteStatelessSessionProxyFactoryBean and my
> application client to have the stub, home and
> remote
> interface).
> >
> > > When I deploy the SA which embed this SU, I
> have
> this stack trace :
> >
> > >                                       
> 
>
> <stack-trace><![CDATA[java.lang.NullPointerException
>         at
> >
> org.apache.cxf.jaxws.support.JaxWsImplementorInfo.getWSInterfaceName(JaxWsI
> 
> mplementorInfo.java:235)
> >         at
> >
> org.apache.cxf.jaxws.support.JaxWsImplementorInfo.initialise(JaxWsImplement
> 
> orInfo.java:274)
> >         at
> >
> org.apache.cxf.jaxws.support.JaxWsImplementorInfo.<init>(JaxWsImpleme
> 
> ntorInfo.java:57)
> >         at
> >
> org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:269)
>         at
> >
> org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:261)
>         at
> >
> org.apache.servicemix.cxfse.CxfSeEndpoint.start(CxfSeEndpoint.java:243)
>         at
> >
> org.apache.servicemix.common.endpoints.SimpleEndpoint.activate(SimpleEndpoi
> 
> nt.java:55)
> >         at
> >
> org.apache.servicemix.common.ServiceUnit.start(ServiceUnit.java:53)
> > >         at
> >
> org.apache.servicemix.common.BaseServiceUnitManager.start(BaseServiceUnitMa
> 
> nager.java:151)
> >         at
> >
> org.apache.servicemix.jbi.framework.ServiceUnitLifeCycle.start(ServiceUnitL
> 
> ifeCycle.java:103)
> >         at
> >
> org.apache.servicemix.jbi.framework.ServiceAssemblyLifeCycle.start(ServiceA
> 
> ssemblyLifeCycle.java:132)
> >         at
> >
> org.apache.servicemix.jbi.framework.DeploymentService.start(DeploymentServi
> 
> ce.java:378)
> >         at
> >
> org.apache.servicemix.jbi.framework.AutoDeploymentService.updateServiceAsse
> 
> mbly(AutoDeploymentService.java:355)
> >         at
> >
> org.apache.servicemix.jbi.framework.AutoDeploymentService.updateArchive(Aut
> 
> oDeploymentService.java:256)
> >         at
> >
> org.apache.servicemix.jbi.framework.AutoDeploymentService.updateExternalArc
> 
> hive(AutoDeploymentService.java:204)
> >         at
> >
> org.apache.servicemix.jbi.container.JBIContainer.updateExternalArchive(JBIC
> 
> ontainer.java:476)
> >         at
> >
> org.apache.servicemix.jbi.container.JBIContainer.updateExternalArchive(JBIC
> 
> ontainer.java:486)
> >         at
> >
> org.apache.servicemix.jbi.framework.AdminCommandsService.deployServiceAssem
> 
> bly(AdminCommandsService.java:209)
> >        [...]
> > >
> > > Asking on the IRC, the WSDL descriptor is
> not
> required.
> >
> > > Should I provide a kind of ServiceImpl
> defining
> @WebService annotation ?
> >
> > >   
> > Yes, you need define @WebService annotation for your
> Impl class
> > Thanks
> > > Regards
> > >   
> > 
> > 
> > 
> > 
> 
> 
> 
> 

Reply via email to