Author: struberg
Date: Sun Feb 21 21:10:44 2010
New Revision: 912404
URL: http://svn.apache.org/viewvc?rev=912404&view=rev
Log:
OWB-6 further passiation and CreationalContext fixes
Added:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/DependentCreationalContext.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BeanManagerBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BeanManagerBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BeanManagerBean.java?rev=912404&r1=912403&r2=912404&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BeanManagerBean.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BeanManagerBean.java
Sun Feb 21 21:10:44 2010
@@ -16,6 +16,7 @@
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.BeanManager;
+import org.apache.webbeans.annotation.ApplicationScopeLiteral;
import org.apache.webbeans.container.BeanManagerImpl;
public class BeanManagerBean extends AbstractOwbBean<BeanManager>
@@ -34,6 +35,7 @@
{
manager = BeanManagerImpl.getManager();
}
+ setImplScopeType(new ApplicationScopeLiteral());
return manager;
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java?rev=912404&r1=912403&r2=912404&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ConversationBean.java
Sun Feb 21 21:10:44 2010
@@ -16,6 +16,7 @@
import javax.enterprise.context.Conversation;
import javax.enterprise.context.spi.CreationalContext;
+import org.apache.webbeans.annotation.ApplicationScopeLiteral;
import org.apache.webbeans.conversation.ConversationImpl;
import org.apache.webbeans.conversation.ConversationManager;
import org.apache.webbeans.spi.ConversationService;
@@ -34,6 +35,7 @@
public ConversationBean()
{
super(WebBeansType.CONVERSATION, Conversation.class);
+ setImplScopeType(new ApplicationScopeLiteral());
}
/**
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java?rev=912404&r1=912403&r2=912404&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ExtensionBean.java
Sun Feb 21 21:10:44 2010
@@ -15,6 +15,7 @@
import javax.enterprise.context.spi.CreationalContext;
+import org.apache.webbeans.annotation.ApplicationScopeLiteral;
import org.apache.webbeans.portable.events.ExtensionLoader;
/**
@@ -34,6 +35,7 @@
public ExtensionBean(Class<T> returnType)
{
super(WebBeansType.EXTENSION,returnType);
+ setImplScopeType(new ApplicationScopeLiteral());
}
/**
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=912404&r1=912403&r2=912404&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
Sun Feb 21 21:10:44 2010
@@ -650,19 +650,23 @@
{
ownerCreationalContextImpl =
(CreationalContextImpl<?>)ownerCreationalContext;
}
-
+
//Find the injection point Bean
Bean<Object> injectedBean =
(Bean<Object>)injectionResolver.getInjectionPointBean(injectionPoint);
CreationalContextImpl<Object> injectedCreational =
(CreationalContextImpl<Object>)createCreationalContext(injectedBean);
if(WebBeansUtil.isDependent(injectedBean))
{
- injectedCreational.setOwnerCreational(ownerCreationalContextImpl);
+ injectedCreational.setOwnerCreational(ownerCreationalContextImpl);
//Creating a new creational context for target bean instance
instance = getReference(injectedBean, injectionPoint.getType(),
injectedCreational);
- //Add this dependent into bean dependent list
- ownerCreationalContextImpl.addDependent(injectedBean, instance,
injectedCreational);
+ // add this dependent into bean dependent list
+ // only if the member is not static and not already a proxy
+ if (!WebBeansUtil.isStaticInjection(injectionPoint) &&
!JavassistProxyFactory.isProxyInstance(instance))
+ {
+ ownerCreationalContextImpl.addDependent(injectedBean,
instance, injectedCreational);
+ }
}
else
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java?rev=912404&r1=912403&r2=912404&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/CreationalContextImpl.java
Sun Feb 21 21:10:44 2010
@@ -42,54 +42,6 @@
private CreationalContextImpl<?> ownerCreational = null;
- private static class DependentCreationalContext<S> implements Serializable
- {
- private static final long serialVersionUID = 7107949019995422165L;
-
- private CreationalContext<S> creationalContext;
-
- private Contextual<S> contextual;
-
- /**
- * @return the creationalContext
- */
- public CreationalContext<S> getCreationalContext()
- {
- return creationalContext;
- }
-
- /**
- * @param creationalContext the creationalContext to set
- */
- public void setCreationalContext(CreationalContext<S>
creationalContext)
- {
- this.creationalContext = creationalContext;
- }
-
- /**
- * @return the contextual
- */
- public Contextual<S> getContextual()
- {
- return contextual;
- }
-
- /**
- * @param contextual the contextual to set
- */
- public void setContextual(Contextual<S> contextual)
- {
- this.contextual = contextual;
- }
-
- public DependentCreationalContext(CreationalContext<S> cc,
Contextual<S> contextual)
- {
- this.contextual = contextual;
- this.creationalContext = cc;
- }
- }
-
-
/**
* Package private
*/
@@ -168,7 +120,7 @@
{
T instance = (T)iterator.next();
DependentCreationalContext<T> dependent =
(DependentCreationalContext<T>)this.dependentObjects.get(instance);
- dependent.getContextual().destroy(instance,
(CreationalContext<T>)dependent.getCreationalContext());
+ dependent.getContextual().destroy(instance,
dependent.getCreationalContext());
}
this.dependentObjects.clear();
@@ -180,7 +132,7 @@
@Override
public void release()
{
- removeDependents();
+ removeDependents();
}
Added:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/DependentCreationalContext.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/DependentCreationalContext.java?rev=912404&view=auto
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/DependentCreationalContext.java
(added)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/DependentCreationalContext.java
Sun Feb 21 21:10:44 2010
@@ -0,0 +1,124 @@
+/*
+ * 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.context.creational;
+
+import java.io.IOException;
+import java.io.InvalidClassException;
+import java.io.NotSerializableException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+
+import javax.enterprise.context.spi.Contextual;
+import javax.enterprise.context.spi.CreationalContext;
+
+import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.util.WebBeansUtil;
+
+class DependentCreationalContext<S> implements Serializable
+{
+ private static final long serialVersionUID = 7107949019995422165L;
+
+ private CreationalContext<S> creationalContext;
+
+ private Contextual<S> contextual;
+
+ /**
+ * @return the creationalContext
+ */
+ public CreationalContext<S> getCreationalContext()
+ {
+ return creationalContext;
+ }
+
+ /**
+ * @param creationalContext the creationalContext to set
+ */
+ public void setCreationalContext(CreationalContext<S> creationalContext)
+ {
+ this.creationalContext = creationalContext;
+ }
+
+ /**
+ * @return the contextual
+ */
+ public Contextual<S> getContextual()
+ {
+ return contextual;
+ }
+
+ /**
+ * @param contextual the contextual to set
+ */
+ public void setContextual(Contextual<S> contextual)
+ {
+ this.contextual = contextual;
+ }
+
+ public DependentCreationalContext(CreationalContext<S> cc, Contextual<S>
contextual)
+ {
+ this.contextual = contextual;
+ this.creationalContext = cc;
+ }
+
+ private synchronized void writeObject(ObjectOutputStream s)
+ throws IOException
+ {
+ s.writeLong(serialVersionUID);
+
+ s.writeObject(creationalContext);
+
+ String id = null;
+ if (contextual != null)
+ {
+ if ((id = WebBeansUtil.isPassivationCapable(contextual)) != null)
+ {
+ s.writeObject(id);
+ }
+ else
+ {
+ throw new NotSerializableException("cannot serialize " +
contextual.toString());
+ }
+
+ }
+ else
+ {
+ s.writeObject(null);
+ }
+ }
+
+
+ @SuppressWarnings("unchecked")
+ private synchronized void readObject(ObjectInputStream s)
+ throws IOException, ClassNotFoundException
+ {
+ long svId = s.readLong();
+ if (svId != serialVersionUID)
+ {
+ throw new InvalidClassException(this.getClass().getSimpleName());
+ }
+
+ creationalContext = (CreationalContext<S>) s.readObject();
+
+ String id = (String) s.readObject();
+ if (id != null)
+ {
+ contextual = (Contextual<S>)
BeanManagerImpl.getManager().getPassivationCapableBean(id);
+ }
+ }
+
+}
\ No newline at end of file
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java?rev=912404&r1=912403&r2=912404&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
Sun Feb 21 21:10:44 2010
@@ -372,23 +372,26 @@
private void writeObject(ObjectOutputStream s) throws IOException
{
+ s.writeLong(serialVersionUID);
if(WebBeansUtil.isPassivationCapable(this.bean) != null)
{
- s.writeByte(1);
s.writeUTF(this.bean.getId());
}
else
{
logger.warn("Trying to serialize not passivated capable bean proxy
: " + this.bean);
- s.writeByte(0);
}
}
private void readObject(ObjectInputStream s) throws IOException,
ClassNotFoundException
{
- if( s.readByte() == 1)
+ if( s.readLong() == serialVersionUID)
{
- this.bean =
(OwbBean<?>)BeanManagerImpl.getManager().getPassivationCapableBean(s.readUTF());
+ String passivationId = s.readUTF();
+ if (passivationId != null)
+ {
+ this.bean =
(OwbBean<?>)BeanManagerImpl.getManager().getPassivationCapableBean(passivationId);
+ }
}
else
{
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java?rev=912404&r1=912403&r2=912404&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/webbeans/WebBeansInterceptor.java
Sun Feb 21 21:10:44 2010
@@ -456,5 +456,10 @@
{
return this.delegateBean.isAlternative();
}
-
+
+ @Override
+ public boolean isPassivationCapable()
+ {
+ return true;
+ }
}
\ No newline at end of file
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java?rev=912404&r1=912403&r2=912404&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
Sun Feb 21 21:10:44 2010
@@ -205,5 +205,14 @@
return result;
}
+
+ /**
+ * @param o the object to check
+ * @return <code>true</code> if the given object is a proxy
+ */
+ public static boolean isProxyInstance(Object o)
+ {
+ return o instanceof ProxyObject;
+ }
}
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=912404&r1=912403&r2=912404&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
Sun Feb 21 21:10:44 2010
@@ -22,6 +22,7 @@
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
@@ -2731,5 +2732,25 @@
return managedBean;
}
+
+ /**
+ * Determines if the injection is to be performed into a static field.
+ *
+ * @param injectionPoint
+ * @return <code>true</code> if the injection is into a static field
+ */
+ public static boolean isStaticInjection(InjectionPoint injectionPoint)
+ {
+ if (injectionPoint != null)
+ {
+ Member member = injectionPoint.getMember();
+ if (member != null && Modifier.isStatic(member.getModifiers()))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
}
\ No newline at end of file