Brilliant, that did the trick! Thanks so much!

-Matt

On Sunday, September 18, 2016 at 10:29:54 AM UTC-6, Evan Meagher wrote:
>
> Check out the "Polymorphic configuration" section 
> <http://www.dropwizard.io/1.0.0/docs/manual/configuration.html#polymorphic-configuration>
>  
> of Dropwizard's user manual. Dropwizard loads Discoverable subclasses by 
> looking up services registered as resources under META-INF/services/. This 
> is a convoluted JVM jargon way of saying that you need to add a 
> src/main/resources/META-INF/services/io.dropwizard.server.ServerFactory 
> file containing a single line 
> "com.your.packagename.SharedPortServerFactory" to your application.
>
> For comparison, here's 
> <https://github.com/dropwizard/dropwizard/blob/master/dropwizard-core/src/main/resources/META-INF/services/io.dropwizard.server.ServerFactory>
>  
> the services file within dropwizard-core which registers 
> {Default,Simple}ServerFactory.
>
> On Sat, Sep 17, 2016 at 7:11 PM, Matt Wharton <matt.whar...@gmail.com 
> <javascript:>> wrote:
>
>> Hi all,
>>
>> I'm interested in creating a ServerFactory implementation that's 
>> something of a hybrid between SimpleServerFactory and DefaultServerFactory. 
>> Specifically, I'd like to be able to run an SSL and a non-SSL port (which 
>> DefaultServerFactory allows for) but also have the application and admin 
>> connectors run on the same port (which SimpleServerFactory allows for).
>>
>> I have an attempted implementation below, but I'm not sure how to 
>> register the thing properly so that it can be properly processed by the 
>> config parser when the server 'type' is set to 'sharedport'. Is there 
>> anything special I'd need to do? Apologies if this has been covered before.
>>
>> Thanks!
>>
>> -Matt
>>
>> import javax.validation.Valid;
>> import javax.validation.constraints.NotNull;
>>
>> import org.eclipse.jetty.server.Connector;
>> import org.eclipse.jetty.server.Handler;
>> import org.eclipse.jetty.server.Server;
>> import org.eclipse.jetty.util.thread.ThreadPool;
>> import org.hibernate.validator.constraints.NotEmpty;
>> import org.slf4j.Logger;
>> import org.slf4j.LoggerFactory;
>>
>> import com.fasterxml.jackson.annotation.JsonProperty;
>> import com.fasterxml.jackson.annotation.JsonTypeName;
>> import com.google.common.collect.ImmutableMap;
>>
>> import io.dropwizard.jetty.ConnectorFactory;
>> import io.dropwizard.jetty.ContextRoutingHandler;
>> import io.dropwizard.jetty.HttpConnectorFactory;
>> import io.dropwizard.server.AbstractServerFactory;
>> import io.dropwizard.setup.Environment;
>>
>> /**
>>  * This is an implementation of AbstractServerFactory which allows for 
>> distinct HTTP and 
>>  * HTTPS Connectors while also running application and admin on the same 
>> port within the given 
>>  * Connector. It's basically a hybrid of SimpleServerFactory and 
>> DefaultServerFactory.
>>  */
>> @JsonTypeName("sharedport")
>> public class SharedPortServerFactory extends AbstractServerFactory
>> {
>>   private static final Logger LOG = 
>> LoggerFactory.getLogger(SharedPortServerFactory.class);
>>   
>>   @Valid
>>   @NotNull
>>   private ConnectorFactory connector = HttpConnectorFactory.application();
>>   
>>   @Valid
>>   @NotNull
>>   private ConnectorFactory sslConnector = 
>> HttpConnectorFactory.application();
>>
>>   @NotEmpty
>>   private String applicationContextPath = "/";
>>
>>   @NotEmpty
>>   private String adminContextPath = "/";
>>
>>   @JsonProperty
>>   public ConnectorFactory getConnector() 
>>   {
>>     return connector;
>>   }
>>
>>   @JsonProperty
>>   public void setConnector(ConnectorFactory factory) 
>>   {
>>     this.connector = factory;
>>   }
>>   
>>   @JsonProperty
>>   public ConnectorFactory getSslConnector()
>>   {
>>     return sslConnector;
>>   }
>>   
>>   @JsonProperty
>>   public void setSslConnector(ConnectorFactory sslFactory)
>>   {
>>     this.sslConnector = sslFactory;
>>   }
>>
>>   @JsonProperty
>>   public String getApplicationContextPath() 
>>   {
>>     return applicationContextPath;
>>   }
>>
>>   @JsonProperty
>>   public void setApplicationContextPath(String contextPath) 
>>   {
>>     this.applicationContextPath = contextPath;
>>   }
>>
>>   @JsonProperty
>>   public String getAdminContextPath() 
>>   {
>>     return adminContextPath;
>>   }
>>
>>   @JsonProperty
>>   public void setAdminContextPath(String contextPath) 
>>   {
>>     this.adminContextPath = contextPath;
>>   }
>>
>>   @Override
>>   public Server build(Environment environment)
>>   {
>>     printBanner(environment.getName());
>>     ThreadPool threadPool = createThreadPool(environment.metrics());
>>     Server server = buildServer(environment.lifecycle(), threadPool);
>>
>>     LOG.info("Registering jersey handler with root path prefix: {}", 
>> applicationContextPath);
>>     
>> environment.getApplicationContext().setContextPath(applicationContextPath);
>>     Handler applicationHandler = createAppServlet(server,
>>                                                   environment.jersey(),
>>                                                   
>> environment.getObjectMapper(),
>>                                                   
>> environment.getValidator(),
>>                                                   
>> environment.getApplicationContext(),
>>                                                   
>> environment.getJerseyServletContainer(),
>>                                                   environment.metrics());
>>
>>     LOG.info("Registering admin handler with root path prefix: {}", 
>> adminContextPath);
>>     environment.getAdminContext().setContextPath(adminContextPath);
>>     Handler adminHandler = createAdminServlet(server,
>>                                                     
>> environment.getAdminContext(),
>>                                                     environment.metrics(),
>>                                                     
>> environment.healthChecks());
>>
>>     Connector conn = connector.build(server,
>>                                      environment.metrics(),
>>                                      environment.getName(),
>>                                      null);
>>     Connector sslConn = sslConnector.build(server, 
>>                                            environment.metrics(),
>>                                            environment.getName(),
>>                                            null);
>>
>>     server.addConnector(conn);
>>     server.addConnector(sslConn);
>>     
>>     ContextRoutingHandler routingHandler = new 
>> ContextRoutingHandler(ImmutableMap.of(applicationContextPath, 
>> applicationHandler,
>>                                                                           
>>            adminContextPath, adminHandler));
>>     server.setHandler(addStatsHandler(addRequestLog(server, 
>> routingHandler, environment.getName())));
>>
>>     return server;
>>   }
>>
>> }
>>
>>
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "dropwizard-user" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to dropwizard-us...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> Evan Meagher
>

-- 
You received this message because you are subscribed to the Google Groups 
"dropwizard-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to dropwizard-user+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to