EJB3 Java

/*
 * The contents of this file are subject to the terms
 * of the Common Development and Distribution License
 * (the License).  You may not use this file except in
 * compliance with the License.
 *
 * You can obtain a copy of the license at
 * https://glassfish.dev.java.net/public/CDDLv1.0.html or
 * glassfish/bootstrap/legal/CDDLv1.0.txt.
 * See the License for the specific language governing
 * permissions and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL
 * Header Notice in each file and include the License file
 * at glassfish/bootstrap/legal/CDDLv1.0.txt.
 * If applicable, add the following below the CDDL Header,
 * with the fields enclosed by brackets [] replaced by
 * you own identifying information:
 * "Portions Copyrighted [year] [name of copyright owner]"
 *
 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
 */
package enterprise.annotation_override_interceptor_appclient;
import java.util.List;
import javax.ejb.EJB;
import enterprise.annotation_override_interceptor_ejb.*;
public class StatelessSessionAppClient {
    @EJB
    private static StatelessSession sless;
    public static void main(String args[]) {
  try {
            sless.initUpperCase("hello, World!!");
            sless.initLowerCase("Build.xml");
        } catch (Exception  badEx) {
    badEx.printStackTrace();
        }
        List upperList = sless.getInterceptorNamesFor("initUpperCase");
  printList("initUpperCase", upperList);
  try {
      sless.isOddNumber(7);
        } catch (Exception  badEx) {
    badEx.printStackTrace();
        }
  List isOddNumberList = sless.getInterceptorNamesFor("isOddNumber");
  printList("isOddNumber", isOddNumberList);
    }
    private static void printList(String msg, List list) {
  System.out.print("Interceptors invoked for " + msg + "(): ");
  String delimiter = "";
        for (String str : list) {
            System.out.print(delimiter + str);
      delimiter = ", ";
        }
  System.out.println("}");
    }
}
/*
 * The contents of this file are subject to the terms
 * of the Common Development and Distribution License
 * (the License).  You may not use this file except in
 * compliance with the License.
 *
 * You can obtain a copy of the license at
 * https://glassfish.dev.java.net/public/CDDLv1.0.html or
 * glassfish/bootstrap/legal/CDDLv1.0.txt.
 * See the License for the specific language governing
 * permissions and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL
 * Header Notice in each file and include the License file
 * at glassfish/bootstrap/legal/CDDLv1.0.txt.
 * If applicable, add the following below the CDDL Header,
 * with the fields enclosed by brackets [] replaced by
 * you own identifying information:
 * "Portions Copyrighted [year] [name of copyright owner]"
 *
 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
 */
package enterprise.annotation_override_interceptor_ejb;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import javax.ejb.Stateless;
import javax.interceptor.Interceptors;
import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;
// This bean uses two interceptors to validate
// the input to its (only) business method.
// Note that a single interceptor would suffice
// but to demonstrate the use of interceptor
// chaining, we use two interceptors
@Stateless
@Interceptors({ArgumentsChecker.class})
public class StatelessSessionBean
    implements StatelessSession {
    private static final String KEY = "interceptorNameList";
    private static Map> interceptorNamesForMethod
            = new HashMap>();
    //The bean interceptor method just caches the interceptor names
    //  in a map which is queried in the getInterceptorNamesFor() method
    @AroundInvoke
    private Object intercept(InvocationContext invCtx)
      throws Exception {
  System.out.println("Entered aroundInvoke for Bean");
        Map ctxData = invCtx.getContextData();
        List interceptorNameList = (List) ctxData.get(KEY);
        if (interceptorNameList == null) {
            interceptorNameList = new ArrayList();
            ctxData.put(KEY, interceptorNameList);
        }
        //Add this interceptor also to the list of interceptors invoked!!
        interceptorNameList.add("StatelessSessionBean");
        
        //Cache the interceptor name list in a map that can be queried later
        String methodName = invCtx.getMethod().getName();
  synchronized (interceptorNamesForMethod) {
            interceptorNamesForMethod.put(methodName, interceptorNameList);
  }
  return invCtx.proceed();
    }
    // This business method is called after the interceptor methods.
    // Hence it is guaranteed that the argument to this method is not null
    // and it starts with a letter
    public String initUpperCase(String val) {
        String first = val.substring(0, 1);
        return first.toUpperCase() + val.substring(1);
    }
    // This business method is called after the interceptor methods.
    // Hence it is guaranteed that the argument to this method is not null
    // and it starts with a letter
    public String initLowerCase(String val) {
        String first = val.substring(0, 1);
        return first.toLowerCase() + val.substring(1);
    }
    //Note:-
    //  Since this method takes a int as a parameter, the ArgumentChecker
    //  inteceptor is disabled in the ejb-jar.xml for this method.
    public boolean isOddNumber(int val) {
        return ((val % 2) != 0);
    }
    /**
     * Only the default interceptor is used to intercept this method
     */
    public List getInterceptorNamesFor(String methodName) {
        return interceptorNamesForMethod.get(methodName);
    }
}
/*
 * The contents of this file are subject to the terms
 * of the Common Development and Distribution License
 * (the License).  You may not use this file except in
 * compliance with the License.
 *
 * You can obtain a copy of the license at
 * https://glassfish.dev.java.net/public/CDDLv1.0.html or
 * glassfish/bootstrap/legal/CDDLv1.0.txt.
 * See the License for the specific language governing
 * permissions and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL
 * Header Notice in each file and include the License file
 * at glassfish/bootstrap/legal/CDDLv1.0.txt.
 * If applicable, add the following below the CDDL Header,
 * with the fields enclosed by brackets [] replaced by
 * you own identifying information:
 * "Portions Copyrighted [year] [name of copyright owner]"
 *
 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
 */
package enterprise.annotation_override_interceptor_ejb;
import java.util.List;
import javax.ejb.Remote;
@Remote
public interface StatelessSession {
    public String initUpperCase(String val)
        throws BadArgumentException;
    public String initLowerCase(String val)
        throws BadArgumentException;
    public boolean isOddNumber(int val)
        throws BadArgumentException;
    public List getInterceptorNamesFor(String methodName);
}
/*
 * The contents of this file are subject to the terms
 * of the Common Development and Distribution License
 * (the License).  You may not use this file except in
 * compliance with the License.
 *
 * You can obtain a copy of the license at
 * https://glassfish.dev.java.net/public/CDDLv1.0.html or
 * glassfish/bootstrap/legal/CDDLv1.0.txt.
 * See the License for the specific language governing
 * permissions and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL
 * Header Notice in each file and include the License file
 * at glassfish/bootstrap/legal/CDDLv1.0.txt.
 * If applicable, add the following below the CDDL Header,
 * with the fields enclosed by brackets [] replaced by
 * you own identifying information:
 * "Portions Copyrighted [year] [name of copyright owner]"
 *
 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
 */
package enterprise.annotation_override_interceptor_ejb;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.lang.reflect.Method;
import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;
/**
 * This is the default interceptor
 */
public class NullChecker {
    @AroundInvoke
    public Object checkIfNull(InvocationContext ctx)
        throws Exception {
        Map ctxData = ctx.getContextData();
        List interceptorNameList = (List)
            ctxData.get("interceptorNameList");
        if (interceptorNameList == null) {
            interceptorNameList = new ArrayList();
            ctxData.put("interceptorNameList", interceptorNameList);
        }
        //Now add this interceptor name to the list
        interceptorNameList.add("NullChecker");
        Method method = ctx.getMethod();
        Object param = ctx.getParameters()[0];
        if (param == null) {
            // An interceptor can throw any runtime exception or
            // application exceptions that are allowed in the
            // throws clause of the business method
            throw new BadArgumentException("Illegal argument: null");
        }
        // Proceed to the next interceptor OR business method
        return ctx.proceed();
    }
}
           
EJB-annotation-override-interceptor-ear.zip( 27 k)