cool stuff, works for me :-)
jetty:run
@Named
@ViewScoped
public class Awesome {...}
On Tue, Jan 12, 2010 at 7:34 PM, Mark Struberg <[email protected]> wrote:
> btw, props also goes out to Martin Marinschek and Jakob Korherr. They helped
> me yesterday evening to implement the JSF eventing stuff while having a beer
> together ;)
>
> LieGrue,
> strub
>
> --- On Tue, 1/12/10, Mark Struberg <[email protected]> wrote:
>
>> From: Mark Struberg <[email protected]>
>> Subject: Re: svn commit: r898454 - in
>> /openwebbeans/trunk/webbeans-jsf/src/main: java/org/apache/webbeans/jsf/
>> java/org/apache/webbeans/jsf/plugin/ java/org/apache/webbeans/jsf/scopes/
>> java/org/apache/webbeans/util/ resources/META-INF/services/
>> To: [email protected]
>> Date: Tuesday, January 12, 2010, 7:31 PM
>> nice! looking forward to get feedback
>> or bug reports ;)
>>
>> LieGrue,
>> strub
>>
>> --- On Tue, 1/12/10, Matthias Wessendorf <[email protected]>
>> wrote:
>>
>> > From: Matthias Wessendorf <[email protected]>
>> > Subject: Re: svn commit: r898454 - in
>> /openwebbeans/trunk/webbeans-jsf/src/main:
>> java/org/apache/webbeans/jsf/
>> java/org/apache/webbeans/jsf/plugin/
>> java/org/apache/webbeans/jsf/scopes/
>> java/org/apache/webbeans/util/
>> resources/META-INF/services/
>> > To: [email protected]
>> > Cc: [email protected]
>> > Date: Tuesday, January 12, 2010, 7:29 PM
>> > great.
>> >
>> > will check out now; ...and demonstrate that next week,
>> on
>> > my JSF 2 talk :-)
>> >
>> > On Tue, Jan 12, 2010 at 7:20 PM, <[email protected]>
>> > wrote:
>> > > Author: struberg
>> > > Date: Tue Jan 12 18:20:42 2010
>> > > New Revision: 898454
>> > >
>> > > URL: http://svn.apache.org/viewvc?rev=898454&view=rev
>> > > Log:
>> > > OWB-229 support for the new JSF-2
>> > javax.faces.bean.ViewScoped annotation
>> > >
>> > > TODO: this should get moved to an own jsf-2
>> module
>> > because this currently breaks JSF-1 compatibility!
>> > >
>> > > Added:
>> > >
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/
>> > >
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/Jsf2ScopesExtension.java
>> > (with props)
>> > >
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/ViewScopedContext.java
>> > (with props)
>> > >
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
>> > > Modified:
>> > >
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/WebBeansPhaseListener.java
>> > >
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/plugin/OpenWebBeansJsfPlugin.java
>> > >
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/util/JSFUtil.java
>> > >
>> > > Modified:
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/WebBeansPhaseListener.java
>> > > URL:
>> > > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/WebBeansPhaseListener.java?rev=898454&r1=898453&r2=898454&view=diff
>> > >
>> >
>> ==============================================================================
>> > > ---
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/WebBeansPhaseListener.java
>> > (original)
>> > > +++
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/WebBeansPhaseListener.java
>> > Tue Jan 12 18:20:42 2010
>> > > @@ -34,6 +34,8 @@
>> > > */
>> > > public class WebBeansPhaseListener implements
>> > PhaseListener
>> > > {
>> > > + private static final long serialVersionUID
>> =
>> > 1L;
>> > > +
>> > > /**Logger instance*/
>> > > private static final WebBeansLogger logger
>> =
>> >
>> WebBeansLogger.getLogger(WebBeansPhaseListener.class);
>> > >
>> > >
>> > > Modified:
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/plugin/OpenWebBeansJsfPlugin.java
>> > > URL:
>> > > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/plugin/OpenWebBeansJsfPlugin.java?rev=898454&r1=898453&r2=898454&view=diff
>> > >
>> >
>> ==============================================================================
>> > > ---
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/plugin/OpenWebBeansJsfPlugin.java
>> > (original)
>> > > +++
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/plugin/OpenWebBeansJsfPlugin.java
>> > Tue Jan 12 18:20:42 2010
>> > > @@ -28,7 +28,7 @@
>> > > /** {...@inheritdoc} */
>> > > public void startUp() throws
>> > WebBeansConfigurationException
>> > > {
>> > > - // nothing to do
>> > > + // nothing to do
>> > > }
>> > >
>> > > /** {...@inheritdoc} */
>> > >
>> > > Added:
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/Jsf2ScopesExtension.java
>> > > URL:
>> > > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/Jsf2ScopesExtension.java?rev=898454&view=auto
>> > >
>> >
>> ==============================================================================
>> > > ---
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/Jsf2ScopesExtension.java
>> > (added)
>> > > +++
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/Jsf2ScopesExtension.java
>> > Tue Jan 12 18:20:42 2010
>> > > @@ -0,0 +1,43 @@
>> > > +/*
>> > > + * Licensed to the Apache Software Foundation
>> (ASF)
>> > under one
>> > > + * or more contributor license agreements. See
>> the
>> > NOTICE file
>> > > + * distributed with this work for additional
>> > information
>> > > + * regarding copyright ownership. The ASF
>> licenses
>> > this file
>> > > + * to you under the Apache License, Version 2.0
>> (the
>> > > + * "License"); you may not use this file except
>> in
>> > compliance
>> > > + * with the License. You may obtain a copy of
>> the
>> > License at
>> > > + *
>> > > + * http://www.apache.org/licenses/LICENSE-2.0
>> > > + *
>> > > + * Unless required by applicable law or agreed
>> to in
>> > writing,
>> > > + * software distributed under the License is
>> > distributed on an
>> > > + * "AS IS" BASIS, WITHOUT WARRANTIES OR
>> CONDITIONS OF
>> > ANY
>> > > + * KIND, either express or implied. See the
>> License
>> > for the
>> > > + * specific language governing permissions and
>> > limitations
>> > > + * under the License.
>> > > + */
>> > > +package org.apache.webbeans.jsf.scopes;
>> > > +
>> > > +import javax.enterprise.event.Observes;
>> > > +import
>> > javax.enterprise.inject.spi.AfterBeanDiscovery;
>> > > +import
>> > javax.enterprise.inject.spi.BeforeBeanDiscovery;
>> > > +import javax.enterprise.inject.spi.Extension;
>> > > +import javax.faces.bean.ViewScoped;
>> > > +
>> > > +/**
>> > > + * This small extension adds support for various
>> JSF
>> > 2 scopes
>> > > + * TODO: this should be moved to an own module
>> > because this will
>> > > + * currently hinder webbeans-jsf to run in a
>> JSF-1
>> > application!
>> > > + */
>> > > +public class Jsf2ScopesExtension implements
>> Extension
>> > {
>> > > +
>> > > + public void addViewScoped(@Observes
>> > BeforeBeanDiscovery beforeBeanDiscovery)
>> > > + {
>> > > +
>> > beforeBeanDiscovery.addScope(ViewScoped.class,
>> true,
>> > true);
>> > > + }
>> > > +
>> > > + public void registerViewContext(@Observes
>> > AfterBeanDiscovery afterBeanDiscovery)
>> > > + {
>> > > + afterBeanDiscovery.addContext(new
>> > ViewScopedContext());
>> > > + }
>> > > +}
>> > > \ No newline at end of file
>> > >
>> > > Propchange:
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/Jsf2ScopesExtension.java
>> > >
>> >
>> ------------------------------------------------------------------------------
>> > > svn:eol-style = native
>> > >
>> > > Propchange:
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/Jsf2ScopesExtension.java
>> > >
>> >
>> ------------------------------------------------------------------------------
>> > > svn:keywords = Author Date Id Revision
>> > >
>> > > Added:
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/ViewScopedContext.java
>> > > URL:
>> > > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/ViewScopedContext.java?rev=898454&view=auto
>> > >
>> >
>> ==============================================================================
>> > > ---
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/ViewScopedContext.java
>> > (added)
>> > > +++
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/ViewScopedContext.java
>> > Tue Jan 12 18:20:42 2010
>> > > @@ -0,0 +1,213 @@
>> > > +/*
>> > > + * Licensed to the Apache Software Foundation
>> (ASF)
>> > under one
>> > > + * or more contributor license agreements. See
>> the
>> > NOTICE file
>> > > + * distributed with this work for additional
>> > information
>> > > + * regarding copyright ownership. The ASF
>> licenses
>> > this file
>> > > + * to you under the Apache License, Version 2.0
>> (the
>> > > + * "License"); you may not use this file except
>> in
>> > compliance
>> > > + * with the License. You may obtain a copy of
>> the
>> > License at
>> > > + *
>> > > + * http://www.apache.org/licenses/LICENSE-2.0
>> > > + *
>> > > + * Unless required by applicable law or agreed
>> to in
>> > writing,
>> > > + * software distributed under the License is
>> > distributed on an
>> > > + * "AS IS" BASIS, WITHOUT WARRANTIES OR
>> CONDITIONS OF
>> > ANY
>> > > + * KIND, either express or implied. See the
>> License
>> > for the
>> > > + * specific language governing permissions and
>> > limitations
>> > > + * under the License.
>> > > + */
>> > > +package org.apache.webbeans.jsf.scopes;
>> > > +
>> > > +import java.lang.annotation.Annotation;
>> > > +import java.util.Map;
>> > > +import java.util.Map.Entry;
>> > > +import java.util.concurrent.ConcurrentHashMap;
>> > > +
>> > > +import
>> > javax.enterprise.context.ContextNotActiveException;
>> > > +import javax.enterprise.context.spi.Context;
>> > > +import javax.enterprise.context.spi.Contextual;
>> > > +import
>> > javax.enterprise.context.spi.CreationalContext;
>> > > +
>> > > +import javax.faces.bean.ViewScoped;
>> > > +import javax.faces.component.UIViewRoot;
>> > > +import javax.faces.context.FacesContext;
>> > > +import
>> javax.faces.event.PreDestroyViewMapEvent;
>> > > +import javax.faces.event.SystemEvent;
>> > > +import javax.faces.event.SystemEventListener;
>> > > +
>> > > +import org.apache.webbeans.util.JSFUtil;
>> > > +
>> > > +/**
>> > > + * This class provides the contexts lifecycle
>> for
>> > the
>> > > + * new JSF-2 @ViewScoped Context
>> > > + *
>> > > + */
>> > > +public class ViewScopedContext implements
>> Context,
>> > SystemEventListener
>> > > +{
>> > > +
>> > > + private final static String
>> COMPONENT_MAP_NAME
>> > ="openwebbeans.componentInstanceMap";
>> > > + private final static String
>> CREATIONAL_MAP_NAME
>> > ="openwebbeans.creationalInstanceMap";
>> > > +
>> > > + private boolean isJsfSubscribed = false;
>> > > +
>> > > + �...@override
>> > > + public <T> T
>> get(Contextual<T>
>> > component)
>> > > + {
>> > > + checkActive();
>> > > +
>> > > + if(!isJsfSubscribed)
>> > > + {
>> > > +
>> >
>> FacesContext.getCurrentInstance().getApplication().subscribeToEvent(PreDestroyViewMapEvent.class,
>> > this);
>> > > +
>> > > + isJsfSubscribed = true;
>> > > + }
>> > > +
>> > > + Map<String, Object> viewMap =
>> > JSFUtil.getViewRoot().getViewMap();
>> > > +
>> > > + �...@suppresswarnings("unchecked")
>> > > +
>> ConcurrentHashMap<Contextual<?>,
>> > Object> componentInstanceMap =
>> > (ConcurrentHashMap<Contextual<?>,
>> Object>)
>> > viewMap.get(COMPONENT_MAP_NAME);
>> > > +
>> > > + if(componentInstanceMap == null) {
>> > > + return null;
>> > > + }
>> > > +
>> > > + �...@suppresswarnings("unchecked")
>> > > + T instance = (T)
>> > componentInstanceMap.get(component);
>> > > +
>> > > + return instance;
>> > > + }
>> > > +
>> > > + �...@override
>> > > + public <T> T
>> get(Contextual<T>
>> > component, CreationalContext<T>
>> creationalContext)
>> > > + {
>> > > + checkActive();
>> > > +
>> > > + Map<String, Object> viewMap =
>> > JSFUtil.getViewRoot().getViewMap(true);
>> > > +
>> > > + �...@suppresswarnings("unchecked")
>> > > +
>> ConcurrentHashMap<Contextual<?>,
>> > Object> componentInstanceMap =
>> > (ConcurrentHashMap<Contextual<?>,
>> Object>)
>> > viewMap.get(COMPONENT_MAP_NAME);
>> > > +
>> > > + if(componentInstanceMap == null)
>> > > + {
>> > > + // TODO we now need to start
>> being
>> > carefull with reentrancy...
>> > > + componentInstanceMap = new
>> > ConcurrentHashMap<Contextual<?>,
>> Object>();
>> > > +
>> viewMap.put(COMPONENT_MAP_NAME,
>> > componentInstanceMap);
>> > > + }
>> > > +
>> > > + �...@suppresswarnings("unchecked")
>> > > +
>> ConcurrentHashMap<Contextual<?>,
>> > CreationalContext<?>> creationalContextMap =
>> > (ConcurrentHashMap<Contextual<?>,
>> > CreationalContext<?>>)
>> > viewMap.get(CREATIONAL_MAP_NAME);
>> > > + if(creationalContextMap == null)
>> > > + {
>> > > + // TODO we now need to start
>> being
>> > carefull with reentrancy...
>> > > + creationalContextMap = new
>> > ConcurrentHashMap<Contextual<?>,
>> > CreationalContext<?>>();
>> > > +
>> viewMap.put(CREATIONAL_MAP_NAME,
>> > creationalContextMap);
>> > > + }
>> > > +
>> > > + �...@suppresswarnings("unchecked")
>> > > + T instance = (T)
>> > componentInstanceMap.get(component);
>> > > + if (instance != null)
>> > > + {
>> > > + return instance;
>> > > + }
>> > > + else
>> > > + {
>> > > + if(creationalContext == null)
>> > > + {
>> > > + return null;
>> > > + }
>> > > + else
>> > > + {
>> > > + synchronized
>> > (componentInstanceMap)
>> > > + {
>> > > + // just to make
>> > sure...
>> > > +
>> > �...@suppresswarnings("unchecked")
>> > > + T i =
>> > (T)componentInstanceMap.get(component);
>> > > + if (i != null)
>> > > + {
>> > > + return i;
>> > > + }
>> > > +
>> > > + instance =
>> > component.create(creationalContext);
>> > > +
>> > > + if (instance !=
>> null)
>> > > + {
>> > > +
>> > componentInstanceMap.put(component, instance);
>> > > +
>> > creationalContextMap.put(component,
>> creationalContext);
>> > > + }
>> > > + }
>> > > + }
>> > > + }
>> > > +
>> > > + return instance;
>> > > + }
>> > > +
>> > > + �...@override
>> > > + public Class<? extends Annotation>
>> > getScope()
>> > > + {
>> > > + return ViewScoped.class;
>> > > + }
>> > > +
>> > > + /**
>> > > + * The view context is active if a valid
>> > ViewRoot could be detected.
>> > > + */
>> > > + �...@override
>> > > + public boolean isActive()
>> > > + {
>> > > + return JSFUtil.getViewRoot() !=
>> null;
>> > > + }
>> > > +
>> > > + private void checkActive()
>> > > + {
>> > > + if (!isActive())
>> > > + {
>> > > + throw new
>> > ContextNotActiveException("WebBeans context with
>> scope
>> > annotation @ViewScoped is not active with respect to
>> the
>> > current thread");
>> > > + }
>> > > + }
>> > > +
>> > > + �...@override
>> > > + public boolean isListenerForSource(Object
>> > source) {
>> > > + if (source instanceof UIViewRoot)
>> > > + {
>> > > + return true;
>> > > + }
>> > > +
>> > > + return false;
>> > > + }
>> > > +
>> > > + /**
>> > > + * We get PreDestroyViewMapEvent events
>> from
>> > the JSF servlet and destroy our contextual
>> > > + * instances. This should (theoretically!)
>> also
>> > get fired if the webapp closes, so there
>> > > + * should be no need to manually track all
>> view
>> > scopes and destroy them at a shutdown.
>> > > + *
>> > > + * @see
>> >
>> javax.faces.event.SystemEventListener#processEvent(javax.faces.event.SystemEvent)
>> > > + */
>> > > + �...@override
>> > > + �...@suppresswarnings("unchecked")
>> > > + public void processEvent(SystemEvent
>> event) {
>> > > + if (event instanceof
>> > PreDestroyViewMapEvent)
>> > > + {
>> > > + // better use the viewmap we
>> get
>> > from the event to prevent concurrent modification
>> problems
>> > > + Map<String, Object>
>> viewMap =
>> > ((UIViewRoot) event.getSource()).getViewMap();
>> > > +
>> > > +
>> > ConcurrentHashMap<Contextual<?>,
>> Object>
>> > componentInstanceMap
>> > > + =
>> > (ConcurrentHashMap<Contextual<?>,
>> Object>)
>> > viewMap.get(COMPONENT_MAP_NAME);
>> > > +
>> > > +
>> > ConcurrentHashMap<Contextual<?>,
>> > CreationalContext<?>> creationalContextMap
>> > > + =
>> > (ConcurrentHashMap<Contextual<?>,
>> > CreationalContext<?>>)
>> > viewMap.get(CREATIONAL_MAP_NAME);
>> > > +
>> > > + if(componentInstanceMap !=
>> null) {
>> > > + for (
>> > Entry<Contextual<?>, Object>
>> componentEntry :
>> > componentInstanceMap.entrySet())
>> > > + {
>> > > + // there is no
>> nice way
>> > to explain the Java Compiler that we are handling the
>> same
>> > type T,
>> > > + // therefore we
>> need
>> > completely drop the type information :(
>> > > + Contextual
>> contextual =
>> > componentEntry.getKey();
>> > > + Object instance =
>> > componentEntry.getValue();
>> > > + CreationalContext
>> > creational = creationalContextMap.get(contextual);
>> > > +
>> > > +
>> > contextual.destroy(instance, creational);
>> > > + }
>> > > + }
>> > > + }
>> > > + }
>> > > +
>> > > +}
>> > >
>> > > Propchange:
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/ViewScopedContext.java
>> > >
>> >
>> ------------------------------------------------------------------------------
>> > > svn:eol-style = native
>> > >
>> > > Propchange:
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/jsf/scopes/ViewScopedContext.java
>> > >
>> >
>> ------------------------------------------------------------------------------
>> > > svn:keywords = Author Date Id Revision
>> > >
>> > > Modified:
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/util/JSFUtil.java
>> > > URL:
>> > > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/util/JSFUtil.java?rev=898454&r1=898453&r2=898454&view=diff
>> > >
>> >
>> ==============================================================================
>> > > ---
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/util/JSFUtil.java
>> > (original)
>> > > +++
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/java/org/apache/webbeans/util/JSFUtil.java
>> > Tue Jan 12 18:20:42 2010
>> > > @@ -63,6 +63,9 @@
>> > > return
>> >
>> getCurrentFacesContext().getRenderKit().getResponseStateManager().isPostback(getCurrentFacesContext());
>> > > }
>> > >
>> > > + /**
>> > > + * @return the viewId of the viewRoot,
>> e.g.
>> > '/user/menu.xhtml'
>> > > + */
>> > > public static String getViewId()
>> > > {
>> > > UIViewRoot viewRoot =
>> > getCurrentFacesContext().getViewRoot();
>> > >
>> > > Added:
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
>> > > URL:
>> > > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-jsf/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension?rev=898454&view=auto
>> > >
>> >
>> ==============================================================================
>> > > ---
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
>> > (added)
>> > > +++
>> >
>> openwebbeans/trunk/webbeans-jsf/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
>> > Tue Jan 12 18:20:42 2010
>> > > @@ -0,0 +1,18 @@
>> > > +#Licensed to the Apache Software Foundation
>> (ASF)
>> > under one
>> > > +#or more contributor license agreements. See
>> the
>> > NOTICE file
>> > > +#distributed with this work for additional
>> > information
>> > > +#regarding copyright ownership. The ASF
>> licenses
>> > this file
>> > > +#to you under the Apache License, Version 2.0
>> (the
>> > > +#"License"); you may not use this file except
>> in
>> > compliance
>> > > +#with the License. You may obtain a copy of
>> the
>> > License at
>> > > +#
>> > > +# http://www.apache.org/licenses/LICENSE-2.0
>> > > +#
>> > > +#Unless required by applicable law or agreed to
>> in
>> > writing,
>> > > +#software distributed under the License is
>> > distributed on an
>> > > +#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
>> OF
>> > ANY
>> > > +#KIND, either express or implied. See the
>> License
>> > for the
>> > > +#specific language governing permissions and
>> > limitations
>> > > +#under the License.
>> > > +
>> > >
>> +org.apache.webbeans.jsf.scopes.Jsf2ScopesExtension
>> > > \ No newline at end of file
>> > >
>> > >
>> > >
>> >
>> >
>> >
>> > --
>> > Matthias Wessendorf
>> >
>> > blog: http://matthiaswessendorf.wordpress.com/
>> > sessions: http://www.slideshare.net/mwessendorf
>> > twitter: http://twitter.com/mwessendorf
>> >
>>
>>
>>
>>
>
>
>
>
--
Matthias Wessendorf
blog: http://matthiaswessendorf.wordpress.com/
sessions: http://www.slideshare.net/mwessendorf
twitter: http://twitter.com/mwessendorf