Hi

here's the current Configurer code we have which is being executed before the 
providers even get registered :

private static final String HTTP_LISTENER_NAME =

"org.apache.cxf.transport.http.JettyHTTPServerEngine";

private String listenerBeanName;

private SSLServerPolicy sslServerPolicy = new SSLServerPolicy();


public RepositoryListenerConfigurer(Properties props, String portValue) {

listenerBeanName = HTTP_LISTENER_NAME + '.' + portValue;

initServerPolicy(props);

}

// note, we're expecting JettyHttpServerEngine for a given port, we don't know 
anything else about destination or any other details

and next the Configurer configureBean is called, we check if it's the JettyHttpServerEngine and if yes, then we just set our ssl policy on it (won't have any problems id it will become TlsParameters, whatever) :

public void configureBean(Object beanInstance) {


String beanName = getBeanName(beanInstance);

if (listenerBeanName.equals(beanName)

&& sslServerPolicy.getKeystore() != null) {

HTTPListenerConfigBean bean =

(HTTPListenerConfigBean)beanInstance;

if (!bean.isSetSslServer()) {

bean.setSslServer(sslServerPolicy);

}

}


super.configureBean(beanInstance);


}

This is done just once, and once again, this is the JettyHttpServerEngine, not a destination which we're configuring. This is a specific dedicated piece of code dealing with the configuration.

next we just do

Endpoint.publish("https://www.acme.com:9090/foo";, ...);

// do not wish to reconfigure anything just want to publish the provider 
instance


Endpoint.publish("https://www.acme.com:9090/bar";, ...);


and once again we do not do any reconfiguration here, the sole purpose is to just publish providers. In fact that's really all we do as far as interacting with the CXF runtime is concerned (apart from having the providers code for serving the requests)

No, one does not need to write this expression for each endpoint.publish. You only need to do this if you want to configure the server engine programatically. I think the point is, you should be doing that on the server engine instance directly, not indirectly through the Destination.


Ok, given the above explanation, what is going to change for users wishing to publish two providers serving different contexts on the same 9090 port and configure the ssl setting of the port programmatically? Sorry I don't understand you saying no need to write this expression per each endpoint.publish, only if once needs to do it programmatically

Thanks, Sergey










On May 30, 2007, at 11:58 AM, Sergey Beryozkin wrote:

With your proposal one needs to write this complex expression in  addition per 
every endpoint registration :

((JettyHTTPDestination)endpoint.getServer().getDestination()).
                   getJettyHTTPServerEngine ().setTLSServerParameters(parms);

Does it mean that for https://localhost:9000/bar one can point to  one keystore 
for ex and for
https://localhost:9000/foo one can point to another keystore ? What  is the 
point of calling
setTLSServerParameters(parms); per every endpoint sharing the same  port ?

No, one does not need to write this expression for each endpoint.publish. You only need to do this if you want to configure the server engine programatically. I think the point is, you should be doing that on the server engine instance directly, not indirectly through the Destination.

Just to allay any fears, this is being done precisely to support the  use case:

Endpoint.publish("https://www.acme.com:9090/foo";, ...);
Endpoint.publish("https://www.acme.com:9090/bar";, ...);

which is currently broken in CXF.

I think we're in agreement here.

-Fred

Reply via email to