前回の、CDIコンテナにSeasar2のコンポーネントを移す (その1)に書いた記事の続きです。
サーバーの起動処理(例)
import org.eclipse.jetty.server.Server;
import org.glassfish.jersey.jetty.JettyHttpContainerFactory;
public class HogeMain {
public static void main(String[] args) {
HogeConfig config = new HogeConfig();
Server server = JettyHttpContainerFactory.createServer(URI, config, false);
server.start();
}
}
S2コンテナの中身を CDIコンテナに移す処理のサンプル
処理の説明はまた今度。。
import org.glassfish.jersey.server.ResourceConfig;
public class HogeConfig extends ResourceConfig {
public HogeConfig() {
packages(this.getClass().getPackage().getName());
register(new AbstractBinder() {
@Override
protected void configure() {
for (ComponentDef def : getComponentDefs()) {
Class<?> clazz = def.getComponentClass();
String name = def.getComponentName();
Descriptor descriptor;
if (InstanceDef.SINGLETON_NAME.equals(def.getInstanceDef().getName())
|| InstanceDef.APPLICATION_NAME.equals(def.getInstanceDef().getName())) {
descriptor = BuilderHelper.createConstantDescriptor(def.getComponent(), name,
clazz.getInterfaces());
} else {
DescriptorBuilder builder = BuilderHelper.link(clazz).named(name).in(PerLookup.class);
for (Class<?> contract : clazz.getInterfaces()) {
builder = builder.to(contract);
}
descriptor = builder.build();
}
this.bind(descriptor);
}
}
private List<ComponentDef> getComponentDefs() {
S2Container container = S2ContainerFactory.create();
container.init();
List<ComponentDef> componentDefList = new ArrayList<ComponentDef>();
componentDefList.addAll(getComponentDefs(container));
return componentDefList;
}
private Set<ComponentDef> getComponentDefs(S2Container container) {
Set<ComponentDef> componentDefSet = new LinkedHashSet<ComponentDef>();
for (int i = 0; i < container.getComponentDefSize(); i++) {
ComponentDef componentDef = container.getComponentDef(i);
componentDefSet.add(componentDef);
}
for (int i = 0; i < container.getChildSize(); i++) {
S2Container child = container.getChild(i);
componentDefSet.addAll(getComponentDefs(child));
}
return componentDefSet;
}
});
}
}
続く
・・・かも。。