All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jdon.container.builder.DefaultContainerBuilder Maven / Gradle / Ivy

/**
 * Copyright 2003-2006 the original author or authors.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.jdon.container.builder;

import java.util.Iterator;
import java.util.Map;

import com.jdon.aop.interceptor.InterceptorsChain;
import com.jdon.bussinessproxy.TargetMetaDef;
import com.jdon.bussinessproxy.meta.POJOTargetMetaDef;
import com.jdon.container.ContainerWrapper;
import com.jdon.container.access.TargetMetaDefHolder;
import com.jdon.container.access.xml.AppConfigureCollection;
import com.jdon.container.access.xml.TargetMetaDefXmlLoader;
import com.jdon.container.config.ComponentMetaDef;
import com.jdon.container.config.ContainerComponents;
import com.jdon.container.config.aspect.AspectComponentsMetaDef;
import com.jdon.container.finder.ComponentKeys;
import com.jdon.util.Debug;

/**
 * the container builder the methods invoke order is decided by
 * containerDirector.
 * 
 * @author banq
 * 
 */
public class DefaultContainerBuilder implements ContainerRegistryBuilder {
	public final static String module = DefaultContainerBuilder.class.getName();

	protected final ContainerComponents basicComponents;
	protected final ContainerComponents aspectConfigComponents;
	protected final XmlContainerRegistry xmlcontainerRegistry;
	protected final ContainerWrapper containerWrapper;
	protected volatile boolean startup;

	/**
	 * construtor
	 * 
	 * @param containerWrapper
	 * @param basicComponents
	 *            got from configure file
	 * @param interceptorsChain
	 *            got from configure file
	 */
	public DefaultContainerBuilder(ContainerWrapper containerWrapper, ContainerComponents basicComponents, ContainerComponents aspectConfigComponents) {
		this.basicComponents = basicComponents;
		this.aspectConfigComponents = aspectConfigComponents;
		this.xmlcontainerRegistry = new XmlContainerRegistry(containerWrapper);
		this.containerWrapper = containerWrapper;

	}

	public ContainerWrapper getContainerWrapper() {
		return containerWrapper;
	}

	/**
	 * if there are xml configure then add new ones; if not, register it;
	 * 
	 * @param configList
	 *            Collection the configure collection for jdonframework.xml
	 */
	public void registerAppRoot(String configureFileName) throws Exception {
		try {
			AppConfigureCollection existedAppConfigureFiles = (AppConfigureCollection) containerWrapper.lookup(AppConfigureCollection.NAME);
			if (existedAppConfigureFiles == null) {
				xmlcontainerRegistry.registerAppRoot();
				existedAppConfigureFiles = (AppConfigureCollection) containerWrapper.lookup(AppConfigureCollection.NAME);
			}
			if (!existedAppConfigureFiles.getConfigList().contains(configureFileName)) {
				Debug.logInfo("[JdonFramework]found jdonframework configuration:" + configureFileName, module);
				existedAppConfigureFiles.addConfigList(configureFileName);
			}
		} catch (Exception ex) {
			Debug.logError("[JdonFramework] found jdonframework configuration error:" + ex, module);
			throw new Exception(ex);
		}
	}

	/**
	 * register all basic components in container.xml
	 */
	public void registerComponents() throws Exception {
		Debug.logVerbose("[JdonFramework] note: registe all basic components in container.xml size=" + basicComponents.size(), module);
		try {
			Iterator iter = basicComponents.iterator();
			while (iter.hasNext()) {
				String name = (String) iter.next();
				ComponentMetaDef componentMetaDef = basicComponents.getComponentMetaDef(name);
				xmlcontainerRegistry.registerComponentMetaDef(componentMetaDef);
			}
		} catch (Exception ex) {
			Debug.logError("[JdonFramework] register basiceComponents error:" + ex, module);
			throw new Exception(ex);
		}

	}

	/**
	 * register all apsect components in aspect.xml
	 */
	public void registerAspectComponents() throws Exception {
		Debug.logVerbose("[JdonFramework] note: registe aspect components ", module);
		try {
			InterceptorsChain existedInterceptorsChain = (InterceptorsChain) containerWrapper.lookup(ComponentKeys.INTERCEPTOR_CHAIN);

			Iterator iter = aspectConfigComponents.iterator();
			Debug.logVerbose("[JdonFramework] 3 aspectConfigComponents size:" + aspectConfigComponents.size(), module);
			while (iter.hasNext()) {
				String name = (String) iter.next();
				AspectComponentsMetaDef componentMetaDef = (AspectComponentsMetaDef) aspectConfigComponents.getComponentMetaDef(name);
				// registe into container
				xmlcontainerRegistry.registerAspectComponentMetaDef(componentMetaDef);
				// got the interceptor instance;
				// add interceptor instance into InterceptorsChain object
				existedInterceptorsChain.addInterceptor(componentMetaDef.getPointcut(), name);
			}
		} catch (Exception ex) {
			Debug.logError("[JdonFramework] registerAspectComponents error:" + ex, module);
			throw new Exception(ex);
		}

	}

	/**
	 * register user services/components in jdonframework.xml
	 * 
	 * AnnotationContainerBuilder will override this method, and register
	 * annotation services or components.
	 * 
	 */
	public void registerUserService() throws Exception {
		Debug.logVerbose("[JdonFramework] note: registe user pojoservice ", module);
		try {
			TargetMetaDefXmlLoader targetMetaDefXmlLoader = (TargetMetaDefXmlLoader) containerWrapper.lookup(ComponentKeys.SERVICE_METALOADER_NAME);
			targetMetaDefXmlLoader.loadXML();
			TargetMetaDefHolder targetMetaDefHolder = (TargetMetaDefHolder) containerWrapper.lookup(ComponentKeys.SERVICE_METAHOLDER_NAME);
			if (targetMetaDefHolder == null)
				return;
			Map metaDefs = targetMetaDefHolder.loadMetaDefs();
			Iterator iter = metaDefs.keySet().iterator();
			while (iter.hasNext()) {
				String name = (String) iter.next();
				TargetMetaDef tgm = (TargetMetaDef) metaDefs.get(name);
				if (!tgm.isEJB()) {
					xmlcontainerRegistry.registerPOJOTargetMetaDef((POJOTargetMetaDef) tgm);
				}
			}
		} catch (Exception ex) {
			Debug.logError("[JdonFramework] registerUserService error:" + ex, module);
			throw new Exception(ex);
		}
	}

	public void startApp() {
		StartablecomponentsRegistry scr = (StartablecomponentsRegistry) containerWrapper.lookup(StartablecomponentsRegistry.NAME);
		scr.startStartableComponents(containerWrapper);
	}

	public void stopApp() {
		StartablecomponentsRegistry scr = (StartablecomponentsRegistry) containerWrapper.lookup(StartablecomponentsRegistry.NAME);
		scr.stopStartableComponents(containerWrapper);
	}

	public synchronized void setKernelStartup(boolean startup) {
		this.startup = startup;
	}

	public boolean isKernelStartup() {
		return startup;
	}

	public void doAfterStarted() throws Exception {

	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy