Without too long of a reply, here are a few thoughts:

        - Solid, unchanging public APIs are possible
        - Refactoring and using the latest technologies is the only way to 
survive
        - This would not break separation or dictate it for that matter
        - It would force necessary clean up

 The benefit is that as Java 7 and JEE6 roll out and JSR 330 possibly gains 
momentum (which I believe is guaranteed), people will look to the frameworks to 
support them. Here's a few others that Struts should be using:

        303 - Bean validation
        315/316 - Async support
        
I'm sure there are others as well. 

-bp



On Dec 8, 2009, at 9:13 PM, Don Brown wrote:

> Ok, here is how it works at Atlassian and most every software project
> I've been involved in - changing core dependencies is hard.  It is
> especially hard if you needed to fork said dependencies, which we've
> had to do quite often at Atlassian.  If a green-field Struts 2
> application decided, hey, let's just use Guice 2 just like Struts,
> then what happens down the line when Struts 2 goes to Guice 2.1, which
> is incompatible?  What if that app needed to customize Guice 2.0 or
> build specific functionality deep into the library?  Now, if they
> wanted to upgrade Struts 2?  They'd be stuck until they could upgrade
> their version of Guice 2?
> 
> This is not a hypothetical situation.  At Atlassian, we have apps like
> JIRA that are 7 or 8 years old.  JIRA, for example, uses a forked
> version of PicoContainer 1.0 they had to customize for various
> reasons.  Why would they spend a month or two upgrading PicoContainer
> without gain when they could be building kick-ass features?  For this
> reason, Confluence is running Spring 2.0, Hibernate 2, and WebWork
> 2.1.7-atlassian-2.  It isn't that these products can never change
> dependencies, just the cost is really high for little to no gain, and
> if one major upgrade requires another, it is all the more reason not
> to do the upgrade at all.
> 
> JSR 330 is not the magic bullet here.  Yes, services would then not be
> tied to a specific DI container, but all the configuration and direct
> DI container usage sure would be, and in Struts 2, we have heaps.
> Furthermore, this gives breaks the abstraction between the framework
> and the host app.  We already have enough problems in Struts 2 because
> we lack an proper API.  Externalizing our DI only exasperates this
> problem.  We might as well encourage devs to copy/paste Struts 2 into
> their project because upgrading sure will be a pain.
> 
> Again, there are significant costs to this proposal, and I have yet to
> hear a substantial, real-world benefit.  Earlier, we went so far as to
> define our own logging API because we wanted to keep that boundary
> between the app and the framework.  Sometimes, strict boundaries are a
> very good thing.
> 
> Don
> 
> On Wed, Dec 9, 2009 at 4:38 AM, Brian Pontarelli <br...@pontarelli.com> wrote:
>> Why do you say that and do you have specific examples? JCatapult uses a 
>> single container and it is actually effective and very helpful. This allows 
>> you to easily get access to the public API of JCatapult and also to override 
>> anything you want. It also makes things faster and lighter weight. There are 
>> many applications and developers using it without major issues.
>> 
>> I wonder how many users are actually swapping out the ObjectFactory at this 
>> point and wouldn't be fine with either Guice or Spring? There is also 
>> nothing stopping other DI containers from implementing JSR 330 and I would 
>> expect most will.
>> 
>> I think the way to approach this is to have struts get out of the business 
>> of DI completely. If everything in Struts uses the JSR annotations and APIs, 
>> then Struts is really just a component of the web app and not really the 
>> "owner". The webapp would declare its primary DI provider and then Struts 
>> would just wire up using that.
>> 
>> The JSR also supports tiered injectors, which could be used to isolate 
>> Struts. If Struts defines generic modules, the webapp can easily place all 
>> those modules in a child injector if it wants. Or if could place it the main 
>> injector if it wants access to everything. Struts shouldn't be dictating its 
>> place in the webapp, the webapp should be dictating Struts place. Moving to 
>> JSR 330 should fix a lot of this.
>> 
>> -bp
>> 
>> 
>> On Dec 7, 2009, at 4:33 PM, Don Brown wrote:
>> 
>>> Well, two things: sharing an IoC container with the app is almost
>>> always a bad idea in the long run, and two, maybe it is just me in a
>>> resource-constrained environment, but 651kb is definitely a big deal,
>>> especially if it brings in other dependencies like google collections.
>>> The fact that Struts 2 is almost 5 megs means it is a no-go for me to
>>> use in our embedded OSGi container.  I was hoping to get it back down
>>> under 2 megs, but with Guice 2, that would be quite unlikely.  What
>>> features exactly do we need or how many bugs have cropped up in our DI
>>> container that we would be avoiding?
>>> 
>>> Don
>>> 
>>> On Tue, Dec 8, 2009 at 10:11 AM, Musachy Barroso <musa...@gmail.com> wrote:
>>>> We could have just one container (no double object factory), and
>>>> probably the same one could be used for s2 and the app (still to be
>>>> seen if feasible or not), get any new features that get added or are
>>>> in jsr 330, and we don't have maintain our own implementation when
>>>> there is a lib that already does it, like we usually do. Also, guice 2
>>>> main jar is 651 kbs, so I don't see much of a problem there.
>>>> 
>>>> musachy
>>>> 
>>>> On Mon, Dec 7, 2009 at 2:55 PM, Don Brown <mr...@twdata.org> wrote:
>>>>> Late to the party, but I'm not clear why you would want to use Guice 2
>>>>> instead of our own.  Is there some feature we need that Guice 2 has?
>>>>> If not, we are basically sucking in a pretty significantly sized
>>>>> library for no apparent reason.  I tried to use Struts 2 on a project
>>>>> here, and was a bit shocked at the size of the jar nowadays...seems we
>>>>> went a bit crazy with the shading.  I'd generally advise against
>>>>> adding more bulk without obvious gains.
>>>>> 
>>>>> Don
>>>>> 
>>>>> On Tue, Dec 8, 2009 at 7:09 AM, Musachy Barroso <musa...@gmail.com> wrote:
>>>>>> I don't know about dropping Object factory, in this case it would just
>>>>>> delegate to the jsr 330 implementation. But getting rid of the double
>>>>>> object factory problem would be very nice.
>>>>>> 
>>>>>> On Mon, Dec 7, 2009 at 12:06 PM, Rene Gielen <gie...@it-neering.net> 
>>>>>> wrote:
>>>>>>> I'm a huge fan of moving to Guice 2 internally, although I'm not sure if
>>>>>>> we would want to drop the ObjectFactory abstraction for plain pluggable
>>>>>>> JSR330 DI - as this would imply that Struts 2.2 would not integrate any
>>>>>>> more against Spring 2.x, Guice 1, Plexus, PicoContainer and what not. Do
>>>>>>> we really expect every Struts2 user and his company will be able to move
>>>>>>> to JSR330 compliant DI within the next months? I doubt that, and I'd
>>>>>>> rather not sacrifice our DI abstraction for that reason...
>>>>>>> 
>>>>>>> - Rene
>>>>>>> 
>>>>>>> 
>>>>>>> Musachy Barroso wrote:
>>>>>>>> I am reading the spec and I am rather impressed, I thought it would be
>>>>>>>> a simple thing but it is really comprehensive. I doubt we will have a
>>>>>>>> use case that won't be covered there.
>>>>>>>> 
>>>>>>>> musachy
>>>>>>>> 
>>>>>>>> On Tue, Dec 1, 2009 at 10:49 AM, Musachy Barroso <musa...@gmail.com> 
>>>>>>>> wrote:
>>>>>>>>> It is good that you brought this up, because the double object factory
>>>>>>>>> is annoying and creates a lot of unexpected situations(problems with
>>>>>>>>> class reloading and OSGi). Having just one container would make it
>>>>>>>>> easier for everybody, users and s2 developers, if it can be pulled
>>>>>>>>> off.
>>>>>>>>> 
>>>>>>>>> This kind of change could be too big for a 2.x release I think
>>>>>>>>> 
>>>>>>>>> musachy
>>>>>>>>> 
>>>>>>>>> On Tue, Dec 1, 2009 at 10:44 AM, Brian Pontarelli 
>>>>>>>>> <br...@pontarelli.com> wrote:
>>>>>>>>>> We could probably make a list and verify. I think the API should be 
>>>>>>>>>> pretty comprehensive about a lot of those things.
>>>>>>>>>> 
>>>>>>>>>> -bp
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> On Dec 1, 2009, at 11:42 AM, Musachy Barroso wrote:
>>>>>>>>>> 
>>>>>>>>>>> ah I see what you mean. yes that would be a good idea, I think that
>>>>>>>>>>> would work as long as all the containers have what we need, which I 
>>>>>>>>>>> am
>>>>>>>>>>> not sure if it is in the spec or not (havent read it), like:
>>>>>>>>>>> 
>>>>>>>>>>> * create/inject objects and statics (duh)
>>>>>>>>>>> * lookup all implementation by type
>>>>>>>>>>> 
>>>>>>>>>>> that's all I can think off the top of my head.
>>>>>>>>>>> 
>>>>>>>>>>> musachy
>>>>>>>>>>> 
>>>>>>>>>>> On Tue, Dec 1, 2009 at 10:38 AM, Brian Pontarelli 
>>>>>>>>>>> <br...@pontarelli.com> wrote:
>>>>>>>>>>>> I was actually talking about expanding it out like Chris 
>>>>>>>>>>>> mentioned. I don't see any reason why those who want to use the 
>>>>>>>>>>>> container that Struts is using shouldn't be able to. Since the 
>>>>>>>>>>>> annotations and APIs will be standard across Guice and Spring with 
>>>>>>>>>>>> the JSR, it seems like it would be possible to allow the 
>>>>>>>>>>>> application and framework to use the same DI container, just 
>>>>>>>>>>>> different Injectors.
>>>>>>>>>>>> 
>>>>>>>>>>>> The default could be Guice but allow Spring to be pluggable (or 
>>>>>>>>>>>> even discoverable). As long as the internals of Struts are 
>>>>>>>>>>>> compliant, it should work fine. This also provides the benefit of 
>>>>>>>>>>>> configuration reduction in web.xml and a more comprehensive 
>>>>>>>>>>>> solution. It would also get Struts out of the business of building 
>>>>>>>>>>>> objects and requiring additional configuration and plugins for 
>>>>>>>>>>>> different DI containers. I would guess it would clean up the 
>>>>>>>>>>>> double ObjectFactory issues as well.
>>>>>>>>>>>> 
>>>>>>>>>>>> -bp
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> On Dec 1, 2009, at 11:31 AM, Musachy Barroso wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>>> this is not related to the application itself, you can still use 
>>>>>>>>>>>>> any
>>>>>>>>>>>>> IoC you want. This is for the IoC that is used internally to wire
>>>>>>>>>>>>> struts internals together, which at the moment is an old version 
>>>>>>>>>>>>> of
>>>>>>>>>>>>> guice which is in xwork.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On Tue, Dec 1, 2009 at 10:28 AM, Chris Pratt 
>>>>>>>>>>>>> <thechrispr...@gmail.com> wrote:
>>>>>>>>>>>>>> I wouldn't have a problem with it as long as I can still swap in 
>>>>>>>>>>>>>> my trusty
>>>>>>>>>>>>>> Spring IoC container, I can't see my team moving away from it 
>>>>>>>>>>>>>> any time soon,
>>>>>>>>>>>>>> but I still want to try to stay as current as possible on Struts.
>>>>>>>>>>>>>>  (*Chris*)
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On Tue, Dec 1, 2009 at 10:21 AM, Brian Pontarelli 
>>>>>>>>>>>>>> <br...@pontarelli.com>wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> They'll be part of the Guice distribution and under ASLv2 since 
>>>>>>>>>>>>>>> Guice uses
>>>>>>>>>>>>>>> that.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> The real question is how to setup the Injector's. I tend to 
>>>>>>>>>>>>>>> think this
>>>>>>>>>>>>>>> layout would be best:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>        Base
>>>>>>>>>>>>>>>            |
>>>>>>>>>>>>>>>            |
>>>>>>>>>>>>>>>   _________
>>>>>>>>>>>>>>>   |                  |
>>>>>>>>>>>>>>>   |                  |
>>>>>>>>>>>>>>> Struts        App
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> The Base injector will contain the JEE objects (request, 
>>>>>>>>>>>>>>> response, etc.)
>>>>>>>>>>>>>>> and any Struts objects that can be used by the application. The 
>>>>>>>>>>>>>>> Struts
>>>>>>>>>>>>>>> injector will contain all of the private objects that should 
>>>>>>>>>>>>>>> not be
>>>>>>>>>>>>>>> accessible to the application. The App injector will contain 
>>>>>>>>>>>>>>> all the
>>>>>>>>>>>>>>> application objects like Actions and such.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> -bp
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On Dec 1, 2009, at 10:59 AM, Musachy Barroso wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> good point Brian, that has came up also. I have a couple of 
>>>>>>>>>>>>>>>> concerns
>>>>>>>>>>>>>>>> about it, like what is the status of the jsr and will the API
>>>>>>>>>>>>>>>> (annotations) will be under a decent (read ASF compatible 
>>>>>>>>>>>>>>>> license)
>>>>>>>>>>>>>>>> license and in maven central? which is usually a pain point 
>>>>>>>>>>>>>>>> when it
>>>>>>>>>>>>>>>> comes to Sun APIs.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> musachy
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On Tue, Dec 1, 2009 at 9:54 AM, Brian Pontarelli 
>>>>>>>>>>>>>>>> <br...@pontarelli.com>
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>> I'd suggest using Guice trunk and the JSR annotations rather 
>>>>>>>>>>>>>>>>> than the
>>>>>>>>>>>>>>> Guice annotations. I'd also make the injector pluggable so that 
>>>>>>>>>>>>>>> people can
>>>>>>>>>>>>>>> plug in Spring/Guice/etc easily.
>>>>>>>>>>>>>>>>> -bp
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On Dec 1, 2009, at 10:33 AM, Musachy Barroso wrote:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> I have talked to a couple of people before and everyone 
>>>>>>>>>>>>>>>>>> seems to agree
>>>>>>>>>>>>>>>>>> that using guice instead of our internal IoC container 
>>>>>>>>>>>>>>>>>> (guice pre 1.0
>>>>>>>>>>>>>>>>>> I think), would be a good idea. I don't have any experience 
>>>>>>>>>>>>>>>>>> with guice
>>>>>>>>>>>>>>>>>> 2.0, but looking at the docs it seems like porting our stuff 
>>>>>>>>>>>>>>>>>> would not
>>>>>>>>>>>>>>>>>> be that hard. Less code to maintain, and we get more
>>>>>>>>>>>>>>>>>> features/improvements. If we go with this idea, guice would 
>>>>>>>>>>>>>>>>>> be shaded
>>>>>>>>>>>>>>>>>> into xwork to avoid classpath conflicts.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> what do you think?
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> musachy
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>>>>>>>>>>>>>>>>>> For additional commands, e-mail: dev-h...@struts.apache.org
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>>>>>>>>>>>>>>>>> For additional commands, e-mail: dev-h...@struts.apache.org
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>>>>>>>>>>>>>>>> For additional commands, e-mail: dev-h...@struts.apache.org
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>>>>>>>>>>>>>>> For additional commands, e-mail: dev-h...@struts.apache.org
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>>>>>>>>>>>>> For additional commands, e-mail: dev-h...@struts.apache.org
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>>>>>>>>>>>> For additional commands, e-mail: dev-h...@struts.apache.org
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>>>>>>>>>>> For additional commands, e-mail: dev-h...@struts.apache.org
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>>>>>>>>>> For additional commands, e-mail: dev-h...@struts.apache.org
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>> 
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>>>>>>>> For additional commands, e-mail: dev-h...@struts.apache.org
>>>>>>>> 
>>>>>>> 
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>>>>>>> For additional commands, e-mail: dev-h...@struts.apache.org
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>>>>>> For additional commands, e-mail: dev-h...@struts.apache.org
>>>>>> 
>>>>>> 
>>>>> 
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>>>>> For additional commands, e-mail: dev-h...@struts.apache.org
>>>>> 
>>>>> 
>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>>>> For additional commands, e-mail: dev-h...@struts.apache.org
>>>> 
>>>> 
>>> 
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>>> For additional commands, e-mail: dev-h...@struts.apache.org
>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
>> For additional commands, e-mail: dev-h...@struts.apache.org
>> 
>> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
> For additional commands, e-mail: dev-h...@struts.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
For additional commands, e-mail: dev-h...@struts.apache.org

Reply via email to