Skip to content

Instantly share code, notes, and snippets.

@mumrah
Last active December 26, 2015 20:19
Show Gist options
  • Save mumrah/7207485 to your computer and use it in GitHub Desktop.
Save mumrah/7207485 to your computer and use it in GitHub Desktop.

Simple example showing the problem described in Netflix/governator#89

Versions

  • Karyon, 1.0.20
  • Governator, 1.2.3
  • Jersey, 1.9.1
  • Guice, 3.0
# Karyon properties
com.netflix.karyon.server.base.packages=foo
com.netflix.karyon.eureka.disable=true
com.netflix.karyon.server.bootstrap.class=foo.MyServerBootstrap
package foo;
public interface Feature {
public String getName();
}
package foo;
import com.netflix.governator.annotations.AutoBindSingleton;
@AutoBindSingleton(baseClass = Feature.class, multiple = true)
public class FeatureA implements Feature {
@Override
public String getName() {
return "FeatureA";
}
}
package foo;
import com.netflix.governator.annotations.AutoBindSingleton;
@AutoBindSingleton(baseClass = Feature.class, multiple = true)
public class FeatureB implements Feature {
@Override
public String getName() {
return "FeatureB";
}
}
package foo;
import java.util.Set;
import javax.ws.rs.Path;
import com.google.inject.Inject;
import com.sun.jersey.spi.resource.Singleton;
import foo.Feature;
@Singleton
@Path("/foo")
public class MyResource {
@Inject
public MyResource(Set<Feature> features) {
System.err.println(">>>>>>> " + features + " <<<<<<<");
}
}
package foo;
import java.util.Map;
import com.google.common.collect.Maps;
import com.netflix.governator.guice.BootstrapBinder;
import com.netflix.karyon.server.ServerBootstrap;
import com.sun.jersey.guice.JerseyServletModule;
import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
public class MyServerBootstrap extends ServerBootstrap {
protected void configureBootstrapBinder(BootstrapBinder bootstrapBinder) {
bootstrapBinder.install(new JerseyServletModule() {
@Override
protected void configureServlets() {
Map<String, String> params = Maps.newHashMap();
params.put("com.sun.jersey.config.property.packages","foo");
params.put("com.sun.jersey.api.json.POJOMappingFeature", "true");
bind(GuiceContainer.class).asEagerSingleton();
serve("/*").with(GuiceContainer.class, params);
}
});
}
}
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee ">
<filter>
<filter-name>guiceFilter</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>guiceFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.netflix.karyon.server.guice.KaryonGuiceContextListener</listener-class>
</listener>
</web-app>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment