Hi,
On Feb 20, 2008 5:54 PM, Bernhard Huemer <[EMAIL PROTECTED]> wrote:
> Hello,
>
> that's because there's a dependency to PortletNamingContainerUIViewRoot
> even if you're using this StateManager in a Servlet environment (due to
> the import). In order to overcome this issue Scott could introduce an
> additional indirection so that the class Portlet..UIViewRoot will only
> be loaded if Trinidad is running in the appropriate environment (for
> example by introducing a Jsr301StateManagerImpl ;-)).
yes... the dependency was introduced due to that,
that's why I sent the original "complain" :)
Scott is fixing that, as he said ;-)
>
> regards,
> Bernhard
>
> On 02/20/2008 +0100,
>
> "Matthias Wessendorf" <[EMAIL PROTECTED]> wrote:
> > Hi Scott,
> >
> > On Feb 20, 2008 5:26 PM, Scott O'Bryan <[EMAIL PROTECTED]> wrote:
> >> The Apache MVN website says this about providing a "compile only" library:
> >>
> >> "The scope you should use for this is |provided|. This indicates to
> >> Maven that the dependency will be provided at run time by its
> >> container or the JDK, for example.
> >>
> >> "Dependencies with this scope will not be passed on transitively,
> >> nor will they be bundled in an package such as a WAR, or included in
> >> the runtime classpath.
> >>
> >> This library is a runtime only library and is only needed when running
> >> in the portlet environment. Currently Trinidad's demo's aren't portlet
> >> compatible. Until I'm able to do some of this work, I would much rather
> >> this API (and the subsequent impl) not be added to the demo.
> >
> > I get a "java.lang.NoClassDefFoundError:
> > javax/portlet/faces/component/PortletNamingContainerUIViewRoot" when
> > running the demos...
> > (on 1.2.6.1 branch)
> > (trinidad-demos in jetty => mvn clean jetty:run -PjettyConfig)
> >
> > when I change the dependency (as suggested) to compile, after building
> > Trinidad again, all works fine.
> >
> > Also, the 301-fix is now here:
> > -1.0.x trunk
> > -1.2.6.1 branch
> >
> > not in 1.2_x trunk
> >
> > -Matthias
> >
> > -Matthias
> >
> >> Scott
> >>
> >>
> >> Matthias Wessendorf wrote:
> >>> also...
> >>> doesn't this belong to the 12x trunk ?
> >>> My understanding is that the JSR 301 is kind of depending on JSF 1.2
> >>>
> >>> -M
> >>>
> >>> On Feb 20, 2008 3:31 PM, Matthias Wessendorf <[EMAIL PROTECTED]> wrote:
> >>>
> >>>> Hi,
> >>>>
> >>>>
> >>>>> <dependency>
> >>>>> + <groupId>org.apache.myfaces.portlet-bridge</groupId>
> >>>>> + <artifactId>portlet-bridge-api</artifactId>
> >>>>> + <version>1.0.0-alpha</version>
> >>>>> + <scope>provided</scope>
> >>>>> + </dependency>
> >>>>>
> >>>> I wonder fi is the right scope.
> >>>> Pretty much all containers don't really ship that JAR.
> >>>>
> >>>> -M
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>> +
> >>>>> + <dependency>
> >>>>> <groupId>org.apache.myfaces.core</groupId>
> >>>>> <artifactId>myfaces-api</artifactId>
> >>>>> <version>${myfaces.version}</version>
> >>>>>
> >>>>> Modified: myfaces/trinidad/trunk/trinidad-impl/pom.xml
> >>>>> URL:
> >>>>> http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/pom.xml?rev=629242&r1=629241&r2=629242&view=diff
> >>>>> ==============================================================================
> >>>>> --- myfaces/trinidad/trunk/trinidad-impl/pom.xml (original)
> >>>>> +++ myfaces/trinidad/trunk/trinidad-impl/pom.xml Tue Feb 19 13:35:43
> >>>>> 2008
> >>>>> @@ -206,6 +206,11 @@
> >>>>> </dependency>
> >>>>>
> >>>>> <dependency>
> >>>>> + <groupId>org.apache.myfaces.portlet-bridge</groupId>
> >>>>> + <artifactId>portlet-bridge-api</artifactId>
> >>>>> + </dependency>
> >>>>> +
> >>>>> + <dependency>
> >>>>> <groupId>org.apache.myfaces.trinidad</groupId>
> >>>>> <artifactId>trinidad-build</artifactId>
> >>>>> </dependency>
> >>>>>
> >>>>> Modified:
> >>>>> myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application/StateManagerImpl.java
> >>>>> URL:
> >>>>> http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application/StateManagerImpl.java?rev=629242&r1=629241&r2=629242&view=diff
> >>>>> ==============================================================================
> >>>>> ---
> >>>>> myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application/StateManagerImpl.java
> >>>>> (original)
> >>>>> +++
> >>>>> myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/application/StateManagerImpl.java
> >>>>> Tue Feb 19 13:35:43 2008
> >>>>> @@ -51,6 +51,11 @@
> >>>>>
> >>>>> import java.io.IOException;
> >>>>>
> >>>>> +import javax.portlet.faces.annotation.PortletNamingContainer;
> >>>>> +import javax.portlet.faces.component.PortletNamingContainerUIViewRoot;
> >>>>> +
> >>>>> +import org.apache.myfaces.trinidad.util.ExternalContextUtils;
> >>>>> +
> >>>>> /**
> >>>>> * StateManager that handles a hybrid client/server strategy: a
> >>>>> * SerializedView is stored on the server, and only a small token
> >>>>> @@ -966,6 +971,17 @@
> >>>>> UIViewRoot newRoot = (UIViewRoot)
> >>>>>
> >>>>> fc.getApplication().createComponent(UIViewRoot.COMPONENT_TYPE);
> >>>>>
> >>>>> + //This code handles automatic namespacing in a JSR-301
> >>>>> environment
> >>>>> + if(ExternalContextUtils.isPortlet(fc.getExternalContext()))
> >>>>> + {
> >>>>> + //To avoid introducing a runtime dependency on the bridge,
> >>>>> + //this method should only be executed when we have a portlet
> >>>>> + //request. If we do have a portlet request then the bridge
> >>>>> + //should be available anyway.
> >>>>> + newRoot = _getPortletRoot(newRoot);
> >>>>> + }
> >>>>> +
> >>>>> +
> >>>>> // must call restoreState so that we setup attributes,
> >>>>> listeners,
> >>>>> // uniqueIds, etc ...
> >>>>> newRoot.restoreState(fc, viewRootState);
> >>>>> @@ -984,6 +1000,37 @@
> >>>>>
> >>>>> return null;
> >>>>> }
> >>>>> +
> >>>>> + /**
> >>>>> + * This should only be executed if we are currently in a Portlet
> >>>>> Request.
> >>>>> + * If executed, this method introduces a dependency on the JSR-301
> >>>>> bridge
> >>>>> + * which is required for Trinidad to run in a portal environment.
> >>>>> If this
> >>>>> + * method is not run, then the bridge api's remain optional at
> >>>>> runtime.
> >>>>> + *
> >>>>> + * This method checks the current UIViewRoot to see if it is a
> >>>>> + * PortletNamingContainer. If it is, then this class simply
> >>>>> returns the
> >>>>> + * UIViewRoot. If it does not then the current UIViewRoot is used
> >>>>> to create
> >>>>> + * a new PortletNamingContainerUIViewRoot.
> >>>>> + */
> >>>>> + private UIViewRoot _getPortletRoot(UIViewRoot root)
> >>>>> + {
> >>>>> + Class<? extends UIViewRoot> rootClass = root.getClass();
> >>>>> + //If the current root is not the real UIViewRoot object in faces
> >>>>> then
> >>>>> + //is no need to escape it. It is assumed it handles namespacing
> >>>>> on its
> >>>>> + //own. This is the same as the logic in the JSR-301 Bridge spec.
> >>>>> + if(rootClass == UIViewRoot.class)
> >>>>> + {
> >>>>> + _LOG.fine("Creating PortletUIViewRoot for use with the
> >>>>> portal.");
> >>>>> + root = new PortletNamingContainerUIViewRoot(root);
> >>>>> + }
> >>>>> +
> >>>>> + //TODO: Do we need a warning here if the view root is not
> >>>>> annotated
> >>>>> + //properly? This could happen if another renderkit is involved
> >>>>> and does
> >>>>> + //not correctly implement JSR-301. This will NOT be an issue in
> >>>>> Trin only
> >>>>> + //environments.
> >>>>> + return root;
> >>>>> + }
> >>>>> +
> >>>>> }
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>> --
> >>>> Matthias Wessendorf
> >>>>
> >>>> further stuff:
> >>>> blog: http://matthiaswessendorf.wordpress.com/
> >>>> sessions: http://www.slideshare.net/mwessendorf
> >>>> mail: matzew-at-apache-dot-org
> >>>>
> >>>>
> >>>
> >>>
> >>>
> >>
> >
> >
> >
>
>
--
Matthias Wessendorf
further stuff:
blog: http://matthiaswessendorf.wordpress.com/
sessions: http://www.slideshare.net/mwessendorf
mail: matzew-at-apache-dot-org