[ 
https://issues.apache.org/jira/browse/JUDDI-941?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15008242#comment-15008242
 ] 

Matthieu Ghilain edited comment on JUDDI-941 at 11/17/15 8:33 AM:
------------------------------------------------------------------

I did it this way:

{code}
import org.apache.commons.configuration.ConfigurationException;
import org.apache.juddi.v3.client.config.UDDIClerk;
import org.apache.juddi.v3.client.config.UDDIClerkServlet;
import org.apache.juddi.v3.client.config.UDDIClient;
import org.apache.juddi.v3.client.config.WebHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRegistration;
import javax.servlet.annotation.WebListener;

@WebListener
public class JUDDIServletContextListener implements ServletContextListener {
    private static final Logger logger = 
LoggerFactory.getLogger(JUDDIServletContextListener.class);
    private static final String JUDDI_SERVLET_NAME = "juddi-servlet";

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        logger.info("Registering JUDDI servlet '"+JUDDI_SERVLET_NAME+"' to 
automatically register service");
        ServletContext servletContext = servletContextEvent.getServletContext();
        configureUddiClient(servletContext);
        ServletRegistration.Dynamic dynamic = 
servletContext.addServlet(JUDDI_SERVLET_NAME, UDDIClerkServlet.class);
        dynamic.setLoadOnStartup(1);
    }

    private void configureUddiClient(ServletContext servletContext) {
        try {
            UDDIClient uddiClient = WebHelper.getUDDIClient(servletContext);
            //Do not work despite it should be according to me see Jira 
ticket:JUDDI-941
            
//uddiClient.getClientConfig().getConfiguration().addProperty("tomee-port", 
"8585");
            for (UDDIClerk uddiClerk : 
uddiClient.getClientConfig().getUDDIClerks().values()) {
                
uddiClerk.getUDDINode().getProperties().setProperty("tomee-port","8585");
            }
            servletContext.setAttribute("juddi.client.name", "test-client");
        } catch (ConfigurationException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
    }

}

{code}

However it would be nice to be able to inject properties dynamically in the 
UDDI client config without initiating the ServletContextListener (which will be 
automatic see ticket JUDDI-942).

It could be nice if we could provide implementation of some interface (like 
PropertySource) in the uddi.xml so that we can provide our own properties 
loaded from our environment because command line is not always convenient.


was (Author: ghila...@gmail.com):
I did it this way:

{code}
import org.apache.commons.configuration.ConfigurationException;
import org.apache.juddi.v3.client.config.UDDIClerk;
import org.apache.juddi.v3.client.config.UDDIClerkServlet;
import org.apache.juddi.v3.client.config.UDDIClient;
import org.apache.juddi.v3.client.config.WebHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRegistration;
import javax.servlet.annotation.WebListener;

@WebListener
public class JUDDIServletContextListener implements ServletContextListener {
    private static final Logger logger = 
LoggerFactory.getLogger(JUDDIServletContextListener.class);
    private static final String JUDDI_SERVLET_NAME = "juddi-servlet";

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        logger.info("Registering JUDDI servlet '"+JUDDI_SERVLET_NAME+"' to 
automatically register service");
        ServletContext servletContext = servletContextEvent.getServletContext();
        configureUddiClient(servletContext);
        ServletRegistration.Dynamic dynamic = 
servletContext.addServlet(JUDDI_SERVLET_NAME, UDDIClerkServlet.class);
        dynamic.setLoadOnStartup(1);
    }

    private void configureUddiClient(ServletContext servletContext) {
        try {
            UDDIClient uddiClient = WebHelper.getUDDIClient(servletContext);
            //Do not work despite it should be according to me see Jira 
ticket:JUDDI-941
            
//uddiClient.getClientConfig().getConfiguration().addProperty("tomee-port", 
"8585");
            for (UDDIClerk uddiClerk : 
uddiClient.getClientConfig().getUDDIClerks().values()) {
                
uddiClerk.getUDDINode().getProperties().setProperty("tomee-port","8585");
            }
            servletContext.setAttribute("juddi.client.name", "test-client");
        } catch (ConfigurationException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
    }

}

{code}

> Dynamic discovery of web service endpoint
> -----------------------------------------
>
>                 Key: JUDDI-941
>                 URL: https://issues.apache.org/jira/browse/JUDDI-941
>             Project: jUDDI
>          Issue Type: Improvement
>          Components: juddi-client
>    Affects Versions: 3.3.1
>            Reporter: Matthieu Ghilain
>              Labels: SOAP, discovery, dynamic, endpoint, juddi
>   Original Estimate: 72h
>  Remaining Estimate: 72h
>
> Here is the example from the JUDDI documentation:
> {code:title=HelloWorldImpl .java|borderStyle=solid}
> @UDDIService(
>   businessKey="uddi:myBusinessKey",
>   serviceKey="uddi:myServiceKey",
>   description = "Hello World test service")
> @UDDIServiceBinding(
>   bindingKey="uddi:myServiceBindingKey",
>   description="WSDL endpoint for the helloWorld Service. This service is used 
> for "
>                                 + "testing the jUDDI annotation 
> functionality",
>   accessPointType="wsdlDeployment",
>   
> accessPoint="http://localhost:8080/juddiv3-samples/services/helloworld?wsdl";)
> @WebService(
>   endpointInterface = "org.apache.juddi.samples.HelloWorld",
>   serviceName = "HelloWorld")
> public class HelloWorldImpl implements HelloWorld {
>     public String sayHi(String text) {
>         System.out.println("sayHi called");
>         return "Hello " + text;
>     }
> }
> {code}
> The problem with this kind of registration is that it is still static. The 
> accessPoint should be resolved dynamically at runtime. Otherwise it is not 
> possible to spawn new service instances dynamically and to scale. This in my 
> opinion should be part of the JUDDI features.
> What do you think?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to