<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FEJB3%2FInterceptor</id>
		<title>Java/EJB3/Interceptor - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FEJB3%2FInterceptor"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/EJB3/Interceptor&amp;action=history"/>
		<updated>2026-04-06T20:53:31Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/EJB3/Interceptor&amp;diff=7707&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/EJB3/Interceptor&amp;diff=7707&amp;oldid=prev"/>
				<updated>2010-06-01T06:50:09Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:50, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/EJB3/Interceptor&amp;diff=7706&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/EJB3/Interceptor&amp;diff=7706&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:45Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== annotation override interceptor ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * The contents of this file are subject to the terms&lt;br /&gt;
 * of the Common Development and Distribution License&lt;br /&gt;
 * (the License).  You may not use this file except in&lt;br /&gt;
 * compliance with the License.&lt;br /&gt;
 *&lt;br /&gt;
 * You can obtain a copy of the license at&lt;br /&gt;
 * https://glassfish.dev.java.net/public/CDDLv1.0.html or&lt;br /&gt;
 * glassfish/bootstrap/legal/CDDLv1.0.txt.&lt;br /&gt;
 * See the License for the specific language governing&lt;br /&gt;
 * permissions and limitations under the License.&lt;br /&gt;
 *&lt;br /&gt;
 * When distributing Covered Code, include this CDDL&lt;br /&gt;
 * Header Notice in each file and include the License file&lt;br /&gt;
 * at glassfish/bootstrap/legal/CDDLv1.0.txt.&lt;br /&gt;
 * If applicable, add the following below the CDDL Header,&lt;br /&gt;
 * with the fields enclosed by brackets [] replaced by&lt;br /&gt;
 * you own identifying information:&lt;br /&gt;
 * &amp;quot;Portions Copyrighted [year] [name of copyright owner]&amp;quot;&lt;br /&gt;
 *&lt;br /&gt;
 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.&lt;br /&gt;
 */&lt;br /&gt;
package enterprise.annotation_override_interceptor_appclient;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import javax.ejb.EJB;&lt;br /&gt;
import enterprise.annotation_override_interceptor_ejb.*;&lt;br /&gt;
public class StatelessSessionAppClient {&lt;br /&gt;
    @EJB&lt;br /&gt;
    private static StatelessSession sless;&lt;br /&gt;
    public static void main(String args[]) {&lt;br /&gt;
  try {&lt;br /&gt;
            sless.initUpperCase(&amp;quot;hello, World!!&amp;quot;);&lt;br /&gt;
            sless.initLowerCase(&amp;quot;Build.xml&amp;quot;);&lt;br /&gt;
        } catch (Exception  badEx) {&lt;br /&gt;
    badEx.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
        List&amp;lt;String&amp;gt; upperList = sless.getInterceptorNamesFor(&amp;quot;initUpperCase&amp;quot;);&lt;br /&gt;
  printList(&amp;quot;initUpperCase&amp;quot;, upperList);&lt;br /&gt;
  try {&lt;br /&gt;
      sless.isOddNumber(7);&lt;br /&gt;
        } catch (Exception  badEx) {&lt;br /&gt;
    badEx.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
  List&amp;lt;String&amp;gt; isOddNumberList = sless.getInterceptorNamesFor(&amp;quot;isOddNumber&amp;quot;);&lt;br /&gt;
  printList(&amp;quot;isOddNumber&amp;quot;, isOddNumberList);&lt;br /&gt;
    }&lt;br /&gt;
    private static void printList(String msg, List&amp;lt;String&amp;gt; list) {&lt;br /&gt;
  System.out.print(&amp;quot;Interceptors invoked for &amp;quot; + msg + &amp;quot;(): &amp;quot;);&lt;br /&gt;
  String delimiter = &amp;quot;&amp;quot;;&lt;br /&gt;
        for (String str : list) {&lt;br /&gt;
            System.out.print(delimiter + str);&lt;br /&gt;
      delimiter = &amp;quot;, &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
  System.out.println(&amp;quot;}&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * The contents of this file are subject to the terms&lt;br /&gt;
 * of the Common Development and Distribution License&lt;br /&gt;
 * (the License).  You may not use this file except in&lt;br /&gt;
 * compliance with the License.&lt;br /&gt;
 *&lt;br /&gt;
 * You can obtain a copy of the license at&lt;br /&gt;
 * https://glassfish.dev.java.net/public/CDDLv1.0.html or&lt;br /&gt;
 * glassfish/bootstrap/legal/CDDLv1.0.txt.&lt;br /&gt;
 * See the License for the specific language governing&lt;br /&gt;
 * permissions and limitations under the License.&lt;br /&gt;
 *&lt;br /&gt;
 * When distributing Covered Code, include this CDDL&lt;br /&gt;
 * Header Notice in each file and include the License file&lt;br /&gt;
 * at glassfish/bootstrap/legal/CDDLv1.0.txt.&lt;br /&gt;
 * If applicable, add the following below the CDDL Header,&lt;br /&gt;
 * with the fields enclosed by brackets [] replaced by&lt;br /&gt;
 * you own identifying information:&lt;br /&gt;
 * &amp;quot;Portions Copyrighted [year] [name of copyright owner]&amp;quot;&lt;br /&gt;
 *&lt;br /&gt;
 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.&lt;br /&gt;
 */&lt;br /&gt;
package enterprise.annotation_override_interceptor_ejb;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Map;&lt;br /&gt;
import java.util.HashMap;&lt;br /&gt;
import javax.ejb.Stateless;&lt;br /&gt;
import javax.interceptor.Interceptors;&lt;br /&gt;
import javax.interceptor.AroundInvoke;&lt;br /&gt;
import javax.interceptor.InvocationContext;&lt;br /&gt;
// This bean uses two interceptors to validate&lt;br /&gt;
// the input to its (only) business method.&lt;br /&gt;
// Note that a single interceptor would suffice&lt;br /&gt;
// but to demonstrate the use of interceptor&lt;br /&gt;
// chaining, we use two interceptors&lt;br /&gt;
@Stateless&lt;br /&gt;
@Interceptors({ArgumentsChecker.class})&lt;br /&gt;
public class StatelessSessionBean&lt;br /&gt;
    implements StatelessSession {&lt;br /&gt;
    private static final String KEY = &amp;quot;interceptorNameList&amp;quot;;&lt;br /&gt;
    private static Map&amp;lt;String, List&amp;lt;String&amp;gt;&amp;gt; interceptorNamesForMethod&lt;br /&gt;
            = new HashMap&amp;lt;String, List&amp;lt;String&amp;gt;&amp;gt;();&lt;br /&gt;
    //The bean interceptor method just caches the interceptor names&lt;br /&gt;
    //  in a map which is queried in the getInterceptorNamesFor() method&lt;br /&gt;
    @AroundInvoke&lt;br /&gt;
    private Object intercept(InvocationContext invCtx)&lt;br /&gt;
      throws Exception {&lt;br /&gt;
  System.out.println(&amp;quot;Entered aroundInvoke for Bean&amp;quot;);&lt;br /&gt;
        Map&amp;lt;String, Object&amp;gt; ctxData = invCtx.getContextData();&lt;br /&gt;
        List&amp;lt;String&amp;gt; interceptorNameList = (List&amp;lt;String&amp;gt;) ctxData.get(KEY);&lt;br /&gt;
        if (interceptorNameList == null) {&lt;br /&gt;
            interceptorNameList = new ArrayList&amp;lt;String&amp;gt;();&lt;br /&gt;
            ctxData.put(KEY, interceptorNameList);&lt;br /&gt;
        }&lt;br /&gt;
        //Add this interceptor also to the list of interceptors invoked!!&lt;br /&gt;
        interceptorNameList.add(&amp;quot;StatelessSessionBean&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        //Cache the interceptor name list in a map that can be queried later&lt;br /&gt;
        String methodName = invCtx.getMethod().getName();&lt;br /&gt;
  synchronized (interceptorNamesForMethod) {&lt;br /&gt;
            interceptorNamesForMethod.put(methodName, interceptorNameList);&lt;br /&gt;
  }&lt;br /&gt;
  return invCtx.proceed();&lt;br /&gt;
    }&lt;br /&gt;
    // This business method is called after the interceptor methods.&lt;br /&gt;
    // Hence it is guaranteed that the argument to this method is not null&lt;br /&gt;
    // and it starts with a letter&lt;br /&gt;
    public String initUpperCase(String val) {&lt;br /&gt;
        String first = val.substring(0, 1);&lt;br /&gt;
        return first.toUpperCase() + val.substring(1);&lt;br /&gt;
    }&lt;br /&gt;
    // This business method is called after the interceptor methods.&lt;br /&gt;
    // Hence it is guaranteed that the argument to this method is not null&lt;br /&gt;
    // and it starts with a letter&lt;br /&gt;
    public String initLowerCase(String val) {&lt;br /&gt;
        String first = val.substring(0, 1);&lt;br /&gt;
        return first.toLowerCase() + val.substring(1);&lt;br /&gt;
    }&lt;br /&gt;
    //Note:-&lt;br /&gt;
    //  Since this method takes a int as a parameter, the ArgumentChecker&lt;br /&gt;
    //  inteceptor is disabled in the ejb-jar.xml for this method.&lt;br /&gt;
    public boolean isOddNumber(int val) {&lt;br /&gt;
        return ((val % 2) != 0);&lt;br /&gt;
    }&lt;br /&gt;
    /**&lt;br /&gt;
     * Only the default interceptor is used to intercept this method&lt;br /&gt;
     */&lt;br /&gt;
    public List&amp;lt;String&amp;gt; getInterceptorNamesFor(String methodName) {&lt;br /&gt;
        return interceptorNamesForMethod.get(methodName);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
 * The contents of this file are subject to the terms&lt;br /&gt;
 * of the Common Development and Distribution License&lt;br /&gt;
 * (the License).  You may not use this file except in&lt;br /&gt;
 * compliance with the License.&lt;br /&gt;
 *&lt;br /&gt;
 * You can obtain a copy of the license at&lt;br /&gt;
 * https://glassfish.dev.java.net/public/CDDLv1.0.html or&lt;br /&gt;
 * glassfish/bootstrap/legal/CDDLv1.0.txt.&lt;br /&gt;
 * See the License for the specific language governing&lt;br /&gt;
 * permissions and limitations under the License.&lt;br /&gt;
 *&lt;br /&gt;
 * When distributing Covered Code, include this CDDL&lt;br /&gt;
 * Header Notice in each file and include the License file&lt;br /&gt;
 * at glassfish/bootstrap/legal/CDDLv1.0.txt.&lt;br /&gt;
 * If applicable, add the following below the CDDL Header,&lt;br /&gt;
 * with the fields enclosed by brackets [] replaced by&lt;br /&gt;
 * you own identifying information:&lt;br /&gt;
 * &amp;quot;Portions Copyrighted [year] [name of copyright owner]&amp;quot;&lt;br /&gt;
 *&lt;br /&gt;
 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.&lt;br /&gt;
 */&lt;br /&gt;
package enterprise.annotation_override_interceptor_ejb;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import javax.ejb.Remote;&lt;br /&gt;
@Remote&lt;br /&gt;
public interface StatelessSession {&lt;br /&gt;
    public String initUpperCase(String val)&lt;br /&gt;
        throws BadArgumentException;&lt;br /&gt;
    public String initLowerCase(String val)&lt;br /&gt;
        throws BadArgumentException;&lt;br /&gt;
    public boolean isOddNumber(int val)&lt;br /&gt;
        throws BadArgumentException;&lt;br /&gt;
    public List&amp;lt;String&amp;gt; getInterceptorNamesFor(String methodName);&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
 * The contents of this file are subject to the terms&lt;br /&gt;
 * of the Common Development and Distribution License&lt;br /&gt;
 * (the License).  You may not use this file except in&lt;br /&gt;
 * compliance with the License.&lt;br /&gt;
 *&lt;br /&gt;
 * You can obtain a copy of the license at&lt;br /&gt;
 * https://glassfish.dev.java.net/public/CDDLv1.0.html or&lt;br /&gt;
 * glassfish/bootstrap/legal/CDDLv1.0.txt.&lt;br /&gt;
 * See the License for the specific language governing&lt;br /&gt;
 * permissions and limitations under the License.&lt;br /&gt;
 *&lt;br /&gt;
 * When distributing Covered Code, include this CDDL&lt;br /&gt;
 * Header Notice in each file and include the License file&lt;br /&gt;
 * at glassfish/bootstrap/legal/CDDLv1.0.txt.&lt;br /&gt;
 * If applicable, add the following below the CDDL Header,&lt;br /&gt;
 * with the fields enclosed by brackets [] replaced by&lt;br /&gt;
 * you own identifying information:&lt;br /&gt;
 * &amp;quot;Portions Copyrighted [year] [name of copyright owner]&amp;quot;&lt;br /&gt;
 *&lt;br /&gt;
 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.&lt;br /&gt;
 */&lt;br /&gt;
package enterprise.annotation_override_interceptor_ejb;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Map;&lt;br /&gt;
import java.lang.reflect.Method;&lt;br /&gt;
import javax.interceptor.AroundInvoke;&lt;br /&gt;
import javax.interceptor.InvocationContext;&lt;br /&gt;
/**&lt;br /&gt;
 * This is the default interceptor&lt;br /&gt;
 */&lt;br /&gt;
public class NullChecker {&lt;br /&gt;
    @AroundInvoke&lt;br /&gt;
    public Object checkIfNull(InvocationContext ctx)&lt;br /&gt;
        throws Exception {&lt;br /&gt;
        Map&amp;lt;String, Object&amp;gt; ctxData = ctx.getContextData();&lt;br /&gt;
        List&amp;lt;String&amp;gt; interceptorNameList = (List&amp;lt;String&amp;gt;)&lt;br /&gt;
            ctxData.get(&amp;quot;interceptorNameList&amp;quot;);&lt;br /&gt;
        if (interceptorNameList == null) {&lt;br /&gt;
            interceptorNameList = new ArrayList&amp;lt;String&amp;gt;();&lt;br /&gt;
            ctxData.put(&amp;quot;interceptorNameList&amp;quot;, interceptorNameList);&lt;br /&gt;
        }&lt;br /&gt;
        //Now add this interceptor name to the list&lt;br /&gt;
        interceptorNameList.add(&amp;quot;NullChecker&amp;quot;);&lt;br /&gt;
        Method method = ctx.getMethod();&lt;br /&gt;
        Object param = ctx.getParameters()[0];&lt;br /&gt;
        if (param == null) {&lt;br /&gt;
            // An interceptor can throw any runtime exception or&lt;br /&gt;
            // application exceptions that are allowed in the&lt;br /&gt;
            // throws clause of the business method&lt;br /&gt;
            throw new BadArgumentException(&amp;quot;Illegal argument: null&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        // Proceed to the next interceptor OR business method&lt;br /&gt;
        return ctx.proceed();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
           &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Around InvokeMethod ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Employee.java&lt;br /&gt;
import javax.persistence.Entity;&lt;br /&gt;
import javax.persistence.EntityListeners;&lt;br /&gt;
import javax.persistence.GeneratedValue;&lt;br /&gt;
import javax.persistence.Id;&lt;br /&gt;
import javax.persistence.PostRemove;&lt;br /&gt;
@Entity&lt;br /&gt;
public class Employee implements java.io.Serializable {&lt;br /&gt;
  private int id;&lt;br /&gt;
  private String firstName;&lt;br /&gt;
  private String lastName;&lt;br /&gt;
  @Id&lt;br /&gt;
  @GeneratedValue&lt;br /&gt;
  public int getId() {&lt;br /&gt;
    return id;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  @PostRemove&lt;br /&gt;
  public void postRemove()&lt;br /&gt;
  {&lt;br /&gt;
     System.out.println(&amp;quot;@PostRemove&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void setId(int id) {&lt;br /&gt;
    this.id = id;&lt;br /&gt;
  }&lt;br /&gt;
  public String getFirstName() {&lt;br /&gt;
    return firstName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setFirstName(String first) {&lt;br /&gt;
    this.firstName = first;&lt;br /&gt;
  }&lt;br /&gt;
  public String getLastName() {&lt;br /&gt;
    return lastName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setLastName(String last) {&lt;br /&gt;
    this.lastName = last;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: EmployeeService.java&lt;br /&gt;
import javax.ejb.Stateless;&lt;br /&gt;
import javax.interceptor.Interceptors;&lt;br /&gt;
@Stateless&lt;br /&gt;
public class EmployeeService implements EmployeeServiceLocal, EmployeeServiceRemote {&lt;br /&gt;
  public EmployeeService() {&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  @Interceptors(Profiler.class)&lt;br /&gt;
  public void doAction() {&lt;br /&gt;
    System.out.println(&amp;quot;do Action&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: EmployeeServiceLocal.java&lt;br /&gt;
&lt;br /&gt;
import java.util.Collection;&lt;br /&gt;
import javax.ejb.Local;&lt;br /&gt;
@Local&lt;br /&gt;
public interface EmployeeServiceLocal {&lt;br /&gt;
    public void doAction();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: EmployeeServiceRemote.java&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
import java.util.Collection;&lt;br /&gt;
import javax.ejb.Remote;&lt;br /&gt;
@Remote&lt;br /&gt;
public interface EmployeeServiceRemote{&lt;br /&gt;
  public void doAction();  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: Profiler.java&lt;br /&gt;
import javax.interceptor.AroundInvoke;&lt;br /&gt;
import javax.interceptor.InvocationContext;&lt;br /&gt;
public class Profiler {&lt;br /&gt;
  @AroundInvoke&lt;br /&gt;
  public Object profile(InvocationContext invocation) throws Exception {&lt;br /&gt;
    long startTime = System.currentTimeMillis();&lt;br /&gt;
    try {&lt;br /&gt;
      return invocation.proceed();&lt;br /&gt;
    } finally {&lt;br /&gt;
      long endTime = System.currentTimeMillis() - startTime;&lt;br /&gt;
      System.out.println(&amp;quot;Method &amp;quot; + invocation.getMethod() + &amp;quot; took &amp;quot; + endTime + &amp;quot; (ms)&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: jndi.properties&lt;br /&gt;
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory&lt;br /&gt;
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces&lt;br /&gt;
java.naming.provider.url=localhost:1099&lt;br /&gt;
&lt;br /&gt;
File: Main.java&lt;br /&gt;
import java.util.Date;&lt;br /&gt;
import javax.naming.InitialContext;&lt;br /&gt;
&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] a) throws Exception {&lt;br /&gt;
    EmployeeServiceRemote service = null;&lt;br /&gt;
    // Context compEnv = (Context) new InitialContext().lookup(&amp;quot;java:comp/env&amp;quot;);&lt;br /&gt;
    // service = (HelloService)new InitialContext().lookup(&amp;quot;java:comp/env/ejb/HelloService&amp;quot;);&lt;br /&gt;
    service = (EmployeeServiceRemote) new InitialContext().lookup(&amp;quot;EmployeeService/remote&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    service.doAction();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EJB Tutorial from JBoss: Callback Listener ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: CustomerCallbackListener.java&lt;br /&gt;
/*&lt;br /&gt;
 * JBoss, Home of Professional Open Source.&lt;br /&gt;
 * Copyright 2006, Red Hat Middleware LLC, and individual contributors&lt;br /&gt;
 * as indicated by the @author tags. See the copyright.txt file in the&lt;br /&gt;
 * distribution for a full listing of individual contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * This is free software; you can redistribute it and/or modify it&lt;br /&gt;
 * under the terms of the GNU Lesser General Public License as&lt;br /&gt;
 * published by the Free Software Foundation; either version 2.1 of&lt;br /&gt;
 * the License, or (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU&lt;br /&gt;
 * Lesser General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
 * License along with this software; if not, write to the Free&lt;br /&gt;
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA&lt;br /&gt;
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.&lt;br /&gt;
 */&lt;br /&gt;
package org.jboss.tutorial.callback.bean;&lt;br /&gt;
import javax.persistence.PreRemove;&lt;br /&gt;
import javax.persistence.PostRemove;&lt;br /&gt;
import javax.persistence.PreUpdate;&lt;br /&gt;
import javax.persistence.PostUpdate;&lt;br /&gt;
import javax.persistence.PostLoad;&lt;br /&gt;
import javax.persistence.PrePersist;&lt;br /&gt;
import javax.persistence.PostPersist;&lt;br /&gt;
/**&lt;br /&gt;
 * @author &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EJB Tutorial from JBoss: Interceptor ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: AccountsCancelInterceptor.java&lt;br /&gt;
/*&lt;br /&gt;
 * JBoss, Home of Professional Open Source.&lt;br /&gt;
 * Copyright 2006, Red Hat Middleware LLC, and individual contributors&lt;br /&gt;
 * as indicated by the @author tags. See the copyright.txt file in the&lt;br /&gt;
 * distribution for a full listing of individual contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * This is free software; you can redistribute it and/or modify it&lt;br /&gt;
 * under the terms of the GNU Lesser General Public License as&lt;br /&gt;
 * published by the Free Software Foundation; either version 2.1 of&lt;br /&gt;
 * the License, or (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This software is distributed in the hope that it will be useful,&lt;br /&gt;
 * but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU&lt;br /&gt;
 * Lesser General Public License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
 * License along with this software; if not, write to the Free&lt;br /&gt;
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA&lt;br /&gt;
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.&lt;br /&gt;
 */&lt;br /&gt;
package org.jboss.tutorial.interceptor.bean;&lt;br /&gt;
import javax.interceptor.InvocationContext;&lt;br /&gt;
import javax.jms.JMSException;&lt;br /&gt;
import javax.jms.Message;&lt;br /&gt;
import javax.jms.Queue;&lt;br /&gt;
import javax.jms.QueueConnection;&lt;br /&gt;
import javax.jms.QueueConnectionFactory;&lt;br /&gt;
import javax.jms.QueueSender;&lt;br /&gt;
import javax.jms.QueueSession;&lt;br /&gt;
import javax.jms.Session;&lt;br /&gt;
/**&lt;br /&gt;
 * &lt;br /&gt;
 * @author &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get Ejb Info From InvocationContext ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Employee.java&lt;br /&gt;
import javax.persistence.Entity;&lt;br /&gt;
import javax.persistence.EntityListeners;&lt;br /&gt;
import javax.persistence.GeneratedValue;&lt;br /&gt;
import javax.persistence.Id;&lt;br /&gt;
import javax.persistence.PostRemove;&lt;br /&gt;
@Entity&lt;br /&gt;
public class Employee implements java.io.Serializable {&lt;br /&gt;
  private int id;&lt;br /&gt;
  private String firstName;&lt;br /&gt;
  private String lastName;&lt;br /&gt;
  @Id&lt;br /&gt;
  @GeneratedValue&lt;br /&gt;
  public int getId() {&lt;br /&gt;
    return id;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  @PostRemove&lt;br /&gt;
  public void postRemove()&lt;br /&gt;
  {&lt;br /&gt;
     System.out.println(&amp;quot;@PostRemove&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void setId(int id) {&lt;br /&gt;
    this.id = id;&lt;br /&gt;
  }&lt;br /&gt;
  public String getFirstName() {&lt;br /&gt;
    return firstName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setFirstName(String first) {&lt;br /&gt;
    this.firstName = first;&lt;br /&gt;
  }&lt;br /&gt;
  public String getLastName() {&lt;br /&gt;
    return lastName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setLastName(String last) {&lt;br /&gt;
    this.lastName = last;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: EmployeeBean.java&lt;br /&gt;
import javax.ejb.Stateful;&lt;br /&gt;
import javax.interceptor.AroundInvoke;&lt;br /&gt;
import javax.interceptor.InvocationContext;&lt;br /&gt;
@Stateful&lt;br /&gt;
public class EmployeeBean implements EmployeeServiceLocal, EmployeeServiceRemote {&lt;br /&gt;
  public EmployeeBean() {&lt;br /&gt;
  }&lt;br /&gt;
  public void doAction() {&lt;br /&gt;
    System.out.println(&amp;quot;Processing...&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  @AroundInvoke&lt;br /&gt;
  public Object TimerLog(InvocationContext ctx) throws Exception {&lt;br /&gt;
    String beanClassName = ctx.getClass().getName();&lt;br /&gt;
    String businessMethodName = ctx.getMethod().getName();&lt;br /&gt;
    String target = beanClassName + &amp;quot;.&amp;quot; + businessMethodName;&lt;br /&gt;
    long startTime = System.currentTimeMillis();&lt;br /&gt;
    System.out.println(&amp;quot;Invoking &amp;quot; + target);&lt;br /&gt;
    try {&lt;br /&gt;
      return ctx.proceed();&lt;br /&gt;
    } finally {&lt;br /&gt;
      System.out.println(&amp;quot;Exiting &amp;quot; + target);&lt;br /&gt;
      long totalTime = System.currentTimeMillis() - startTime;&lt;br /&gt;
      System.out.println(&amp;quot;Business method &amp;quot; + businessMethodName + &amp;quot;in &amp;quot; + beanClassName + &amp;quot;takes &amp;quot;&lt;br /&gt;
          + totalTime + &amp;quot;ms to execute&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: EmployeeServiceLocal.java&lt;br /&gt;
import javax.ejb.Local;&lt;br /&gt;
import javax.ejb.Remote;&lt;br /&gt;
&lt;br /&gt;
@Local&lt;br /&gt;
public interface EmployeeServiceLocal{&lt;br /&gt;
  public void doAction();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: EmployeeServiceRemote.java&lt;br /&gt;
import javax.ejb.Remote;&lt;br /&gt;
@Remote&lt;br /&gt;
public interface EmployeeServiceRemote {&lt;br /&gt;
  public void doAction();&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: jndi.properties&lt;br /&gt;
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory&lt;br /&gt;
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces&lt;br /&gt;
java.naming.provider.url=localhost:1099&lt;br /&gt;
&lt;br /&gt;
File: Main.java&lt;br /&gt;
import javax.ejb.EJB;&lt;br /&gt;
import javax.naming.InitialContext;&lt;br /&gt;
public class Main {&lt;br /&gt;
  &lt;br /&gt;
  public static void main(String[] a) throws Exception {&lt;br /&gt;
    EmployeeServiceRemote service = null;&lt;br /&gt;
    // Context compEnv = (Context) new InitialContext().lookup(&amp;quot;java:comp/env&amp;quot;);&lt;br /&gt;
    // service = (HelloService)new InitialContext().lookup(&amp;quot;java:comp/env/ejb/HelloService&amp;quot;);&lt;br /&gt;
    service = (EmployeeServiceRemote) new InitialContext().lookup(&amp;quot;EmployeeBean/remote&amp;quot;);&lt;br /&gt;
    service.doAction();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Get Set Parameters In InvocationContext ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: EmployeeBean.java&lt;br /&gt;
&lt;br /&gt;
import javax.ejb.Stateless;&lt;br /&gt;
import javax.interceptor.Interceptors;&lt;br /&gt;
@Stateless&lt;br /&gt;
@Interceptors( { MyInterceptor.class })&lt;br /&gt;
public class EmployeeBean implements EmployeeServiceLocal, EmployeeServiceRemote {&lt;br /&gt;
  public EmployeeBean() {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public Long addBid(String userId,Long itemId,Double bidPrice) {&lt;br /&gt;
    System.out.println(&amp;quot;Bid for &amp;quot; + itemId + &amp;quot; received with price&amp;quot; + bidPrice);&lt;br /&gt;
    return 0L;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: EmployeeServiceLocal.java&lt;br /&gt;
&lt;br /&gt;
import javax.ejb.Local;&lt;br /&gt;
import javax.jws.WebParam;&lt;br /&gt;
@Local&lt;br /&gt;
public interface EmployeeServiceLocal {&lt;br /&gt;
  public Long addBid(String userId,Long itemId,Double bidPrice);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: EmployeeServiceRemote.java&lt;br /&gt;
import javax.ejb.Remote;&lt;br /&gt;
&lt;br /&gt;
@Remote&lt;br /&gt;
public interface EmployeeServiceRemote {&lt;br /&gt;
  public Long addBid(String userId,Long itemId,Double bidPrice);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: MyInterceptor.java&lt;br /&gt;
import javax.annotation.Resource;&lt;br /&gt;
import javax.interceptor.AroundInvoke;&lt;br /&gt;
import javax.interceptor.InvocationContext;&lt;br /&gt;
public class MyInterceptor {&lt;br /&gt;
  @Resource&lt;br /&gt;
  private javax.ejb.SessionContext ctx;&lt;br /&gt;
  @AroundInvoke&lt;br /&gt;
  public Object checkUserRole(InvocationContext ic) throws Exception {&lt;br /&gt;
    System.out.println(&amp;quot;Interceptor invoked for &amp;quot; + ic.getMethod().getName());&lt;br /&gt;
    if (ic.getMethod().getName().equals(&amp;quot;addBid&amp;quot;)&lt;br /&gt;
        &amp;amp;&amp;amp; (((String) (ic.getContextData().get(&amp;quot;MemberStatus&amp;quot;))).equals(&amp;quot;Gold&amp;quot;))) {&lt;br /&gt;
      Object[] params = ic.getParameters();&lt;br /&gt;
      params[2] = new Double((Double) params[2] * 0.99);&lt;br /&gt;
      System.out.println(&amp;quot;DiscountVerifier Reducing Price by 1 percent&amp;quot;);&lt;br /&gt;
      ic.setParameters(params);&lt;br /&gt;
    }&lt;br /&gt;
    return ic.proceed();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: Employee.java&lt;br /&gt;
&lt;br /&gt;
import javax.persistence.Entity;&lt;br /&gt;
import javax.persistence.EntityListeners;&lt;br /&gt;
import javax.persistence.GeneratedValue;&lt;br /&gt;
import javax.persistence.Id;&lt;br /&gt;
import javax.persistence.PostRemove;&lt;br /&gt;
@Entity&lt;br /&gt;
public class Employee implements java.io.Serializable {&lt;br /&gt;
  private int id;&lt;br /&gt;
  private String firstName;&lt;br /&gt;
  private String lastName;&lt;br /&gt;
  @Id&lt;br /&gt;
  @GeneratedValue&lt;br /&gt;
  public int getId() {&lt;br /&gt;
    return id;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  @PostRemove&lt;br /&gt;
  public void postRemove()&lt;br /&gt;
  {&lt;br /&gt;
     System.out.println(&amp;quot;@PostRemove&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void setId(int id) {&lt;br /&gt;
    this.id = id;&lt;br /&gt;
  }&lt;br /&gt;
  public String getFirstName() {&lt;br /&gt;
    return firstName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setFirstName(String first) {&lt;br /&gt;
    this.firstName = first;&lt;br /&gt;
  }&lt;br /&gt;
  public String getLastName() {&lt;br /&gt;
    return lastName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setLastName(String last) {&lt;br /&gt;
    this.lastName = last;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: Main.java&lt;br /&gt;
import javax.ejb.EJB;&lt;br /&gt;
import javax.naming.InitialContext;&lt;br /&gt;
&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] a) throws Exception {&lt;br /&gt;
    EmployeeServiceRemote service = null;&lt;br /&gt;
    // Context compEnv = (Context) new InitialContext().lookup(&amp;quot;java:comp/env&amp;quot;);&lt;br /&gt;
    // service = (HelloService)new&lt;br /&gt;
    // InitialContext().lookup(&amp;quot;java:comp/env/ejb/HelloService&amp;quot;);&lt;br /&gt;
    service = (EmployeeServiceRemote) new InitialContext().lookup(&amp;quot;EmployeeBean/remote&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    service.addBid(&amp;quot;userId&amp;quot;,1L,0.1);&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: jndi.properties&lt;br /&gt;
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory&lt;br /&gt;
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces&lt;br /&gt;
java.naming.provider.url=localhost:1099&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== interceptor stateless ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mark Interceptors For A Remote Method ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Employee.java&lt;br /&gt;
&lt;br /&gt;
import javax.persistence.Entity;&lt;br /&gt;
import javax.persistence.EntityListeners;&lt;br /&gt;
import javax.persistence.GeneratedValue;&lt;br /&gt;
import javax.persistence.Id;&lt;br /&gt;
import javax.persistence.PostRemove;&lt;br /&gt;
@Entity&lt;br /&gt;
public class Employee implements java.io.Serializable {&lt;br /&gt;
  private int id;&lt;br /&gt;
  private String firstName;&lt;br /&gt;
  private String lastName;&lt;br /&gt;
  @Id&lt;br /&gt;
  @GeneratedValue&lt;br /&gt;
  public int getId() {&lt;br /&gt;
    return id;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  @PostRemove&lt;br /&gt;
  public void postRemove()&lt;br /&gt;
  {&lt;br /&gt;
     System.out.println(&amp;quot;@PostRemove&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void setId(int id) {&lt;br /&gt;
    this.id = id;&lt;br /&gt;
  }&lt;br /&gt;
  public String getFirstName() {&lt;br /&gt;
    return firstName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setFirstName(String first) {&lt;br /&gt;
    this.firstName = first;&lt;br /&gt;
  }&lt;br /&gt;
  public String getLastName() {&lt;br /&gt;
    return lastName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setLastName(String last) {&lt;br /&gt;
    this.lastName = last;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: EmployeeBean.java&lt;br /&gt;
&lt;br /&gt;
import javax.ejb.Stateless;&lt;br /&gt;
import javax.interceptor.Interceptors;&lt;br /&gt;
@Stateless&lt;br /&gt;
@Interceptors( { MyInterceptor.class })&lt;br /&gt;
public class EmployeeBean implements EmployeeServiceLocal, EmployeeServiceRemote {&lt;br /&gt;
  public EmployeeBean() {&lt;br /&gt;
  }&lt;br /&gt;
  @Interceptors(MyInterceptor.class)&lt;br /&gt;
  public Long addBid(String userId,Long itemId,Double bidPrice) {&lt;br /&gt;
    System.out.println(&amp;quot;Bid for &amp;quot; + itemId + &amp;quot; received with price&amp;quot; + bidPrice);&lt;br /&gt;
    return 0L;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: EmployeeServiceLocal.java&lt;br /&gt;
&lt;br /&gt;
import javax.ejb.Local;&lt;br /&gt;
import javax.jws.WebParam;&lt;br /&gt;
@Local&lt;br /&gt;
public interface EmployeeServiceLocal {&lt;br /&gt;
  public Long addBid(String userId,Long itemId,Double bidPrice);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: EmployeeServiceRemote.java&lt;br /&gt;
import javax.ejb.Remote;&lt;br /&gt;
&lt;br /&gt;
@Remote&lt;br /&gt;
public interface EmployeeServiceRemote {&lt;br /&gt;
  public Long addBid(String userId,Long itemId,Double bidPrice);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: MyInterceptor.java&lt;br /&gt;
import javax.annotation.Resource;&lt;br /&gt;
import javax.interceptor.AroundInvoke;&lt;br /&gt;
import javax.interceptor.InvocationContext;&lt;br /&gt;
public class MyInterceptor {&lt;br /&gt;
  @Resource&lt;br /&gt;
  private javax.ejb.SessionContext ctx;&lt;br /&gt;
  @AroundInvoke&lt;br /&gt;
  public Object checkUserRole(InvocationContext ic) throws Exception {&lt;br /&gt;
    System.out.println(&amp;quot;*** CheckPermission Interceptor invoked for &amp;quot; + ic.getTarget() + &amp;quot; ***&amp;quot;);&lt;br /&gt;
    if (!ctx.isCallerInRole(&amp;quot;admin&amp;quot;)) {&lt;br /&gt;
      throw new SecurityException(&amp;quot;User: &amp;quot;&amp;quot; + ctx.getCallerPrincipal().getName()&lt;br /&gt;
          + &amp;quot;&amp;quot; does not have permissions for method &amp;quot; + ic.getMethod());&lt;br /&gt;
    }&lt;br /&gt;
    return ic.proceed();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: Main.java&lt;br /&gt;
import javax.ejb.EJB;&lt;br /&gt;
import javax.naming.InitialContext;&lt;br /&gt;
&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] a) throws Exception {&lt;br /&gt;
    EmployeeServiceRemote service = null;&lt;br /&gt;
    // Context compEnv = (Context) new InitialContext().lookup(&amp;quot;java:comp/env&amp;quot;);&lt;br /&gt;
    // service = (HelloService)new&lt;br /&gt;
    // InitialContext().lookup(&amp;quot;java:comp/env/ejb/HelloService&amp;quot;);&lt;br /&gt;
    service = (EmployeeServiceRemote) new InitialContext().lookup(&amp;quot;EmployeeBean/remote&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    service.addBid(&amp;quot;userId&amp;quot;,1L,0.1);&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: jndi.properties&lt;br /&gt;
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory&lt;br /&gt;
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces&lt;br /&gt;
java.naming.provider.url=localhost:1099&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use Interceptors To Check Permission ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: EmployeeBean.java&lt;br /&gt;
&lt;br /&gt;
import javax.ejb.Stateless;&lt;br /&gt;
import javax.interceptor.Interceptors;&lt;br /&gt;
@Stateless&lt;br /&gt;
@Interceptors( { MyInterceptor.class })&lt;br /&gt;
public class EmployeeBean implements EmployeeServiceLocal, EmployeeServiceRemote {&lt;br /&gt;
  public EmployeeBean() {&lt;br /&gt;
  }&lt;br /&gt;
  public Long addBid(String userId,Long itemId,Double bidPrice) {&lt;br /&gt;
    System.out.println(&amp;quot;Bid for &amp;quot; + itemId + &amp;quot; received with price&amp;quot; + bidPrice);&lt;br /&gt;
    return 0L;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: EmployeeServiceLocal.java&lt;br /&gt;
&lt;br /&gt;
import javax.ejb.Local;&lt;br /&gt;
import javax.jws.WebParam;&lt;br /&gt;
@Local&lt;br /&gt;
public interface EmployeeServiceLocal {&lt;br /&gt;
  public Long addBid(String userId,Long itemId,Double bidPrice);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: EmployeeServiceRemote.java&lt;br /&gt;
import javax.ejb.Remote;&lt;br /&gt;
&lt;br /&gt;
@Remote&lt;br /&gt;
public interface EmployeeServiceRemote {&lt;br /&gt;
  public Long addBid(String userId,Long itemId,Double bidPrice);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: MyInterceptor.java&lt;br /&gt;
import javax.annotation.Resource;&lt;br /&gt;
import javax.interceptor.AroundInvoke;&lt;br /&gt;
import javax.interceptor.InvocationContext;&lt;br /&gt;
public class MyInterceptor {&lt;br /&gt;
  @Resource&lt;br /&gt;
  private javax.ejb.SessionContext ctx;&lt;br /&gt;
  @AroundInvoke&lt;br /&gt;
  public Object checkUserRole(InvocationContext ic) throws Exception {&lt;br /&gt;
    System.out.println(&amp;quot;*** CheckPermission Interceptor invoked for &amp;quot; + ic.getTarget() + &amp;quot; ***&amp;quot;);&lt;br /&gt;
    if (!ctx.isCallerInRole(&amp;quot;admin&amp;quot;)) {&lt;br /&gt;
      throw new SecurityException(&amp;quot;User: &amp;quot;&amp;quot; + ctx.getCallerPrincipal().getName()&lt;br /&gt;
          + &amp;quot;&amp;quot; does not have permissions for method &amp;quot; + ic.getMethod());&lt;br /&gt;
    }&lt;br /&gt;
    return ic.proceed();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: Employee.java&lt;br /&gt;
&lt;br /&gt;
import javax.persistence.Entity;&lt;br /&gt;
import javax.persistence.EntityListeners;&lt;br /&gt;
import javax.persistence.GeneratedValue;&lt;br /&gt;
import javax.persistence.Id;&lt;br /&gt;
import javax.persistence.PostRemove;&lt;br /&gt;
@Entity&lt;br /&gt;
public class Employee implements java.io.Serializable {&lt;br /&gt;
  private int id;&lt;br /&gt;
  private String firstName;&lt;br /&gt;
  private String lastName;&lt;br /&gt;
  @Id&lt;br /&gt;
  @GeneratedValue&lt;br /&gt;
  public int getId() {&lt;br /&gt;
    return id;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  @PostRemove&lt;br /&gt;
  public void postRemove()&lt;br /&gt;
  {&lt;br /&gt;
     System.out.println(&amp;quot;@PostRemove&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public void setId(int id) {&lt;br /&gt;
    this.id = id;&lt;br /&gt;
  }&lt;br /&gt;
  public String getFirstName() {&lt;br /&gt;
    return firstName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setFirstName(String first) {&lt;br /&gt;
    this.firstName = first;&lt;br /&gt;
  }&lt;br /&gt;
  public String getLastName() {&lt;br /&gt;
    return lastName;&lt;br /&gt;
  }&lt;br /&gt;
  public void setLastName(String last) {&lt;br /&gt;
    this.lastName = last;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: Main.java&lt;br /&gt;
import javax.ejb.EJB;&lt;br /&gt;
import javax.naming.InitialContext;&lt;br /&gt;
&lt;br /&gt;
public class Main {&lt;br /&gt;
  public static void main(String[] a) throws Exception {&lt;br /&gt;
    EmployeeServiceRemote service = null;&lt;br /&gt;
    // Context compEnv = (Context) new InitialContext().lookup(&amp;quot;java:comp/env&amp;quot;);&lt;br /&gt;
    // service = (HelloService)new&lt;br /&gt;
    // InitialContext().lookup(&amp;quot;java:comp/env/ejb/HelloService&amp;quot;);&lt;br /&gt;
    service = (EmployeeServiceRemote) new InitialContext().lookup(&amp;quot;EmployeeBean/remote&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    service.addBid(&amp;quot;userId&amp;quot;,1L,0.1);&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
File: jndi.properties&lt;br /&gt;
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory&lt;br /&gt;
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces&lt;br /&gt;
java.naming.provider.url=localhost:1099&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>