Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2008, Red Hat, Inc. and/or its affiliates, and individual contributors
   * by the @authors tag. See the copyright.txt in the distribution for a
   * full listing of individual contributors.
   *
   * Licensed 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.jboss.weld.bean.proxy;
 
 
 
 
 import  edu.umd.cs.findbugs.annotations.SuppressWarnings;

A general purpose MethodHandler for all proxies which routes calls to the BeanInstance associated with this proxy or handler.

Author(s):
David Allen
 
 @SuppressWarnings(value = "SE_TRANSIENT_FIELD_NOT_RESTORED", justification = "bean field is loaded lazily")
 public class ProxyMethodHandler implements MethodHandlerSerializable {
 
     private static final long serialVersionUID = 5293834510764991583L;
 
     // The bean instance to forward calls to
     private final BeanInstance beanInstance;
 
     private final BeanIdentifier beanId;
 
     private transient Bean<?> bean;
 
     private final String contextId;
 
     public ProxyMethodHandler(String contextIdBeanInstance beanInstanceBean<?> bean) {
         this. = beanInstance;
         this. = bean;
         this. = contextId;
         if (bean instanceof CommonBean<?>) {
             this. = ((CommonBean<?>) bean).getIdentifier();
         } else if (bean instanceof PassivationCapable) {
             this. = new StringBeanIdentifier(((PassivationCapablebean).getId());
         } else {
             this. = null;
         }
     }
 
     /* (non-Javadoc)
     * @see javassist.util.proxy.MethodHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.reflect.Method, java.lang.Object[])
     */
     public Object invoke(Object selfMethod thisMethodMethod proceedObject[] argsthrows Throwable {
         if (thisMethod == null) {
             if ( == null) {
                 throw ..beanInstanceNotSetOnProxy(getBean());
             }
             return .getInstance();
         }
         ..methodHandlerProcessingCall(thisMethodself.getClass());
         if (thisMethod.getDeclaringClass().equals(TargetInstanceProxy.class)) {
             if ( == null) {
                 throw ..beanInstanceNotSetOnProxy(getBean());
             }
             if (thisMethod.getName().equals("getTargetInstance")) {
                 return .getInstance();
             } else if (thisMethod.getName().equals("getTargetClass")) {
                 return .getInstanceType();
             } else {
                 return null;
             }
         } else if (thisMethod.getName().equals("_initMH")) {
             ..settingNewMethodHandler(args[0], self.getClass());
             return new ProxyMethodHandler(new TargetBeanInstance(args[0]), getBean());
         } else {
             if ( == null) {
                 throw ..beanInstanceNotSetOnProxy(getBean());
             }
             Object instance = .getInstance();
            Object result = .invoke(instancethisMethodargs);
            // if the method returns this and the return type matches the proxy type, return the proxy instead
            // to prevent the bean instance escaping
            if (result != null && result == instance && (thisMethod.getReturnType().isAssignableFrom(self.getClass()))) {
                return self;
            }
            return result;
        }
    }
    public Bean<?> getBean() {
        if ( == null) {
            if ( == null) {
                throw ..proxyHandlerSerializedForNonSerializableBean();
            }
             = Container.instance().services().get(ContextualStore.class).<Bean<Object>, Object>getContextual();
        }
        return ;
    }
New to GrepCode? Check out our FAQ X