thank!

and yes, jetty is a damn cool container ;-)

-Matthias

On Thu, Feb 21, 2008 at 3:13 AM, Scott O'Bryan <[EMAIL PROTECTED]> wrote:
> Ok, I think I fixed it.  Bernhard, you were right, it needed to be
>  moved.  ExternalContextUtils works because I use reflection to get the
>  classes..  duh!
>
>  Anyway I removed the checkin from trunk.
>  Added the checking to trunk_1.2.x
>  And modified the previous checkin to 1.2.6.1-branch
>
>  I tested it with Jetty and everything works right.  Insidently I had
>  previously tested this in JDEV and it worked, Jetty failed.  I can only
>  assume it's because of differences with the class loader, so I'll make
>  sure to add Jetty tests in the future.
>
>  Bernhard, I'm assuming that this modification NOT being in trunk solves
>  your needs as well, correct?  Trinidad 1.1 portlets are not "officially
>  supported" even though they should work with some hacks and
>  workarounds.  I'm thinking for 1.2, though, we really should enforce the
>  standard bridge.  Do you agree?
>
>
>
>  Scott
>
>  Bernhard Huemer wrote:
>  > Hello,
>  >
>  >> LOL.  Seriously the Jsr301StateManagerImpl is the wrong answer.
>  >> 99.99999% of the code is shared and only a private inner class
>  >> contains the change.  I'll figure something out.
>  >
>  > actually, I was just kidding but nevertheless noone said that the
>  > Jsr301StateManagerImpl isn't allowed to inherit from the "plain"
>  > StateManagerImpl.
>  >
>  >> That said, I'm not sure it's the import necessarily.  But I'll trace
>  >> though it to see what I've got.  I know that the ExternalContextUtils
>  >> has the imports on the portlet classes and it loads fine in a servlet
>  >> only environment.  I may have to get at the class using reflection or
>  >> something to prevent it from preloading.
>  >
>  > Although I'm quite sure that the import statement causes this
>  > behaviour, you're right, that it's not necessarily true. However, the
>  > class definition somehow depends on PortletNamingUIViewRoot
>  > _directly_. As I've already mentioned, you just have to introduce an
>  > additional indirection to prevent preloading (for example by
>  > introducing a Jsr301StateManagerUtils class - just don't use a nested
>  > class).
>  >
>  > regards,
>  > Bernhard
>  >
>  > On 02/20/2008 +0100,
>  > "Scott O'Bryan" <[EMAIL PROTECTED]> wrote:
>  >> LOL.  Seriously the Jsr301StateManagerImpl is the wrong answer.
>  >> 99.99999% of the code is shared and only a private inner class
>  >> contains the change.  I'll figure something out.
>  >>
>  >> That said, I'm not sure it's the import necessarily.  But I'll trace
>  >> though it to see what I've got.  I know that the ExternalContextUtils
>  >> has the imports on the portlet classes and it loads fine in a servlet
>  >> only environment.  I may have to get at the class using reflection or
>  >> something to prevent it from preloading.
>  >>
>  >> Scott
>  >>
>  >> Bernhard Huemer 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 ;-)).
>  >>>
>  >>> 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

Reply via email to