You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2008/11/22 19:09:48 UTC

svn commit: r719890 [6/14] - in /incubator/openwebbeans/trunk/webbeans-impl: ./ src/ src/main/ src/main/java/ src/main/java/META-INF/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/webbeans/ src/main/java/org/apache/webbeans/anno...

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ejb/EJBInterceptorConfig.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ejb/EJBInterceptorConfig.java?rev=719890&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ejb/EJBInterceptorConfig.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ejb/EJBInterceptorConfig.java Sat Nov 22 10:09:38 2008
@@ -0,0 +1,152 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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 org.apache.webbeans.intercept.ejb;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptors;
+
+import org.apache.webbeans.intercept.InterceptorData;
+import org.apache.webbeans.util.AnnotationUtil;
+import org.apache.webbeans.util.Asserts;
+import org.apache.webbeans.util.ClassUtil;
+import org.apache.webbeans.util.WebBeansUtil;
+
+/**
+ * Configures the EJB related interceptors.
+ * 
+ * @author <a href="mailto:gurkanerdogdu@yahoo.com">Gurkan Erdogdu</a>
+ * @since 1.0
+ */
+public final class EJBInterceptorConfig
+{
+	/*
+	 * Private constructor
+	 */
+	private EJBInterceptorConfig()
+	{
+		
+	}
+	
+	/**
+	 * Configures the given class for applicable interceptors.
+	 * 
+	 * @param clazz configuration interceptors for this
+	 */
+	public static void configure(Class<?> clazz, List<InterceptorData> stack)
+	{
+		Asserts.assertNotNull(clazz, "Clazz argument can not be null");
+		
+		
+		if(AnnotationUtil.isAnnotationExistOnClass(clazz, Interceptors.class))
+		{
+			Interceptors incs = clazz.getAnnotation(Interceptors.class);
+			Class<?>[] intClasses = incs.value();
+			
+			for(Class<?> intClass : intClasses)
+			{
+				configureInterceptorAnnots(intClass, stack, false,null);	
+			}
+			
+		}
+		
+		
+		configureBeanAnnots(clazz, stack);
+	}
+	
+	/*
+	 * Configure interceptor class 
+	 */
+	private static void configureInterceptorAnnots(Class<?> clazz,List<InterceptorData> stack, boolean isMethod, Method m)
+	{
+		//1- Look interceptor class super class
+		//2- Look interceptor class
+		Class<?> superClass = clazz.getSuperclass();
+		if(superClass != null && !superClass.equals(Object.class))
+		{
+			configureInterceptorAnnots(superClass, stack, false,null);			
+		}
+
+		WebBeansUtil.configureInterceptorMethods(clazz, AroundInvoke.class,true,isMethod,stack,m,false);
+		WebBeansUtil.configureInterceptorMethods(clazz, PostConstruct.class,true,isMethod,stack,m,false);
+		WebBeansUtil.configureInterceptorMethods(clazz, PreDestroy.class,true,isMethod,stack,m,false);
+		
+	}
+		
+	/*
+	 * Configure bean class
+	 */
+	private static void configureBeanAnnots(Class<?> clazz,List<InterceptorData> stack)
+	{
+		//1- Look method intercepor class annotations
+		//2- Look super class around invoke
+		//3- Look bean around invoke
+		
+		//1-
+		Method[] methods = clazz.getDeclaredMethods();
+		
+		for(Method method : methods)
+		{
+			Interceptors incs = method.getAnnotation(Interceptors.class);
+			if(incs != null)
+			{
+				Class<?>[] intClasses = incs.value();
+				
+				for(Class<?> intClass : intClasses)
+				{
+					configureInterceptorAnnots(intClass, stack, true,method);
+				}		
+				
+			}
+		} 
+		
+		//2- Super clazz
+		List<Class<?>> listSuperClazz = ClassUtil.getSuperClasses(clazz, new ArrayList<Class<?>>());
+		configureBeanSuperClassAnnots(listSuperClazz,stack);
+		
+		//3- Bean itself
+		WebBeansUtil.configureInterceptorMethods(clazz, AroundInvoke.class,false,false,stack,null,false);
+		WebBeansUtil.configureInterceptorMethods(clazz, PostConstruct.class,false,false,stack,null,false);
+		WebBeansUtil.configureInterceptorMethods(clazz, PreDestroy.class,false,false,stack,null,false);
+		
+	}
+	
+	/*
+	 * Super class annots.
+	 */
+	private static void configureBeanSuperClassAnnots(List<Class<?>> list, List<InterceptorData> stack)
+	{
+		int i = list.size();
+		
+		for(int j = i-1; j>=0;j--)
+		{
+			Class<?> clazz = list.get(j);
+			if(!clazz.equals(Object.class))
+			{
+				WebBeansUtil.configureInterceptorMethods(clazz, AroundInvoke.class,false,false,stack,null,false);
+				WebBeansUtil.configureInterceptorMethods(clazz, PostConstruct.class,false,false,stack,null,false);
+				WebBeansUtil.configureInterceptorMethods(clazz, PreDestroy.class,false,false,stack,null,false);				
+			}
+		}
+	}
+		
+}
\ No newline at end of file

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/ejb/EJBInterceptorConfig.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java?rev=719890&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java Sat Nov 22 10:09:38 2008
@@ -0,0 +1,353 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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 org.apache.webbeans.intercept.webbeans;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.webbeans.InterceptorBindingType;
+import javax.webbeans.NonBinding;
+import javax.webbeans.manager.InterceptionType;
+import javax.webbeans.manager.Interceptor;
+
+import org.apache.webbeans.component.AbstractComponent;
+import org.apache.webbeans.container.ManagerImpl;
+import org.apache.webbeans.exception.WebBeansConfigurationException;
+import org.apache.webbeans.intercept.InterceptorUtil;
+import org.apache.webbeans.intercept.WebBeansInterceptorConfig;
+import org.apache.webbeans.util.AnnotationUtil;
+import org.apache.webbeans.util.WebBeansUtil;
+
+/**
+ * Defines the webbeans specific interceptors.
+ * 
+ * <p>
+ * WebBeans interceotor classes has at least one {@link InterceptorBindingType} annotation.
+ * It can be defined on the class or method level at the component. WebBeans interceptors are
+ * called after the EJB related interceptors are called in the chain. Semantics of the interceptors
+ * are specified by the EJB specificatin.
+ * </p>
+ * 
+ * @author <a href="mailto:gurkanerdogdu@yahoo.com">Gurkan Erdogdu</a>
+ * @since 1.0
+ */
+public class WebBeansInterceptor extends Interceptor
+{
+	/**InterceptorBindingTypes exist on the interceptor class*/
+	private Map<Class<? extends Annotation>, Annotation> interceptorBindingSet = new HashMap<Class<? extends Annotation>,Annotation>();
+	
+	/**Interceptor class*/
+	private Class<?> clazz; 
+	
+	/**Simple Web Beans component*/
+	private AbstractComponent<Object> delegateComponent;
+	
+	public WebBeansInterceptor(AbstractComponent<Object> delegateComponent)
+	{
+		super(ManagerImpl.getManager());
+		this.delegateComponent = delegateComponent;
+		this.clazz = getDelegate().getReturnType(); 
+		
+	}
+	
+	
+	public AbstractComponent<Object> getDelegate()
+	{
+		return this.delegateComponent;
+	}
+	
+	/**
+	 * Add new binding type to the interceptor.
+	 * 
+	 * @param bindingType interceptor binding type annot. class
+	 * @param annot binding type annotation
+	 */
+	public void addInterceptorBindingType(Class<? extends Annotation> bindingType, Annotation annot)
+	{
+		Method[] methods = bindingType.getDeclaredMethods();
+		
+		for(Method method : methods)
+		{
+			Class<?> clazz = method.getReturnType();
+			if(clazz.isArray() || clazz.isAnnotation())
+			{
+				if(!AnnotationUtil.isAnnotationExist(method.getAnnotations(), NonBinding.class))
+				{
+					throw new WebBeansConfigurationException("Interceptor definition class : " + getClazz().getName() + 
+							" @InterceptorBindingType : " + bindingType.getName() + " must have @NonBinding valued members for its array-valued and annotation valued members");
+				}
+			}
+		}
+		
+		interceptorBindingSet.put(bindingType,annot);
+	}
+		
+	
+	/**
+	 * Checks whether this interceptor has given binding types with {@link NonBinding} member
+	 * values.
+	 * 
+	 * @param bindingTypes binding types
+	 * @param annots binding types annots.
+	 * @return true if binding types exist ow false
+	 */
+	public boolean isBindingTypesExist(List<Class<? extends Annotation>> bindingTypes, List<Annotation> annots)
+	{
+		boolean result = false;
+		
+		
+		if(bindingTypes != null && annots != null && (bindingTypes.size() == annots.size()))
+		{
+			int i = 0;
+			for(Class<? extends Annotation> bindingType : bindingTypes)
+			{
+				if(this.interceptorBindingSet.containsKey(bindingType))
+				{
+					Annotation target = this.interceptorBindingSet.get(bindingType);
+					if(AnnotationUtil.isAnnotationMemberExist(bindingType, annots.get(i), target))
+					{
+						result = true;
+					}
+					else
+					{
+						return false;
+					}
+				}
+				else
+				{
+					return false;
+				}
+				
+				i++;
+			}
+		}
+		
+		return result;
+	}
+
+
+	/**
+	 * Gets the interceptor class.
+	 * 
+	 * @return interceptor class
+	 */
+	public Class<?> getClazz()
+	{
+		return clazz;
+	}
+
+	public Set<Interceptor> getMetaInceptors()
+	{
+		Set<Interceptor> set = new HashSet<Interceptor>();
+		
+		Set<Class<? extends Annotation>> keys = interceptorBindingSet.keySet();
+		Iterator<Class<? extends Annotation>> it = keys.iterator();
+		
+		while(it.hasNext())
+		{
+			Class<? extends Annotation> clazzAnnot = it.next();
+			if(AnnotationUtil.isMetaAnnotationExist(clazzAnnot.getAnnotations(), InterceptorBindingType.class))
+			{
+ 				Annotation[] anns =	AnnotationUtil.getMetaAnnotations(clazzAnnot.getAnnotations(), InterceptorBindingType.class);
+ 				
+ 				/*
+ 				 * For example:
+ 				 * 
+ 				 * @InterceptorBindingType
+ 				 * @Transactional
+ 				 * @Action
+ 				 * public @interface ActionTransactional
+ 				 * 
+ 				 * @ActionTransactional @Production
+ 				 * {
+ 				 * 
+ 				 * }
+ 				 * 
+ 				 */
+ 				
+ 				//For example : @Transactional @Action Interceptor
+ 				Set<Interceptor> metas = WebBeansInterceptorConfig.findDeployedWebBeansInterceptor(anns);
+ 				set.addAll(metas);
+ 				
+ 				//For each @Transactional and @Action Interceptor
+ 				for(Annotation ann : anns)
+ 				{
+ 					Annotation[] simple = new Annotation[1];
+ 					simple[0] = ann;
+ 					metas = WebBeansInterceptorConfig.findDeployedWebBeansInterceptor(simple);
+ 					set.addAll(metas);
+ 				}
+ 				
+			}
+		}
+		
+		return set;
+	}
+	
+	/**
+	 * Sets interceptor class.
+	 * 
+	 * @param clazz class instance
+	 */
+	public void setClazz(Class<?> clazz)
+	{
+		this.clazz = clazz;
+	}
+
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	@Override
+	public boolean equals(Object obj)
+	{
+		if(this == obj)
+			return true;
+		
+		WebBeansInterceptor o = null;
+		
+		if(obj instanceof WebBeansInterceptor)
+		{
+			o = (WebBeansInterceptor) obj;
+			
+			if(o.clazz != null && this.clazz != null)
+			{
+				return o.clazz.equals(this.clazz);
+			}
+			
+		}
+		
+		return false;
+	}
+
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.lang.Object#hashCode()
+	 */
+	@Override
+	public int hashCode()
+	{
+		return this.clazz != null ? clazz.hashCode() : 0;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString()
+	{
+		return "WebBeans Interceptor with class : " + "[" + this.clazz.getName() + "]";
+	}
+
+
+	@Override
+	public Set<Annotation> getInterceptorBindingTypes()
+	{
+		Set<Annotation> set = new HashSet<Annotation>();
+		Set<Class<? extends Annotation>> keySet = this.interceptorBindingSet.keySet();
+		Iterator<Class<? extends Annotation>> itSet = keySet.iterator();
+		
+		while(itSet.hasNext())
+		{
+			set.add(this.interceptorBindingSet.get(itSet.next()));
+		}
+		
+		return set;
+	}
+
+
+	@Override
+	public Method getMethod(InterceptionType type)
+	{
+		Class<? extends Annotation> interceptorTypeAnnotationClazz = InterceptorUtil.getInterceptorAnnotationClazz(type);
+		Method method = WebBeansUtil.checkCommonAnnotationCriterias(getClazz(), interceptorTypeAnnotationClazz, true);
+		
+		return method;
+	}
+
+
+	@Override
+	public Object create()
+	{
+		return delegateComponent.create();
+	}
+
+
+	@Override
+	public void destroy(Object instance)
+	{
+		delegateComponent.destroy(instance);
+	}
+
+
+	@Override
+	public Set<Annotation> getBindingTypes()
+	{
+		return delegateComponent.getBindingTypes();
+	}
+
+
+	@Override
+	public Class<? extends Annotation> getDeploymentType()
+	{
+		return delegateComponent.getDeploymentType();
+	}
+
+
+	@Override
+	public String getName()
+	{
+		return delegateComponent.getName();
+	}
+
+
+	@Override
+	public Class<? extends Annotation> getScopeType()
+	{
+		return delegateComponent.getScopeType();
+	}
+
+
+	@Override
+	public Set<Class<?>> getTypes()
+	{
+		return delegateComponent.getTypes();
+	}
+
+
+	@Override
+	public boolean isNullable()
+	{
+		return delegateComponent.isNullable();
+	}
+
+
+	@Override
+	public boolean isSerializable()
+	{
+		return delegateComponent.isSerializable();
+	}
+}
\ No newline at end of file

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/ConversationImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/ConversationImpl.java?rev=719890&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/ConversationImpl.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/ConversationImpl.java Sat Nov 22 10:09:38 2008
@@ -0,0 +1,168 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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 org.apache.webbeans.jsf;
+
+
+import javax.webbeans.Conversation;
+import javax.webbeans.ConversationScoped;
+
+import org.apache.webbeans.container.ManagerImpl;
+import org.apache.webbeans.context.ConversationContext;
+import org.apache.webbeans.util.Asserts;
+import org.apache.webbeans.util.StringUtil;
+
+public class ConversationImpl implements Conversation
+{
+	private String id;
+	
+	private String viewId;
+	
+	private boolean longRunning = false;
+	
+	private long timeout;
+	
+	private String sessionId;
+	
+	private long activeTime = 0L;
+	
+	public ConversationImpl(String sessionId)
+	{
+		Asserts.assertNotNull(sessionId);
+		this.sessionId = sessionId;
+		
+	}
+
+	public void begin()
+	{
+		this.longRunning = true;
+		this.id = StringUtil.generateUUIDStringWithoutDash();
+		
+		ConversationManager.getInstance().addConversationContext(this,(ConversationContext) ManagerImpl.getManager().getContext(ConversationScoped.class));
+	}
+
+	public void begin(String id)
+	{
+		this.longRunning = true;
+		this.id = id;
+		
+		ConversationManager.getInstance().addConversationContext(this,(ConversationContext) ManagerImpl.getManager().getContext(ConversationScoped.class));		
+	}
+
+	public void end()
+	{
+		this.longRunning = false;
+	}
+
+	public String getId()
+	{
+		return this.id;
+	}
+
+	public long getTimeout()
+	{
+		return this.timeout;
+	}
+
+	public boolean isLongRunning()
+	{
+		return this.longRunning;
+	}
+
+	public void setTimeout(long milliseconds)
+	{
+		this.timeout = milliseconds;
+	}
+	
+	public String getSessionId()
+	{
+		return this.sessionId;
+	}
+	
+
+	/**
+	 * @return the creationTime
+	 */
+	public long getActiveTime()
+	{
+		return activeTime;
+	}
+
+	/**
+	 * @return the viewId
+	 */
+	public String getViewId()
+	{
+		return viewId;
+	}
+
+	public void updateTimeOut()
+	{
+		this.activeTime = System.currentTimeMillis();
+	}
+	
+	/**
+	 * @param viewId the viewId to set
+	 */
+	public void setViewId(String viewId)
+	{
+		this.viewId = viewId;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#hashCode()
+	 */
+	@Override
+	public int hashCode()
+	{
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((id == null) ? 0 : id.hashCode());
+		result = prime * result + ((sessionId == null) ? 0 : sessionId.hashCode());
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	@Override
+	public boolean equals(Object obj)
+	{
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		final ConversationImpl other = (ConversationImpl) obj;
+		if (id == null)
+		{
+			if (other.id != null)
+				return false;
+		} else if (!id.equals(other.id))
+			return false;
+		if (sessionId == null)
+		{
+			if (other.sessionId != null)
+				return false;
+		} else if (!sessionId.equals(other.sessionId))
+			return false;
+		return true;
+	}
+	
+	
+	
+}	
\ No newline at end of file

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/ConversationImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/ConversationManager.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/ConversationManager.java?rev=719890&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/ConversationManager.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/ConversationManager.java Sat Nov 22 10:09:38 2008
@@ -0,0 +1,167 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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 org.apache.webbeans.jsf;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.webbeans.Conversation;
+import javax.webbeans.manager.Bean;
+
+import org.apache.webbeans.annotation.CurrentLiteral;
+import org.apache.webbeans.container.ManagerImpl;
+import org.apache.webbeans.context.ConversationContext;
+import org.apache.webbeans.util.Asserts;
+
+public class ConversationManager
+{
+	private static ConversationManager manager = null;
+	
+	private Map<Conversation, ConversationContext> conversations = null;
+	
+	private ConversationManager()
+	{
+		
+	}
+
+	public static ConversationManager getInstance()
+	{
+		if(manager == null)
+		{
+			manager = new ConversationManager();
+			manager.conversations = new ConcurrentHashMap<Conversation, ConversationContext>();
+		}
+		
+		return manager;
+	}
+	
+	public void addConversationContext(Conversation conversation, ConversationContext context)
+	{
+		conversations.put(conversation, context);
+	}
+	
+	public ConversationContext removeConversation(Conversation conversation)
+	{
+		Asserts.assertNotNull(conversation,"conversation can not be null");
+		
+		return conversations.remove(conversation);
+	}
+
+	public ConversationContext getConversationContext(Conversation conversation)
+	{
+		Asserts.assertNotNull(conversation,"conversation can not be null");
+		
+		return conversations.get(conversation);
+	}
+	
+	
+	public Conversation getConversation(String conversationId)
+	{
+		Asserts.assertNotNull(conversationId,"conversationId parameter can not be null");
+		
+		ConversationImpl conv = null;
+		Set<Conversation> set = conversations.keySet();
+		Iterator<Conversation> it = set.iterator();
+		
+		while(it.hasNext())
+		{
+			conv = (ConversationImpl)it.next();
+			if(conv.getId().equals(conversationId))
+			{
+				return conv;
+			}
+		}
+		
+		return null;
+		
+	}
+	
+	public void destroyConversationContextWithSessionId(String sessionId)
+	{
+		Asserts.assertNotNull(sessionId,"sessionId parameter can not be null");
+		
+		ConversationImpl conv = null;
+		Set<Conversation> set = conversations.keySet();
+		Iterator<Conversation> it = set.iterator();
+		
+		while(it.hasNext())
+		{
+			conv = (ConversationImpl)it.next();
+			if(conv.getSessionId().equals(sessionId))
+			{
+				it.remove();
+			}
+		}
+	}
+	
+	public Conversation createNewConversation(String viewId)
+	{
+		Asserts.assertNotNull(viewId,"viewId parameter can not be null");
+		
+		Conversation conversation = getCurrentConversation();
+		((ConversationImpl)conversation).setViewId(viewId);
+		
+		//Create conversation context
+		//ContextFactory.initConversationContext();
+		
+		//addConversationContext(conversation,(ConversationContext) ManagerImpl.getManager().getContext(ConversationScoped.class));
+			
+		return conversation;
+		
+	}
+	
+	public Conversation getCurrentConversation()
+	{
+		
+		Bean<Conversation> bean =  ManagerImpl.getManager().resolveByType(Conversation.class, new CurrentLiteral()).iterator().next();
+		Conversation conversation = ManagerImpl.getManager().getInstance(bean);
+		
+		return conversation;
+	}
+	
+	public void destroyWithRespectToTimout()
+	{
+		ConversationImpl conv = null;
+		Set<Conversation> set = conversations.keySet();
+		Iterator<Conversation> it = set.iterator();
+		
+		while(it.hasNext())
+		{
+			conv = (ConversationImpl)it.next();
+			long timeout = conv.getTimeout();
+			
+			if(timeout != 0L)
+			{
+				if((System.currentTimeMillis() - conv.getActiveTime()) > timeout)
+				{
+					it.remove();
+				}				
+			}
+		}
+	}
+	
+	public void destroyAllConversations()
+	{
+		if(conversations != null)
+		{
+			conversations.clear();
+			conversations = null;			
+		}
+	}
+}

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/ConversationManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/WebBeansJSFFilter.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/WebBeansJSFFilter.java?rev=719890&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/WebBeansJSFFilter.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/WebBeansJSFFilter.java Sat Nov 22 10:09:38 2008
@@ -0,0 +1,87 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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 org.apache.webbeans.jsf;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+import javax.webbeans.Conversation;
+import javax.webbeans.manager.Bean;
+
+import org.apache.webbeans.annotation.CurrentLiteral;
+import org.apache.webbeans.container.ManagerImpl;
+import org.apache.webbeans.util.JSFUtil;
+
+public class WebBeansJSFFilter implements Filter
+{
+
+	public void destroy()
+	{
+		
+	}
+
+	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
+	{
+		HttpServletResponse servletResponse = (HttpServletResponse) response;
+		HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper(servletResponse){
+
+			/* (non-Javadoc)
+			 * @see javax.servlet.http.HttpServletResponseWrapper#sendRedirect(java.lang.String)
+			 */
+			@Override
+			public void sendRedirect(String location) throws IOException
+			{
+				Bean<Conversation> bean =  ManagerImpl.getManager().resolveByType(Conversation.class, new CurrentLiteral()).iterator().next();
+				Conversation conversation = ManagerImpl.getManager().getInstance(bean);
+								
+				String path = location;
+				
+				if(conversation != null)
+				{
+					
+					if(conversation.isLongRunning())
+					{
+						//Find JSFish view od of the redirection
+						path = JSFUtil.getRedirectViewId(location);
+						path = JSFUtil.getViewHandler().getActionURL(JSFUtil.getCurrentFacesContext(), path);
+						path = JSFUtil.getExternalContext().encodeActionURL(path+"?cid="+conversation.getId());
+					}					
+				}
+				
+				super.sendRedirect(path);
+				
+			}
+			
+			
+		};
+		
+		chain.doFilter(request, responseWrapper);
+	}
+
+	public void init(FilterConfig config) throws ServletException
+	{
+		
+	}
+
+}

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/WebBeansJSFFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/WebBeansPhaseListener.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/WebBeansPhaseListener.java?rev=719890&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/WebBeansPhaseListener.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/WebBeansPhaseListener.java Sat Nov 22 10:09:38 2008
@@ -0,0 +1,180 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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 org.apache.webbeans.jsf;
+
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.html.HtmlInputHidden;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PhaseListener;
+import javax.webbeans.ConversationScoped;
+
+import org.apache.webbeans.container.ManagerImpl;
+import org.apache.webbeans.context.ContextFactory;
+import org.apache.webbeans.context.ConversationContext;
+import org.apache.webbeans.logger.WebBeansLogger;
+import org.apache.webbeans.util.JSFUtil;
+
+public class WebBeansPhaseListener implements PhaseListener
+{
+	private static final long serialVersionUID = -8131516076829979596L;
+
+	private static WebBeansLogger logger = WebBeansLogger.getLogger(WebBeansPhaseListener.class);
+
+	private static ConversationManager conversationManager = ConversationManager.getInstance();
+
+	private static ManagerImpl manager = ManagerImpl.getManager();
+	
+	private ConversationImpl conversation = null;
+
+	public void afterPhase(PhaseEvent phaseEvent)
+	{
+		if (phaseEvent.getPhaseId().equals(PhaseId.RESTORE_VIEW))
+		{
+			if (!JSFUtil.isPostBack())
+			{
+				String cid = JSFUtil.getExternalContext().getRequestParameterMap().get("cid");
+
+				//non-faces get request
+				if (cid == null)
+				{
+					logger.info("Create new transitional conversation for non-faces request with view id : " + JSFUtil.getViewId());
+					conversation = (ConversationImpl) conversationManager.createNewConversation(JSFUtil.getViewId());
+					
+					ContextFactory.initConversationContext(null);
+					
+				} else
+				{
+					logger.info("Propogation of the conversation with id : " + cid + " for view : " + JSFUtil.getViewId());
+					conversation = (ConversationImpl) conversationManager.getConversation(cid);
+					
+					//can not restore conversation, create new transitional
+					if (conversation == null)
+					{
+						logger.info("Propogated conversation can not be restored for view id : "+ JSFUtil.getViewId()+". Creates new transitional conversation");
+						conversation = (ConversationImpl) conversationManager.createNewConversation(JSFUtil.getViewId());
+						
+						ContextFactory.initConversationContext(null);
+					}
+					else
+					{
+						ContextFactory.initConversationContext(conversationManager.getConversationContext(conversation));
+					}
+				}
+			}
+			else
+			{
+				logger.info("Postback JSF Request for view id : " + JSFUtil.getViewId());
+				
+				UIViewRoot viewRoot = JSFUtil.getViewRoot();
+				HtmlInputHidden conversationId = (HtmlInputHidden) viewRoot.findComponent("javax_webbeans_ConversationId");
+				
+				if(conversationId != null)
+				{
+					//look long running conversation if exist
+					conversation = (ConversationImpl) conversationManager.getConversation(conversationId.getValue().toString());
+					ContextFactory.initConversationContext(conversationManager.getConversationContext(conversation));
+					
+				}
+				
+				//no long running conversation, create one transitional
+				else
+				{
+					logger.info("Create new transient conversation for JSF postback view id : " + JSFUtil.getViewId());
+					conversation = (ConversationImpl) conversationManager.createNewConversation(JSFUtil.getViewId());
+					
+					ContextFactory.initConversationContext(null);
+				}
+			}
+		}
+
+		else if (phaseEvent.getPhaseId().equals(PhaseId.RENDER_RESPONSE))
+		{
+			ConversationContext context = (ConversationContext)ManagerImpl.getManager().getContext(ConversationScoped.class);
+			
+			//if long running, saves it
+			if (conversation.isLongRunning())
+			{
+				logger.info("Conversation with id : "+ conversation.getId() + " is marked as long running conversation");				
+				context.setActive(false);
+			}
+
+			//else destroy cınversation context
+			else
+			{
+				logger.info("Destroying the conversation context for view id : " + JSFUtil.getViewId());
+				context.destroy();
+			}
+
+		}
+
+	}
+
+	public void beforePhase(PhaseEvent phaseEvent)
+	{		
+		if (phaseEvent.getPhaseId().equals(PhaseId.APPLY_REQUEST_VALUES))
+		{
+			ConversationContext context = (ConversationContext) manager.getContext(ConversationScoped.class);
+
+			if (JSFUtil.isPostBack())
+			{
+				logger.info("Activating the conversation context for view id : " + JSFUtil.getViewId());
+				context.setActive(true);
+				
+				conversation.updateTimeOut();
+			}
+		}
+
+		else if (phaseEvent.getPhaseId().equals(PhaseId.RENDER_RESPONSE))
+		{
+			ConversationContext context = (ConversationContext) manager.getContext(ConversationScoped.class);
+
+			if (!JSFUtil.isPostBack())
+			{
+				logger.info("Activating the conversation context for view id : " + JSFUtil.getViewId());
+				context.setActive(true);
+				
+				conversation.updateTimeOut();
+			}
+
+			if(conversation.isLongRunning())
+			{
+				UIViewRoot viewRoot = JSFUtil.getViewRoot();
+				
+				HtmlInputHidden hidden = (HtmlInputHidden) viewRoot.findComponent("javax_webbeans_ConversationId");
+				
+				if(hidden != null)
+				{
+					viewRoot.getChildren().remove(hidden);	
+				}
+				
+				hidden = (HtmlInputHidden)JSFUtil.getApplication().createComponent(HtmlInputHidden.COMPONENT_TYPE);
+				hidden.setValue(conversation.getId());
+				hidden.setId("javax_webbeans_ConversationId");
+				
+				viewRoot.getChildren().add(hidden);	
+			}			
+		}
+
+	}
+
+	public PhaseId getPhaseId()
+	{
+		return PhaseId.ANY_PHASE;
+	}
+
+}

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/jsf/WebBeansPhaseListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/WebBeansLifeCycle.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/WebBeansLifeCycle.java?rev=719890&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/WebBeansLifeCycle.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/WebBeansLifeCycle.java Sat Nov 22 10:09:38 2008
@@ -0,0 +1,146 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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 org.apache.webbeans.lifecycle;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletRequestEvent;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSessionEvent;
+import javax.servlet.jsp.JspApplicationContext;
+import javax.servlet.jsp.JspFactory;
+
+import org.apache.webbeans.WebBeansConstants;
+import org.apache.webbeans.config.WebBeansContainerDeployer;
+import org.apache.webbeans.config.WebBeansScanner;
+import org.apache.webbeans.context.ContextFactory;
+import org.apache.webbeans.el.WebBeansELResolver;
+import org.apache.webbeans.exception.WebBeansException;
+import org.apache.webbeans.jsf.ConversationManager;
+import org.apache.webbeans.logger.WebBeansLogger;
+import org.apache.webbeans.util.JNDIUtil;
+
+public final class WebBeansLifeCycle
+{
+	private static WebBeansLogger logger = WebBeansLogger.getLogger(WebBeansLifeCycle.class);
+	
+	private static ScheduledExecutorService service = null;
+
+	private WebBeansLifeCycle()
+	{
+		
+	}
+	
+
+	public static void requestStarted(ServletRequestEvent event)
+	{
+		logger.info("Initializing of the Request Context with Remote Address : " + event.getServletRequest().getRemoteAddr());
+		ContextFactory.initRequestContext((HttpServletRequest)event.getServletRequest());		
+	}
+	
+	public static void requestEnded(ServletRequestEvent event)
+	{
+		logger.info("Destroying of the Request Context with Remote Address : " + event.getServletRequest().getRemoteAddr());
+		ContextFactory.destroyRequestContext((HttpServletRequest)event.getServletRequest());		
+	}
+	
+	public static void sessionStarted(HttpSessionEvent event)
+	{
+		logger.info("Initializing of the Session Context with session id : " + event.getSession().getId());
+		ContextFactory.initSessionContext(event.getSession());		
+	}
+	
+	public static void sessionEnded(HttpSessionEvent event)
+	{
+		logger.info("Destroying of the Session Context with session id : " + event.getSession().getId());
+		ContextFactory.destroySessionContext(event.getSession());	
+		
+		ConversationManager conversationManager = ConversationManager.getInstance();
+		conversationManager.destroyConversationContextWithSessionId(event.getSession().getId());		
+	}
+	
+	public static void applicationStarted(ServletContextEvent event)
+	{
+		//I do not know this is the correct way, spec is not so explicit.
+		service = Executors.newScheduledThreadPool(1);
+		service.scheduleWithFixedDelay(new Runnable(){
+
+			public void run()
+			{
+				ConversationManager.getInstance().destroyWithRespectToTimout();
+				
+			}
+			
+		}, 15000, 15000, TimeUnit.MILLISECONDS);
+		
+		
+		logger.info("Starting the WebBeans Container Configuration");
+		long begin = System.currentTimeMillis();
+		
+		logger.info("Scanning classpaths for WebBeans artifacts is started");
+		WebBeansScanner scanner = WebBeansScanner.getScannerInstance();
+		scanner.scan(event.getServletContext());
+		logger.info("Scanning is ended.");
+		
+		logger.info("Deploying the scanned WebBeans artifacts."); 
+		WebBeansContainerDeployer.deploy();
+		logger.info("Deploying is ended.");
+		
+		long end = System.currentTimeMillis();
+		logger.info("WebBeans Container Configuration is ended, takes " + Long.toString(end - begin) + " ms.");
+		
+		//Initalize Application Context
+		logger.info("Initializing of the Application Context with Context Path : " + event.getServletContext().getContextPath());
+		ContextFactory.initApplicationContext(event.getServletContext());
+		
+		ServletContext context = event.getServletContext();
+		
+		try
+		{
+			//check this application is JSF application
+			URL url = context.getResource("/WEB-INF/faces-config.xml");
+			if(url == null)
+			{
+				JspApplicationContext applicationCtx = JspFactory.getDefaultFactory().getJspApplicationContext(context);
+				applicationCtx.addELResolver(new WebBeansELResolver());
+			}
+			
+		}catch(MalformedURLException e)
+		{
+			logger.error(e);
+			throw new WebBeansException(e);
+		}
+
+		
+	}
+	
+	public static void applicationEnded(ServletContextEvent event)
+	{
+		service.shutdownNow();
+		
+		logger.info("Destroying of the Application Context with Context Path : " + event.getServletContext().getContextPath());
+		ContextFactory.destroyApplicationContext(event.getServletContext());
+		JNDIUtil.unbind(WebBeansConstants.WEB_BEANS_MANAGER_JNDI_NAME);		
+	}
+	
+}

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/WebBeansLifeCycle.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/logger/WebBeansLogger.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/logger/WebBeansLogger.java?rev=719890&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/logger/WebBeansLogger.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/logger/WebBeansLogger.java Sat Nov 22 10:09:38 2008
@@ -0,0 +1,162 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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 org.apache.webbeans.logger;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Wrapper class around the log4j logger class to include some checks
+ * before the logs are actually written.
+ * 
+ * <p>
+ * Actually, it is a thin layer on the log4j {@link Logger} implementation.
+ * </p>
+ * 
+ * @author <a href="mailto:gurkanerdogdu@yahoo.com">Gurkan Erdogdu</a>
+ * @since 1.0
+ */
+public final class WebBeansLogger
+{
+	/**Inner logger object to log actual log messages*/
+	private Logger logger = null;
+
+	/**Private constructor*/
+	private WebBeansLogger()
+	{
+
+	}
+	
+
+	/**
+	 * Gets the new web beans logger instance.
+	 * @param clazz own the return logger
+	 * @return new logger
+	 */
+	public static WebBeansLogger getLogger(Class<?> clazz)
+	{
+		WebBeansLogger wbLogger = new WebBeansLogger();
+		Logger inLogger = Logger.getLogger(clazz);
+		
+		wbLogger.setLogger(inLogger);
+		
+		return wbLogger;
+	}
+
+	public void fatal(String message)
+	{
+		checkNullLogger();
+		logger.fatal(message);
+	}
+	
+	public void fatal(String message,Throwable e)
+	{
+		checkNullLogger();
+		logger.fatal(message,e);
+		
+	}
+	
+	public void error(Throwable e)
+	{
+		checkNullLogger();
+		logger.error(e);
+	}
+	
+
+	public void error(String message)
+	{
+		checkNullLogger();
+		logger.error(message);
+	}
+	
+	public void error(String message,Throwable e)
+	{
+		checkNullLogger();
+		logger.error(message,e);
+		
+	}
+	
+	public void warn(String message)
+	{
+		checkNullLogger();
+		logger.warn(message);
+	}
+	
+	public void warn(String message,Throwable e)
+	{
+		checkNullLogger();
+		logger.warn(message,e);
+	}
+	
+	public void info(String message)
+	{
+		checkNullLogger();
+		if(logger.isInfoEnabled())
+			logger.info(message);
+	}
+	
+	public void info(String message,Throwable e)
+	{
+		checkNullLogger();
+		if(logger.isInfoEnabled())
+			logger.info(message,e);
+	}
+	
+	public void debug(String message)
+	{
+		checkNullLogger();
+		if(logger.isDebugEnabled())
+			logger.debug(message);
+	}
+	
+	public void debug(String message,Throwable e)
+	{
+		checkNullLogger();
+		if(logger.isDebugEnabled())
+			logger.debug(message,e);
+	}
+	
+	public void trace(String message)
+	{
+		checkNullLogger();
+		if(logger.isTraceEnabled())
+			logger.trace(message);
+	}
+	
+	public void trace(String message,Throwable e)
+	{
+		checkNullLogger();
+		if(logger.isTraceEnabled())
+			logger.trace(message,e);
+	}
+	
+	/**
+	 * Sets the logger
+	 * @param logger new logger instance
+	 */
+	public void setLogger(Logger logger)
+	{
+		this.logger = logger;
+	}
+	
+	private void checkNullLogger()
+	{
+		if(this.logger == null)
+		{
+			throw new NullPointerException("Logger can not be null");
+		}
+	}
+}

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/logger/WebBeansLogger.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java?rev=719890&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java Sat Nov 22 10:09:38 2008
@@ -0,0 +1,67 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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 org.apache.webbeans.proxy;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+
+import org.apache.webbeans.component.AbstractComponent;
+import org.apache.webbeans.exception.WebBeansException;
+import org.apache.webbeans.intercept.InterceptorHandler;
+import org.apache.webbeans.util.ClassUtil;
+
+import javassist.util.proxy.MethodFilter;
+import javassist.util.proxy.ProxyFactory;
+
+public final class JavassistProxyFactory
+{
+	private JavassistProxyFactory()
+	{
+		
+	}
+	
+	
+	public static Object createNewProxyInstance(Class<?> superClazz, Class<?>[] paramTypes, Object[] args, AbstractComponent<?> component)
+	{
+		Object result = null;
+		try
+		{
+			ProxyFactory fact = new ProxyFactory();
+			fact.setInterfaces(new Class[]{Serializable.class});
+			fact.setSuperclass(superClazz);
+			fact.setHandler(new InterceptorHandler(component));
+			fact.setFilter(new MethodFilter(){
+
+				public boolean isHandled(Method arg0)
+				{
+					if(ClassUtil.isObjectMethod(arg0.getName()))
+						return false;
+					return true;
+				}
+				
+			});
+			
+			result = fact.create(paramTypes, args); 
+		}catch(Throwable e)
+		{
+			throw new WebBeansException(e);
+		}
+		
+		return result;
+	}
+
+}

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java?rev=719890&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java Sat Nov 22 10:09:38 2008
@@ -0,0 +1,86 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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 org.apache.webbeans.servlet;
+
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+import javax.servlet.ServletRequestEvent;
+import javax.servlet.ServletRequestListener;
+import javax.servlet.http.HttpSessionEvent;
+import javax.servlet.http.HttpSessionListener;
+
+import org.apache.webbeans.lifecycle.WebBeansLifeCycle;
+
+/**
+ * Configures the all web beans components that are defined in the EAR or WAR
+ * file.
+ * @author <a href="mailto:gurkanerdogdu@yahoo.com">Gurkan Erdogdu</a>
+ * @since 1.0
+ */
+public class WebBeansConfigurationListener implements ServletContextListener,ServletRequestListener,HttpSessionListener
+{
+
+	/**
+	 * Performed when the servlet context destroyed.
+	 */
+	public void contextDestroyed(ServletContextEvent event)
+	{
+		WebBeansLifeCycle.applicationEnded(event);
+	}
+
+	/**
+	 * Performed when the servlet context started.
+	 */
+	public void contextInitialized(ServletContextEvent event)
+	{
+		WebBeansLifeCycle.applicationStarted(event);
+	}
+
+	/**
+	 * Destroy request context
+	 */
+	public void requestDestroyed(ServletRequestEvent event)
+	{
+		WebBeansLifeCycle.requestEnded(event);
+	}
+
+	/**
+	 * Initializes the request context
+	 */
+	public void requestInitialized(ServletRequestEvent event)
+	{
+		WebBeansLifeCycle.requestStarted(event);
+	}
+
+	/**
+	 * Initializes session context
+	 */
+	public void sessionCreated(HttpSessionEvent event)
+	{
+		WebBeansLifeCycle.sessionStarted(event);
+	}
+
+	/**
+	 * Destroy session context
+	 */
+	public void sessionDestroyed(HttpSessionEvent event)
+	{
+		WebBeansLifeCycle.sessionEnded(event);
+	}
+	
+}

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java?rev=719890&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java Sat Nov 22 10:09:38 2008
@@ -0,0 +1,665 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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 org.apache.webbeans.util;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import javax.webbeans.BindingType;
+import javax.webbeans.DuplicateBindingTypeException;
+import javax.webbeans.NonBinding;
+
+
+
+/**
+ * Utility class related with {@link Annotation} operations.
+ * 
+ * @author <a href="mailto:gurkanerdogdu@yahoo.com">Gurkan Erdogdu</a>
+ * @since 1.0
+ */
+public final class AnnotationUtil
+{
+	//No instantiate
+	private AnnotationUtil()
+	{
+		throw new UnsupportedOperationException();
+	}
+	
+	/**
+	 * Check given annotation exist on the method.
+	 * 
+	 * @param method method
+	 * @param clazz annotation class
+	 * @return true or false
+	 */
+	public static boolean isMethodHasAnnotation(Method method, Class<? extends Annotation> clazz)
+	{
+		Asserts.assertNotNull(method, "Method argument can not be null");
+		Asserts.assertNotNull(clazz, "Clazz argument can not be null");
+		
+		Annotation[] anns = method.getDeclaredAnnotations();
+		for(Annotation annotation : anns)
+		{
+			if(annotation.annotationType().equals(clazz))
+			{
+				return true;
+			}
+		}
+		
+		return false;
+		
+	}
+	
+	
+	/**
+	 * Check given annotation exist in the any parameter of the given method.
+	 * Return true if exist false otherwise.
+	 * @param method method 
+	 * @param annotation checking annotation
+	 * @return true or false
+	 */
+	public static boolean isMethodParameterAnnotationExist(Method method, Class<? extends Annotation> clazz)
+	{
+		Asserts.assertNotNull(method, "Method argument can not be null");
+		Asserts.assertNotNull(clazz, "Clazz argument can not be null");
+		
+		Annotation[][] parameterAnns = method.getParameterAnnotations();		
+		
+		for(Annotation[] parameters : parameterAnns)
+		{
+			for(Annotation param : parameters)
+			{
+				Class<? extends Annotation> btype = param.annotationType();
+				if(btype.equals(clazz))
+				{
+					return true;
+				}
+			}
+			
+		}
+		return false;
+	}
+	
+	public static Type[] getMethodParameterGenericTypesWithGivenAnnotation(Method method, Class<? extends Annotation> clazz)
+	{
+		Asserts.assertNotNull(method, "Method argument can not be null");
+		Asserts.assertNotNull(clazz, "Clazz argument can not be null");
+		
+		List<Type> list = new ArrayList<Type>();
+		Type[] result = null;
+		
+		Annotation[][] parameterAnns = method.getParameterAnnotations();		
+		Type[] genericTypes = method.getGenericParameterTypes();
+		
+		int i = 0;
+		for(Annotation[] parameters : parameterAnns)
+		{
+			for(Annotation param : parameters)
+			{
+				Class<? extends Annotation> btype = param.annotationType();
+				if(btype.equals(clazz))
+				{
+					list.add(genericTypes[i]);
+					break;
+				}
+			}
+			
+			i++;
+			
+		}
+		
+		result = new Type[list.size()];
+		result = list.toArray(result);
+		
+		return result;
+	}
+	
+	public static Type[] getConstructorParameterGenericTypesWithGivenAnnotation(Constructor<?> constructor, Class<? extends Annotation> clazz)
+	{
+		Asserts.assertNotNull(constructor, "constructor argument can not be null");
+		Asserts.assertNotNull(clazz, "Clazz argument can not be null");
+		
+		List<Type> list = new ArrayList<Type>();
+		Type[] result = null;
+		
+		Annotation[][] parameterAnns = constructor.getParameterAnnotations();		
+		Type[] genericTypes = constructor.getGenericParameterTypes();
+		
+		int i = 0;
+		for(Annotation[] parameters : parameterAnns)
+		{
+			for(Annotation param : parameters)
+			{
+				Class<? extends Annotation> btype = param.annotationType();
+				if(btype.equals(clazz))
+				{
+					list.add(genericTypes[i]);
+					break;
+				}
+			}
+			
+			i++;
+			
+		}
+		
+		result = new Type[list.size()];
+		result = list.toArray(result);
+		
+		return result;
+	}
+	
+	
+	/**
+	 * Check given annotation exist in the multiple parameter of the given method.
+	 * Return true if exist false otherwise.
+	 * 
+	 * @param method method 
+	 * @param annotation checking annotation
+	 * @return true or false
+	 */
+	public static boolean isMethodMultipleParameterAnnotationExist(Method method, Class<? extends Annotation> clazz)
+	{
+		Asserts.assertNotNull(method, "Method argument can not be null");
+		Asserts.assertNotNull(clazz, "Clazz argument can not be null");
+		
+		Annotation[][] parameterAnns = method.getParameterAnnotations();		
+		
+		boolean found = false;
+		
+		for(Annotation[] parameters : parameterAnns)
+		{
+			for(Annotation param : parameters)
+			{
+				
+				if(param.annotationType().equals(clazz))
+				{
+					if(!found)
+					{
+						found = true;
+					}
+					else
+					{
+						return true;
+					}
+				}
+			}
+			
+		}
+		return false;
+	}
+	
+	/**
+	 * Gets the method first found parameter type that is annotated 
+	 * with the given annotation.
+	 *
+	 * @param method method 
+	 * @param annotation checking annotation
+	 * @return type
+	 */
+	public static Type getMethodFirstParameterWithAnnotation(Method method, Class<? extends Annotation> clazz)
+	{
+		Asserts.assertNotNull(method, "Method argument can not be null");
+		Asserts.assertNotNull(clazz, "Clazz argument can not be null");
+		
+		Annotation[][] parameterAnns = method.getParameterAnnotations();
+		Type[] params = method.getGenericParameterTypes();
+		
+		int index = 0;
+		for(Annotation[] parameters : parameterAnns)
+		{
+			for(Annotation param : parameters)
+			{
+				Class<? extends Annotation> btype = param.annotationType();
+				if(btype.equals(clazz))
+				{
+					return params[index];
+				}
+			}
+			
+			index++;
+			
+		}
+		return null;
+	}
+	
+	public static Class<?> getMethodFirstParameterTypeClazzWithAnnotation(Method method, Class<? extends Annotation> clazz)
+	{
+		Type type = getMethodFirstParameterWithAnnotation(method, clazz);
+		
+		if(type instanceof ParameterizedType)
+		{
+			return (Class<?>)((ParameterizedType)type).getRawType();
+		}
+		else
+		{
+			return (Class<?>)type;
+		}
+	}
+	
+	/**
+	 * Gets the method first found parameter binding types.
+	 *
+	 * @param method method 
+	 * @param annotation checking annotation
+	 * @return annotation array
+	 */
+	public static Annotation[] getMethodFirstParameterBindingTypesWithGivenAnnotation(Method method, Class<? extends Annotation> clazz)
+	{
+		Asserts.assertNotNull(method, "Method argument can not be null");
+		Asserts.assertNotNull(clazz, "Clazz argument can not be null");
+		
+		Annotation[][] parameterAnns = method.getParameterAnnotations();
+		List<Annotation> list = new ArrayList<Annotation>();
+		Annotation[] result = null;
+		
+		int index = 0;
+		for(Annotation[] parameters : parameterAnns)
+		{
+			boolean found = false;
+			for(Annotation param : parameters)
+			{
+				Class<? extends Annotation> btype = param.annotationType();
+				if(btype.equals(clazz))
+				{
+					found = true;
+					continue;
+				}
+				
+				if(btype.isAnnotationPresent(BindingType.class))
+				{
+					list.add(param);
+				}
+				
+			}
+			
+			if(found)
+			{
+				result = new Annotation[list.size()];
+				result = list.toArray(result);
+				return result;
+			}
+			
+			index++;
+			
+		}
+		result = new Annotation[0];
+		return result;
+	}
+	
+	
+	
+	
+	/**
+	 * Check given annotation cross ref exist in the any parameter of the given method.
+	 * Return true if exist false otherwise.
+	 * @param method method 
+	 * @param annotation checking annotation
+	 * @return true or false
+	 */
+	public static boolean isMethodParameterAnnotationCrossRefExist(Method method, Class<? extends Annotation> clazz)
+	{
+		Asserts.assertNotNull(method, "Method argument can not be null");
+		Asserts.assertNotNull(clazz, "Clazz argument can not be null");
+		
+		Annotation[][] parameterAnns = method.getParameterAnnotations();		
+		
+		for(Annotation[] parameters : parameterAnns)
+		{
+			for(Annotation param : parameters)
+			{
+				Annotation[] btype = param.annotationType().getAnnotations();
+				
+				for(Annotation b : btype)
+				{
+					if(b.annotationType().equals(clazz))
+					{
+						return true;
+					}
+				}
+			}
+			
+		}
+		return false;
+	}
+	
+	/**
+	 * Returns true if the injection point binding type and {@link NonBinding} member values are
+	 * equal to the given member annotation.
+	 * 
+	 * @param clazz annotation class
+	 * @param src component binding type annotation
+	 * @param member annotation for querying the binding type
+	 * @return true or false
+	 */
+	public static boolean isAnnotationMemberExist(Class<? extends Annotation> clazz,Annotation src, Annotation member)
+	{
+		Asserts.assertNotNull(clazz, "Clazz argument can not be null");
+		Asserts.assertNotNull(src, "Src argument can not be null");
+		Asserts.assertNotNull(member, "Member argument can not be null");
+		
+		if(!src.annotationType().equals(member.annotationType()))
+		{
+			return false;
+		}
+		
+		Method[] methods =  clazz.getDeclaredMethods();
+		
+		List<String> list = new ArrayList<String>();
+		
+		for(Method method : methods)
+		{
+			Annotation[] annots = method.getDeclaredAnnotations();
+			
+			if(annots.length > 0)
+			{
+				for(Annotation annot : annots)
+				{
+					if(!annot.annotationType().equals(NonBinding.class))
+					{
+						list.add(method.getName());
+					}
+				}
+				
+			}
+			else
+			{
+				list.add(method.getName());
+			}
+		}
+		
+		return checkEquality(src.toString(), member.toString(), list);
+	
+	}
+	
+	/**
+	 * Check that given two annotation values are equal or not.
+	 * 
+	 * @param src annotation toString method
+	 * @param member annotation toString method
+	 * @param arguments annotation member values with {@link NonBinding} annoations.
+	 * @return true or false
+	 */
+	private static boolean checkEquality(String src, String member,List<String> arguments)
+	{
+		if((checkEquBuffer(src, arguments).toString().equals(checkEquBuffer(member, arguments).toString())))
+				return true;
+		return false;
+	}
+	
+	/*
+	 * Private check method
+	 */
+	private static StringBuffer checkEquBuffer(String src, List<String> arguments)
+	{
+		int index = src.indexOf('(');
+		
+		String sbstr = src.substring(index+1,src.length()-1);
+		
+		StringBuffer srcBuf = new StringBuffer();
+
+		StringTokenizer tok = new StringTokenizer(sbstr,",");
+		while(tok.hasMoreTokens())
+		{
+			String token = tok.nextToken();
+			
+			StringTokenizer tok2 = new StringTokenizer(token,"=");
+			while(tok2.hasMoreElements())
+			{
+				String tt = tok2.nextToken();
+				if(arguments.contains(tt.trim()))
+				{
+					srcBuf.append(tt);
+					srcBuf.append("=");
+					
+					if(tok2.hasMoreElements())
+						srcBuf.append(tok2.nextToken());
+				}
+			}
+			
+		}
+	
+		return srcBuf;
+	}
+	
+	/**
+	 * Gets the array of binding annotations on the given array.
+	 * 
+	 * @param annotations annotation array
+	 * @return array containing binding type anns
+	 */
+	public static Annotation[] getBindingAnnotations(Annotation...annotations)
+	{
+		Asserts.assertNotNull(annotations, "Annotations argument can not be null");
+		
+		Set<Annotation> set = new HashSet<Annotation>();
+		
+		for(Annotation annot : annotations)
+		{
+			if(annot.annotationType().isAnnotationPresent(BindingType.class))
+			{
+				set.add(annot);
+			}
+		}
+		
+		Annotation[] a = new Annotation[set.size()];
+		a = set.toArray(a);
+		
+		return a;
+	}
+	
+	/**
+	 * Gets array of methods that has parameter with given annotation type.
+	 * 
+	 * @param clazz class for check
+	 * @param annotation for check
+	 * @return array of methods
+	 */
+	public static Method[] getMethodsWithParameterAnnotation(Class<?> clazz, Class<? extends Annotation> annotation)
+	{
+		Asserts.assertNotNull(clazz, "Clazz argument can not be null");
+		Asserts.assertNotNull(annotation, "Annotation argument can not be null");
+		
+		Method[] methods =  clazz.getDeclaredMethods();
+		List<Method> list = new ArrayList<Method>();
+		Method[] rMethod = null;
+		
+		for(Method m : methods)
+		{
+			if(isMethodParameterAnnotationExist(m, annotation))
+			{
+				list.add(m);
+			}
+		}
+		
+		rMethod = new Method[list.size()];
+		rMethod = list.toArray(rMethod);
+		
+		return rMethod;
+	}
+	
+	/**
+	 * Gets array of methods that has given annotation type.
+	 * 
+	 * @param clazz class for check
+	 * @param annotation for check
+	 * @return array of methods
+	 */
+	public static Method[] getMethodsWithAnnotation(Class<?> clazz, Class<? extends Annotation> annotation)
+	{
+		Asserts.assertNotNull(clazz, "Clazz argument can not be null");
+		Asserts.assertNotNull(annotation, "Annotation argument can not be null");
+		
+		Method[] methods =  clazz.getDeclaredMethods();
+		List<Method> list = new ArrayList<Method>();
+		Method[] rMethod = null;
+		
+		for(Method m : methods)
+		{
+			if(isMethodHasAnnotation(m, annotation))
+			{
+				list.add(m);
+			}
+		}
+		
+		rMethod = new Method[list.size()];
+		rMethod = list.toArray(rMethod);
+		
+		return rMethod;
+	}
+	
+	
+	/**
+	 * Check whether or not class contains the given annotation.
+	 * 
+	 * @param clazz class instance
+	 * @param annotation annotation class
+	 * @return return true or false
+	 */
+	public static boolean isAnnotationExistOnClass(Class<?> clazz, Class<? extends Annotation> annotation)
+	{
+		Asserts.assertNotNull(clazz, "Clazz argument can not be null");
+		Asserts.assertNotNull(annotation, "Annotation argument can not be null");
+		
+		Annotation a = clazz.getAnnotation(annotation);
+		
+		if(a != null)
+		{
+			return true;
+		}
+		
+		return false;
+	}
+	
+
+	public static boolean isMetaAnnotationExist(Annotation[] anns, Class<? extends Annotation> metaAnnotation)
+	{
+		Asserts.assertNotNull(anns, "Anns argument can not be null");
+		Asserts.assertNotNull(metaAnnotation, "MetaAnnotation argument can not be null");
+		
+		for(Annotation annot : anns)
+		{
+			if(annot.annotationType().isAnnotationPresent(metaAnnotation))
+			{
+				return true;
+			}
+		}
+		
+		return false;
+		
+	}
+	
+	public static boolean isAnnotationExist(Annotation[] anns, Class<? extends Annotation> annotation)
+	{
+		Asserts.assertNotNull(anns, "anns argument can not be null");
+		Asserts.assertNotNull(annotation, "annotation argument can not be null");
+		
+		for(Annotation annot : anns)
+		{
+			if(annot.annotationType().equals(annotation))
+			{
+				return true;
+			}
+		}
+		
+		return false;
+		
+	}
+	
+	
+
+	public static Annotation[] getMetaAnnotations(Annotation[] anns, Class<? extends Annotation> metaAnnotation)
+	{
+		List<Annotation> annots = new ArrayList<Annotation>();
+		Annotation[] result = null;
+		Asserts.assertNotNull(anns, "Anns argument can not be null");
+		Asserts.assertNotNull(metaAnnotation, "MetaAnnotation argument can not be null");
+
+		for(Annotation annot : anns)
+		{
+			if(annot.annotationType().isAnnotationPresent(metaAnnotation))
+			{
+				annots.add(annot);
+			}
+		}
+		
+		result = new Annotation[annots.size()];
+		result = annots.toArray(result);
+		
+		return result;
+	}
+	
+	public static Field[] getClazzFieldsWithGivenAnnotation(Class<?> clazz, Class<? extends Annotation> annotation)
+	{
+		Field[] fields = clazz.getDeclaredFields();
+		List<Field> list = new ArrayList<Field>();
+		
+		if(fields.length != 0)
+		{
+			for(Field field : fields)
+			{
+				if(field.isAnnotationPresent(annotation))
+				{
+					list.add(field);
+				}
+			}
+		}
+		
+		fields = new Field[list.size()];
+		fields = list.toArray(fields);
+		
+		return fields;
+	}
+	
+	public static void checkBindingTypeConditions(Annotation...bindignTypeAnnots)
+	{
+		Annotation before = null;
+		
+		for(Annotation ann : bindignTypeAnnots)
+		{
+			if(!ann.annotationType().isAnnotationPresent(BindingType.class))
+			{
+				throw new IllegalArgumentException("Binding annotations must be annotated with @BindingType");
+			}
+			
+			if(before == null)
+			{
+				before = ann;
+			}
+			else
+			{
+				if(before.equals(ann))
+				{
+					throw new DuplicateBindingTypeException("Binding annotations can not contain duplicate binding : @" + before.annotationType().getName());
+				}
+				else
+				{
+					before = ann;
+				}
+			}
+		}
+	}
+	
+}

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/AnnotationUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Asserts.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Asserts.java?rev=719890&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Asserts.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Asserts.java Sat Nov 22 10:09:38 2008
@@ -0,0 +1,118 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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 org.apache.webbeans.util;
+
+import java.lang.reflect.Method;
+
+import org.dom4j.Element;
+
+/**
+ * Simple utility classes with some assertions methods.
+ * 
+ * @author <a href="mailto:gurkanerdogdu@yahoo.com">Gurkan Erdogdu</a>
+ * @since 1.0
+ */
+public final class Asserts
+{
+
+	/*
+	 * Private constructor
+	 */
+	private Asserts()
+	{
+		throw new UnsupportedOperationException();
+	}
+	
+	/**
+	 * Check the object is null or not
+	 * 
+	 * @param obj null check object
+	 * @param message exception message
+	 */
+	public static void assertNotNull(Object obj, String message)
+	{
+		if(obj == null)
+		{
+			throw new NullPointerException(message);
+		}
+	}
+	
+	/**
+	 * Check the object is null or not
+	 * 
+	 * @param obj null check object
+	 */
+	public static void assertNotNull(Object obj)
+	{
+		if(obj == null)
+		{
+			throw new NullPointerException();
+		}
+	}
+	
+	/**
+	 * Null check for type modifiers.
+	 * 
+	 * @param modifier modifier parameter check
+	 */
+	public static void nullCheckForModifier(Integer modifier)
+	{
+		Asserts.assertNotNull(modifier, "modifier argument can not be null");
+	}
+	
+	/**
+	 * Null check for class parameter.
+	 * 
+	 * @param clazz parameter
+	 */
+	public static void nullCheckForClass(Class<?> clazz)
+	{
+		Asserts.assertNotNull(clazz, "clazz argument can not be null");
+	}
+	
+	/**
+	 * Null check for class parameter.
+	 * 
+	 * @param clazz parameter
+	 */
+	public static void nullCheckForClass(Class<?> clazz,String message)
+	{
+		Asserts.assertNotNull(clazz, message);
+	}
+	
+	
+	/**
+	 * Null check for method parameter.
+	 * 
+	 * @param method parameter
+	 */
+	public static void nullCheckForMethod(Method method)
+	{
+		Asserts.assertNotNull(method, "method argument can not be null");
+	}
+	
+	/**
+	 * Null check for element parameter.
+	 * 
+	 * @param element parameter
+	 */
+	public static void nullCheckForDomElement(Element element)
+	{
+		Asserts.assertNotNull(element, "element argument can not be null");
+	}
+	
+}

Propchange: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/Asserts.java
------------------------------------------------------------------------------
    svn:eol-style = native