LoginSignup
3
3

More than 5 years have passed since last update.

CDIコンテナにSeasar2のコンポーネントを移す (その2)

Last updated at Posted at 2015-02-06

前回の、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;
            }
        });
    }
}

続く

・・・かも。。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3