Mega Code Archive

 
Categories / Java / EJB3
 

Annotation override interceptor

/*  * 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<String> upperList = sless.getInterceptorNamesFor("initUpperCase");   printList("initUpperCase", upperList);   try {       sless.isOddNumber(7);         } catch (Exception  badEx) {     badEx.printStackTrace();         }   List<String> isOddNumberList = sless.getInterceptorNamesFor("isOddNumber");   printList("isOddNumber", isOddNumberList);     }     private static void printList(String msg, List<String> 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<String, List<String>> interceptorNamesForMethod             = new HashMap<String, List<String>>();     //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<String, Object> ctxData = invCtx.getContextData();         List<String> interceptorNameList = (List<String>) ctxData.get(KEY);         if (interceptorNameList == null) {             interceptorNameList = new ArrayList<String>();             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<String> 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<String> 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<String, Object> ctxData = ctx.getContextData();         List<String> interceptorNameList = (List<String>)             ctxData.get("interceptorNameList");         if (interceptorNameList == null) {             interceptorNameList = new ArrayList<String>();             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)