Yes, the essential idea is to expose Struts as some type of framework
API object through the request. Where the objects the gateway object
returns live would be an implementation issue. A framework API object
was the original idea behind this little adventure:

http://cvs.apache.org/viewcvs/jakarta-struts/src/share/org/apache/struts/config/ConfigHelperInterface.java

http://cvs.apache.org/viewcvs/jakarta-struts/src/share/org/apache/struts/config/ConfigHelper.java

We first did it to help prototype the Velocity tools for Struts. The
Velocity gang then came up with an implementation that didn't need a
helper, and further development was then sidelined by the modules.

A very nifty way to implement a framework API object might be to use the
Chain ContextBase object,

http://jakarta.apache.org/commons/sandbox/chain/apidocs/org/apache/commons/chain/impl/ContextBase.html

since it be used as a JavaBean or a Map, as need be.

Of course, we have the tyranny of the installed base to contend with.
Right now, a lot of Struts-specific presentation code expects things to
be stored in the shared contexts under the original keys. The module
code was designed to swap things in and out for that reason.

So, if backward compatibility is desirable, then the framework API
object would have to do the same thing: push it's members into the
original shared contexts before an Action or some tag tool were invoked.

If that were accomplished, we could then deprecate accessing these
resources from the shared locations, and eventually make everything
available only through the framework API object. A framework API object
should simplify the module implementation as well as the eventual
portlet implementation, and would certainly be more testable.

-Ted.


Don Brown wrote:
What about using Inversion of Control (IoC) to replace the current
global context map?  The action servlet loads up the IoC factory,
initializing all objects, then puts the factory in the request
attributes for each request, allowing other components, like taglibs,
to be able to access that servlet's objects?  Not only would this
make managing dependencies much cleaner, but make it easier to extend
Struts once class references were changed into interfaces.  Of course
since any objects that aren't pre-initialized can pull objects from
the bean factory in the request, we can ensure that the servlets
won't overlap.

The impact to existing Struts can be minimal - we could even put IoC configuration in the jar to prevent any user confusion. For an IoC implementation, I've found Spring (http://www.springframework.org) to
be very easy to use and straightforward, not to mention light weight,
however it would be pretty easy to provide a few Struts classes to
wrap the IoC framework to prevent being tied to one implementation.


I'm no Spring expert, but I volunteer to do any work necessary,
assuming the idea is approved.

Don

On Fri, 14 Nov 2003, Ted Husted wrote:


The underlying problem is that Struts stores things directly in the
 application and session contexts under static names. So, the
resources (in the generic sense) for one application can overwrite
the other. One reason for modules is to put multiple sets of
resources in the shared contexts under different names.

An alternate design for the Struts 2.x timeframe might be to gather
 everything the framework uses into single context objects, perhaps
named after the servlet. So the "action" servlet would have an
"action" context in the application and session scope, and the
"differentAction" servlet would have it's own "differentAction"
context object. Inside of each context (a Map) would be things like
the message resources and Locale the servlet and client are using.

Then, when a request is being serviced, a default gateway context
can be placed in the request that would link to the appropriate
session and application contexts for a given controller instance.
This is essentially what the module code does now, but with all the
 complications that backward compatibility brings.

Of course, complications still arise. Such as if the "action"
servlet changes the Locale for a client, is the "differentAction"
servlet suppose to see that change? So, there might still be a
global framework context at the top of the chain, which a
controller instance could update and the other controllers could
see.

Another advantage here is that it would be easier for Struts applications to pass along its context to a business layer without binding that layer to HTTP. An Action could pass up the Context
chain without passing the HTTP request itself, or pulling things
out piecemeal.


-Ted.

[EMAIL PROTECTED] wrote:

I'm with Edgar on this one - should it not be possible? Of
course, I tried the following:

<servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>

<servlet-mapping> <servlet-name>differentAction</servlet-name> <url-pattern>*.dont</url-pattern> </servlet-mapping>

with each mapping to different action servlets with different
config files and everything got bunged up. It seems like it
should have worked but alas.

Perhaps it is a bit of a green question, but why would it not
work?

Best,

Alvin

Quoting Edgar P Dollin <[EMAIL PROTECTED]>:



Why wouldn't changing the servlet mapping from *.do --> action
servlet to *.[actiontype] --> [associated action servlet] work?
As long as you are consistent would struts care?

Edgar



-----Original Message----- From: Ted Husted
[mailto:[EMAIL PROTECTED] Sent: Friday, November 14, 2003
7:10 AM To: Struts Developers List Subject: Re: Multi Action
servlet !


People have done it, but it's a delicate thing to try. The recommended approach is to use Struts 1.1 modules. To
customize the front controller logic for each module, you can
plug in alternate Request Processors if needed. This gives
you all the benefits of having multiple servlets, without the
extra overhead. (There is *no* performance benefit in having multiple servlets that do the same thing.)


A better place to ask questions like this would be the Struts
 USER list. This is where you'd ask if we were going to
support multiple servlets in the future. (Answer to that one:
not any time soon.)

-Ted.

Karikalan Kumaresan wrote:


Hi,

Does anyone know, is it possible to have 2 action servlet

configured



in struts for different project in a same JVM/in same
webserver.

Cheers, Kari...





--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to