You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2009/08/16 22:17:51 UTC

svn commit: r804761 - in /incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms: component/ plugin/ util/

Author: gerdogdu
Date: Sun Aug 16 20:17:50 2009
New Revision: 804761

URL: http://svn.apache.org/viewvc?rev=804761&view=rev
Log:
Re-structure JMS injection.

Added:
    incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsBean.java
      - copied, changed from r797826, incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsComponentImpl.java
Removed:
    incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsComponentImpl.java
Modified:
    incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsComponentFactory.java
    incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/plugin/OpenWebBeansJmsPlugin.java
    incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsProxyHandler.java
    incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsUtil.java

Copied: incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsBean.java (from r797826, incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsComponentImpl.java)
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsBean.java?p2=incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsBean.java&p1=incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsComponentImpl.java&r1=797826&r2=804761&rev=804761&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsComponentImpl.java (original)
+++ incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsBean.java Sun Aug 16 20:17:50 2009
@@ -19,70 +19,50 @@
 import java.lang.reflect.Method;
 
 import javax.enterprise.context.spi.CreationalContext;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageProducer;
-import javax.jms.Session;
-
 import org.apache.webbeans.component.AbstractBean;
+import org.apache.webbeans.component.JmsBeanMarker;
 import org.apache.webbeans.component.WebBeansType;
-import org.apache.webbeans.exception.WebBeansException;
+import org.apache.webbeans.context.creational.CreationalContextFactory;
 import org.apache.webbeans.jms.JMSModel;
 import org.apache.webbeans.jms.util.Closable;
-import org.apache.webbeans.jms.util.JmsUtil;
 
-public class JmsComponentImpl<T> extends AbstractBean<T> 
+public class JmsBean<T> extends AbstractBean<T> implements JmsBeanMarker
 {
     private JMSModel jmsModel = null;
     
-    private Class<T> jmsClass = null;
-        
-    JmsComponentImpl(JMSModel jmsModel, Class<T> jmsClass)
+    @SuppressWarnings("unchecked")
+    JmsBean(JMSModel jmsModel)
     {
-        super(WebBeansType.JMS);
-        
+        super(WebBeansType.JMS);        
         this.jmsModel = jmsModel;
-        this.jmsClass = jmsClass;
+        this.creationalContext = CreationalContextFactory.getInstance().getCreationalContext(this);
     }
 
     @Override
     protected T createInstance(CreationalContext<T> creationalContext)
     {
-        T jmsProxyInstance = JmsUtil.createNewJmsProxy(this);
-         
-        return jmsProxyInstance;
+        return null;
     }
 
     @Override
     protected void destroyInstance(T instance)
     {        
-        if(Session.class.isAssignableFrom(jmsClass) ||
-                MessageConsumer.class.isAssignableFrom(jmsClass) ||
-                MessageProducer.class.isAssignableFrom(jmsClass))
+        try
         {
-            try
-            {
-                if(instance != null)
-                {
-                    Method method = Closable.class.getMethod("closeJMSObject", new Class[]{});
-                    
-                    method.invoke(instance, new Object[]{});                    
-                }
-            }
-            
-            catch (Exception e)
+            if(instance != null)
             {
-                throw new WebBeansException("Unable to destroy instance " + this.toString() ,e);
+                Method method = Closable.class.getMethod("closeJMSObject", new Class[]{});
+                
+                method.invoke(instance, new Object[]{});                    
             }
-            
         }
-    }
-    
-
-    public Class<T> getJmsClass()
-    {
-        return this.jmsClass;
-    }
-    
+        
+        catch (Exception e)
+        {
+            getLogger().error("Error is occured while closing jms instance",e); 
+        }
+}
+        
     public JMSModel getJmsModel()
     {
         return this.jmsModel;

Modified: incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsComponentFactory.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsComponentFactory.java?rev=804761&r1=804760&r2=804761&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsComponentFactory.java (original)
+++ incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/component/JmsComponentFactory.java Sun Aug 16 20:17:50 2009
@@ -18,8 +18,21 @@
 
 import java.lang.annotation.Annotation;
 
+import javax.jms.Queue;
+import javax.jms.QueueConnection;
+import javax.jms.QueueReceiver;
+import javax.jms.QueueSender;
+import javax.jms.QueueSession;
+import javax.jms.Topic;
+import javax.jms.TopicConnection;
+import javax.jms.TopicPublisher;
+import javax.jms.TopicSession;
+import javax.jms.TopicSubscriber;
+
 import org.apache.webbeans.annotation.DependentScopeLiteral;
+import org.apache.webbeans.annotation.StandardLiteral;
 import org.apache.webbeans.jms.JMSModel;
+import org.apache.webbeans.jms.JMSModel.JMSType;
 import org.apache.webbeans.util.Asserts;
 
 public final class JmsComponentFactory
@@ -36,15 +49,31 @@
         return instance;
     }
     
-    public <T> JmsComponentImpl<T> getJmsComponent(JMSModel model, Class<T> clazz)
+    public <T> JmsBean<T> getJmsComponent(JMSModel model)
     {
         Asserts.assertNotNull(model,"model parameter can not be null");
-        Asserts.assertNotNull(clazz, "clazz parameter can not be null");
         
-        JmsComponentImpl<T> component = new JmsComponentImpl<T>(model,clazz);
+        JmsBean<T> component = new JmsBean<T>(model);
+        
+        if(model.getJmsType().equals(JMSType.QUEUE))
+        {
+            component.addApiType(Queue.class);
+            component.addApiType(QueueConnection.class);
+            component.addApiType(QueueSession.class);
+            component.addApiType(QueueSender.class);
+            component.addApiType(QueueReceiver.class);
+        }
+        else
+        {
+            component.addApiType(Topic.class);
+            component.addApiType(TopicConnection.class);
+            component.addApiType(TopicSession.class);
+            component.addApiType(TopicPublisher.class);
+            component.addApiType(TopicSubscriber.class);
+        }
         
-        component.addApiType(clazz);
         component.setImplScopeType(new DependentScopeLiteral());
+        component.setType(new StandardLiteral());
         
         Annotation[] anns = model.getBindings();
         

Modified: incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/plugin/OpenWebBeansJmsPlugin.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/plugin/OpenWebBeansJmsPlugin.java?rev=804761&r1=804760&r2=804761&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/plugin/OpenWebBeansJmsPlugin.java (original)
+++ incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/plugin/OpenWebBeansJmsPlugin.java Sun Aug 16 20:17:50 2009
@@ -1,42 +1,34 @@
 /*
- *  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.
+ * 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.jms.plugin;
 
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
+import javax.enterprise.inject.spi.Bean;
 
-import javax.enterprise.inject.spi.InjectionPoint;
-
-import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.exception.WebBeansConfigurationException;
-import org.apache.webbeans.jms.JMSManager;
 import org.apache.webbeans.jms.JMSModel;
-import org.apache.webbeans.jms.JMSModel.JMSType;
 import org.apache.webbeans.jms.component.JmsComponentFactory;
-import org.apache.webbeans.jms.component.JmsComponentImpl;
+import org.apache.webbeans.jms.component.JmsBean;
 import org.apache.webbeans.jms.util.JmsProxyHandler;
 import org.apache.webbeans.jms.util.JmsUtil;
 import org.apache.webbeans.plugins.AbstractOpenWebBeansPlugin;
 
 /**
  * JMS Plugin for JMS related components.
+ * 
  * @version $Rev$ $Date$
  */
-public class OpenWebBeansJmsPlugin extends AbstractOpenWebBeansPlugin
+public class OpenWebBeansJmsPlugin extends AbstractOpenWebBeansPlugin implements org.apache.webbeans.plugins.OpenWebBeansJmsPlugin
 {
 
     public OpenWebBeansJmsPlugin()
@@ -44,58 +36,27 @@
         super();
     }
 
-    
-    
     @Override
-    @SuppressWarnings("unchecked")
-    /**
-     * handle a JMS injection point
-     */
-    public <T> boolean addImplicitComponentForInjectionPoint(InjectionPoint injectionPoint)
-    {        
-        Type injectionPointType = injectionPoint.getType();
-        if(injectionPointType instanceof Class)
-        {
-            Class<T> injectionPointClazz = (Class<T>)injectionPointType;
-            
-            if(JmsUtil.isJmsResourceClass(injectionPointClazz))
-            {
-                JMSType type = null;
-                
-                if(JmsUtil.isJmsQueueTypeResource(injectionPointClazz))
-                {
-                    type = JMSType.QUEUE;
-                }
-                else
-                {
-                    type = JMSType.TOPIC;
-                }
-                
-                Annotation[] bindings = injectionPoint.getBindings().toArray(new Annotation[0]);
-                JMSModel jmsModel = JMSManager.getInstance().getModel(type, bindings);
-                
-                JmsComponentImpl<T> bean = JmsComponentFactory.getJmsComponentFactory().getJmsComponent(jmsModel,injectionPointClazz);
-                
-                BeanManagerImpl.getManager().addBean(bean);
-                
-                return true;
-            }            
-        }
-             
-        return false;
-    }
+    public Bean<?> getJmsBean(JMSModel model)
+    {
+        JmsBean<?> bean = JmsComponentFactory.getJmsComponentFactory().getJmsComponent(model);
 
+        return bean;
 
+    }
 
-    /* (non-Javadoc)
-     * @see org.apache.webbeans.plugins.AbstractOpenWebBeansPlugin#shutDown()
-     */
     @Override
     public void shutDown() throws WebBeansConfigurationException
     {
         JmsProxyHandler.clearConnections();
     }
-    
-    
-    
+
+    @Override
+    public Object getJmsBeanProxy(Bean<?> bean, Class<?> iface)
+    {
+        Object proxy = JmsUtil.createNewJmsProxy((JmsBean<?>) bean, iface);
+
+        return proxy;
+    }
+
 }

Modified: incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsProxyHandler.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsProxyHandler.java?rev=804761&r1=804760&r2=804761&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsProxyHandler.java (original)
+++ incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsProxyHandler.java Sun Aug 16 20:17:50 2009
@@ -33,14 +33,14 @@
 import org.apache.webbeans.exception.WebBeansException;
 import org.apache.webbeans.jms.JMSModel;
 import org.apache.webbeans.jms.JMSModel.JMSType;
-import org.apache.webbeans.jms.component.JmsComponentImpl;
+import org.apache.webbeans.jms.component.JmsBean;
 import org.apache.webbeans.util.ClassUtil;
 
 import javassist.util.proxy.MethodHandler;
 
 public class JmsProxyHandler implements MethodHandler
 {
-    private JmsComponentImpl<?> jmsComponent = null;
+    private JmsBean<?> jmsComponent = null;
 
     private static ConnectionFactory connectionFactory = null;
 
@@ -51,10 +51,13 @@
     private static Map<String, Destination> dests = new ConcurrentHashMap<String, Destination>();
     
     private Object jmsObject = null;
+    
+    private Class<?> injectionClazz = null;
 
-    public JmsProxyHandler(JmsComponentImpl<?> jmsComponent)
+    public JmsProxyHandler(JmsBean<?> jmsComponent, Class<?> injectionClazz)
     {
         this.jmsComponent = jmsComponent;
+        this.injectionClazz = injectionClazz;
     }
 
     public Object invoke(Object instance, Method method, Method proceed, Object[] arguments) throws Exception
@@ -67,12 +70,12 @@
         }
         
         if (!ClassUtil.isObjectMethod(method.getName()))
-        {
+        {            
             Object cf = null;
 
             if (this.jmsObject == null)
             {
-                Class<?> jmsClazz = this.jmsComponent.getJmsClass();
+                Class<?> jmsClazz = this.injectionClazz;
 
                 if (cf == null && Connection.class.isAssignableFrom(jmsClazz))
                 {
@@ -272,7 +275,7 @@
             return dests.get(jndiName);
         }
 
-        Destination res = (Destination) JmsUtil.getInstanceFromJndi(this.jmsComponent.getJmsModel(), this.jmsComponent.getJmsClass());
+        Destination res = (Destination) JmsUtil.getInstanceFromJndi(this.jmsComponent.getJmsModel(), this.injectionClazz);
 
         dests.put(jndiName, res);
 

Modified: incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsUtil.java
URL: http://svn.apache.org/viewvc/incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsUtil.java?rev=804761&r1=804760&r2=804761&view=diff
==============================================================================
--- incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsUtil.java (original)
+++ incubator/openwebbeans/trunk/webbeans-jms/src/main/java/org/apache/webbeans/jms/util/JmsUtil.java Sun Aug 16 20:17:50 2009
@@ -42,7 +42,7 @@
 import org.apache.webbeans.exception.WebBeansCreationException;
 import org.apache.webbeans.exception.WebBeansException;
 import org.apache.webbeans.jms.JMSModel;
-import org.apache.webbeans.jms.component.JmsComponentImpl;
+import org.apache.webbeans.jms.component.JmsBean;
 import org.apache.webbeans.spi.JNDIService;
 import org.apache.webbeans.spi.ServiceLoader;
 import org.apache.webbeans.util.Asserts;
@@ -157,28 +157,27 @@
         
     }
     
-    @SuppressWarnings("unchecked")
-    public static <T> T createNewJmsProxy(JmsComponentImpl<T> jmsComponent)
+    /**
+     * Gets jms related object.
+     * @param jmsComponent jms bean
+     * @param intf injection point class
+     * @return proxy object
+     */
+    public static Object createNewJmsProxy(JmsBean<?> jmsComponent, Class<?> intf)
     {
-        T result = null;
+       Object result = null;
 
         try
         {
             ProxyFactory pf = new ProxyFactory();
-            pf.setInterfaces(new Class<?>[] {Closable.class,
+            pf.setInterfaces(new Class<?>[] {
+                    Closable.class,
                     Serializable.class,
-                    QueueConnection.class,
-                    Queue.class,
-                    QueueSender.class,
-                    QueueSession.class,
-                    Topic.class,
-                    TopicConnection.class,
-                    TopicSession.class,
-                    TopicPublisher.class});
+                    intf});
             
-            pf.setHandler(new JmsProxyHandler(jmsComponent));
+            pf.setHandler(new JmsProxyHandler(jmsComponent,intf));
 
-            result = (T)pf.createClass().newInstance();
+            result = pf.createClass().newInstance();
 
         }
         catch (Exception e)
@@ -189,6 +188,4 @@
         return result;
     }
     
-    
- 
-}
+}
\ No newline at end of file