Hi Kurt, Thanks again for the responses. JAX-WS interceptor is seems possible. (I didn't do it with the real scenario, but a PoC without juddi and my environment).
There can be occasions where people will add services to uddi registry without going through jax-ws calls. AFAIK we can use java APIs to do so. In that sense JAX-WS will not work for my case. So for JPA intercepting I added an Entiry Listener annotation( @EntityListeners(MyProjectEntityListener.class) to org.apache.juddi.model.BusinessEntity class in juddi. And I am getting this. Any idea why this occurs. org.apache.openjpa.persistence.PersistenceException: sun.reflect.annotation.TypeNotPresentExceptionProxy at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:218) at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156) at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227) at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154) at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60) at org.apache.juddi.config.PersistenceManager.getEntityManager(PersistenceManager.java:45) at org.apache.juddi.config.AppConfig.getPersistentConfiguration(AppConfig.java:109) at org.apache.juddi.config.AppConfig.loadConfiguration(AppConfig.java:95) at org.apache.juddi.config.AppConfig.<init>(AppConfig.java:62) at org.apache.juddi.config.AppConfig.getInstance(AppConfig.java:183) at org.apache.juddi.config.AppConfig.getConfiguration(AppConfig.java:205) at org.apache.juddi.Registry.start(Registry.java:55) On Thu, Apr 25, 2013 at 10:43 PM, Alex O'Ree <[email protected]> wrote: > I concur, a web service handler aka interceptor is your best bet. > Hi Alex, Can you please explain a bit more detail how to achieve this through web service handler ? > > On Thu, Apr 25, 2013 at 11:36 AM, Subash Chaturanga <[email protected]> > wrote: > > Hi Kurt, > > Thank you for the detailed description of the solution and links .I will > go > > through this and will update the thread once done. And hopefully once > > succeeded will definitely add a blog post too, since this is a use case > that > > people might want to achieve. > > > > > > On Thu, Apr 25, 2013 at 8:58 PM, Kurt T Stam <[email protected]> > wrote: > >> > >> OK I think you are much better of using JAX-WS interceptors then. I > think > >> the JPA layer is too granular for what your needs are. > >> > >> 1. To activate, using CXF, add config to the beans.xml in your > >> juddiv3.war: > >> > >> http://cxf.apache.org/docs/jax-ws-configuration.html > >> > >> Here is a example which shows how to provide interceptors, JAX-WS > >> handlers, and properties: > >> > >> <?xml version="1.0" encoding="UTF-8"?> > >> <beans xmlns="http://www.springframework.org/schema/beans" > >> xmlns:jaxws="http://cxf.apache.org/jaxws" > >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > >> xsi:schemaLocation=" > >> http://www.springframework.org/schema/beans > >> http://www.springframework.org/schema/beans/spring-beans.xsd > >> http://cxf.apache.org/jaxws > >> http://cxf.apache.org/schemas/jaxws.xsd"> > >> > >> <!-- Interceptors extend e.g. > >> org.apache.cxf.phase.AbstractPhaseInterceptor --> > >> <bean id="anotherInterceptor" class="..." /> > >> > >> <!-- Handlers implement e.g. javax.xml.ws.handler.soap.SOAPHandler --> > >> <bean id="jaxwsHandler" class="..." /> > >> > >> <!-- The SOAP client bean --> > >> <jaxws:client id="helloClient" > >> serviceClass="demo.spring.HelloWorld" > >> address="http://localhost:9002/HelloWorld"> > >> <jaxws:inInterceptors> > >> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/> > >> <ref bean="anotherInterceptor"/> > >> </jaxws:inInterceptor> > >> <jaxws:handlers> > >> <ref bean="jaxwsHandler" /> > >> </jaxws:handlers> > >> <jaxws:properties> > >> <entry key="mtom-enabled" value="true"/> > >> </jaxws:properties> > >> </jaxws:client> > >> </beans> > >> > >> > >> > >> > http://svn.apache.org/repos/asf/juddi/tags/juddi-3.1.3/juddi-cxf/src/main/webapp/WEB-INF/beans.xml > >> > >> 2. I don't think you'd have to change code but in case you do need to > set > >> some annotations, it would be in this class: > >> > >> > >> > http://svn.apache.org/repos/asf/juddi/tags/juddi-3.1.3/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDIPublicationImpl.java > >> > >> 3. Please let us know how that works out for you. It'd be great if you > can > >> add a blog post on our jUDDI Blog about it, and we could add it to our > >> documentation. > >> > >> Cheers, > >> > >> --Kurt > >> > >> > >> > >> > >> http://cxf.apache.org/docs/jax-ws-configuration.html > >> > >> > >> > >> On 4/25/13 11:08 AM, Subash Chaturanga wrote: > >> > >> > >> > >> On Thu, Apr 25, 2013 at 8:20 PM, Kurt T Stam <[email protected]> > wrote: > >>> > >>> On 4/25/13 10:20 AM, Subash Chaturanga wrote: > >>>> > >>>> Please note: the tricky part is I need to do both my stuff(inserting > to > >>>> uddi registry and inserting to X ) during the particular juddi call. > >>>> (relevant JAXWS call for service insertion). > >>>> > >>>> ** So consider as when adding a service to uddi, my service insertion > to > >>>> X should happen before insertion to uddi registry. Appreciate any one > >>>> possible solution for me to achieve this. > >> > >> > >> Hi Kurt, > >> > >>> > >>> 1. Before you go down the Interceptor path I guess the question is why > >>> you can't call into system X before calling into jUDDI from your client > >>> code. > >>> > >> Because it is not actually my client code calling to JUDDI, rather some > >> system Y . In my case this Y is an ESB (OSB). So "Y" calls to my > system's > >> JUDDI server and inserts to the service to UDDI registry. In the same > >> service call I want to call X web service. Hence in that sense, I > believe my > >> suggestion of JPA interceptor is correct. > >> > >>> > >>> 2. If you really need to call into system X from a JPA interceptor, > then > >>> you should try find an example program demonstrating interceptors to > learn > >>> about how an interceptor works. Are you planning on using hibernate or > >>> openjpa? > >> > >> > >> In fact, I am using juddi 3.x and it uses openjpa. Why JPA interceptor > >> needed is because juddi insertions takes place through JPA calls .Those > >> JAXWS services juddi provides has those JPA calls to do insertions to > uddi > >> data base. It is a bit hard to find proper example for JPA Interceptors > in > >> OpenJPA. That's why I drop a mail to juddi to check whether juddi have a > >> mechanism to achieve my requirement without going to JPA level. > >> > >> > >> > >>> Maybe you start here: > >>> > http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/listeners.html > , > >>> and look into the @PrePersist annotation ( which I think you can also > set in > >>> the persistence.xml) > >>> Once you got that to work we can help you with which classes you would > >>> want to add interceptor to. > >>> > >>> 3. If you make a good case for why you need this interception business, > >>> then we might also be able to add hooks right into the service layer; > i.e. > >>> you'd be able to configure an endpoint and receive a call with the > >>> serialized XML on every SaveService call. > >>> > >>> --Kurt > >>> > >>> > >> > >> > >> > >> -- > >> Subash Chaturanga > >> Department of Computer Science & Engineering > >> University of Moratuwa > >> Sri Lanka > >> > >> Blog - http://subashsdm.blogspot.com/ > >> Twitter - http://twitter.com/subash89 > >> > >> > >> > > > > > > > > -- > > Subash Chaturanga > > Department of Computer Science & Engineering > > University of Moratuwa > > Sri Lanka > > > > Blog - http://subashsdm.blogspot.com/ > > Twitter - http://twitter.com/subash89 > > > -- Subash Chaturanga Department of Computer Science & Engineering University of Moratuwa Sri Lanka Blog - http://subashsdm.blogspot.com/ Twitter - http://twitter.com/subash89
