View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package org.eclipse.jetty.plus.annotation;
20  
21  import java.lang.reflect.Method;
22  import java.lang.reflect.Modifier;
23  
24  import org.eclipse.jetty.util.log.Log;
25  import org.eclipse.jetty.util.log.Logger;
26  
27  /**
28   * PreDestroyCallback
29   *
30   *
31   */
32  public class PreDestroyCallback extends LifeCycleCallback
33  {
34      private static final Logger LOG = Log.getLogger(PreDestroyCallback.class);
35  
36  
37      /** 
38       * Commons Annotations Specification section 2.6:
39       * - no params to method
40       * - returns void
41       * - no checked exceptions
42       * - not static
43       * @see org.eclipse.jetty.plus.annotation.LifeCycleCallback#validate(java.lang.Class, java.lang.reflect.Method)
44       */
45      public void validate(Class<?> clazz, Method method)
46      {        
47  
48          if (method.getExceptionTypes().length > 0)
49              throw new IllegalArgumentException(clazz.getName()+"."+method.getName()+ " cannot not throw a checked exception");
50          
51          if (!method.getReturnType().equals(Void.TYPE))
52              throw new IllegalArgumentException(clazz.getName()+"."+method.getName()+ " cannot not have a return type");
53          
54          if (Modifier.isStatic(method.getModifiers()))
55              throw new IllegalArgumentException(clazz.getName()+"."+method.getName()+ " cannot be static");
56          
57      }
58  
59      
60      public void callback(Object instance)
61      {
62          try
63          {
64              super.callback(instance);
65          }
66          catch (Exception e)
67          {
68              LOG.warn("Ignoring exception thrown on preDestroy call to "+getTargetClass()+"."+getTarget().getName(), e);
69          }
70      }
71      
72      public boolean equals(Object o)
73      {
74          if (super.equals(o) && (o instanceof PreDestroyCallback))
75              return true;
76          return false;
77      }
78  }