Kraken OSGi 번들화 완료


에 근데 OSGi 장점을 별로 못 살려서 아쉽네요.
일단 extender model로 몇 가지 더 실험을 해봐야 될 듯.
versioning이나 security가 extender model에서도 제대로 작동하는지 말이죠.

package kr.nchovy.kraken.common;

import org.apache.felix.framework.Felix;
import org.apache.felix.framework.cache.BundleCache;
import org.apache.felix.framework.util.FelixConstants;
import org.apache.felix.framework.util.StringMap;
import org.apache.log4j.Logger;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.apache.mina.filter.codec.*;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;

import java.io.File;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import kr.nchovy.kraken.console.TelnetCodecFactory;
import kr.nchovy.kraken.console.ConsoleHandler;

public class Kraken implements BundleActivator {
    private static Logger logger = Logger.getLogger(Kraken.class);

    private static Kraken instance;
    private Scheduler scheduler;
    private FilterManager filterManager;
    private ScriptManager scriptManager;
    private BundleManager bundleManager;

    static {
        instance = new Kraken();
    }

    public static void main(String[] args) throws Exception {
        Kraken.getInstance().boot();
    }

    private Kraken() {
        filterManager = new FilterManager();
        scriptManager = new ScriptManager();
        bundleManager = new BundleManager();
        scheduler = new Scheduler();
    }

    @SuppressWarnings("unchecked")
    public void boot() throws Exception {
        Map configMap = new StringMap(false);
        configMap.put(FelixConstants.EMBEDDED_EXECUTION_PROP, "true");
        configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
                "org.osgi.framework; version=1.4.0,"
                        + "org.osgi.service.packageadmin; version=1.2.0,"
                        + "org.osgi.service.startlevel; version=1.0.0,"
                        + "org.osgi.service.url; version=1.0.0,"
                        + "kr.nchovy.kraken.common; version=1.0.0,"
                        + "kr.nchovy.kraken.filter; version=1.0.0,"
                        + "kr.nchovy.kraken.script; version=1.0.0");
        configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, "cache");

        List activators = new ArrayList();
        activators.add(this);

        new Felix(configMap, activators).start();
    }

    private void openConsolePort() throws IOException {
        NioSocketAcceptor acceptor = new NioSocketAcceptor();
        acceptor.getFilterChain().addLast("protocol",
                new ProtocolCodecFilter(new TelnetCodecFactory()));
        acceptor.setHandler(new ConsoleHandler());
        acceptor.bind(new InetSocketAddress(7004));
        logger.info("Console port 7004 opened.");
    }

    @Override
    public void start(BundleContext context) throws Exception {
        bundleManager.addBundleListener(context);

        logger.info("Booting Kraken.");
        try {
            scheduler.activate();
            openConsolePort();
            logger.info("Kraken started.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void stop(BundleContext context) throws Exception {
    }

    public static Kraken getInstance() {
        return instance;
    }

    public static FilterManager getFilterManager() {
        return instance.filterManager;
    }

    public static ScriptManager getScriptManager() {
        return instance.scriptManager;
    }

    public static BundleManager getBundleManager() {
        return instance.bundleManager;
    }
}
by xeraph | 2008/08/28 20:52 | NCHOVY | 트랙백 | 덧글(0)
트랙백 주소 : http://xeraph.com/tb/4579583
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글