You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by Timothy Bennett <ex...@comcast.net> on 2003/11/08 06:37:44 UTC

[avalon-jetty] Status update

Ok....

Patch available very soon.  Possibly tonight before going to bed.  Just a
some more testing and documentation before I post it.

The Jetty-Phoenix package has been:
(1) Renamed to avalon-jetty
(2) Refactored to use apache.avalon.merlin.http package naming convention
(3) Split into separate api and impl jars
(4) Converted the Phoenix meta tags to avalon-meta tags
(5) Build system converted from Ant to Maven
(6) Cleaned up javadocs and added to user documentation

I think that's all.  Anyway, look for the patch very soon.  I'll post as a
response on this thread.

Timothy Bennett




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-http] SessionManager

Posted by Stephen McConnell <mc...@apache.org>.

Timothy Bennett wrote:

>"Stephen McConnell" <mc...@apache.org> wrote in message
>news:3FB29C4D.4090907@apache.org...
>  
>
>>Timothy Bennett wrote:
>>
>>    
>>
>>>I would like to get rid of having to extend the AvalonSessionManager for
>>>each "application" that uses avalon-http.  This is an artifact from
>>>      
>>>
>Henson's
>  
>
>>>block, and basically provides a mechanism for the Jetty Session Manager
>>>      
>>>
>to
>  
>
>>>"carry" a ServiceManager instance that knows about the dependent services
>>>you want the servlet(s) to have access to.  If there's a better and
>>>      
>>>
>cleaner
>  
>
>>>way of getting the service dependencies into the servlet container's
>>>      
>>>
>session
>  
>
>>>manager, then I'm all for that.  Let's noodle on it and discuss it.
>>>
>>>      
>>>
>>Some very initial thoughts - two possible approaches:
>>
>>1. servlet is a component
>>2. context is a component
>>
>>With "servlet is a component" scenario what we want is to be able to
>>customize the way the servlet is deployed.  Instead of following the
>>classic Avalon deployment cycle we want the appliance the is managing
>>the servlet type to construct a SessionManager and configure everything
>>based on @avalon declarations in the servlet class definition.  This
>>would be possible if we have a factory oriented applicance).  The
>>appliance would instantiate a factory component and use the factory to
>>deploy the servlet.
>>
>>However, this is not totally clean because we don't want to expose the
>>servlet to other components.  In effect we want the web-server context
>>to to take care of all of this - enter "context is a component".  This
>>approach is much nicer because we can define a component that exposes a
>>context interface, consumes a web-server (into which context instances
>>are registered), and as part of its deployment it reads meta info/data
>>about servlets and deploys these into itself.  In addition, it exposes
>>operation to add, enumerate and remove servlets via its service interface.
>>
>>E.g.:
>>
>>  <container name="demo">
>>
>>    <!-- create the web server -->
>>    <component name="server"
>>        class="org.apache.avalon.merlin.http.JettyWebServer">
>>      <configuration>
>>        <Listener port="8080"/>
>>      </configuration>
>>    </component>
>>
>>    <!-- create a web context (depends on web-server) -->
>>    <component name="context"
>>          class="org.apache.avalon.merlin.http.JettyWebServer">
>>      <configuration>
>>        <Servlet name="Example" path="/servlets/*"
>>
>>classname="org.apache.avalon.merlin.http.example.ExampleServlet"/>
>>      </configuration>
>>    </component>
>>
>>  </container>
>>
>>But - the ultimate scenario is to seperate the servlet and the context -
>>i.e. we construct the servlet instance, its dependent on a context, on
>>initialization we add it to a servlet holder then let jetty do its
>>stuff.  All we need to do is to figure out if we can replace the servlet
>>instance factory in jetty.  In this scenario Merlin is responsible for
>>the diirect servlet instance depoyment and decommissioning - the perfect
>>scenario.
>>
>>    
>>
>
>Two thoughts:
>
>First, this seems to "break" standard j2ee servlet compliance, and basically
>creates "merlin-ized servlets".  But, I guess I've already broken with j2ee
>servlet compliance by wanting to get Avalon component references through the
>ServiceManager from inside my servlet.  I can't very well go off and deploy
>this servlet on some standalone version of Tomcat or Jetty.  So, I guess
>that really a non-issue...
>

Its just a matter of effort.  A servlet is similar to a component in 
that it is assigned a logger, it receives a context object that may be 
populated with stuff declared in a web.xml file, and it can grag stuff 
in via JNDI.  Within Merlin we can customize the lifecycle so that the 
servlet is 100% spec compliant - plus - we can provide Avalon extras.  
Making deployment 100% compliant means more effor in mapping servlet 
spec constructs in to composition meta-model - but is doable.  I would 
imagine an initial cut would be based on classic Avalon directives - and 
then a progressive process of enabling compliance.

>
>
>Second, I do think that I'd like the option of deploying non-Avalon aware
>web apps inside my merlin-embedded servlet container.  For instance, I might
>have a merlin container that has a couple of blocks -- say the hsqldb
>component and the avalon-http component.  The database is just listening on
>a port -- no real service interface here -- the container is just managing
>the lifecycle of the database server.  
>

Non-avalon aware apps is easy - we just delegate to jetty - its also a 
requirement because there a lot of services that are simply bundled in a 
webapp as a deployment solution.

>But I might want to deploy a generic
>web application that makes JDBC calls into the database and has some JSP and
>servlets that presents the user with some kind of WUI.  This web app (WAR)
>could easily be deployed in a standalone Tomcat container and using JDBC to
>connect to some Oracle or MySQL server.  But re-deployed in my avalon-http
>component, it could be configured instead to connect to my also
>merlin-embedded HSQL server using the same JDBC calls in the servlet code.
>

Yep - here we are touching on the service and context access approaches 
the extend whet jetty is providing:

* via servlet context (derived from @avalon directive)
* via JNDI if configured
* via Avalon context if requested

The important thing is providing the serrvlet service resolution in a 
totally clean approach consitent wit the spec. Beyond that is sugar.

Cheers, Steve.

>
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
>For additional commands, e-mail: dev-help@avalon.apache.org
>
>
>  
>

-- 

Stephen J. McConnell
mailto:mcconnell@apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-http] SessionManager

Posted by Timothy Bennett <ex...@comcast.net>.
"Stephen McConnell" <mc...@apache.org> wrote in message
news:3FB29C4D.4090907@apache.org...
>
> Timothy Bennett wrote:
>
> >
> >I would like to get rid of having to extend the AvalonSessionManager for
> >each "application" that uses avalon-http.  This is an artifact from
Henson's
> >block, and basically provides a mechanism for the Jetty Session Manager
to
> >"carry" a ServiceManager instance that knows about the dependent services
> >you want the servlet(s) to have access to.  If there's a better and
cleaner
> >way of getting the service dependencies into the servlet container's
session
> >manager, then I'm all for that.  Let's noodle on it and discuss it.
> >
>
> Some very initial thoughts - two possible approaches:
>
> 1. servlet is a component
> 2. context is a component
>
> With "servlet is a component" scenario what we want is to be able to
> customize the way the servlet is deployed.  Instead of following the
> classic Avalon deployment cycle we want the appliance the is managing
> the servlet type to construct a SessionManager and configure everything
> based on @avalon declarations in the servlet class definition.  This
> would be possible if we have a factory oriented applicance).  The
> appliance would instantiate a factory component and use the factory to
> deploy the servlet.
>
> However, this is not totally clean because we don't want to expose the
> servlet to other components.  In effect we want the web-server context
> to to take care of all of this - enter "context is a component".  This
> approach is much nicer because we can define a component that exposes a
> context interface, consumes a web-server (into which context instances
> are registered), and as part of its deployment it reads meta info/data
> about servlets and deploys these into itself.  In addition, it exposes
> operation to add, enumerate and remove servlets via its service interface.
>
> E.g.:
>
>   <container name="demo">
>
>     <!-- create the web server -->
>     <component name="server"
>         class="org.apache.avalon.merlin.http.JettyWebServer">
>       <configuration>
>         <Listener port="8080"/>
>       </configuration>
>     </component>
>
>     <!-- create a web context (depends on web-server) -->
>     <component name="context"
>           class="org.apache.avalon.merlin.http.JettyWebServer">
>       <configuration>
>         <Servlet name="Example" path="/servlets/*"
>
> classname="org.apache.avalon.merlin.http.example.ExampleServlet"/>
>       </configuration>
>     </component>
>
>   </container>
>
> But - the ultimate scenario is to seperate the servlet and the context -
> i.e. we construct the servlet instance, its dependent on a context, on
> initialization we add it to a servlet holder then let jetty do its
> stuff.  All we need to do is to figure out if we can replace the servlet
> instance factory in jetty.  In this scenario Merlin is responsible for
> the diirect servlet instance depoyment and decommissioning - the perfect
> scenario.
>

Two thoughts:

First, this seems to "break" standard j2ee servlet compliance, and basically
creates "merlin-ized servlets".  But, I guess I've already broken with j2ee
servlet compliance by wanting to get Avalon component references through the
ServiceManager from inside my servlet.  I can't very well go off and deploy
this servlet on some standalone version of Tomcat or Jetty.  So, I guess
that really a non-issue...

Second, I do think that I'd like the option of deploying non-Avalon aware
web apps inside my merlin-embedded servlet container.  For instance, I might
have a merlin container that has a couple of blocks -- say the hsqldb
component and the avalon-http component.  The database is just listening on
a port -- no real service interface here -- the container is just managing
the lifecycle of the database server.  But I might want to deploy a generic
web application that makes JDBC calls into the database and has some JSP and
servlets that presents the user with some kind of WUI.  This web app (WAR)
could easily be deployed in a standalone Tomcat container and using JDBC to
connect to some Oracle or MySQL server.  But re-deployed in my avalon-http
component, it could be configured instead to connect to my also
merlin-embedded HSQL server using the same JDBC calls in the servlet code.




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-http] SessionManager

Posted by Timothy Bennett <ex...@comcast.net>.
"Stephen McConnell" <mc...@apache.org> wrote in message
news:3FB2E7A7.3000208@apache.org...
>
> Timothy Bennett wrote:
> >
> >For what it's worth, I'm running Merlin 3.0 RC4 released on 9/15/03, but
I'm
> >pretty sure I tested this on my work machine as well which is running the
> >final 3.0 version released at the end of September.
> >
>
> Proxy based isolation on services was added afer the 3.0 release which
explains this.
>

Could you explain a little more what proxy-based isolation of services is,
and why this was added to merlin.

Apparently, this is a turn from phoenix-based deployment of services.  The
avalon-http port of jetty-phoenix was pretty straightforward, and worked
fine in the merlin 3.0.  Not really any *re-architecting* of the
service/impl relationships and meta-data was necessary.  Refactoring was
mostly of the renaming variety and mapping assembly/config/environment.xml
to block.xml constructs along with replacement of phoenix-meta to
avalon-meta.

However, it would seem from my complete peripheral point of view, that the
service isolation stuff may present an obstacle in porting *some* phoenix
blocks to merlin, as it now indicates that in order to get this to run
correctly, we'll need to do component/service re-architecting.




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-http] SessionManager

Posted by Stephen McConnell <mc...@apache.org>.

Timothy Bennett wrote:

>"Stephen McConnell" <mc...@apache.org> wrote in message
>news:3FB2B16F.3000204@apache.org...
>  
>
>>Timothy Bennett wrote:
>>
>>    
>>
>>>I guess I must be missing something, because the code that I submitted in
>>>the patch doesn't throw a ClassCastException.
>>>
>>>
>>>      
>>>
>>Umm, I don't see how this is possible - but I'll look into it some more
>>tommow.
>>
>>    
>>
>
>For what it's worth, I'm running Merlin 3.0 RC4 released on 9/15/03, but I'm
>pretty sure I tested this on my work machine as well which is running the
>final 3.0 version released at the end of September.
>

Proxy based isolation on services was added afer the 3.0 release which explains this.

Stephen.

>
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
>For additional commands, e-mail: dev-help@avalon.apache.org
>
>
>  
>

-- 

Stephen J. McConnell
mailto:mcconnell@apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-http] SessionManager

Posted by Timothy Bennett <ex...@comcast.net>.
"Stephen McConnell" <mc...@apache.org> wrote in message
news:3FB2B16F.3000204@apache.org...
>
> Timothy Bennett wrote:
>
> >
> >I guess I must be missing something, because the code that I submitted in
> >the patch doesn't throw a ClassCastException.
> >
> >
>
> Umm, I don't see how this is possible - but I'll look into it some more
> tommow.
>

For what it's worth, I'm running Merlin 3.0 RC4 released on 9/15/03, but I'm
pretty sure I tested this on my work machine as well which is running the
final 3.0 version released at the end of September.




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-http] SessionManager

Posted by Stephen McConnell <mc...@apache.org>.

Timothy Bennett wrote:

>"Stephen McConnell" <mc...@apache.org> wrote in message
>news:3FB2A9FE.1080700@apache.org...
>  
>
>>However - the service interface is the only visible aspect that is
>>exposed.  The implementation is isolated behind a proxy that is returned
>>on invocation of ServiceManager.lookup( role ).
>>
>>    
>>
>
>I guess I must be missing something, because the code that I submitted in
>the patch doesn't throw a ClassCastException.
>  
>

Umm, I don't see how this is possible - but I'll look into it some more 
tommow.

Stephen.

>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
>For additional commands, e-mail: dev-help@avalon.apache.org
>
>
>  
>

-- 

Stephen J. McConnell
mailto:mcconnell@apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-http] SessionManager

Posted by Timothy Bennett <ex...@comcast.net>.
"Stephen McConnell" <mc...@apache.org> wrote in message
news:3FB2A9FE.1080700@apache.org...
>
> However - the service interface is the only visible aspect that is
> exposed.  The implementation is isolated behind a proxy that is returned
> on invocation of ServiceManager.lookup( role ).
>

I guess I must be missing something, because the code that I submitted in
the patch doesn't throw a ClassCastException.




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-http] SessionManager

Posted by Stephen McConnell <mc...@apache.org>.
However - the service interface is the only visible aspect that is 
exposed.  The implementation is isolated behind a proxy that is returned 
on invocation of ServiceManager.lookup( role ).

Stephen.


Timothy Bennett wrote:

>"Stephen McConnell" <mc...@apache.org> wrote in message
>news:3FB29C4D.4090907@apache.org...
>  
>
>>Timothy Bennett wrote:
>>
>>    
>>
>>>Hmmmmmm... Can you give me code example of where/when you were getting a
>>>cast exception?  I wasn't having this problem, nor can I understand under
>>>what circumstances you were trying to do a class cast.
>>>
>>>      
>>>
>>Sure.
>>
>>The SessionManager interface is defined as follows:
>>
>>    package org.apache.avalon.merlin.http;
>>    public interface SessionManager {}
>>
>>In JettyWebServer which implements Serviceable
>>
>>    /**
>>     * stuff
>>     * @avalon.dependency
>>type="org.apache.avalon.merlin.http.SessionManager" version="1.1"
>>    */
>>    public void service(ServiceManager manager)
>>
>>Based on @avalon.dependency, Merlin will generate a xinfo descriptor and
>>a SessionManager appliance will be assigned within the service manager
>>applied to the JettyWebServer.  However, down in the
>>setSessionManager(HttpContext context) method, the following code is
>>invoked:
>>
>>        String clazzName =
>>org.apache.avalon.merlin.http.SessionManager.class.getName();
>>        servletHandler.setSessionManager((SessionManager)
>>m_serviceManager.lookup(clazzName));
>>
>>The casting reference to SessionManager is not
>>org.apache.avalon.merlin.http.SessionManager, instead its
>>org.mortbay.jetty.servlet.SessionManager - bingo - ClassCastException
>>because http.SessionManager does not extend servlet.SessionManager (at
>>least it didn't but now it does but that screws up the API because we
>>are exposing a jetty class).
>>
>>    
>>
>
>The package as coded was meant to keep the Jetty-specific stuff in the impl
>and keep the Jetty stuff out of the spi side of things.  Here is how it is
>supposed to work, and maybe I screwed up the doclets or something:
>
>o.a.a.m.http.SessionManager is a place-holder empty interface in the api.
>That looks fine.  In the impl side, the o.a.a.m.http.AvalonSessionManager
>implements this avalon-http SessionManager interface, BUT extends the
>org.mortbay.jetty.servlet.AbstractSessionManager class.  This
>AvalonSessionManager is a merlin component and is a subclass of Jetty's
>SessionManager.  But we don't use this component directory in any
>application we assembly.  We construct our own "custom" extension of
>AvalonSessionManager that is also a merlin component that overrides the
>service() lifecycle method (just calling super(...)), so that our custom
>SessionManager (see o.a.a.m.http.example.ExampleSessionManager) can have
>doclet tags exposing the services that we are dependent on.  But since this
>component is an extension of AvalonSessionManager, it is also a subclass of
>Jetty's AbstractSessionManager.
>
>Now the meta-info should tie the service dependency on
>o.a.a.m.http.SessionManager in JettyWebServer to the component
>implementation of that service that we define in our block.xml (and doclets)
>to our customized extension of AvalonSessionManager (such as the
>ExampleSessionManager).
>
>The block.xml shows this intention:
>
>    <!-- Session Manager sub-class -->
>    <component name="session-mgr"
>class="org.apache.avalon.merlin.http.example.ExampleSessionManager"
>activation="startup"/>
>
>    <!-- Web Server -->
>    <component name="avalon-jetty"
>class="org.apache.avalon.merlin.http.JettyWebServer" activation="startup">
>        <configuration>
>            <Listener port="8080"/>
>            <Context name="example" path="/example/*">
>                <Servlet name="Example" path="/servlets/*"
>classname="org.apache.avalon.merlin.http.example.ExampleServlet"/>
>            </Context>
>        </configuration>
>    </component>
>
>Through the doclet's the JettyWebServer component should resolve its service
>dependency to the avalon-http SessionManager to the ExampleSessionManager
>implementation (which is also a Jetty Session Manager subclass because it
>extends AvalonSessionManager).
>
>The o.a.a.m.http.SessionManager interface SHOULD NOT extend Jetty Session
>Manager.  That is what the AvalonSessionManager in the impl package is
>supposed to do.
>
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
>For additional commands, e-mail: dev-help@avalon.apache.org
>
>
>  
>

-- 

Stephen J. McConnell
mailto:mcconnell@apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-http] SessionManager

Posted by Timothy Bennett <ex...@comcast.net>.
"Stephen McConnell" <mc...@apache.org> wrote in message
news:3FB29C4D.4090907@apache.org...
>
> Timothy Bennett wrote:
>
> >
> >Hmmmmmm... Can you give me code example of where/when you were getting a
> >cast exception?  I wasn't having this problem, nor can I understand under
> >what circumstances you were trying to do a class cast.
> >
>
> Sure.
>
> The SessionManager interface is defined as follows:
>
>     package org.apache.avalon.merlin.http;
>     public interface SessionManager {}
>
> In JettyWebServer which implements Serviceable
>
>     /**
>      * stuff
>      * @avalon.dependency
> type="org.apache.avalon.merlin.http.SessionManager" version="1.1"
>     */
>     public void service(ServiceManager manager)
>
> Based on @avalon.dependency, Merlin will generate a xinfo descriptor and
> a SessionManager appliance will be assigned within the service manager
> applied to the JettyWebServer.  However, down in the
> setSessionManager(HttpContext context) method, the following code is
> invoked:
>
>         String clazzName =
> org.apache.avalon.merlin.http.SessionManager.class.getName();
>         servletHandler.setSessionManager((SessionManager)
> m_serviceManager.lookup(clazzName));
>
> The casting reference to SessionManager is not
> org.apache.avalon.merlin.http.SessionManager, instead its
> org.mortbay.jetty.servlet.SessionManager - bingo - ClassCastException
> because http.SessionManager does not extend servlet.SessionManager (at
> least it didn't but now it does but that screws up the API because we
> are exposing a jetty class).
>

The package as coded was meant to keep the Jetty-specific stuff in the impl
and keep the Jetty stuff out of the spi side of things.  Here is how it is
supposed to work, and maybe I screwed up the doclets or something:

o.a.a.m.http.SessionManager is a place-holder empty interface in the api.
That looks fine.  In the impl side, the o.a.a.m.http.AvalonSessionManager
implements this avalon-http SessionManager interface, BUT extends the
org.mortbay.jetty.servlet.AbstractSessionManager class.  This
AvalonSessionManager is a merlin component and is a subclass of Jetty's
SessionManager.  But we don't use this component directory in any
application we assembly.  We construct our own "custom" extension of
AvalonSessionManager that is also a merlin component that overrides the
service() lifecycle method (just calling super(...)), so that our custom
SessionManager (see o.a.a.m.http.example.ExampleSessionManager) can have
doclet tags exposing the services that we are dependent on.  But since this
component is an extension of AvalonSessionManager, it is also a subclass of
Jetty's AbstractSessionManager.

Now the meta-info should tie the service dependency on
o.a.a.m.http.SessionManager in JettyWebServer to the component
implementation of that service that we define in our block.xml (and doclets)
to our customized extension of AvalonSessionManager (such as the
ExampleSessionManager).

The block.xml shows this intention:

    <!-- Session Manager sub-class -->
    <component name="session-mgr"
class="org.apache.avalon.merlin.http.example.ExampleSessionManager"
activation="startup"/>

    <!-- Web Server -->
    <component name="avalon-jetty"
class="org.apache.avalon.merlin.http.JettyWebServer" activation="startup">
        <configuration>
            <Listener port="8080"/>
            <Context name="example" path="/example/*">
                <Servlet name="Example" path="/servlets/*"
classname="org.apache.avalon.merlin.http.example.ExampleServlet"/>
            </Context>
        </configuration>
    </component>

Through the doclet's the JettyWebServer component should resolve its service
dependency to the avalon-http SessionManager to the ExampleSessionManager
implementation (which is also a Jetty Session Manager subclass because it
extends AvalonSessionManager).

The o.a.a.m.http.SessionManager interface SHOULD NOT extend Jetty Session
Manager.  That is what the AvalonSessionManager in the impl package is
supposed to do.




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-http] SessionManager

Posted by Stephen McConnell <mc...@apache.org>.

Timothy Bennett wrote:

>New thread started from thread entitled [avalon-jetty] Status update
>
>"Stephen McConnell" <mc...@apache.org> wrote in message
>news:3FB1BE26.8030900@apache.org...
>
>>I think we have to fix the SessionManager exposure first.  The problem
>>is that this component will probabaly get a reasonable level of
>>attention and as such - we are just going to cause breakages in the near
>>future.
>>
>>
>
>If I can understand the problem a bit more clearly, then maybe I could make
>some changes in the next few days.
>
>To help, here is one of your post from the same thread:
>
>
>>I did had a problem concerning the SessionManager that may have crept in
>>as a result of the spi/impl separation.  The value passed to the web-app
>>is a jetty SessionManager but the value acquired from the service
>>manager is a http.SessionManager (resulting in a class cast exception).
>>I've changed the http.SessionManager to extend jetty.SessionManager in
>>the SPI package as a temporary solution to get things going.
>>
>>
>
>Hmmmmmm... Can you give me code example of where/when you were getting a
>cast exception?  I wasn't having this problem, nor can I understand under
>what circumstances you were trying to do a class cast.
>

Sure.

The SessionManager interface is defined as follows:

    package org.apache.avalon.merlin.http;
    public interface SessionManager {}

In JettyWebServer which implements Serviceable

    /**
     * stuff
     * @avalon.dependency 
type="org.apache.avalon.merlin.http.SessionManager" version="1.1"
    */
    public void service(ServiceManager manager)

Based on @avalon.dependency, Merlin will generate a xinfo descriptor and 
a SessionManager appliance will be assigned within the service manager 
applied to the JettyWebServer.  However, down in the 
setSessionManager(HttpContext context) method, the following code is 
invoked:

        String clazzName = 
org.apache.avalon.merlin.http.SessionManager.class.getName();
        servletHandler.setSessionManager((SessionManager) 
m_serviceManager.lookup(clazzName));

The casting reference to SessionManager is not 
org.apache.avalon.merlin.http.SessionManager, instead its 
org.mortbay.jetty.servlet.SessionManager - bingo - ClassCastException 
because http.SessionManager does not extend servlet.SessionManager (at 
least it didn't but now it does but that screws up the API because we 
are exposing a jetty class).

>
>
>>However - we will need to sort this out in order for the SPI to be
>>independent of the jetty implementation
>>(which I think we can do by
>>building a session instance dynamically based on meta-info pulled in
>>from the servlet class) and maybe through this we can eliminate the need
>>for servlet specific session classes which would bring things down to
>>just the servlet class and @avalon tags.
>>
>
>I would like to get rid of having to extend the AvalonSessionManager for
>each "application" that uses avalon-http.  This is an artifact from Henson's
>block, and basically provides a mechanism for the Jetty Session Manager to
>"carry" a ServiceManager instance that knows about the dependent services
>you want the servlet(s) to have access to.  If there's a better and cleaner
>way of getting the service dependencies into the servlet container's session
>manager, then I'm all for that.  Let's noodle on it and discuss it.
>

Some very initial thoughts - two possible approaches:

1. servlet is a component
2. context is a component

With "servlet is a component" scenario what we want is to be able to 
customize the way the servlet is deployed.  Instead of following the 
classic Avalon deployment cycle we want the appliance the is managing 
the servlet type to construct a SessionManager and configure everything 
based on @avalon declarations in the servlet class definition.  This 
would be possible if we have a factory oriented applicance).  The 
appliance would instantiate a factory component and use the factory to 
deploy the servlet.

However, this is not totally clean because we don't want to expose the 
servlet to other components.  In effect we want the web-server context 
to to take care of all of this - enter "context is a component".  This 
approach is much nicer because we can define a component that exposes a 
context interface, consumes a web-server (into which context instances 
are registered), and as part of its deployment it reads meta info/data 
about servlets and deploys these into itself.  In addition, it exposes 
operation to add, enumerate and remove servlets via its service interface.

E.g.:

  <container name="demo">

    <!-- create the web server -->
    <component name="server"
        class="org.apache.avalon.merlin.http.JettyWebServer">
      <configuration>
        <Listener port="8080"/>
      </configuration>
    </component>

    <!-- create a web context (depends on web-server) -->
    <component name="context"
          class="org.apache.avalon.merlin.http.JettyWebServer">
      <configuration>
        <Servlet name="Example" path="/servlets/*"
           
classname="org.apache.avalon.merlin.http.example.ExampleServlet"/>
      </configuration>
    </component>

  </container>

But - the ultimate scenario is to seperate the servlet and the context - 
i.e. we construct the servlet instance, its dependent on a context, on 
initialization we add it to a servlet holder then let jetty do its 
stuff.  All we need to do is to figure out if we can replace the servlet 
instance factory in jetty.  In this scenario Merlin is responsible for 
the diirect servlet instance depoyment and decommissioning - the perfect 
scenario.

I'm still digging though Jetty docs with this in mind.

Stephen.

-- 

Stephen J. McConnell
mailto:mcconnell@apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


[avalon-http] SessionManager

Posted by Timothy Bennett <ex...@comcast.net>.
New thread started from thread entitled [avalon-jetty] Status update

"Stephen McConnell" <mc...@apache.org> wrote in message
news:3FB1BE26.8030900@apache.org...
>
> I think we have to fix the SessionManager exposure first.  The problem
> is that this component will probabaly get a reasonable level of
> attention and as such - we are just going to cause breakages in the near
> future.
>

If I can understand the problem a bit more clearly, then maybe I could make
some changes in the next few days.

To help, here is one of your post from the same thread:

> I did had a problem concerning the SessionManager that may have crept in
> as a result of the spi/impl separation.  The value passed to the web-app
> is a jetty SessionManager but the value acquired from the service
> manager is a http.SessionManager (resulting in a class cast exception).
> I've changed the http.SessionManager to extend jetty.SessionManager in
> the SPI package as a temporary solution to get things going.
>

Hmmmmmm... Can you give me code example of where/when you were getting a
cast exception?  I wasn't having this problem, nor can I understand under
what circumstances you were trying to do a class cast.

> However - we will need to sort this out in order for the SPI to be
> independent of the jetty implementation
> (which I think we can do by
> building a session instance dynamically based on meta-info pulled in
> from the servlet class) and maybe through this we can eliminate the need
> for servlet specific session classes which would bring things down to
> just the servlet class and @avalon tags.

I would like to get rid of having to extend the AvalonSessionManager for
each "application" that uses avalon-http.  This is an artifact from Henson's
block, and basically provides a mechanism for the Jetty Session Manager to
"carry" a ServiceManager instance that knows about the dependent services
you want the servlet(s) to have access to.  If there's a better and cleaner
way of getting the service dependencies into the servlet container's session
manager, then I'm all for that.  Let's noodle on it and discuss it.




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-jetty] Status update

Posted by Stephen McConnell <mc...@apache.org>.

Timothy Bennett wrote:

>>Thanks again for getting this in place!
>>    
>>
>
>It's just the beginning...  BTW... Is is possible for some *official*
>announcement in it's own thread to be made on the avalon users list?  There
>are a number of Avalon users that I believe have been waiting for this port.
>

I think we have to fix the SessionManager exposure first.  The problem 
is that this component will probabaly get a reasonable level of 
attention and as such - we are just going to cause breakages in the near 
future.

Stephen.

-- 

Stephen J. McConnell
mailto:mcconnell@apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-jetty] Status update

Posted by Timothy Bennett <ex...@comcast.net>.
----- Original Message ----- 
From: "Stephen McConnell" <mc...@apache.org>
Newsgroups: gmane.comp.jakarta.avalon.devel
Sent: Monday, November 10, 2003 6:22 PM
Subject: Re: [avalon-jetty] Status update
>
> What can I say - this is *really* nice!
> Well done.
>

Credit goes mostly to Howard Henson.  Kudos to him for a great
component/block.

> I've updated the dependencies so that everything will build and deploy
> off the repository.  I also added a standalone deployment descriptor
> that you can run directly from merlin:
>
>   $ merlin http://dpml.net/avalon-http/blocks/avalon-http-1.3.block
>
> then check results my pointing your browser to:
>
>   http://localhost:8080/example/servlets
>

This is one of the things I like merlin -- executing a remote deployment
descriptor.

> I did had a problem concerning the SessionManager that may have crept in
> as a result of the spi/impl separation.  The value passed to the web-app
> is a jetty SessionManager but the value acquired from the service
> manager is a http.SessionManager (resulting in a class cast exception).
> I've changed the http.SessionManager to extend jetty.SessionManager in
> the SPI package as a temporary solution to get things going.
>
> However - we will need to sort this out in order for the SPI to be
> independent of the jetty implementation (which I think we can do by
> building a session instance dynamically based on meta-info pulled in
> from the servlet class) and maybe through this we can eliminate the need
> for servlet specific session classes which would bring things down to
> just the servlet class and @avalon tags.
>

Yeah.  This is the one area of the original Jetty-Phoenix block that was a
bit troublesome porting to avalon-meta tags and the spi/api package
separation.  It is really clumsy now, but we will sort it out.

>
> Thanks again for getting this in place!
>

It's just the beginning...  BTW... Is is possible for some *official*
announcement in it's own thread to be made on the avalon users list?  There
are a number of Avalon users that I believe have been waiting for this port.



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-jetty] Status update

Posted by Stephen McConnell <mc...@apache.org>.
I've just comitted this in the merlin repo under merlin/web/http and 
have the demo up and running:

  http://www.osm.net:8080/example/servlets

What can I say - this is *really* nice!
Well done.

I've updated the dependencies so that everything will build and deploy 
off the repository.  I also added a standalone deployment descriptor 
that you can run directly from merlin:

  $ merlin http://dpml.net/avalon-http/blocks/avalon-http-1.3.block

then check results my pointing your browser to:

  http://localhost:8080/example/servlets

I did had a problem concerning the SessionManager that may have crept in 
as a result of the spi/impl separation.  The value passed to the web-app 
is a jetty SessionManager but the value acquired from the service 
manager is a http.SessionManager (resulting in a class cast exception).  
I've changed the http.SessionManager to extend jetty.SessionManager in 
the SPI package as a temporary solution to get things going. 

However - we will need to sort this out in order for the SPI to be 
independent of the jetty implementation (which I think we can do by 
building a session instance dynamically based on meta-info pulled in 
from the servlet class) and maybe through this we can eliminate the need 
for servlet specific session classes which would bring things down to 
just the servlet class and @avalon tags. 

Thanks again for getting this in place!

Cheers, Steve.




Timothy Bennett wrote:

>"Stephen McConnell" <mc...@apache.org> wrote in message
>news:3FACE85C.4090909@apache.org...
>  
>
>>This is great - looking forward to this.
>>
>>    
>>
>
>Patch attached.
>
>The maven stuff is rudimentary at this point.  Please look it over, and help
>me go beyond my incredible maven *newbie-ness*.
>
>There's a readme.html in the project root that tells you how to use the
>avalon-jetty block.
>
>Any questions, just ask, but I probably won't respond until Tuesday (11/11).
>
>Enjoy,
>Timothy Bennett
>
>
>  
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
>For additional commands, e-mail: dev-help@avalon.apache.org
>
>
>  
>

-- 

Stephen J. McConnell
mailto:mcconnell@apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-jetty] Status update

Posted by Timothy Bennett <ex...@comcast.net>.
"Stephen McConnell" <mc...@apache.org> wrote in message
news:3FACE85C.4090909@apache.org...
>
> This is great - looking forward to this.
>

Patch attached.

The maven stuff is rudimentary at this point.  Please look it over, and help
me go beyond my incredible maven *newbie-ness*.

There's a readme.html in the project root that tells you how to use the
avalon-jetty block.

Any questions, just ask, but I probably won't respond until Tuesday (11/11).

Enjoy,
Timothy Bennett


begin 666 avalon-jetty-20031110.tar.gz
M'XL(`````````.U];7,;-Y+P?7U4Y?^ 9:[6E)<:ZLUV8DO:T+)L,RM+.E'>
M7&[K*C<B1]+8)(<[,Y2LY/+?GWX#!L ,7R313JZ6<[<Q-0,T@$:CT=UH=)^/
MXWXO^#SH_]N7>S;6UY]M;ZM_4_BL>_\J]?SYTV?TWZUGVUOKVYM*086MY_^F
MUK]@G\PSSO(P70`<?W#_1YZ=O\+<J^LHS>)DN%O;"-9K?]U[M/)H9>=/:VOJ
M["K.U$7<CQ3\&PY5Z^A,G2/%J*R;QJ,\H#?X3?T07H?J/,RBGI3(DZ0?J+6U
M/8'5SJG@=1CW0P!XD28#=97GHQ?-YL?P4YCF81".PNY5%"3I93,<YDWE/01+
MH.T^]+%ZUAKF*@^S3S#4)%7=- KS>'BI1F'>O5)AVKV*KZ-,)1<JOXI4EHS3
M;M3L)=U,9?&P&YF>\2A5+QD^SM5ME*NK\#I2W60PB/,\2M4HC:\!E;W+* O\
MH?FC7.08`=HH33Y&W5P-PT&T6X,YZ"?#M8]1GM_6>,[B=+<6U%0ON@C'_7RW
M-L["RZA&E;%/#^\.=\7 ZEPE-QGADPGB'"@"UN%EE./;,%==H+9SP%[8!XS1
MO.1(BTQ:+JQ%]8O;%QPQ`@`AHVC8RW9K\3#.:U*22D?=JT0-H@S+[=;^_5=!
MXV]-^$D\%?^H-?TJUM\*EE>4%>,.4Z"N\6B4I#DNHEM[Q+S<7MB5[=^_Q*.U
M+.VJ-?P%D/I]I:><Z17(L!?9-:!1J0&_@LM?'L^LA6W(8H!:9EG@'.I:]2&0
M%748)S1;5?$0J^'T#<)<`\*F[P&(^^G!`JPV+;3N-!F9].>B2*2"?-M #7'8
MCW^!?G?':1H!!^&)FO=9( E/(^,2V>:PW0U&JD27-BD#[PUD1R@HV$'M%T7N
M?R$)(S7TPSS*#"WB-C25<7YUY,JJ\[D$_,G+E7;4_YJR(*<P%*@VPDT(:UHU
M@B!P>4HOZD<Y(\?C0CB+TF: _?T-^QI GVOJ`EAN,HS2- &V?Q'VL\@%BFL6
M_G<WH&8?*2K48-UV^V/ QV[MR9/FD^ C</L9%.5@6+C4= R?A>E\&+XKKICC
MS$:7.W/0G72>F0/HR-/NTIM[(+FB@V_GI:W+N]*!1AC\GG](#R)G@C!E?KX>
MUVI5[6/$L^9B65^7:\FF.WU=31D1;,?_U3Z1O7@*%V,0)$Q+?:=FB>+N0G#_
M_NOKSEGK_<EO'OL):K:<`T_%\F@H^GF5#_KR\[/YE7_.?0C19PTA&\5"44TL
MW%#Q8-2WW]R5NRU@)AS!Z*Z3X51^$(\JYL/E5'^0^:#QW(FC.0-"ON;U8BXV
MYV+EWKS.0^Y=.-Y.4T#!F[+^3_CJ)L.+YGD_Z7[Z(I:@&?:?S:V-IVS_6=_>
MV-B&WQL;SYX_6]I_OL:S`W.?AS'04H5Q8.TF.E_+HA24@=K>"I-7MQ]F63\)
M>U&Z5] RO1V%^=6>LT9VTFB49'&>I+=[WN*ACR)]Q#W3[D4*O;A)TD\O_!=K
M2*JUPE2U'6P$3X'LYX-+XWGA#"X<Q37;\K4U&QA#2=++8 !:^GEX&[ 19<Z*
MR.H^!XA06/E^I9UF%;)VFAYJY84]`X70<(;Z4@?@Q] N[/\R9<E@!-QBJ/>=
MZ#--*I2I*0*V6\,AB?6-<10,HK0?#P.TT 719] 9^U%PP/]*`VV:C[";Q]<A
M[U/]\!>#"\O6`QL0?%;OPR'L0ZG*QN=KU.SD'F9<96UPF=ZWBP1 FG1[B0L^
M'X_*'?TQ.B?D01\G]LRUG<W5M1^P+,!FT-5]L9<2,./X<IQ2"8]$#N,LCW"M
MHI%HM_;M^K?K)3+:AP4=?2[FFO!10VOFU6ZM*7_#QEA!LAVF3*EZX%45NLV@
M+@^<B]V9="II7WKM$'X9$?A2YD,FCXHQ`]NKV-Z6SXR']G\M:WRA8Z!9^_^S
MC4W9_S>VMS>?X?Z_M;D\__DJ3\7YCXJ&W:0'>L)NK=TY7OOVVZ??K6W4_@H"
M@#Y'T+(`+%C06?8LV34(;&+::4H)B]%>ILEXU.[MV8QTIZG?<IG8_4P[_TXS
MUI^1[^RUN `Q5YMS[VL&L=.D<L+&V4C[=Q[G'FSVP#C<=UP0&-DGV#+VIG(U
M$*FEF/1WV(U(5?LI"M.]S?5U@.Z^XW+9%;#MUX5F-VD0.\U220N#K"G"),51
M9O%+\]H3M7R,&X'*P[HI#SM2? &;5$45E)EVFE8!MZ:0T1Z)9CO-:QNSS+ZK
M.OF5A\#$]+N/H8KPI_3?B*QS=)VH>_$=G[?')?%X2I<_PMHHE0_@[4[S8YC^
M#IUW1/09'7?*SM5IZPTM7DLY_YV$%]K_L[3;Q,$TZ>2=N%Z3Z:[)7*^)7*_)
MW,H5K<E\,Z.-Z?O_QM;&IMG_-[<W-] BL+7U=+G_?XVG^60%EM&#C<W64U(K
M%!UTJQ;1E>HD%_D-'G4?@@HYS**&D@U8;00;B^[)"H@#H]LTOKS*57U_56U\
M]]UW:[ _;U;VZ$TR'O9(VPA4J]]75"]3H,CCKMP+$-XIR#E9GL;G8RRGPF%/
MC;,(+:FB[>.;\W@8IK=D5,T:ZB;.KU22TK_).%<#$*XNXFZXMJ(01H,._D=1
M2FXB/33.7L<]^$%^$&CQO4CZ_>0&#;>@Z_1BK,3>`H,H?X&=V@B\?I&WBGVV
MHP9 YPJ&@JH2^UV<)^2=HM&CADD.,]*@Z2//@SX`1#AVH\.>UR-H%73!&-@$
MH6>SW!-HS\('=R2-8)2],72NJBL/[8F2(?:2[G@`$AY-*4&#6L#C5 )?4S4(
M\RB-PWY6H)RFBJI:0Z"!;05$,L"[UV"^4Q>V-FE;`%('"PT57T#CMPT:/G5%
MJBAO% H$RV%R@VY""/Z%4C5RPF)\Y<9XCK/+9$O0>M%UU$]&T -V' &XDZE;
MJ;HX7MW<W-A.5ZM!C:"U^H"9(:"G#SVF&?"Z!;B[A7>C$<BV&MNZ/RK.LZA_
MT8 A7FBDJQM >'1-QI\N(BA.>VLCV%QO/< 93'XZ"/O]6X%.R-]FY*,\GZG:
M#^PM5FNHFHR1-R9Z0;_4&RWMU;!UZD5M,CYJBJD2Z Y]CL;HPY8G.-=)"FL[
M0=>M9)#DC&J9B0QPGL;7B'%R96,T&23HQ8Y>7[CV4US<3(2TU&D/#: 3YIOU
MOJ%&_0A4*D6V#9AUGJ/OBZDBM#P-U(GNC.E-T1G3%YPL')OE4"78`)0!OK& 
MC:.:GEF9VIAMPS"C>E3.H*R.*_&28RJ:S%ZQ]V?OVAW5.7YS]F/K]$#![Y/3
MX[^W7Q^\5O_S/ZT.O'C\6+6.7L/_?E('_WER>M#IP+?C4]5^?W+8AI]0[[1U
M=-8^Z "K:!_M'WYXW3YZVU"O/IRIH^,S==A^WSZ#<F?'#6CLH**>.GZCWA^<
M[K^#/UNOVH?MLY^PR17UIGUV!.TI]0;::ZF3UNE9>__#8>M4J9,/IR?'G0.%
MG5:OVYW]PU;[_<'K0$$7H%FE#OY^<'2F.N]:AX<*VUU1K9/6/K1OQ@I0/QR]
M;IVUCX\4#>BLH_:/C\Y.V]#UXU-H]M4!]+[UZO" .D H>-T^/=@_HY'*3QPS
MX NZ?MA0G9.#_3;^`%P=P$!;IS\U$#; [1S\QP<H!5^APZWWK;<P\#KA"W:@
MR2B#Z=C_<'KP'D>#B.I\>-4Y:Y]].#M0;X^/7W<0>N?@]._M_8/.2W5XW.FL
M8+$/G8,&-'/6HN81"B 3"L ?KSYTVHS6]M'9P>GIAQ-$P:I2[XY_!*Q!9UL?
M<(YQUH^/5FC8B,'CTY\0,F*$Y@@&^>.[`_AP2D@GU+40(:H#.-P_<TI"NX#3
MLQ49,HY7J:.#MX?MMP='^P?4R6.$]6.[<[ *T]KN8!& 2^W_V(*V`3O0/M(0
M#@]^>]3;H$E7[3>J]?KO;2)3+@Z4TFD+81$*]]_)%/ 2<)8IKO8,-@W:O*^3
M_AC6/NR:R .*W700XIX!/'X`VPFLSUX,.]<8-K$5A<OO/+H*^Q?:5]5?@8Z$
M@ZP'U*X(5SD?_^("3H:\?B<O7L.<LBA2.]4;R1X-[TES944,)6JJ/>7ER@KH
M(: "*M0F`AAJ/W@79E?O0_A4^E+]]A08?3)P/A2Z&9FBW\%_Q/Y\&OUS'&5Y
MT6ZY>\9@$/232U1T#I/+@R&Z(_9>WJT6_#-7#3F3">1XY>"S&)#N4UFTL_M4
MQ2&ZB'&5<XW3UCG(-[ YN?K@-)3:YP)^K;DJF4,4:&6E^014ER>J-93M?RTD
M0F5;FG?F%&#)G?,]6K7P_[@V@7$#*SH[5L? >DZ!D>*:/SY]?8 ,`Y;JR0FP
M#2JIN1P"^>GX@P).\0[+`"_8:9[O[9RCSD^=X04-6V2_AYMM/ 3E<IC'(<KU
MUW'(<A*C&05CD+(N0L"\J1V)*"6]'^@3,P,1!.4TC7L]*"AR'DFCVC?]-LNC
M`8*"C3M)021 .6;4#T70EJ;%UR0<=F]9M.XF:1IU\_ZMD>6BW"4DA G:QE72
M8U&,6D7;050(P=++CRA*=<FW;#QBU&/M[\,Q5$_5NP2FJ:?>@>Z'0GGQ0>V$
MZBJ-+G9K@S#NY\D+M!V#8 %R:))^_KZ;#+IAE@?#**_MG<4@CEW=JE?1$/Y&
M.\T>@V*:F79HM^:<+5J&[\T:(.,"N,(M^F/DT)6P5[.A:NSEMZ.9QU[^^:/5
MSD:-..-H?-Z/NWR0IJHL*R1#L?T<"E0N-E8D]"QDROW:4-:*;JB"?ZW\*H(L
M'D-&BEF4&OS<%UYE?W3)``IE'H,I#'&T(/%Y`EHW4'X*@BG,*_KNGUPET3#^
M[/8/SX\#J='D1ADG5=BHKZI?C66!"*N^RHW_MO+@UM7WH(N$`Y72'C)WEWC+
MD5KE_LG[2;W\'O?/._+E;^1=W9V6U:HN7R=Q3U67UXQE%19[BA<Q_"W'&HL_
MXVI7U]8#JZ2 F:,K[:K?1/0O4B,HPO6Y]];)@W<!"IESW55GA/P.1F:O@-]6
MIH[K+IOB-\/H1M[4RU*(-X 4%,TN;AC5L#1K45-AJE1@6^/4%?7NLHL@]-NZ
MKO"RH&+^`F/+6SF+H%'=;,&![(H_OV\=@3Q[VBA1ROR@#H_?"@29G:)F&N7C
MU/3964L%IIB)ZO%-YYD&?P5BFD_4VD,>/75NI^XV.1;;*$V$C'<!7:WN*0C4
M2 IF9N#ONM\WF0>D&)',ZQOK3A_YO[\MG3#^3SUW.?_1OD-E-[#IIT S_#^>
M/=UZ+N<_6\\VMS:5VMS>?KJQ//_Y&L_R_&=Y_K,\_UF>_RS/?Y;G/\OSG^7Y
MS_+\9WG^\]7/?_0M@7D/#ZKOH[PLS@3P]F'<-?9NSU -O)T""SC6^+#'H@5]
MA0\WT;GBJT]_! NV?67'L24[-NLT! *"2O<V6U<C=J;YNJP0VE9I]ZO8%>:S
MJXW8<JO'D 4P*P'.78 WG03B-Y=1?@18JE=:`CLYW<8W92R[AM@T:C\E8X[5
M$P^ODT^P.X9RUL&;J9F+%ZJF_E(QV("P$)@F7AI;R!_?&/) _9\=7V=X@,[P
M_UQ_OKFM]?_MYUM;Z/_Y[/GZ4O__&L]2_U_J_TO]?ZG_+_7_I?Z_U/^7^O]2
M_U_J_W\`_9_\.N,D:!];;I#5OIVBAI3=):>[@-[54W3.TAFHBME40\87=OB\
MLR?E0BPNJ(YGN,N39 64A?N-[7*H71DQHFG$HJSV.1R!\LP[KJX`F$2@(CA,
M`HDA8F&#PNN9*%9THRR[&*/D0,Z'H?8+U>7G-N/X5IR<337!.9MJOK_\G*%]
M9K(-Y]I6:*;82C#4AG96L8AHFH5D.OE]TTO>1GF%QTE#51#I)+\C\IV:! E]
M5RJAH9HT6BVNY%J>9?;JA%WKN,K-S/)2<KS-2LYGONL;=@A-+]K=9A7_F,-?
MR?)=`=F\[K7SIUTU!%HJ>\%D(X1_/,Y'X[R3IU$X@!9!'!KF_6&]MH,1S/9V
MKJ*PM[>3QWD_VOL1%FO4VVGR7SM-_G:>]&ZAW,9>.U<W4@+^JEF](B0"__^U
MI%![!C6]'@`W[I=5#WM!/TD^C4=>*=]ZY75AKF&/]M RIA=:86O[BZKM-$>E
M8?T&2S3O7M5]QJ<B'^'SM/XFQ*C:R#\PM)YT`IVRL4_4F_<<`J\TMM_N-KE-
MGK4F3;(]IM]4U,^B!] *#Z&*."[TEXV]*>W;#HMW\\!ZD/UOSHO@L^+_;SW5
M][^?KC][]E2IS:<;V\OX+U_E6=K_EO:_I?UO:?];VO^6]K^E_6]I_UO:_Y;V
MOS^ _>\/:C:KN@98&,$ZXW/2I250^PX*7GM553!H*7R"J6<A[X:-6;T(JJ<1
M3\ 3[[8NAPS#HC<AYJM*@ (^.>F3$I0PM/TLHRO/O[?;TJ2[MJ[?4@:"#W09
M-N*O=-VV4H$M[HU5S)AGDU/[F"0,O<;H1A3?\X:^PKJKANWZ)%66F7;#U6[;
MV ,%#T6,N46Z>$D;_S?NJ/)%<PUGX%P_O)=5Y%_GN8O]QPUD/4_D/WZFVW^>
M;V^MK[/]9V/]^?KV,Z4V-S<WEO:?K_(L[3]+^\_2_K.T_RSM/TO[S]+^L[3_
M+.T_2_O/[QW_+TZ"-S%:@R8'!9S'U$-Y=N+\-G@=9Z,DX[AV=ZEGLOS>O6H'
M\_K,7<W)=!/LZ[\>6'UNF]B4^G<SKG4YB4\@R7SN4^=!#8[O-%D214J'"?K7
MC>\X7\#%BH"0QO^L:L)+A=Z!*-;W^EPJI#-<32]5X;OHE.DDW4]1/AM69SS\
M(<NBV07#CZ.@]</)QM;LHE<\S.!4\K]-&[8;/$Q\Y>Y286(0S>H*,)^MT:@/
MRB<2WK19XTBKXWX>VPZX8NAN%Y<[0^NBK,X0IHJ<@MJ(.T8;+^U)')_3O5VK
M)/JE<CB12D:\YV$,/Y)HO7N\N"_UH@MHJ =[&,+ !G[]'LCWDW*-5=]HR$4;
MT6\ZHN4?P5)NAZCTLA(NUE1N):)S@E^N:'/O),2M3+8'5\(OF]U=R*0C^+':
MK""5I"07A.:S^(:R]TD0ANW-V@U]2:#,C@S2J9$'&LKJSJ_:PGZWQW>?U?GW
M!C]W]?HJ%;"(G(K!WWZI"5$Y]>>""T*1*XLENL7N%K[S/@-O-HO64&J#-D![
M?)<,T"$5?6A+/6<9#D<FO#234(0ZL-QJ:11\AWOPL^09@_(="G6+_I6@`H,"
MFM_6:YH,H6U0;*M*H.DF```UXPFZF#G/D"-U%;"BL*][N__F[<^'[<[9P1'H
M*;NJIG>.FC^Z695_/FJ]/T (R"GN7IO"&$-M9/%WK_WNN$.UKY+L'K7/?CJA
MGB-CNGOM%FC#6!NX;[)&F3+OUX.?.\?[?SN@860D&-P3# @`U)V/HWL"^*'3
M(71\!)GC'B#:[P]0%45\QH,H&<\_#E21#_Z3J@I[NFO5GT]:9^^(C,+\ZLZ5
M[T7!:%PXY&D3R>BN51_4[OU&K"M3=''=O,F6.C>8'P]>V9,&NY0[;\YA\!-G
M<Q3O@T+ 8-FKN ^CE2;5&45=.HE <RO>#<@$' I<(.D@#T<S'R@1;&#'"SM)
M>EM8N3]%M[ >1B/FN5BX-DZ'DF;Y!3-B@8E6X"S*,Y;D0J^3CS-*&%^T$:AC
M--+?Q'A"Y!45B&X%Z%2_C^)@"$(KF6]CLO)CW?<'IX?M(^!E,!W1\#I.DR%9
ML:$_.8Q,X"5<."P$9.B5)(DL(X%C1^L)D #2@EH+V5H:2,XQRYLN+4?:["'B
M:[[:.X2.#!0E>5=)%SJ"%ZQPATTC()3HNN@Y=9O;HTDKD"+6X$CWS.VTB&\P
M/B@*<[E;FCT1*6VS#!\15)SC=VTBK.N!RUMSC.^/U@G$K/&WJQS9R5 \"QRJ
M2[8IGX!84+*@F;#.( .P.%7W;OWH,D&<M8<7B8B>]=5557R!]_6:O< `[T$0
MX/T+NT]A#M+&B"@/5G-/H9D<>UAC/!930K8Y6 *FZS84Z-1-Q #BG @?[Z\Q
M)"W\T$4Y`&! %G>N2M>%2"*[LH6QXC,T]R9.\7+83?08U@[6?JP7\^.7V!<Z
M@NPE439\C%?5XDSWZ;%'*(\+L.5.2/MU[,RJ83\P*?6"=]@W<^1ZD*J7:*5;
MNB#DS>*/83HL9K%T%&U*@H(WK->*T1(GPS.2"[1SXKF')D <#R[\THCGNZLU
M9>S^6JN^)%6)A<]5]Z3NAHHJ=/A#G((5WE2$W9:ZOE+U$_M'Z)APN<X6[[$<
M7>0[SY+^.(].8 ^N.S3BPK7&_3HZ'U].&+@IUL-"=9 K: /PN29H]A3JR?3(
MN>LETS+EUMJ#B/* &+ZP$[*:P%Z6H>H:9U=>3P/UP9Z'`-2>:,*]L)+_&*N&
M6%M."PJ)08Z0"S-.;TR2"6P_,/(JOT0-E!@&VV7(E[%'CHWG=#LTZ>/Y9&$)
MRL:XTT;&`4Q[? 5T+J(A%KWB]C(U'O$AA>,7H0OI2&$O=/V=T9[^>7;\^O@%
M.Q/HOA<5@*6;*N<ZB6OA;,?[N[[%7'&SV91T]G;?UCMS;\_TK!08+>\5#_4!
MG.$N*; 7[?OW15S_[K2+&Y*7_;M8@:5KQO/DN' -.3-745!!DBV03> 3"/^N
MZ3,//XD<3TXSR<4+BRB)0)F^])L_]_.7#H0_7^8O[2I_'IYGHY?R7RBLK1%B
M?AS<KFEK3$VAI6"W]NWZM^LUA7K_;JV?@)) )@"A+]&CF[.:T5*@;F4__PSP
M@9GOUIJ#6_S1?%*;"L0#J._(,\#WMUHSU$"U^W/3^F34K]V:'$<&UM?I8YCC
MOT!,TU#0%!S,0E6AXQ78$IVOP)A^,Q/Q%=!@&RH#A)<HFN#>4P$4NS^5K(2?
MV:^.AZ0UTM%R8>&3;4";ZV%/ZR=AC[5"M.RLC4>%6FE.!H1OPRLZH(AY2=!O
M_*'!L^['?RGRJ!/O,"19#44JMT\PU"=L1YD7YI.!0!_/2=C)DT"UJ<E0GT3 
M*@UU8(&&!HM-R?:;X;#6`_J_AFR66!_ %JU&F4&";&,#8*_PMS/<KC5WNN>N
M_JV]KD*S\US@_F&<!E,Y?K*.3S10F0L2ZMBS"LE!-S-.^_PW#.8\%D3JJH"5
MJHT5.R+&A EG." +N"QLW"]^]V.@H#W-DC"GFEHCH&:"&67<P6&8XSF.X;?#
M(:"%&C&#]V95-X02!](.SIGX_*G0;.286RUPFY4*F1K@2=BHST<LF=UHPR1V
M8XZ,!615&!(Q1(/ER%N4G/AF(829K*#C@[Y6XIYM,G-CD8F(#9?3L(?G5UR=
MEQBG9L-MNZ"68<2&'B#/'U[_30L!F1XT$"CL8'1F4X G.M0V%ABIC4IN'!I5
M[\[.3LC(E703@WR-U&"G"</SAAI^'/GC=(Y;I0=.2S),[U!0N[Y@;=.'8@#C
M++H8FSZQH<L<G]%='.$"(064T0YU(:<52I$'%,35( !RH\(IPS*3?<Q9-6JT
M`Y>FUSV2+@\<"B@R)'<ZAV: D[#;M*C*H6SD`6$_2SCPK>&J@$#A6[G#5($7
M:*[EDCO6TD*M1>= .89,Q!T0>L!T00L*=00R;"0*!8T&C4:_V-[:*G@X6MTU
M]Y<"FUO;3PL^Y S87E&,9-GS#%=!*@XOR049UN(PSQP&=YN,8>"9X7[,$&2L
MP!7U6+WJR*=UNP5C(HCU(GMCKEFM</X/IX>K9IS<!@(JX5.OO#3J`Y%?E[>"
M0EEP[)>6"SGL#9FJ#Y/AFDA(#0R-$BB,)0(_\VZP6K$O&'LF4HH(LIF^8L84
MP?[8#:L'661_H9D.,U'6LED\3\0R:P\HMP8_LRY@1E:,%OD*Y1/G+F)7.5[&
MJ!#PB Q.>4N:U!/:=]>,U[%)L E*U#7VSEO+-*EKQ5:*=_&H8;N#XDH=HZHG
MTX)[+2^S)/D$:^U35 )MA-?J[K"_!>T!4U=^&NGI'<@M01R(,U$B583&2E6]
MPJ8#UA0S";#E:#8;/,8.LL0-&GYT0\LWMN]8`MT4\BZE9)45Q+R,,(SQ=_)B
M80[9S7*27&6V;FLQU9'L@.IZ6K.#9G=BX0KQ'I&L(:]5I'EVCK%AR.T0M.[J
M@&<:8T0X9K,D%;:0B+DIFGO3A&[4(!+CF/<2--4.(Y:QC9 SO-6C3?J%BP(@
MDF]2X SB-18L8&D.6DKWV(IKH &FA!=3M4T&A= ?#UZMM8_>-#%:^^=!'^$4
M_C?6F'E)4A6*"V<+ML6LF-L9%W)"4S$Y#50YX@NSP@#S8:HEXJ():!.]3**>
MOKC3TR=1WKF.1WR>&8@'HT=B2[O%*4_5,4^%7^5,@Y!N8)9):+:]9K*7:>'D
M4W=Z.?G.YH0*\MX^[*D8\WW--_L%*DH&')F2765[TTRPVQ2N0O<WW&@86FPK
MN;5IY3'GZ<(3^V([=JG&\K^VE%6@TS&=S"*9!DJUAK=&!C-Z=4,OI8P%)H_?
MF$6*NR(N921XJT=Z9-44.P^1BF4X]E'Z0%JM]L'^QC0S(=D#T:9=2!/B@VG/
M]*/B],]VP-*N3.:%?6J!,Z %^\S_($RW]-[UV<S<2^$5-DE-Q2@NHV6EV*^F
M$C3YQTV@Y1(;O"^94(?&HP72AW'K^X9@3R$+^;XPBJ"6JUA100R!M%F9`KHT
M5\EH-'&NBJG"F4I&TR;*'._?>Y:NQGDON3'+N'*6[CM)R:@^^3B OBYNAF <
M=(*&@YD^3=!NGHZC>==6CSU(^W.MK/U^% [QV,JRR0%C3V!!V_,ML$LL>6XL
M%VZMWW#_IC%)4V*"_T7AN<E?2@<D?@&7!7H?'4]/\^UNJ<,KG8R_Z46C?G+K
M\L@ZN:OT0UB;[%+54/Z;*8BI`BB>68*>AO;4@IT6#Z9M')8YMO#UNJFL:]TQ
M,7SU^--HD%Q',\9?.=KS)$'"5)40W ';`RR[.927DN<.8-T04=W\,YZNV54N
MH]S#D5<?%SW6F^ W4.H#C\C S#^7/"LJPK4*H3+_(*Z(`B<:;L@!`G4VQ[*2
M".+84Z"ZX_A(DJF+L(]AP9UN3,.BM6]PE\7KH WMI.EX!*QCB@."/Y /0QTB
MB#M=TDM[X\AX/4P-F5L]'-,]]\;(W3K&+KX+[]J*]QWY_*2EUR(;E>K=@J:-
M^>-DBT<5(93=UAA:?3[-JB&IZ*0O]^/0F!B,V94T@*L0E=UH:%U>\30"U%>G
M"S):C-0K%=N=NG/JY<ZN/+L^FO1G+3*6"N!C<W3'CZ;E>*OP/)HQX\11]TJ^
M=WI7"+1I\6_1;9V*3J0;:?#4N$"6V\&HTVRUYWC7BD0/;__'Q[YO5H#9577[
MPZJ]?9'CEC>6JNX=5O9)_#:CGM\1![=$DLVB/Q2:X#PJ!,3H`H]6)688XSK.
M2PRS&,\TKCE/MY%<D0?>1CF3;9>"7_6:0BM5HRF-2$9U&54IP.:$TBPN[8QC
M/8XMX1__K6R90NO_M)=<Q?U>&@WKMO-\11?+OF!AB@>QE]2=2JIZG'DFS#)-
MX8/UZS&*]="U]9?PST[1VZ ?#2_S*WC[E[]4S4EIJ-0D`#(0_A'_=S7"M51"
MG(<M(6XP_-*MD@DSA_1#4(+HGWBWO'I-ND-FKE(PUZK'1SE=*J^@A6FL8Q;,
M0Q# )K*%"1.F'XL'V*HZBB474ZHYRVV*D#*UVY5+CTTVT[IL=SO(HMPR/-@2
MQ0P(9?9ZB3#3J.?[6>17<B0\'9,:+7\R?8NS#K.+^E1"FM0CK6W?B3;*"/+E
MJGF;KYZ>&0S0?HI]=?H2L3I@.,9HS)M.PPQD@2-(4A9 [+URUH!^F_AU\I=S
MV#0^58,M5ZH&4[6A].*>\9AW2!6&!+JV,ZR_E@`0B1+OFD23PE-!7!UDE_8U
M/L;A/VQL_C?NR!)$R)C>HFXXSOP-S_A4UZHQXKH$<^,3YH1$/K(Y&JEO<@71
M?&C8TL,O/7"0@,=##/$T+.;&N@KUU48^GP:XJ%'';/SO`]'W;E4Z'@X!;,60
MYQSNW$,MAEDYQ*\\J7.,;JZ1:3_V">H:G=\9E0VDY#^@RI88A6)NC>W.2M+#
M])DY%!!-!*X"DHRFZA]3!"*[W#P"@K6/EZU,1==+IB"#^AG[9_6F2[V?R5%*
MQ(K_]0GVD'Q>K;!-OH=C3T?3*TXC78W#.7J7+.48W^V<_1?EC(^\+3()1TU;
M8=J+TL+K5G5A3D%!IO6AH1GLVH&LQ7DIR]&'@O.CRX&"A"C6QPGFIJ$&9W5'
M^JG#71O7/7=Y9NRH@60>#\?BQ6,Z1Y "=X4YT1 *RK=%][(J-77-35I"WMTY
M6<*ZP!EZ0LY4N/ *>&/B[73/.F*#UEI8Y8WTTF*Q>LV*NN-(6:7+-)^H(W$8
MR8Q^3MGYC!/?==B'&2%O'T&^WQPJ'R=)2C9<%PNM#(V6>/NR%)>@0:Y\OB'/
MT6>2K )DO12CH*%JXGE=L\%9`L]\&$7/RMDH]9PTJY#Z0+Q\N[V]]>7Q,FN8
MCJOQEQCE^K?K7W*4EL'2VA3"7F_:CN"=(AXR#],%V1!M.HD&)V25G'=0I[V;
MH 75T$O*KTYCI%1Y+_Q/A%%[0&+"UF5>SMAJ^.Z!+<UD<^\S["G+G%O#9/YO
M>][9O%;O!%Q'7X"HVIPTO&E[E+U#6=8S;P.(KX%,6<;RG"NF<?E%F1+O;>B[
MHX'/%\W>1N[]E\<9RZY5LCY)MW,9`XVDXS?7ZJ'(</3A\-"2BI.2>NV:;)'E
M4MM&_ILJ7?EMODY0P"PBO[CVX;\Z5V[0HN+4UX<9<=8"`"165J&@E;WB@O52
MV)F&LMP!["%9(*NDU.I+X#(FI-"F'DTQ>Y7%)PDB\]HE)_4!14]T/'!U'*/>
MB(P_T2H\SXQ.$;+GN3RMG\F'L;PY43MX7]&]\VR:FD_A]UNI-I.18.KJPI/O
MO$_25@N.[-X0F)<G3V=]A?O8%$9G6IS"YR3LS PVIR%-XW+5BZ&2]VEPE6<;
MCO] X:$B;G;ZG+^"!K2;<68\#"B.0#4OM ,=@3S1?%*K2H7K"Q+3/1?P<:,Z
M:I]]_><NBMQ>(IC)L/SY-%<?"N[FS*5$(YIV1O61Y_0CS*E)':3G]..\1U12
M<__BD@;$8/[Q<<(YE8L"Q*+@J#[1>EPT4)XX.]A38ZZ2)CC3ZFKC04UJ6C&W
MCH%H'@:QZ-I$,#.9'3X6Z>M I*_"+*H703: KS7%=67*:F L35Y:,'DRCW5<
MD%[0TW+&Y3DW@"G,/QEFL#=W#2NHX/]WX<7ZNJCC<C*?C#R=(9?\=J?SY8M6
MFDYCRU9$L"K6W.5EW&76C,#,*N[.*7]*O7]TO64[V:6MBBIFT!*LEJHE@K2#
M]] +^FS,`"9+#YAT@/(8RKKU\IJ9E"3;(P>0<.72*4?1\K)WR4T=?=U*1_A5
M[0L@2?^UADGADC+[2HOQ`*002J&IJ*.*X(E!K\>&&/N6C(;HV:VQB+4!FJ_:
MSPDAL*>&MP>9DA/":U32=6D;\W>MBEUZG@`>5F1H6 B"PZP0"4A%EK?V'C]K
M6W5=4"GVD('-7]7__J]I3Q8+?EKW%TL9-!"KV[PO?%1P1Q?*+%-,U;KV^EJY
ML/VQPF(VV>E ZG1[/6EO+PVX[M>SP%=O\=AMO[]S6]#U(/Q^3#Y(N,<4W76:
MW"X6O[2G;#_\Y9<CUK7O$GPGX+N;QG94-.A)2>4%5W?_7BUY:0>LG==-WRI,
M26XKD_PB9;LL;93&Z \O/YP>-DH7D.GL:)P9,[YC6S8W_'A#Q\N!?"'?:Z:A
MXJ!TJ5!#I!:(U]JLEOLSB7/*O--TF3NU.MR%OF7HW]\6X8,2:(6J'[&;49/"
M1J9AW*>_G@1>4]P1:L6ZT2AWA/DPAB*,V-<K[R)7Z*W8==@^(D6\\%*GB^;%
MLJD$H6[";D$>9=T-/LO"JNZ!-#/=<K5_%74_\4%#Y-[7_+%U2F>HE"HK2_15
M3;Z2VCIUC4L4UA :E Z1Y%#9/GFRC49!G%&9RI-%01,V+L8RK%&Q(@U05(6'
MO0@]V76M`)9QWL:7QQ?UQ\'CJFIH/J)J?]I5:QNS'"](R37@LS%&2$<AAT'\
M16U,<=Y#IL9''.W+89)&^RCZUS#&SU3G*YABY#,'C'K >KW""J:?65X[O_G4
MXZOA1OTP:_$OK':[[7TQ!JN[=8F<U=TJ%LYMY]%[?)WG#3 5*U22(,JY;W!4
M]G]COC[/&8A>N("#B7=1W#RW'%3ET+%;>FS*L5M6G3]6WQ<N,.&4=HY@=0<,
M*/NBI'5H]#[\W(9I/(L'T?NL7JA3LXZD)+YV0SU;AV?.8Q=\IB.-#]'NC#7O
M[&T6VKRH0![>/&"_-^(F(TR?-V?CH<+H."7?'8I=P+VANW->F@WUCXDI.?[;
MWYJKC*M&>Y)8$_U;HT.5NN2K4=/UIZHI]DZ1J^98W\2?=ISEP2E-OM?,'69?
M6SH>1 3NL#YEWE5]JPTR>-1KGZ);\DNU=P)KDY9-0 .R*N+7&AW$_AW]%>HU
M+-$,JN"]L6,K1#WZTQ(F=#N>5\:?W!H@5N@`M671PL;MWZ0']2H[AVFK'/!V
MWA-[IPVOCU.!5E+""6R8-TG:JU>@>"3?;#235C:!JJ!7T\#!U*S-`W("(UEF
M]7[H<]C>/SCJ' 3YY_R+M3$]_[=ZNKFU2?F_UY\_?_;TV9924&%[?9G_^VL\
M"TVX_:A*4<"==)[<WX\6F_S[T<JCBNS?SS'[]]:L[-]0LRK_-X%<9 +P1PO)
M`$[=6F0*<)[&>^4`I[XL,@GX_?M2F06<P=TO#3B-;9%YP+DS"TL$SN 6E@F<
MP2TL%;C!_ -R@=,,2#)PR0:NK%362N?_QM\UD)3#/N ]I;_>)&F.X7?ICY.K
M)!K&GVM"7;7W9#V@7.'3\X27TH2[><(?B<1/R<*M3.%>JG#EY0KWDX7KQ-H"
MSDH7?O]\X82Z128,%]0M*F.X4-LTGOQHL3G#'RTV:?BCQ68-?[38M.&/%ILW
M_-%B$X<_6FSF\$>+31W^:+&YPWTROD_R<%X,"\P>_FBAZ<,?S9T_O'KWH?']
MWI+QO\8S"*^C(9ZG?<$V9NA_:FOC&>I_V^M;H EN/2?];WU[J?]]C6<'A)2/
MUDT?S/66OH#_U100Q3![000";R.0P_@/_>6C?MM%VYJ\Q+S1^CW^KNVQM1?:
MB=XF85^R46"$JA?H5X46NSVC-NZ$.6HG5D%)1P5Z3EAK<L&=IL#B/U?P;QK#
MWI)GW/D1U'U1#C#+_K.^O4'VGZWUC>W-K6U<_UO/-I?K_VL\.W_%`,U6`JCU
M&B@TW02=&W9K[<[QVK??/OUN;:/V5UC(.V:A\4+\T]J:&@_C?XY!T\-D6O%%
MC/Y5)IR/YBUK:[)R+]-D/&KW]NQLYSM-_9;+Q.[G-<QXMM.,Y7/1<(AW4U-0
MQ<:Y!(0?46Q\.L/73ARE'N#7/=82UW[@YNF5,"E.#[0W]8 9^(T4<T\`J5<D
M$J%$A 8-20%9Z@3H[GR(\Q/H3'MHD8(!.N\*@)RT#$-/]J,<[0FC)(O)B\26
MNPQHJ,(_BH(6>^V:O"5[67?PHGN=O1AQZ- 7X3 9PM_?P_\L4>Q%$]'?A)=\
MG5W2`ZYEH"J?)Y^;C)8FH\6"7C0Y3OM[(N6YH)O7<70#KYK30&)M8?K^@,R0
MS>3;[;9T!M:U:' >]7H49LZ/EVI%W61INFM'9 TI[82!2.<UG'P.XVYBI/4(
M1>EWR0W>97X7#3.Q!YK0K&MB:%#G?4R+@MF(K+LUF*VU$'^!</+S\)8P(R,N
M#6R'*/[U(L8K390!%I370TMA/[,(&?H6#G6,9S).UI*;85:KIG*[M$40M-PL
M`ZRXW)YP=7LY^O0C2]$B(8M J' _N4PFEXX'L&@-O8V2FR@-1L/+G295$XR4
M>UU@A+/?L'W-\+F*D1=EK+Z9E\4["Q_N,;:/!2H8#6 Z]B:>;^\TN8!;"?AF
M?JZ!:B9JOJ9)/\K<=^;]WFO=85A[^+=;M>G517)U!FB]R'Q$GH_C?L]A8!-Q
M244=\KD\P'&V.)W6'C3R?6FJ$7]NL0(`F\1?:V>\O7__54YB?VMF:;>)DBFL
M"Z^018_#.#^+LKPS'4P.18 Z)Q1>*<-K>KL)SX,.&.S/F[ROF+K>]('URD,J
M:$5,RN5/]N>])T^:3X)>WJ,]B][,41[F%0@ACZ/L3M4^/YE2W'SRT=.LQL^=
MT8;'U=-1!K(CWM,.\ZN]5X?'^W]##]6=IO7VWEBF+0/%\@4AH'B7>92VT[36
MV%*E^M=Z,$#5( HP#=07:V.Z_K?U_-DS/O_?>K;U[.ES.O_?>KZUU/^^QK.#
M,[_W:&7G"@@!_\WC'/;Z#T/ZMZ=>R_DF,#7Z`"70%D.2ZUKTSW%\O5O;YX1*
M:QA9I:;3*^W6T+FTB>!?JNY5F&91OAMGB=8G$5)3&H6?YTGO5IU?=I-^DN[6
MOGE##Q7JQ=<8W> 2M--NA-&O:WL*3XMVKC8\10Y>\(>MO18ZJ2N)1_^*I&^4
M,/B@#TINF9*<,M5ZM:U;ZT<7>6UO9[S7/CH[/7[]81_/'&!/WX/"VUQXY);]
M49_ZVOUBX;]!TC^YX]L".25GE&M@? 36-4FWXV'&N9NTB&Q]RE049K>2/C4-
M\<1\#0:(FDB@WHQ3/-E&5;0A4.D\VN[58TJ%R%'2G% ;E*-/?)TEGU$#L^*E
MQ65CZRC72S?#V01UZK-$6GQL+H#I"W58]Y"<G=&9/DHOPFX4"%Q"8@'"2:]0
M@N1WK;)3@EC)<:43?A?'_:#$L2N 48\R20,@)_G6_3W.\H"YH:H(X$TXB/MA
M&N>WA0= 20FSY[R84CQSY8Z>T[2 T!Y=8!A!Z/6P!S(T!LW2J=/=T'/:!T4?
MV]C$)R!)F-"$X0C>A797UA:M?("8-F@'EGT:7>S6JM76VE[U^YUFN#<18V>5
MJX75;]!R8,VFT1J0!\A?7KXF5\.VQHE10ZXHK*FOG7..)-3SQVD*TXR>!=>@
M))"R+ G,WD/'7YFYR.(<5;X,>DQ.P.2E$GAM4V>Y:2Z*WL*2#I?<%Y#U:$<6
M,UQ=NZ J\FNX1-MWHF_&4-8A,FO%M!KJ&ZLZ8WC\2V0!Y>:A!-DFB/A"=0VD
M&.64^LUG(9(OJKZYJBZ$*J+A%5X3+ &E1':?HG08]2G!Z3"3! @R$&:J$V>X
M/>2Q:$^9AKE+BZNP::TYLB@,PD\1YDJ91LD<C^,B3CDP(?K\C#%7J]RLE82L
MF3@+>2L%X]H-SOL:8"S7R6/.5,C)7S5K`"1!!RX9GS;840(,$JEFC*D(5 8[
M$^ ZR0HL5.PC^M![ZAXR84%$GS%="^#H)C&X>\&-H89RC?^.^PRQ'T\W8!;I
M0RCUXGQUW.LO4I&R-<(_H[U7"?JXT<JT>2SM!]JIW[*N.3E[K<R=0E^(6>P6
MYM%$ARA#H^1SQ?N5L ->-69$Q7Y2Y,SE@%29ALBLG6BA.AN&K T*]-*D^)8F
MN;4?CDIF`.82YG=NI)OIEZ26%?-M)?R=A#;-"(NQXP!U,F/9L\C=#@KNG,_H
M'C5N]?%\CS=DSRYJ]>LF1:<?V,]23I@^_UZ'</$+7WS//,^W?GP1=6^[>,./
MEZ6F<XN...@4>4M*8#/7C3.G<]$T^GSHHX9<^RAHO?5N>&
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
MBKH1M[)?4)L.W&[3JR+_F&,PP 4+7:8%TL5H<\#...@J>8WZTYD.W5RB-
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
0_.=?]_SG_P.)B5,8`) !````
`
end



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org


Re: [avalon-jetty] Status update

Posted by Stephen McConnell <mc...@apache.org>.

Timothy Bennett wrote:

>Ok....
>
>Patch available very soon.  Possibly tonight before going to bed.  Just a
>some more testing and documentation before I post it.
>
>The Jetty-Phoenix package has been:
>(1) Renamed to avalon-jetty
>(2) Refactored to use apache.avalon.merlin.http package naming convention
>(3) Split into separate api and impl jars
>(4) Converted the Phoenix meta tags to avalon-meta tags
>(5) Build system converted from Ant to Maven
>(6) Cleaned up javadocs and added to user documentation
>
>I think that's all.  Anyway, look for the patch very soon.  I'll post as a
>response on this thread.
>

This is great - looking forward to this.

Stephen.

>
>Timothy Bennett
>
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
>For additional commands, e-mail: dev-help@avalon.apache.org
>
>
>  
>

-- 

Stephen J. McConnell
mailto:mcconnell@apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@avalon.apache.org
For additional commands, e-mail: dev-help@avalon.apache.org