/*
* 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)