001: /*
002: * $Id: SpringWebApplication.java 459061 2006-02-08 18:25:54Z ivaynberg $
003: * $Revision: 459061 $
004: * $Date: 2006-02-08 19:25:54 +0100 (Wed, 08 Feb 2006) $
005: *
006: * ==============================================================================
007: * Licensed under the Apache License, Version 2.0 (the "License"); you may not
008: * use this file except in compliance with the License. You may obtain a copy of
009: * the License at
010: *
011: * http://www.apache.org/licenses/LICENSE-2.0
012: *
013: * Unless required by applicable law or agreed to in writing, software
014: * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
015: * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
016: * License for the specific language governing permissions and limitations under
017: * the License.
018: */
019: package wicket.spring;
020:
021: import javax.servlet.ServletContext;
022:
023: import org.springframework.beans.BeansException;
024: import org.springframework.context.ApplicationContext;
025: import org.springframework.context.ApplicationContextAware;
026: import org.springframework.web.context.support.WebApplicationContextUtils;
027:
028: import wicket.Application;
029: import wicket.protocol.http.WebApplication;
030: import wicket.proxy.LazyInitProxyFactory;
031:
032: /**
033: * Base class for spring aware wicket web application object. This class has
034: * helper methods to create lazy init proxies based on spring beans, as well as
035: * an implementation of {@link ISpringContextLocator}.
036: *
037: * @author Igor Vaynberg (ivaynberg)
038: */
039: public abstract class SpringWebApplication extends WebApplication
040: implements ApplicationContextAware {
041: private ApplicationContext applicationContext;
042:
043: /**
044: * Singleton instance of spring application context locator
045: */
046: private final static ISpringContextLocator contextLocator = new ISpringContextLocator() {
047:
048: public ApplicationContext getSpringContext() {
049: Application app = Application.get();
050: return ((SpringWebApplication) app)
051: .internalGetApplicationContext();
052: }
053: };
054:
055: /**
056: * Construct.
057: */
058: public SpringWebApplication() {
059:
060: }
061:
062: /**
063: * @see wicket.Application#internalInit()
064: */
065: protected void internalInit() {
066: super .internalInit();
067:
068: if (applicationContext == null) {
069: // this application was not created as a spring bean so we
070: // locate the app context from servlet context
071:
072: ServletContext sc = getWicketServlet().getServletContext();
073: applicationContext = WebApplicationContextUtils
074: .getRequiredWebApplicationContext(sc);
075:
076: }
077: }
078:
079: /**
080: * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
081: */
082: public final void setApplicationContext(
083: ApplicationContext applicationContext)
084: throws BeansException {
085: this .applicationContext = applicationContext;
086: }
087:
088: /**
089: * Retrieves the spring application context associated with this application
090: * object
091: *
092: * This method is protected and named internalGetApplicationContext so that
093: * the subclass can choose whether or not to add a public
094: * getApplicationContext() method
095: *
096: * @return spring application context
097: */
098: protected final ApplicationContext internalGetApplicationContext() {
099: return applicationContext;
100: }
101:
102: /**
103: * Retrieves the spring application context locator object
104: *
105: * @return spring application context locator object
106: */
107: public ISpringContextLocator getSpringContextLocator() {
108: return contextLocator;
109: }
110:
111: /**
112: * Creates a proxy for a spring bean that is safe to put into session and
113: * serialize
114: *
115: * @param clazz
116: * class of spring bean
117: * @param beanName
118: * name of spring bean
119: * @return proxy representing the spring bean
120: */
121: protected Object createSpringBeanProxy(Class clazz, String beanName) {
122: return LazyInitProxyFactory.createProxy(clazz,
123: new SpringBeanLocator(beanName, clazz,
124: getSpringContextLocator()));
125: }
126:
127: /**
128: * Creates a proxy for a spring bean that is safe to put into session and
129: * serialize
130: *
131: * @param clazz
132: * class of spring bean
133: * @return proxy representing the spring bean
134: */
135: protected Object createSpringBeanProxy(Class clazz) {
136: return LazyInitProxyFactory
137: .createProxy(clazz, new SpringBeanLocator(clazz,
138: getSpringContextLocator()));
139: }
140:
141: }
|