You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2009/04/22 18:12:58 UTC
svn commit: r767580 - in /incubator/openwebbeans/trunk/webbeans-impl/src:
main/java/org/apache/webbeans/container/ChildActivityManager.java
main/java/org/apache/webbeans/container/ManagerImpl.java
test/java/org/apache/webbeans/test/mock/MockManager.java
Author: struberg
Date: Wed Apr 22 16:12:58 2009
New Revision: 767580
URL: http://svn.apache.org/viewvc?rev=767580&view=rev
Log:
OWB-94 CreationanContext<?> instead of <T>
OWB-68 introduce new ChildActivityManager
Added:
incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ChildActivityManager.java
Modified:
incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ManagerImpl.java
incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java
Added: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ChildActivityManager.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ChildActivityManager.java?rev=767580&view=auto
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ChildActivityManager.java (added)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ChildActivityManager.java Wed Apr 22 16:12:58 2009
@@ -0,0 +1,285 @@
+/*
+ * 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.container;
+
+import java.io.InputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.List;
+import java.util.Set;
+
+import javax.context.Context;
+import javax.context.CreationalContext;
+import javax.event.Observer;
+import javax.inject.TypeLiteral;
+import javax.inject.manager.Bean;
+import javax.inject.manager.Decorator;
+import javax.inject.manager.InjectionPoint;
+import javax.inject.manager.InterceptionType;
+import javax.inject.manager.Interceptor;
+import javax.inject.manager.Manager;
+
+/**
+ * Each Manager can start a new child activity as defined by the JSR-299 spec chapter 11.6
+ *
+ * A ChildActivityManager tries to handle the beans, contexts, ... itself
+ * and delegates all other requests to it's parent Manager.
+ *
+ */
+public class ChildActivityManager implements Manager
+{
+
+ /**
+ * The parent Manager this child is depending from.
+ */
+ private Manager parent;
+
+ /**
+ * All beans added to this instance will be tracked by this very Manager
+ */
+ private Manager self;
+
+ /**
+ * the ct will be called by {@code Manager#createActivity()}
+ * @param parent is the Manager calling this ct
+ */
+ public ChildActivityManager(Manager parent)
+ {
+ this.parent = parent;
+ this.self = new ManagerImpl();
+ }
+
+ /** {@inheritDoc} */
+ public Manager addBean(Bean<?> bean)
+ {
+ //X TODO possibly add checks
+ return self.addBean(bean);
+ }
+
+ /** {@inheritDoc} */
+ public Manager addContext(Context context)
+ {
+ //X TODO possibly add checks
+ return self.addContext(context);
+ }
+
+ /** {@inheritDoc} */
+ public Manager addDecorator(Decorator decorator)
+ {
+ throw new UnsupportedOperationException("Decorators may not be registered with a child activity.");
+ }
+
+ /** {@inheritDoc} */
+ public Manager addInterceptor(Interceptor interceptor)
+ {
+ throw new UnsupportedOperationException("Interceptors may not be registered with a child activity.");
+ }
+
+ /** {@inheritDoc} */
+ public <T> Manager addObserver(Observer<T> observer, Class<T> eventType, Annotation... bindings)
+ {
+ //X TODO possibly add checks
+ return self.addObserver(observer, eventType, bindings);
+ }
+
+ /** {@inheritDoc} */
+ public <T> Manager addObserver(Observer<T> observer, TypeLiteral<T> eventType, Annotation... bindings)
+ {
+ //X TODO possibly add checks
+ return self.addObserver(observer, eventType, bindings);
+ }
+
+ /** {@inheritDoc} */
+ public Manager createActivity()
+ {
+ return new ChildActivityManager(this);
+ }
+
+ /** {@inheritDoc} */
+ public void fireEvent(Object event, Annotation... bindings)
+ {
+ // TODO Auto-generated method stub
+
+ }
+
+ /** {@inheritDoc} */
+ public Context getContext(Class<? extends Annotation> scopeType)
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ public <T> T getInstance(Bean<T> bean)
+ {
+ //X TODO not 100% sure if this is ok. There is some 'double-definition' exception case defined in the spec ...
+ T obj = self.getInstance(bean);
+ if (obj == null)
+ {
+ obj = parent.getInstance(bean);
+ }
+ return obj;
+ }
+
+ /** {@inheritDoc} */
+ public Object getInstanceByName(String name)
+ {
+ //X TODO not 100% sure if this is ok. There is some 'double-definition' exception case defined in the spec ...
+ Object obj = self.getInstanceByName(name);
+ if (obj == null)
+ {
+ obj = parent.getInstanceByName(name);
+ }
+ return obj;
+ }
+
+ /** {@inheritDoc} */
+ public <T> T getInstanceByType(Class<T> type, Annotation... bindingTypes)
+ {
+ //X TODO not 100% sure if this is ok. There is some 'double-definition' exception case defined in the spec ...
+ T obj = self.getInstanceByType(type, bindingTypes);
+ if (obj == null)
+ {
+ obj = parent.getInstanceByType(type, bindingTypes);
+ }
+ return obj;
+ }
+
+ /** {@inheritDoc} */
+ public <T> T getInstanceByType(TypeLiteral<T> type, Annotation... bindingTypes)
+ {
+ //X TODO not 100% sure if this is ok. There is some 'double-definition' exception case defined in the spec ...
+ T obj = self.getInstanceByType(type, bindingTypes);
+ if (obj == null)
+ {
+ obj = parent.getInstanceByType(type, bindingTypes);
+ }
+ return obj;
+ }
+
+ /** {@inheritDoc} */
+ public <T> T getInstanceToInject(InjectionPoint injectionPoint, CreationalContext<?> context)
+ {
+ //X TODO not 100% sure if this is ok. There is some 'double-definition' exception case defined in the spec ...
+ T obj = self.<T>getInstanceToInject(injectionPoint, context); //X ugly <T> due to javac bug 6302954
+ if (obj == null)
+ {
+ obj = parent.<T>getInstanceToInject(injectionPoint, context); //X ugly <T> due to javac bug 6302954
+ }
+ return obj;
+ }
+
+ /** {@inheritDoc} */
+ public <T> T getInstanceToInject(InjectionPoint injectionPoint)
+ {
+ //X TODO not 100% sure if this is ok. There is some 'double-definition' exception case defined in the spec ...
+ T obj = self.<T>getInstanceToInject(injectionPoint); //X ugly <T> due to javac bug 6302954
+ if (obj == null)
+ {
+ obj = parent.<T>getInstanceToInject(injectionPoint); //X ugly <T> due to javac bug 6302954
+ }
+ return obj;
+ }
+
+ /** {@inheritDoc} */
+ public Manager parse(InputStream xmlStream)
+ {
+ self.parse(xmlStream);
+ return this;
+ }
+
+ /** {@inheritDoc} */
+ public <T> Manager removeObserver(Observer<T> observer, Class<T> eventType, Annotation... bindings)
+ {
+ //X TODO check if the user tries to remove an Observer from the parent -> Exception
+ self.removeObserver(observer, eventType, bindings);
+ return this;
+ }
+
+ /** {@inheritDoc} */
+ public <T> Manager removeObserver(Observer<T> observer, TypeLiteral<T> eventType, Annotation... bindings)
+ {
+ //X TODO check if the user tries to remove an Observer from the parent -> Exception
+ self.removeObserver(observer, eventType, bindings);
+ return this;
+ }
+
+ /** {@inheritDoc} */
+ public Set<Bean<?>> resolveByName(String name)
+ {
+ //X TODO not 100% sure if this is ok. There is some 'double-definition' exception case defined in the spec ...
+ Set<Bean<?>> set = self.resolveByName(name);
+ if (set == null || set.isEmpty())
+ {
+ set = parent.resolveByName(name);
+ }
+ return set;
+ }
+
+ /** {@inheritDoc} */
+ public <T> Set<Bean<T>> resolveByType(Class<T> type, Annotation... bindings)
+ {
+ //X TODO not 100% sure if this is ok. There is some 'double-definition' exception case defined in the spec ...
+ Set<Bean<T>> set = self.resolveByType(type, bindings);
+ if (set == null || set.isEmpty())
+ {
+ set = parent.resolveByType(type, bindings);
+ }
+ return set;
+ }
+
+ /** {@inheritDoc} */
+ public <T> Set<Bean<T>> resolveByType(TypeLiteral<T> apiType, Annotation... bindingTypes)
+ {
+ //X TODO not 100% sure if this is ok. There is some 'double-definition' exception case defined in the spec ...
+ Set<Bean<T>> set = self.resolveByType(apiType, bindingTypes);
+ if (set == null || set.isEmpty())
+ {
+ set = parent.resolveByType(apiType, bindingTypes);
+ }
+ return set;
+ }
+
+ /** {@inheritDoc} */
+ public List<Decorator> resolveDecorators(Set<Type> types, Annotation... bindingTypes)
+ {
+ throw new UnsupportedOperationException("Decorators may not be registered with a child activity.");
+ }
+
+ /** {@inheritDoc} */
+ public List<Interceptor> resolveInterceptors(InterceptionType type, Annotation... interceptorBindings)
+ {
+ throw new UnsupportedOperationException("Interceptors may not be registered with a child activity.");
+ }
+
+ /** {@inheritDoc} */
+ public <T> Set<Observer<T>> resolveObservers(T event, Annotation... bindings)
+ {
+ //X TODO not 100% sure if this is ok. There is some 'double-definition' exception case defined in the spec ...
+ Set<Observer<T>> set = self.resolveObservers(event, bindings);
+ if (set == null || set.isEmpty())
+ {
+ set = parent.resolveObservers(event, bindings);
+ }
+ return set;
+ }
+
+ /** {@inheritDoc} */
+ public Manager setCurrent(Class<? extends Annotation> scopeType)
+ {
+ //X TODO what about parent? we must not set the current scope type for parents, but what are the implications?
+ self.setCurrent(scopeType);
+ return this;
+ }
+}
Modified: incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ManagerImpl.java?rev=767580&r1=767579&r2=767580&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ManagerImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/ManagerImpl.java Wed Apr 22 16:12:58 2009
@@ -218,7 +218,7 @@
return object;
}
- public <T> T getInstanceToInject(InjectionPoint injectionPoint, CreationalContext<T> context)
+ public <T> T getInstanceToInject(InjectionPoint injectionPoint, CreationalContext<?> context)
{
T instance = null;
@@ -464,7 +464,7 @@
}
else
{
- //Mark , this brokes the TCK tests!!!!
+//X TODO Mark , this brokes the TCK tests!!!!
// if (context.isActive() && containsActiveContext(contextList))
// {
// throw new IllegalStateException("There is already an active Context registered for this scope! Context=" + context.getScopeType());
@@ -492,27 +492,12 @@
return this;
}
-// /**
-// * Check if the given contextList contains an active Context
-// * @param contextList
-// * @return <code>true</code> if the given contextList contains an active Context, <code>false</code> otherwise
-// */
-// private boolean containsActiveContext(List<Context> contextList)
-// {
-// for (Context c : contextList)
-// {
-// if (c.isActive())
-// {
-// return true;
-// }
-// }
-// return false;
-// }
-
+ /**
+ * Create a new ChildActivityManager.
+ */
public Manager createActivity()
{
- // TODO Auto-generated method stub
- return null;
+ return new ChildActivityManager(this);
}
public Manager setCurrent(Class<? extends Annotation> scopeType)
Modified: incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java?rev=767580&r1=767579&r2=767580&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java (original)
+++ incubator/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/mock/MockManager.java Wed Apr 22 16:12:58 2009
@@ -120,9 +120,9 @@
return manager.getContext(scopeType);
}
- public <T> T getInstanceToInject(InjectionPoint injectionPoint, CreationalContext<T> context)
+ public <T> T getInstanceToInject(InjectionPoint injectionPoint, CreationalContext<?> context)
{
- return manager.getInstanceToInject(injectionPoint, context);
+ return manager.<T>getInstanceToInject(injectionPoint, context); //X ugly <T> due to javac bug 6302954
}
@SuppressWarnings("unchecked")