1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20 package org.apache.myfaces.orchestra.conversation.spring;
21
22 import java.io.Serializable;
23
24 import org.aopalliance.aop.Advice;
25 import org.springframework.aop.Pointcut;
26 import org.springframework.aop.PointcutAdvisor;
27
28 /**
29 * Define a trivial Advisor object that always applies to the class passed to it.
30 * <p>
31 * Spring requires Advisor objects to be returned rather than Advices. Advisors can implement various interfaces to
32 * control which classes or methods they get applied to, but here the OrchestraAdvisorBeanPostProcessor only returns an
33 * instance of this for classes that it really *should* apply to, and the advices always apply to all methods, so there
34 * is really nothing for this Advisor to do.
35 * <p>
36 * TODO: maybe it would be nice to allow an orchestra scope object to hold Advisors as well as just Advices, so that
37 * users can configure specific code to run only for specific methods of orchestra beans.
38 * <p>
39 * NB: In Spring2.5, this class can simply implement Advisor, and it will be applied to all methods. However in
40 * Spring2.0, class DefaultAdvisorChainFactory only accepts PointcutAdvisor or IntroductionAdvisor, and silently ignores
41 * Advisor classes that are not of those types. So here for Spring2.x compatibility we need to make this class a
42 * PointcutAdvisor with a dummy pointcut that matches all methods...
43 */
44 class SimpleAdvisor implements PointcutAdvisor, Serializable
45 {
46 private Advice advice;
47
48 public SimpleAdvisor(Advice advice)
49 {
50 this.advice = advice;
51 }
52
53 public Advice getAdvice()
54 {
55 return advice;
56 }
57
58 public boolean isPerInstance()
59 {
60 return false;
61 }
62
63 public Pointcut getPointcut()
64 {
65 return Pointcut.TRUE;
66 }
67 }