You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ar...@apache.org on 2013/01/17 22:20:10 UTC

svn commit: r1434919 [1/2] - in /openwebbeans/trunk: webbeans-ee-common/src/main/java/org/apache/webbeans/ee/common/beans/ webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/ webbeans-...

Author: arne
Date: Thu Jan 17 21:20:09 2013
New Revision: 1434919

URL: http://svn.apache.org/viewvc?rev=1434919&view=rev
Log:
OWB-755: Moved creation and destruction of instances from Bean to Producer / InjectionTarget

Added:
    openwebbeans/trunk/webbeans-ee-common/src/main/java/org/apache/webbeans/ee/common/beans/PrincipalProvider.java
    openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/UserTransactionProvider.java
    openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorFactoryProvider.java
    openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorProvider.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceProvider.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodProducerBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/BeanManagerProducer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/EventProducer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InjectionPointProducer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/InstanceProducer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerFieldProducer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProducerMethodProducer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/ProviderBasedProxyProducer.java
Removed:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceFactory.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducerRemove.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/ProducerBeansProducerRemove.java
Modified:
    openwebbeans/trunk/webbeans-ee-common/src/main/java/org/apache/webbeans/ee/common/beans/PrincipalBean.java
    openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/UserTransactionBean.java
    openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorBean.java
    openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorFactoryBean.java
    openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BeanManagerBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BuildInOwbBean.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/EventBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/third/ThirdpartyBeanImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/ObserverMethodImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/WebBeansInterceptorConfig.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/portable/AbstractProducer.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/TestContext.java
    openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsBean.java
    openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationFilter.java
    openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/servlet/WebBeansConfigurationListener.java
    openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java

Modified: openwebbeans/trunk/webbeans-ee-common/src/main/java/org/apache/webbeans/ee/common/beans/PrincipalBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ee-common/src/main/java/org/apache/webbeans/ee/common/beans/PrincipalBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-ee-common/src/main/java/org/apache/webbeans/ee/common/beans/PrincipalBean.java (original)
+++ openwebbeans/trunk/webbeans-ee-common/src/main/java/org/apache/webbeans/ee/common/beans/PrincipalBean.java Thu Jan 17 21:20:09 2013
@@ -25,6 +25,7 @@ import javax.enterprise.context.spi.Crea
 import org.apache.webbeans.component.BuildInOwbBean;
 import org.apache.webbeans.component.WebBeansType;
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.portable.ProviderBasedProxyProducer;
 import org.apache.webbeans.spi.SecurityService;
 
 public class PrincipalBean extends BuildInOwbBean<Principal>
@@ -33,31 +34,7 @@ public class PrincipalBean extends Build
     public PrincipalBean(WebBeansContext webBeansContext)
     {
         super(webBeansContext, WebBeansType.PRINCIPAL, Principal.class);
-    }
-
-    @Override
-    protected Principal createInstance(CreationalContext<Principal> creationalContext)
-    {
-        SecurityService securityService = getWebBeansContext().getService(SecurityService.class);
-        if(securityService != null)
-        {
-            Principal t = securityService.getCurrentPrincipal();
-            return createProxyWrapper(t, creationalContext);
-        }
-        
-        return null;
-    }
-
-    @Override
-    protected Principal createActualInstance(CreationalContext<Principal> creationalContext)
-    {
-        SecurityService securityService = getWebBeansContext().getService(SecurityService.class);
-        if(securityService != null)
-        {
-            return securityService.getCurrentPrincipal();
-        }
-        
-        return null;
+        setProducer(new ProviderBasedProxyProducer<Principal>(webBeansContext, Principal.class, new PrincipalProvider(webBeansContext)));
     }
 
     @Override

Added: openwebbeans/trunk/webbeans-ee-common/src/main/java/org/apache/webbeans/ee/common/beans/PrincipalProvider.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ee-common/src/main/java/org/apache/webbeans/ee/common/beans/PrincipalProvider.java?rev=1434919&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-ee-common/src/main/java/org/apache/webbeans/ee/common/beans/PrincipalProvider.java (added)
+++ openwebbeans/trunk/webbeans-ee-common/src/main/java/org/apache/webbeans/ee/common/beans/PrincipalProvider.java Thu Jan 17 21:20:09 2013
@@ -0,0 +1,51 @@
+/*
+ * 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.ee.common.beans;
+
+import java.security.Principal;
+
+import javax.inject.Provider;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.SecurityService;
+
+public class PrincipalProvider implements Provider<Principal>
+{
+
+    private WebBeansContext webBeansContext;
+
+    public PrincipalProvider(WebBeansContext webBeansContext)
+    {
+        this.webBeansContext = webBeansContext;
+    }
+
+    @Override
+    public Principal get()
+    {
+        SecurityService securityService = webBeansContext.getService(SecurityService.class);
+        if(securityService == null)
+        {
+            return null;
+        }
+        else
+        {
+            return securityService.getCurrentPrincipal();
+        }
+    }
+}

Modified: openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/UserTransactionBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/UserTransactionBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/UserTransactionBean.java (original)
+++ openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/UserTransactionBean.java Thu Jan 17 21:20:09 2013
@@ -18,13 +18,12 @@
  */
 package org.apache.webbeans.ee.beans;
 
-import javax.enterprise.context.spi.CreationalContext;
 import javax.transaction.UserTransaction;
 
 import org.apache.webbeans.component.BuildInOwbBean;
 import org.apache.webbeans.component.WebBeansType;
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.spi.TransactionService;
+import org.apache.webbeans.portable.ProviderBasedProxyProducer;
 
 public class UserTransactionBean extends BuildInOwbBean<UserTransaction>
 {
@@ -32,37 +31,12 @@ public class UserTransactionBean extends
     public UserTransactionBean(WebBeansContext webBeansContext)
     {
         super(webBeansContext, WebBeansType.USERTRANSACTION, UserTransaction.class);
-    }
-
-    @Override
-    protected UserTransaction createActualInstance(CreationalContext<UserTransaction> creationalContext)
-    {
-        TransactionService transactionService = getWebBeansContext().getService(TransactionService.class);
-        if(transactionService != null)
-        {
-            return transactionService.getUserTransaction();
-        }
-        
-        return null;
-    }
-
-    @Override
-    protected UserTransaction createInstance(CreationalContext<UserTransaction> creationalContext)
-    {
-        TransactionService transactionService = getWebBeansContext().getService(TransactionService.class);
-        if(transactionService != null)
-        {
-            UserTransaction t = transactionService.getUserTransaction();
-            return createProxyWrapper(t, creationalContext);
-        }
-        
-        return null;
+        setProducer(new ProviderBasedProxyProducer<UserTransaction>(webBeansContext, UserTransaction.class, new UserTransactionProvider(webBeansContext)));
     }
 
     @Override
     public boolean isPassivationCapable()
     {
         return true;
-    }
-    
+    }    
 }

Added: openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/UserTransactionProvider.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/UserTransactionProvider.java?rev=1434919&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/UserTransactionProvider.java (added)
+++ openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/UserTransactionProvider.java Thu Jan 17 21:20:09 2013
@@ -0,0 +1,47 @@
+/*
+ * 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.ee.beans;
+
+import javax.inject.Provider;
+import javax.transaction.UserTransaction;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.TransactionService;
+
+public class UserTransactionProvider implements Provider<UserTransaction>
+{
+
+    private WebBeansContext webBeansContext;
+    
+    public UserTransactionProvider(WebBeansContext webBeansContext)
+    {
+        this.webBeansContext = webBeansContext;
+    }
+
+    @Override
+    public UserTransaction get()
+    {
+        TransactionService transactionService = webBeansContext.getService(TransactionService.class);
+        if(transactionService != null)
+        {
+            return transactionService.getUserTransaction();
+        }
+        return null;
+    }
+}

Modified: openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorBean.java (original)
+++ openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorBean.java Thu Jan 17 21:20:09 2013
@@ -18,13 +18,12 @@
  */
 package org.apache.webbeans.ee.beans;
 
-import javax.enterprise.context.spi.CreationalContext;
 import javax.validation.Validator;
 
 import org.apache.webbeans.component.BuildInOwbBean;
 import org.apache.webbeans.component.WebBeansType;
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.spi.ValidatorService;
+import org.apache.webbeans.portable.ProviderBasedProxyProducer;
 
 public class ValidatorBean extends BuildInOwbBean<Validator>
 {
@@ -32,30 +31,7 @@ public class ValidatorBean extends Build
     public ValidatorBean(WebBeansContext webBeansContext)
     {
         super(webBeansContext, WebBeansType.VALIDATION, Validator.class);
-    }
-
-    @Override
-    protected Validator createInstance(CreationalContext<Validator> creationalContext)
-    {
-        ValidatorService validatorService = getWebBeansContext().getService(ValidatorService.class);
-        if(validatorService != null)
-        {
-            Validator t = validatorService.getDefaultValidator();
-            return createProxyWrapper(t, creationalContext);
-        }
-        
-        return null;
-    }
-
-    @Override
-    protected Validator createActualInstance(CreationalContext<Validator> creationalContext)
-    {
-        ValidatorService validatorService = getWebBeansContext().getService(ValidatorService.class);
-        if(validatorService != null)
-        {
-            return validatorService.getDefaultValidator();
-        }       
-        return null;
+        setProducer(new ProviderBasedProxyProducer<Validator>(webBeansContext, Validator.class, new ValidatorProvider(webBeansContext)));
     }
 
     @Override

Modified: openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorFactoryBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorFactoryBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorFactoryBean.java (original)
+++ openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorFactoryBean.java Thu Jan 17 21:20:09 2013
@@ -21,9 +21,11 @@ package org.apache.webbeans.ee.beans;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.validation.ValidatorFactory;
 
+import org.apache.webbeans.component.AbstractOwbBean;
 import org.apache.webbeans.component.BuildInOwbBean;
 import org.apache.webbeans.component.WebBeansType;
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.portable.ProviderBasedProxyProducer;
 import org.apache.webbeans.spi.ValidatorService;
 
 public class ValidatorFactoryBean extends BuildInOwbBean<ValidatorFactory>
@@ -32,36 +34,12 @@ public class ValidatorFactoryBean extend
     public ValidatorFactoryBean(WebBeansContext webBeansContext)
     {
         super(webBeansContext, WebBeansType.VALIDATIONFACT, ValidatorFactory.class);
-    }
-
-    @Override
-    protected ValidatorFactory createInstance(CreationalContext<ValidatorFactory> creationalContext)
-    {
-        ValidatorService validatorService = getWebBeansContext().getService(ValidatorService.class);
-        if(validatorService != null)
-        {
-            ValidatorFactory t = validatorService.getDefaultValidatorFactory();
-            return createProxyWrapper(t, creationalContext);
-        }
-        
-        return null;
-    }
-
-    @Override
-    protected ValidatorFactory createActualInstance(CreationalContext<ValidatorFactory> creationalContext)
-    {
-        ValidatorService validatorService = getWebBeansContext().getService(ValidatorService.class);
-        if(validatorService != null)
-        {
-            return validatorService.getDefaultValidatorFactory();
-        }        
-        return null;
+        setProducer(new ProviderBasedProxyProducer<ValidatorFactory>(webBeansContext, ValidatorFactory.class, new ValidatorFactoryProvider(webBeansContext)));
     }
     
     @Override
     public boolean isPassivationCapable()
     {
         return true;
-    }
-    
+    }    
 }

Added: openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorFactoryProvider.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorFactoryProvider.java?rev=1434919&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorFactoryProvider.java (added)
+++ openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorFactoryProvider.java Thu Jan 17 21:20:09 2013
@@ -0,0 +1,47 @@
+/*
+ * 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.ee.beans;
+
+import javax.inject.Provider;
+import javax.validation.ValidatorFactory;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ValidatorService;
+
+public class ValidatorFactoryProvider implements Provider<ValidatorFactory>
+{
+
+    private WebBeansContext webBeansContext;
+    
+    public ValidatorFactoryProvider(WebBeansContext webBeansContext)
+    {
+        this.webBeansContext = webBeansContext;
+    }
+
+    @Override
+    public ValidatorFactory get()
+    {
+        ValidatorService validatorService = webBeansContext.getService(ValidatorService.class);
+        if(validatorService != null)
+        {
+            return validatorService.getDefaultValidatorFactory();
+        }        
+        return null;
+    }
+}

Added: openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorProvider.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorProvider.java?rev=1434919&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorProvider.java (added)
+++ openwebbeans/trunk/webbeans-ee/src/main/java/org/apache/webbeans/ee/beans/ValidatorProvider.java Thu Jan 17 21:20:09 2013
@@ -0,0 +1,47 @@
+/*
+ * 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.ee.beans;
+
+import javax.inject.Provider;
+import javax.validation.Validator;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ValidatorService;
+
+public class ValidatorProvider implements Provider<Validator>
+{
+
+    private WebBeansContext webBeansContext;
+    
+    public ValidatorProvider(WebBeansContext webBeansContext)
+    {
+        this.webBeansContext = webBeansContext;
+    }
+
+    @Override
+    public Validator get()
+    {
+        ValidatorService validatorService = webBeansContext.getService(ValidatorService.class);
+        if(validatorService != null)
+        {
+            return validatorService.getDefaultValidator();
+        }        
+        return null;
+    }
+}

Modified: openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java (original)
+++ openwebbeans/trunk/webbeans-ejb/src/main/java/org/apache/webbeans/ejb/common/util/EjbUtility.java Thu Jan 17 21:20:09 2013
@@ -118,7 +118,7 @@ public final class EjbUtility
         webBeansContext.getWebBeansUtil().inspectErrorStack(
             "There are errors that are added by ProcessInjectionTarget event observers. Look at logs for further details");
         //Put final InjectionTarget instance
-        ejbBean.setInjectionTarget(processInjectionTargetEvent.getInjectionTarget());
+        ejbBean.setProducer(processInjectionTargetEvent.getInjectionTarget());
         
         Map<ProducerMethodBean<?>,AnnotatedMethod<?>> annotatedMethods = new HashMap<ProducerMethodBean<?>, AnnotatedMethod<?>>(); 
         for(ProducerMethodBean<?> producerMethod : producerMethodBeans)

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractOwbBean.java Thu Jan 17 21:20:09 2013
@@ -138,6 +138,10 @@ public abstract class AbstractOwbBean<T>
         return webBeansContext.getBeanManagerImpl();
     }
     
+    public Producer<T> getProducer()
+    {
+        return producer;
+    }
     
     /**
      * {@inheritDoc}
@@ -145,7 +149,6 @@ public abstract class AbstractOwbBean<T>
     @SuppressWarnings("unchecked")
     public T create(CreationalContext<T> creationalContext)
     {
-        T instance;
         try
         {  
             if(!(creationalContext instanceof CreationalContextImpl))
@@ -154,32 +157,14 @@ public abstract class AbstractOwbBean<T>
                         creationalContext, this); 
             }
 
-            if (this instanceof InjectionTargetBean)
-            {
-                //X TODO this is a workaround until the producer solution is finally fixed
-                InjectionTargetBean<T> it = ((InjectionTargetBean<T>) this);
-                instance = it.getInjectionTarget().produce(creationalContext);
-                it.getInjectionTarget().inject(instance, creationalContext);
-                it.getInjectionTarget().postConstruct(instance);
-
-                return instance;
-            }
-
-            //If wrapper not null
-            if(producer != null)
-            {
-                instance = producer.produce(creationalContext);
-                if (producer instanceof InjectionTarget)
-                {
-                    ((InjectionTarget)producer).inject(instance, creationalContext);
-                    ((InjectionTarget)producer).postConstruct(instance);
-                }
-            }
-            else
+            T instance = producer.produce(creationalContext);
+            if (producer instanceof InjectionTarget)
             {
-                //X TODO review if this is still needed!
-                instance = createInstance(creationalContext);
+                InjectionTarget<T> injectionTarget = (InjectionTarget<T>)producer;
+                injectionTarget.inject(instance, creationalContext);
+                injectionTarget.postConstruct(instance);
             }
+            return instance;
         }
         catch (Exception re)
         {
@@ -192,7 +177,6 @@ public abstract class AbstractOwbBean<T>
             throw (RuntimeException) throwable;
         }
 
-        return instance;
     }
 
     private Throwable getRootException(Throwable throwable)
@@ -207,23 +191,6 @@ public abstract class AbstractOwbBean<T>
         }
     }
 
-    /**
-     * Creates the instance of the bean that has a specific implementation
-     * type. Each subclass must define its own create mechanism.
-     *
-     * @param creationalContext the contextual instance shall be created in
-     * @return instance of the bean
-     */
-    protected abstract T createInstance(CreationalContext<T> creationalContext);
-    
-    /**
-     * {@inheritDoc}
-     */
-    public T createNewInstance(CreationalContext<T> creationalContext)
-    {
-        return createInstance(creationalContext);
-    }
-
     /*
      * (non-Javadoc)
      * @param creationalContext the contextual instance has been created in
@@ -232,22 +199,12 @@ public abstract class AbstractOwbBean<T>
     {
         try
         {
-            Producer<T> wrapper = producer;
-            if(wrapper != null)
+            if (producer instanceof InjectionTarget)
             {
-                // instance might be null if we only created a proxy
-                // but no actual contextual instance for this bean!
-                if (instance != null)
-                {
-                    wrapper.dispose(instance);
-                }
-            }
-            else
-            {
-                //Destroy instance, call @PreDestroy
-                destroyInstance(instance,creationalContext);
+                InjectionTarget<T> injectionTarget = (InjectionTarget<T>)producer;
+                injectionTarget.preDestroy(instance);
             }
-            
+            producer.dispose(instance);
             //Destory dependent instances
             creationalContext.release();
         }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/AbstractProducerBean.java Thu Jan 17 21:20:09 2013
@@ -86,15 +86,6 @@ public abstract class AbstractProducerBe
     }
 
     /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected T createInstance(CreationalContext<T> creationalContext)
-    {
-        return null;
-    }
-
-    /**
      * Destroys bean.
      * 
      * @param <K> bean type info

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=1434919&r1=1434918&r2=1434919&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 Thu Jan 17 21:20:09 2013
@@ -28,6 +28,7 @@ import javax.enterprise.inject.spi.BeanM
 
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.container.InjectableBeanManager;
+import org.apache.webbeans.portable.BeanManagerProducer;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.CollectionUtil;
 
@@ -44,17 +45,7 @@ public class BeanManagerBean extends Abs
               Dependent.class,
               BeanManager.class,
               Collections.<Class<? extends Annotation>>emptySet());
-    }
-
-    @Override
-    protected BeanManager createInstance(CreationalContext<BeanManager> creationalContext)
-    {
-        if (manager == null)
-        {
-            manager = new InjectableBeanManager(getWebBeansContext().getBeanManagerImpl());
-        }
-
-        return manager;
+        setProducer(new BeanManagerProducer(webBeansContext));
     }
 
     @Override

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BuildInOwbBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BuildInOwbBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BuildInOwbBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/BuildInOwbBean.java Thu Jan 17 21:20:09 2013
@@ -18,81 +18,19 @@
  */
 package org.apache.webbeans.component;
 
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
 import java.lang.annotation.Annotation;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
 import java.lang.reflect.Type;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.logging.Level;
 
 import javax.enterprise.context.Dependent;
-import javax.enterprise.context.spi.CreationalContext;
-import org.apache.webbeans.proxy.MethodHandler;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.CollectionUtil;
 
 import org.apache.webbeans.config.WebBeansContext;
 
-/**
- * Following 3 options are provided for vendor's built-in beans implementation:
- * 
- * 1. "none", means the built-in bean does not need a proxy wrapper.
- * 2. "default", means the built-in bean needs OWB-provided default proxy wrapper.
- * 3. A class name, which implements MethodHandler. This will allow vendor to 
- *    customize the serialization behavior.
- *    
- * The default values for 4 built-in beans are "default". Following property could
- * be used to change the default behavior:
- * 
- * Property Name:   org.apache.webbeans.component.BuiltInOwbBean.property
- * Sample values:   UserTransation:none;Principal:default;Validation:com.mycompany.ValidationProxyHandler;ValidationFactory:default
- *  
- * @author yingwang
- *
- * @param <T>
- */
 public abstract class BuildInOwbBean<T> extends AbstractOwbBean<T>
 {
 
-    private final HashMap<WebBeansType, String> proxyHandlerMap = new HashMap<WebBeansType, String>();
-
-    
-    public static final String BUILD_IN_BEAN_PROPERTY = "org.apache.webbeans.component.BuildInOwbBean.property";
-    
-    /**
-     * none means the build-in bean instance does not need proxy wrapper. This is used
-     * for the build-in beans from vendors that are already serializable. 
-     */
-    private static final String PROXY_HANDLER_VALUE_NONE="none";
-
-    /**
-     * default means the build-bin bean instance need a default proxy wrapper. And the
-     * default proxy wrapper will get new instance from build in bean providers when
-     * it is deserialized. 
-     */
-    private static final String PROXY_HANDLER_VALUE_DEFAULT="default";
-
-    /**
-     * The handler class name.
-     */
-    protected String handlerClassName;
-    
-    /**
-     * The handler class.
-     */
-    protected Class handlerClass;
-    
-    
-    protected Constructor handlerContructor;
-
-    @SuppressWarnings("unchecked")
     protected BuildInOwbBean(WebBeansContext webBeansContext, WebBeansType webBeansType, Class<T> returnType)
     {
         super(webBeansContext,
@@ -102,211 +40,5 @@ public abstract class BuildInOwbBean<T> 
               Dependent.class,
               returnType,
               Collections.<Class<? extends Annotation>>emptySet());
-        initBuildInBeanConfig(getWebBeansContext());
-        handlerClassName = proxyHandlerMap.get(getWebBeansType());
-        if (handlerClassName.equalsIgnoreCase(PROXY_HANDLER_VALUE_NONE) ||
-                handlerClassName.equalsIgnoreCase(PROXY_HANDLER_VALUE_DEFAULT))
-        {
-            return;
-        }
-
-        // initialize the custom proxy handler class and its constructor.
-        AccessController.doPrivileged(new PrivilegedAction<T>()
-        {
-            private BuildInOwbBean<T> buildinBean;
-
-            public T run()
-            {
-                try
-                {
-                    buildinBean.handlerClass = Class.forName(getName());
-                    buildinBean.handlerContructor = buildinBean.handlerClass.getConstructor(BuildInOwbBean.class, Object.class);
-                    return null;
-                }
-                catch (ClassNotFoundException e)
-                {
-                    getLogger().log(Level.SEVERE, e.getMessage(), e);
-                }
-                catch (SecurityException e)
-                {
-                    getLogger().log(Level.SEVERE, e.getMessage(), e);
-                }
-                catch (NoSuchMethodException e)
-                {
-                    getLogger().log(Level.SEVERE, e.getMessage(), e);
-                }
-                buildinBean.handlerClass = null;
-                buildinBean.handlerContructor = null;
-                return null;
-            }
-
-            protected PrivilegedAction<T> setBuildInBean(BuildInOwbBean<T> b)
-            {
-                buildinBean = b;
-                return this;
-            }
-
-        }.setBuildInBean(this));
-    }
-
-    /**
-     * Parse the custom property.
-     * 
-     * @return true
-     */
-    protected  boolean initBuildInBeanConfig(WebBeansContext webBeansContext)
-    {
-        String s = webBeansContext.getOpenWebBeansConfiguration().getProperty(BUILD_IN_BEAN_PROPERTY);
-        proxyHandlerMap.put(WebBeansType.USERTRANSACTION, PROXY_HANDLER_VALUE_DEFAULT);
-        proxyHandlerMap.put(WebBeansType.PRINCIPAL, PROXY_HANDLER_VALUE_DEFAULT);
-        proxyHandlerMap.put(WebBeansType.VALIDATION, PROXY_HANDLER_VALUE_DEFAULT);
-        proxyHandlerMap.put(WebBeansType.VALIDATIONFACT, PROXY_HANDLER_VALUE_DEFAULT);
-        if (s != null && !s.equalsIgnoreCase("default"))
-        {
-            int i;
-            String name;
-            String value;
-            String mapStrings[] = s.split(";");
-            for(i=0; i<mapStrings.length; i++)
-            {
-                name = null;
-                value = null;
-                String pair[] = mapStrings[i].trim().split(":");
-                if (pair.length == 2) 
-                {
-                    name = pair[0].trim();
-                    value = pair[1].trim();
-                }
-                if (name == null || value == null || value.equalsIgnoreCase(PROXY_HANDLER_VALUE_DEFAULT)) 
-                {
-                    continue;
-                }
-                if (name.contains("UserTransaction"))
-                {
-                    proxyHandlerMap.put(WebBeansType.USERTRANSACTION, value);
-                } 
-                else if (name.contains("Principal"))
-                {
-                    proxyHandlerMap.put(WebBeansType.PRINCIPAL, value);
-                }
-                else if (name.contains("Validation"))
-                {
-                    proxyHandlerMap.put(WebBeansType.VALIDATION, value);
-                } 
-                else if (name.contains("ValidationFactory"))
-                {
-                    proxyHandlerMap.put(WebBeansType.VALIDATIONFACT, value);
-                }
-            } 
-        } 
-        return true;
-    }
-
-
-    /**
-     * Create a dependent proxy wrapper around the actual build in bean instance.
-     * 
-     * @param actualInstance
-     * @param creationalContext
-     * @return
-     */
-    protected T createProxyWrapper(T actualInstance, CreationalContext<T> creationalContext)
-    {
-        if (handlerClassName.equals(PROXY_HANDLER_VALUE_NONE))
-        {
-            return actualInstance;
-        }
-
-        T proxy = (T) webBeansContext.getProxyFactoryRemove().createBuildInBeanProxyRemove(this);
-        if (handlerClassName.equals(PROXY_HANDLER_VALUE_DEFAULT)) 
-        {
-            final MethodHandler handler = new BuildInBeanMethodHandler(this, actualInstance);
-            webBeansContext.getProxyFactoryRemove().setHandler(proxy, handler);
-            return proxy;
-        } 
-        else if (handlerContructor != null)
-        {
-            try 
-            {
-                webBeansContext.getProxyFactoryRemove().setHandler(proxy,
-                                                 (MethodHandler) (handlerContructor.newInstance(this, actualInstance)));
-                return proxy;
-            } 
-            catch (Exception e) 
-            {
-                getLogger().log(Level.SEVERE, e.getMessage(), e);
-                //X TODO don't we rethrow this Exception?
-            }
-        }
-        return null;
-    }
-
-
-    protected abstract T createActualInstance(CreationalContext<T> creationalContext);
-    
-    
-    /**
-     * The default build in bean handler. 
-     * 
-     * @author yingwang
-     *
-     * @param <T>
-     */
-    public static class BuildInBeanMethodHandler<T> implements MethodHandler, Serializable
-    {
-
-        /**
-         * 
-         */
-        private static final long serialVersionUID = -2442900183095535369L;
-
-        private BuildInOwbBean<T> bean;
-        
-        private T actualObject = null;
-        
-        //DO NOT REMOVE, used by failover and passivation.
-        public BuildInBeanMethodHandler()
-        {
-        }
-
-        public BuildInBeanMethodHandler(BuildInOwbBean<T> bean, T actualObject) 
-        {
-            this.bean = bean;
-            this.actualObject = actualObject;
-        }    
-        
-        public Object invoke(Object instance, Method method, Method proceed, Object[] arguments) throws Throwable
-        {
-            return invoke(instance, method, arguments);
-        }
-
-        public Object invoke(Object instance, Method method, Object[] arguments) throws Throwable
-        {
-                //interface method.
-            return method.invoke(actualObject, arguments);
-        }
-
-        private  void writeObject(ObjectOutputStream s) throws IOException
-        {
-            s.writeLong(serialVersionUID);
-            s.writeObject(bean.getId());
-        }    
-        
-        private  void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException
-        {
-            if(s.readLong() == serialVersionUID) 
-            {
-                String id = (String)s.readObject();
-                WebBeansContext webBeansContext = WebBeansContext.currentInstance();
-                bean = (BuildInOwbBean<T>)webBeansContext.getBeanManagerImpl().getPassivationCapableBean(id);
-                // create new real instance after deserialized.
-                actualObject = bean.createActualInstance(null);
-            } 
-            else 
-            {
-                throw new IOException("Serial version uid does not match.");
-            }
-        }    
-
     }
 }

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=1434919&r1=1434918&r2=1434919&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 Thu Jan 17 21:20:09 2013
@@ -57,50 +57,4 @@ public class ConversationBean extends In
               false);
         setEnabled(true);
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected Conversation createInstance(CreationalContext<Conversation> creationalContext)
-    {
-        Conversation conversation = null;
-        //Gets conversation service
-        ConversationService conversationService = getWebBeansContext().getService(ConversationService.class);
-        //Gets conversation id
-        String conversationId = conversationService.getConversationId();       
-        //Gets session id that conversation is created
-        String sessionId = conversationService.getConversationSessionId();
-
-        //If conversation id is not null, this means that
-        //conversation is propogated
-        if (conversationId != null)
-        {
-            //Gets propogated conversation
-            conversation = getWebBeansContext().getConversationManager().getPropogatedConversation(conversationId,sessionId);
-        }
-        
-        if (conversation == null)
-        {
-            if(sessionId != null)
-            {
-                conversation = new ConversationImpl(conversationService.getConversationSessionId(),
-                                                    getWebBeansContext());
-            }
-            else
-            {
-                //Used in Tests
-                conversation = new ConversationImpl(getWebBeansContext());
-            }
-            
-        }
-
-        return conversation;
-    }
-
-    @Override
-    protected void destroyInstance(Conversation instance, CreationalContext<Conversation> creationalContext)
-    {
-    }
-    
 }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/EventBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/EventBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/EventBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/EventBean.java Thu Jan 17 21:20:09 2013
@@ -32,6 +32,7 @@ import javax.enterprise.util.TypeLiteral
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.event.EventImpl;
 import org.apache.webbeans.exception.WebBeansException;
+import org.apache.webbeans.portable.EventProducer;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.CollectionUtil;
 
@@ -43,9 +44,6 @@ import org.apache.webbeans.util.Collecti
 public class EventBean<T> extends AbstractOwbBean<Event<T>>
 {
 
-    //X TODO refactor. public static variables are utterly ugly
-    public static ThreadLocal<InjectionPoint> local = new ThreadLocal<InjectionPoint>();
-
     /**
      * Creates a new instance of event bean.
      * @param webBeansContext
@@ -60,52 +58,7 @@ public class EventBean<T> extends Abstra
               Dependent.class,
               new TypeLiteral<Event<T>>(){}.getRawType(),
               Collections.<Class<? extends Annotation>>emptySet());
-    }
-    
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    protected Event<T> createInstance(CreationalContext<Event<T>> creationalContext)
-    {
-        Event<T> instance = null;
-
-        InjectionPoint injectionPoint = local.get();
-        Type eventType;
-        
-        if(injectionPoint != null)
-        {
-            Type[] eventActualTypeArgs;
-            Type type = injectionPoint.getType();                        
-            ParameterizedType pt = (ParameterizedType) type;
-            eventActualTypeArgs = pt.getActualTypeArguments();
-
-            //First argument and sole argument is actual Event type
-            //Example : Event<MyEvent>
-            eventType = eventActualTypeArgs[0];
-            
-            //Event qualifiers
-            Annotation[] qualifiers = new Annotation[injectionPoint.getQualifiers().size()];
-            qualifiers = injectionPoint.getQualifiers().toArray(qualifiers);
-            
-            try
-            {
-                instance = new EventImpl<T>(qualifiers, eventType, injectionPoint, getWebBeansContext());
-            }
-            catch (Exception e)
-            {
-                throw new WebBeansException("Exception in creating Event implicit component for event type : "
-                                            + eventType);
-            }           
-            finally
-            {
-                local.set(null);
-                local.remove();
-            }
-            
-        }
-                        
-        return instance;
+        setProducer(new EventProducer<T>(webBeansContext));
     }
     
     /* (non-Javadoc)

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java Thu Jan 17 21:20:09 2013
@@ -28,13 +28,12 @@ import javax.enterprise.context.spi.Crea
 import javax.enterprise.inject.spi.InjectionPoint;
 
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.portable.InjectionPointProducer;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.CollectionUtil;
 
 public class InjectionPointBean extends AbstractOwbBean<InjectionPoint>
 {
-    private static ThreadLocal<Stack<InjectionPoint>> localThreadlocalStack = new ThreadLocal<Stack<InjectionPoint>>();
-
     public InjectionPointBean(WebBeansContext webBeansContext)
     {
         super(webBeansContext,
@@ -44,60 +43,9 @@ public class InjectionPointBean extends 
               Dependent.class,
               InjectionPoint.class,
               Collections.<Class<? extends Annotation>>emptySet());
+        setProducer(new InjectionPointProducer());
     }
 
-
-    private static Stack<InjectionPoint> getStackOfInjectionPoints()
-    {
-        Stack<InjectionPoint> stackIP = localThreadlocalStack.get();
-        if (null == stackIP)
-        {
-            stackIP = new Stack<InjectionPoint>();
-        }
-        return stackIP;
-    }
-
-    public static boolean setThreadLocal(InjectionPoint ip)
-    {
-        Stack<InjectionPoint> stackIP = getStackOfInjectionPoints();
-        stackIP.push(ip);
-        localThreadlocalStack.set(stackIP);
-        return true;
-    }
-    
-    public static void unsetThreadLocal()
-    {
-        Stack<InjectionPoint> stackIP = getStackOfInjectionPoints();
-        stackIP.pop();
-    }
-    
-    /**
-     * Removes the ThreadLocal from the ThreadMap to prevent memory leaks.
-     */
-    public static void removeThreadLocal()
-    {
-        getStackOfInjectionPoints().clear();
-        localThreadlocalStack.remove();
-    }
-    
-    public static boolean isStackEmpty()
-    {
-        return getStackOfInjectionPoints().isEmpty();
-    }
-
-    @Override
-    protected InjectionPoint createInstance(CreationalContext<InjectionPoint> creationalContext)
-    {
-        InjectionPoint ip = getStackOfInjectionPoints().peek();
-        return ip;
-    }
-
-    @Override
-    protected void destroyInstance(InjectionPoint instance, CreationalContext<InjectionPoint> creationalContext)
-    {
-        removeThreadLocal();
-    }
-    
     /* (non-Javadoc)
      * @see org.apache.webbeans.component.AbstractOwbBean#isPassivationCapable()
      */

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionTargetBean.java Thu Jan 17 21:20:09 2013
@@ -26,7 +26,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
-import javax.enterprise.context.Dependent;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.Decorator;
@@ -41,7 +40,6 @@ import javax.enterprise.inject.spi.Injec
 
 import org.apache.webbeans.intercept.webbeans.WebBeansInterceptorBeanPleaseRemove;
 import org.apache.webbeans.logger.WebBeansLoggerFacade;
-import org.apache.webbeans.proxy.ProxyFactory;
 import org.apache.webbeans.util.Asserts;
 
 
@@ -63,8 +61,6 @@ public abstract class InjectionTargetBea
      */
     protected List<InterceptorData> interceptorStack = new ArrayList<InterceptorData>();
 
-    private InjectionTarget<T> injectionTarget = null;
-
     /**
      * Decorators
      * @deprecated will be replaced by InterceptorResolution logic
@@ -105,52 +101,7 @@ public abstract class InjectionTargetBea
 
     public InjectionTarget<T> getInjectionTarget()
     {
-        return injectionTarget;
-    }
-
-    public void setInjectionTarget(InjectionTarget<T> injectionTarget)
-    {
-        this.injectionTarget = injectionTarget;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected T createInstance(CreationalContext<T> creationalContext)
-    {
-        //Create actual bean instance
-        T instance = getInjectionTarget().produce(creationalContext);
-
-        //X TODO this should not be needed finally!
-        //For dependent instance checks
-        if(getScope() == Dependent.class && !(this instanceof EnterpriseBeanMarker))
-        {
-            final ProxyFactory proxyFactory = getWebBeansContext().getProxyFactoryRemove();
-            T result = (T) proxyFactory.createDependentScopedBeanProxyRemove(this, instance, creationalContext);
-            //Means that Dependent Bean has interceptor/decorator
-            if(proxyFactory.isProxyInstanceRemove(result))
-            {
-                //This is a dependent scoped bean instance,
-                //Therefore we inject dependencies of this instance
-                //Otherwise we loose injection
-                getInjectionTarget().inject(instance, creationalContext);
-
-                //Dependent proxy
-                return result;
-            }
-        }
-
-        getInjectionTarget().inject(instance, creationalContext);
-
-        //Post construct
-        if(getWebBeansType().equals(WebBeansType.MANAGED))
-        {
-            // Call Post Construct
-            //X TODO
-        }
-
-
-        return instance;
+        return (InjectionTarget<T>) getProducer();
     }
 
     /**
@@ -158,7 +109,7 @@ public abstract class InjectionTargetBea
      */
     protected void destroyInstance(T instance, CreationalContext<T> creationalContext)
     {
-        injectionTarget.preDestroy(instance);
+        getInjectionTarget().preDestroy(instance);
     }
 
     /**

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InstanceBean.java Thu Jan 17 21:20:09 2013
@@ -25,22 +25,17 @@ import java.util.Collections;
 import java.util.Set;
 
 import javax.enterprise.context.Dependent;
-import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.Instance;
-import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.util.TypeLiteral;
 import javax.inject.Provider;
 
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.inject.AbstractInjectable;
-import org.apache.webbeans.inject.instance.InstanceFactory;
+import org.apache.webbeans.portable.InstanceProducer;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.CollectionUtil;
 
 public class InstanceBean<T> extends AbstractOwbBean<Instance<T>>
 {
-    // TODO refactor. public static variables are uterly ugly
-    public static ThreadLocal<InjectionPoint> local = new ThreadLocal<InjectionPoint>();
     
     @SuppressWarnings("serial")
     public InstanceBean(WebBeansContext webBeansContext)
@@ -52,43 +47,7 @@ public class InstanceBean<T> extends Abs
               Dependent.class,
               new TypeLiteral<Instance<T>>(){}.getRawType(),
               Collections.<Class<? extends Annotation>>emptySet());
-    }
-    
-         
-    @Override
-    protected Instance<T> createInstance(CreationalContext<Instance<T>> creationalContext)
-    {
-        try
-        {
-            InjectionPoint injectionPoint = local.get();
-            Set<Annotation> qualifiers;
-            Type type;
-
-            if (injectionPoint != null)
-            {
-                ParameterizedType injectedType = (ParameterizedType)injectionPoint.getType();
-                qualifiers = injectionPoint.getQualifiers();
-                type = injectedType.getActualTypeArguments()[0];
-            }
-            else
-            {
-                qualifiers = getQualifiers();
-                type = getReturnType();
-            }
-
-            Object ownerInstance = AbstractInjectable.instanceUnderInjection.get();
-
-            Instance<T> instance = InstanceFactory.getInstance(type, injectionPoint, getWebBeansContext(),
-                                                               creationalContext, ownerInstance,
-                                                               qualifiers.toArray(new Annotation[qualifiers.size()]));
-            
-            return instance;
-        }
-        finally
-        {
-            local.set(null);
-            local.remove();
-        }
+        setProducer(new InstanceProducer<T>(getReturnType(), AnnotationUtil.DEFAULT_AND_ANY_ANNOTATION, webBeansContext));
     }
 
     /* (non-Javadoc)

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/OwbBean.java Thu Jan 17 21:20:09 2013
@@ -49,13 +49,6 @@ public interface OwbBean<T> extends Bean
      * @see WebBeansType
      */
     public WebBeansType getWebBeansType();
-    
-    /**
-     * Create an instance.
-     * @param creationalContext creaitonal context
-     * @return instance
-     */
-    public T createNewInstance(CreationalContext<T> creationalContext);
 
     /**
      * Destroys instance.

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerFieldBean.java Thu Jan 17 21:20:09 2013
@@ -65,11 +65,11 @@ public class ProducerFieldBean<T> extend
      * {@inheritDoc}
      */
     @Override
-    protected T createInstance(CreationalContext<T> creationalContext)
+    public T create(CreationalContext<T> creationalContext)
     {
         T instance = null;
         
-        instance = createDefaultInstance(creationalContext);
+        instance = super.create(creationalContext);
         checkNullInstance(instance);
         checkScopeType();
 

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ProducerMethodBean.java Thu Jan 17 21:20:09 2013
@@ -42,6 +42,7 @@ import org.apache.webbeans.context.creat
 import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.apache.webbeans.inject.AbstractInjectable;
 import org.apache.webbeans.inject.InjectableMethod;
+import org.apache.webbeans.portable.ProducerMethodProducer;
 import org.apache.webbeans.util.ClassUtil;
 import org.apache.webbeans.util.WebBeansUtil;
 
@@ -70,7 +71,7 @@ public class ProducerMethodBean<T> exten
      * @param ownerComponent parent bean
      * @param returnType producer method return type
      */
-    public ProducerMethodBean(InjectionTargetBean<?> ownerComponent,
+    public <P> ProducerMethodBean(InjectionTargetBean<P> ownerComponent,
                               Set<Type> types,
                               Set<Annotation> qualifiers,
                               Class<? extends Annotation> scope,
@@ -130,171 +131,19 @@ public class ProducerMethodBean<T> exten
         }
         return passivatingId;
     }
-
-    /**
-     * {@inheritDoc}
-     */
+    
     @Override
-    protected T createInstance(CreationalContext<T> creationalContext)
-    {
-        T instance = createDefaultInstance(creationalContext);
+    public T create(CreationalContext<T> creationalContext) {
+        T instance = super.create(creationalContext);
         // Check null instance
         checkNullInstance(instance);
 
         // Check scope type
         checkScopeType();
-
         return instance;
     }
 
     /**
-     * Default producer method creation.
-     * 
-     * @param creationalContext creational context
-     * @return producer method instance
-     */
-    protected T createDefaultInstance(CreationalContext<T> creationalContext)
-    {
-        T instance = null;
-        Object parentInstance = null;
-        CreationalContext<?> parentCreational = null;
-        InjectableMethod<T> m;
-        List<DependentCreationalContext<Object>> oldDependents =
-                dependentInstanceOfProducerMethods.get();
-
-        try
-        {
-            //X TODO dependentInstanceOfProducerMethods MUST NOT be public! 
-            dependentInstanceOfProducerMethods.set(new ArrayList<DependentCreationalContext<Object>>());
-            parentCreational = getManager().createCreationalContext(ownerComponent);
-            
-            if (!Modifier.isStatic(creatorMethod.getModifiers()))
-            {
-                parentInstance = getParentInstance(parentCreational);
-            }
-
-            //X TODO get the InjectionTargetImpl from the parent bean
-            InjectionTarget ownerBeanInjectionTarget = getParent().getInjectionTarget();
-            m = new InjectableMethod<T>(creatorMethod, parentInstance, new Producer<T>()
-            {
-
-                @Override
-                public T produce(CreationalContext<T> creationalContext)
-                {
-                    return null;
-                }
-
-                @Override
-                public void dispose(T instance)
-                {
-                }
-
-                @Override
-                public Set<InjectionPoint> getInjectionPoints()
-                {
-                    return ProducerMethodBean.this.getInjectionPoints();
-                }
-            }, (CreationalContextImpl<T>) creationalContext);
-            //Injection of parameters
-            instance = m.doInjection();
-            
-            boolean isInjectionToAnotherBean = false;
-            Contextual<?> contextual = null; 
-            if(creationalContext instanceof CreationalContextImpl)
-            {
-                contextual =  ((CreationalContextImpl)creationalContext).getBean();
-                isInjectionToAnotherBean = contextual == this ? false : true;
-            }
-            
-            ThreadLocal<Object> injectionTargetInstance = AbstractInjectable.instanceUnderInjection;
-            if(isInjectionToAnotherBean)
-            {
-                if(oldDependents != null)
-                {
-                    DependentCreationalContext<Object> dependentCreational =
-                            new DependentCreationalContext<Object>((Contextual<Object>)this);
-                    dependentCreational.setInstance(instance);
-                    dependentCreational.setDependentType(DependentType.BEAN);
-
-                    oldDependents.add(dependentCreational);
-                }
-            }
-            else
-            {
-                List<DependentCreationalContext<Object>> dependents =
-                        dependentInstanceOfProducerMethods.get();
-                if(dependents != null)
-                {
-                    for(int i = 0, size = dependents.size(); i < size; i++)
-                    {
-                        DependentCreationalContext<Object> dependent = dependents.get(i);
-                        ((CreationalContextImpl)creationalContext).
-                                addDependent(instance, dependent.getContextual(), dependent.getInstance());
-                    }
-                }
-            }
-            
-            //Adding dependents of producers
-            Map<Bean<?>, Object> dependents = m.getDependentBeanParameters();
-            if(dependents != null)
-            {
-                Set<Bean<?>> beans = dependents.keySet();
-                for(Bean<?> bean : beans)
-                {
-                    if(creationalContext instanceof CreationalContextImpl)
-                    {
-                        if(isInjectionToAnotherBean)
-                        {
-                            if(oldDependents == null)
-                            {
-                                if (injectionTargetInstance != null && injectionTargetInstance.get() != null)
-                                {
-                                    ((CreationalContextImpl)creationalContext)
-                                            .addDependent(injectionTargetInstance.get(), this , instance);
-                                }
-                            }
-                            else
-                            {
-                                DependentCreationalContext<Object> dependentCreational =
-                                        new DependentCreationalContext<Object>((Contextual<Object>)bean);
-                                dependentCreational.setInstance(dependents.get(bean));
-                                dependentCreational.setDependentType(DependentType.BEAN);
-                                oldDependents.add(dependentCreational);                                                            
-                            }
-                        }
-                        else
-                        {
-                            ((CreationalContextImpl)creationalContext).addDependent(instance, bean ,
-                                                                                    dependents.get(bean));   
-                        }
-                    }
-                }
-            }
-        }
-        finally
-        {
-            if (getParent().getScope().equals(Dependent.class))
-            {
-                // this handles dependent scoped producer methods and fields
-                destroyBean(getParent(), parentInstance, parentCreational);
-            }
-            
-            if(oldDependents != null)
-            {
-                dependentInstanceOfProducerMethods.set(oldDependents);
-            }
-            else
-            {
-                dependentInstanceOfProducerMethods.set(null);
-                dependentInstanceOfProducerMethods.remove();
-            }
-        }
-
-        return instance;
-
-    }
-
-    /**
      * {@inheritDoc}
      */
     @Override

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceBean.java Thu Jan 17 21:20:09 2013
@@ -25,6 +25,7 @@ import java.util.Set;
 
 import javax.enterprise.context.spi.CreationalContext;
 import org.apache.webbeans.exception.WebBeansException;
+import org.apache.webbeans.portable.ProviderBasedProxyProducer;
 import org.apache.webbeans.proxy.ResourceProxyHandler;
 import org.apache.webbeans.spi.ResourceInjectionService;
 import org.apache.webbeans.spi.api.ResourceReference;
@@ -49,31 +50,11 @@ public class ResourceBean<X, T extends A
         this.resourceReference = resourceReference;
     }
     
-    @Override
-    @SuppressWarnings("unchecked")
-    protected X createInstance(CreationalContext<X> creationalContext)
+    public ResourceReference<X, T> getReference()
     {
-        try
-        {
-            ResourceInjectionService resourceService = getWebBeansContext().getService(ResourceInjectionService.class);
-            X instance = resourceService.getResourceReference(resourceReference);
-
-            if (instance == null || Modifier.isFinal(instance.getClass().getModifiers()))
-            {
-                return instance;
-            }
-
-            X proxyInstance = (X) getWebBeansContext().getProxyFactoryRemove().getResourceBeanProxyClass(this).newInstance();
-            webBeansContext.getProxyFactoryRemove().setHandler(proxyInstance, new ResourceProxyHandler(this,instance));
-            return proxyInstance;
-        }
-        catch (Exception e)
-        {
-            throw new WebBeansException(e);
-        }
-
+        return resourceReference;
     }
-
+ 
     /**
      * Called after deserialization to get a new instance for some type of resource bean instance that are
      * not serializable.

Added: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceProvider.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceProvider.java?rev=1434919&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceProvider.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/ResourceProvider.java Thu Jan 17 21:20:09 2013
@@ -0,0 +1,34 @@
+package org.apache.webbeans.component;
+
+import java.lang.reflect.Modifier;
+
+import javax.inject.Provider;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.exception.WebBeansException;
+import org.apache.webbeans.spi.ResourceInjectionService;
+import org.apache.webbeans.spi.api.ResourceReference;
+
+public class ResourceProvider<T> implements Provider<T> {
+    
+    private ResourceReference<T, ?> resourceReference = null;
+    private WebBeansContext webBeansContext;
+
+    public ResourceProvider(ResourceReference<T, ?> resourceReference, WebBeansContext webBeansContext) {
+        this.resourceReference = resourceReference;
+        this.webBeansContext = webBeansContext;
+    }
+    
+    @Override
+    public T get() {
+        try
+        {
+            ResourceInjectionService resourceService = webBeansContext.getService(ResourceInjectionService.class);
+            return resourceService.getResourceReference(resourceReference);
+        }
+        catch (Exception e)
+        {
+            throw new WebBeansException(e);
+        }
+    }
+}

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/AbstractInjectionTargetBeanBuilder.java Thu Jan 17 21:20:09 2013
@@ -46,6 +46,7 @@ import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.InjectionTarget;
 import javax.enterprise.inject.spi.ObserverMethod;
+import javax.enterprise.inject.spi.Producer;
 import javax.inject.Inject;
 import javax.inject.Named;
 
@@ -54,11 +55,15 @@ import org.apache.webbeans.component.Inj
 import org.apache.webbeans.component.ProducerFieldBean;
 import org.apache.webbeans.component.ProducerMethodBean;
 import org.apache.webbeans.component.ResourceBean;
+import org.apache.webbeans.component.ResourceProvider;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.container.InjectionResolver;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.apache.webbeans.exception.inject.DefinitionException;
 import org.apache.webbeans.portable.InjectionTargetImpl;
+import org.apache.webbeans.portable.ProducerFieldProducer;
+import org.apache.webbeans.portable.ProducerMethodProducer;
+import org.apache.webbeans.portable.ProviderBasedProxyProducer;
 import org.apache.webbeans.spi.api.ResourceReference;
 import org.apache.webbeans.util.AnnotationUtil;
 import org.apache.webbeans.util.Asserts;
@@ -262,6 +267,11 @@ public abstract class AbstractInjectionT
                 }
                 
                 pr.setDisposalMethod(declaredMethod);
+                Producer<?> producer = pr.getProducer();
+                if (producer instanceof ProducerMethodProducer)
+                {
+                    ((ProducerMethodProducer)producer).setDisposalMethod(annotatedMethod);
+                }
             }
         }
     }
@@ -564,7 +574,9 @@ public abstract class AbstractInjectionT
                             = new ResourceBeanBuilder<T, Annotation>(bean, resourceRef, annotatedField);
                         resourceBeanCreator.defineQualifiers();
                         ResourceBean<T, Annotation> resourceBean = resourceBeanCreator.getBean();
-                        
+                        resourceBean.setProducer(new ProviderBasedProxyProducer(webBeansContext, resourceBean.getReturnType(), new ResourceProvider(resourceBean.getReference(), webBeansContext)));
+
+
                         resourceBean.setProducerField(field);
                         
                         producerBeans.add(resourceBean);                                            
@@ -580,6 +592,7 @@ public abstract class AbstractInjectionT
                     producerFieldBeanCreator.defineQualifiers();
                     producerFieldBeanCreator.defineName();
                     ProducerFieldBean<T> producerFieldBean = producerFieldBeanCreator.getBean();
+                    producerFieldBean.setProducer(new ProducerFieldProducer(bean, annotatedField, producerFieldBean.getInjectionPoints()));
                     producerFieldBean.setProducerField(field);
                     
                     if (producerFieldBean.getReturnType().isPrimitive())
@@ -639,6 +652,8 @@ public abstract class AbstractInjectionT
                 producerMethodBeanCreator.defineApiType();
                 producerMethodBeanCreator.defineName();
                 ProducerMethodBean<T> producerMethodBean = producerMethodBeanCreator.getBean();
+                ProducerMethodProducerBuilder producerBuilder = new ProducerMethodProducerBuilder(producerMethodBean);
+                producerMethodBean.setProducer(producerBuilder.build(annotatedMethod));
                 producerMethodBean.setCreatorMethod(annotatedMethod.getJavaMember());
                 if (ClassUtil.getClass(annotatedMethod.getBaseType()).isPrimitive())
                 {
@@ -700,7 +715,7 @@ public abstract class AbstractInjectionT
                                     boolean enabled);
 
     @Override
-    protected I createBean(Set<Type> types,
+    protected final I createBean(Set<Type> types,
                            Set<Annotation> qualifiers,
                            Class<? extends Annotation> scope,
                            String name,
@@ -714,7 +729,7 @@ public abstract class AbstractInjectionT
         //X TODO hack to set the InjectionTarget
         InjectionTarget<T> injectionTarget
                 = buildInjectionTarget(types, qualifiers, bean.getAnnotatedType(), bean.getInjectionPoints(), webBeansContext, getPostConstructMethods(), getPreDestroyMethods());
-        bean.setInjectionTarget(injectionTarget);
+        bean.setProducer(injectionTarget);
 
         return bean;
     }

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ManagedBeanBuilder.java Thu Jan 17 21:20:09 2013
@@ -198,7 +198,7 @@ public class ManagedBeanBuilder<T, M ext
 
         //X TODO move proxy instance creation into JavassistProxyFactory!
 
-        bean.setInjectionTarget(new AbstractDecoratorInjectionTarget<T>(bean));
+        bean.setProducer(new AbstractDecoratorInjectionTarget<T>(bean));
         return bean;
     }
 

Added: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodProducerBuilder.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodProducerBuilder.java?rev=1434919&view=auto
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodProducerBuilder.java (added)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/creation/ProducerMethodProducerBuilder.java Thu Jan 17 21:20:09 2013
@@ -0,0 +1,78 @@
+/*
+ * 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.component.creation;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.enterprise.inject.Disposes;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedParameter;
+import javax.enterprise.inject.spi.InjectionPoint;
+
+import org.apache.webbeans.component.OwbBean;
+import org.apache.webbeans.component.ProducerMethodBean;
+import org.apache.webbeans.portable.ProducerMethodProducer;
+import org.apache.webbeans.util.Asserts;
+
+public class ProducerMethodProducerBuilder<T, P> {
+
+    private ProducerMethodBean<T> bean;
+    private AnnotatedMethod<P> producerMethod;
+    private AnnotatedMethod<P> disposalMethod;
+    private Set<InjectionPoint> injectionPoints;
+
+    public ProducerMethodProducerBuilder(ProducerMethodBean<T> producerMethodBean) {
+        Asserts.assertNotNull(producerMethodBean);
+        this.bean = producerMethodBean;
+    }
+
+    public ProducerMethodProducer<T, P> build(AnnotatedMethod<P> method) {
+        producerMethod = method;
+        defineDisposalMethod();
+        defineInjectionPoints();
+        return new ProducerMethodProducer<T, P>((OwbBean<P>) bean.getParent(), producerMethod, disposalMethod, injectionPoints);
+    }
+
+    private void defineDisposalMethod() {
+        Set<AnnotatedMethod<? super P>> annotatedMethods = producerMethod.getDeclaringType().getMethods();
+        for (AnnotatedMethod<? super P> annotatedMethod : annotatedMethods)
+        {            
+            if (annotatedMethod.getDeclaringType().equals(producerMethod.getDeclaringType()))
+            {
+                for (AnnotatedParameter<? super P> annotatedParameter : annotatedMethod.getParameters())
+                {
+                    if (annotatedParameter.isAnnotationPresent(Disposes.class))
+                    {
+                        disposalMethod = (AnnotatedMethod<P>)annotatedMethod;
+                        break;
+                    }
+                }
+            }
+        }
+    }    
+
+    private void defineInjectionPoints() {
+        injectionPoints = new HashSet<InjectionPoint>(bean.getWebBeansContext().getInjectionPointFactory().getMethodInjectionPointData(bean, producerMethod));
+        if (disposalMethod != null)
+        {
+            injectionPoints.addAll(bean.getWebBeansContext().getInjectionPointFactory().getMethodInjectionPointData(bean, disposalMethod));
+        }
+    }
+}

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/third/ThirdpartyBeanImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/third/ThirdpartyBeanImpl.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/third/ThirdpartyBeanImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/third/ThirdpartyBeanImpl.java Thu Jan 17 21:20:09 2013
@@ -132,14 +132,6 @@ public class ThirdpartyBeanImpl<T> exten
     }
 
     @Override
-    protected T createInstance(CreationalContext<T> creationalContext)
-    {
-        throw new UnsupportedOperationException();
-    }
-
-
-
-    @Override
     protected void destroyInstance(T instance,CreationalContext<T> creationalContext)
     {
         throw new UnsupportedOperationException();

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java Thu Jan 17 21:20:09 2013
@@ -907,7 +907,6 @@ public class BeansDeployer
                 }
 
                 Set<ObserverMethod<?>> observerMethods = new HashSet<ObserverMethod<?>>();
-                //X TODO WTF??? ((InjectionTargetProducerRemove)processInjectionTargetEvent.getInjectionTarget()).setBean(bean);
                 if(managedBeanCreator.isEnabled())
                 {
                     observerMethods = managedBeanCreator.defineObserverMethods(bean);
@@ -916,7 +915,7 @@ public class BeansDeployer
                 Set<ProducerFieldBean<?>> producerFields = managedBeanCreator.defineProducerFields(bean);
 
                 //Put final InjectionTarget instance
-                bean.setInjectionTarget(processInjectionTargetEvent.getInjectionTarget());
+                bean.setProducer(processInjectionTargetEvent.getInjectionTarget());
 
                 ManagedBean<T> managedBean = (ManagedBean<T>)bean;
                 Map<ProducerMethodBean<?>,AnnotatedMethod<?>> annotatedMethods =
@@ -1008,7 +1007,7 @@ public class BeansDeployer
                             .fireProcessInjectionTargetEvent(bean).getInjectionTarget();
                     if (updatedInjectionTarget != originalInjectionTarget && bean != null)
                     {
-                        bean.setInjectionTarget(updatedInjectionTarget);
+                        bean.setProducer(updatedInjectionTarget);
                     }
                 }
             }

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=1434919&r1=1434918&r2=1434919&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 Thu Jan 17 21:20:09 2013
@@ -80,6 +80,7 @@ import org.apache.webbeans.exception.def
 import org.apache.webbeans.exception.inject.DefinitionException;
 import org.apache.webbeans.plugins.OpenWebBeansJmsPlugin;
 import org.apache.webbeans.portable.AnnotatedElementFactory;
+import org.apache.webbeans.portable.InjectionPointProducer;
 import org.apache.webbeans.portable.InjectionTargetImpl;
 import org.apache.webbeans.portable.events.discovery.ErrorStack;
 import org.apache.webbeans.spi.ScannerService;
@@ -590,10 +591,10 @@ public class BeanManagerImpl implements 
         }
 
         boolean ijbSet = false;
-        if (InjectionPointBean.isStackEmpty())
+        if (InjectionPointProducer.isStackEmpty())
         {
             ijbSet = true;
-            InjectionPointBean.setThreadLocal(injectionPoint);
+            InjectionPointProducer.setThreadLocal(injectionPoint);
         }
 
         try
@@ -615,7 +616,7 @@ public class BeanManagerImpl implements 
         {
             if (ijbSet)
             {
-                InjectionPointBean.unsetThreadLocal();
+                InjectionPointProducer.unsetThreadLocal();
             }
         }
 

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java?rev=1434919&r1=1434918&r2=1434919&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/event/EventImpl.java Thu Jan 17 21:20:09 2013
@@ -33,6 +33,7 @@ import javax.enterprise.util.TypeLiteral
 
 import org.apache.webbeans.component.InjectionPointBean;
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.portable.InjectionPointProducer;
 import org.apache.webbeans.util.ClassUtil;
 import org.apache.webbeans.util.OwbCustomObjectInputStream;
 import org.apache.webbeans.util.WebBeansUtil;
@@ -78,14 +79,14 @@ public class EventImpl<T> implements Eve
      */
     public void fire(T event)
     {
-        InjectionPointBean.setThreadLocal(injectionPoint);
+        InjectionPointProducer.setThreadLocal(injectionPoint);
         try
         {
             webBeansContext.getBeanManagerImpl().fireEvent(event, injectedBindings);
         }
         finally
         {
-            InjectionPointBean.setThreadLocal(injectionPoint);
+            InjectionPointProducer.setThreadLocal(injectionPoint);
         }
     }