James,
I downloaded and took a brief look at your code, as I want to store all
my messages, query strings, etc. in the database. My particular issue,
which I think falls under the problem that you talk about below, is that
I need to group (or bundle) the messages by the user's role (or
company/account). Thus, when a user logs in, the menus, labels on the
screen, and potentially database queries are setup for the session,
overriding the system wide defaults. So, e.g., if Company A wants all
the default labels of "Component" to be "Item", when someone from
Company A logs in, they see "Item", but someone from company B gets the
default "Component". So I need a means to create/retrieve a set of
default messages but be able to override the defaults with customizations.
I haven't spent much time thinking about how to accomplish this, so any
thoughts on the issue would be appreciated.
chaz
James Mitchell wrote:
> Great stuff eh?
>
> My DBMessageResources already uses OJB as the persistence layer for my impl
> :)
>
> You simply run the db scripts (or not, if you will use your own), configure
> the OJB files (repository[-*].xml), declare the new factory
> class(struts-config.xml), and specify subapp and key (parameter in
> <message-resources> and you're off!!! (The readme will explain everything)
> I even provide the struts-example modified to demonstrate the new
> functionality.
>
> In order to support sub-applications and multiple bundles per subapp,
> (correct me here if I stray) multiple MessageResourcesConfig instances are
> stored (application scope) and are set into request scope (according to the
> selected application or subapp) during the request.
>
> So, with that in mind, any code needing a message, can grab the
> MessageResources (only having to specify the bundle key) out of the request
> and call getMessage() with whatever replacing params (if any) they have.
>
> See, the MessageResources class has no knowledge of it's existence in a web
> application (Struts or other). In fact, it is configured with a single
> String ("parameter" as mentioned above) and call to its factory. The only
> abstract method call to it is:
>
> getMessage(Locale locale, String key);
>
> How would you determine the correct bundle key (assuming there are no
> subapps), and if there are subapps, how would you determine which one (and
> the bundle for it as well)?
>
> I chose to use the "parameter" to tell me.
>
> syntax: parameter="[subapp].[key]"
>
> example: (using default subapp (empty String..."") and default key
>
> <message-resources
> factory="org.apache.struts.util.DBMessageResourcesFactory"
> parameter="."/>
>
>
>
>
>
> Funny.....this works great if you are caching the key-value pairs in your
> MessageResources class. But if you are trying to get these from a
> database/xml file/whatever, you have to 'work around' this issue.
>
> Additionally, if you depend on lifecycle calls to .... oh, let's say ....
> close a connection, you are just SOOL. And other than modifying the source,
> I see no way around it.
>
> This design issue has had me 'bent over a rail' for a few weeks now, as I
> ponder alternatives.
>
> I have been slowly coming to the conclusion that MessageResources
> implementations might be better off being created by a plugin instead of the
> <message-resources> tag. This would also allow you to use/reuse existing
> resources (e.g. connections that might have been configured in the
> struts-config) and also provides much needed lifecycle calls.
>
> Your thought?
>
>
>
>
> James Mitchell
> Software Engineer/Struts Evangelist
> http://www.open-tools.org
>
>
>
>
>>-----Original Message-----
>>From: Erik Hatcher [mailto:[EMAIL PROTECTED]]
>>Sent: Wednesday, October 09, 2002 12:25 AM
>>To: Jakarta Commons Developers List
>>Subject: Re: Message Resources from database
>>
>>
>>No problem, James. Take your time!
>>
>>I'm going to tinker with a proof-of-concept implementation using our own
>>persistence mechanism rather than pure JDBC (we're using an O/R mapping
>>tool in the middle) and see how quickly I can get something working.
>>
>>I guess the Commons stuff is not in Struts 1.1 yet, so I'll probably
>>build on top of the Struts provided API for now and then refactor to the
>>Commons one when its available.
>>
>>What I'll build will not be generally applicable though since it will be
>>using a commercial O/R mapper, but once James stuff is made available
>>we'll see if there is a way to generalize what I've done or just switch
>>to James code altogether.
>>
>>Thanks,
>> Erik
>>
>>
>>James Mitchell wrote:
>>
>>>>-----Original Message-----
>>>>From: Craig R. McClanahan [mailto:[EMAIL PROTECTED]]
>>>>Sent: Tuesday, October 08, 2002 7:37 PM
>>>>To: Struts Developers List
>>>>Subject: RE: Message Resources from database
>>>>
>>>>
>>>>
>>>>There was also a message from Erik Hatcher on COMMONS-DEV about adding
>>>>this capability to commons-resources. James, are you subscribed there -
>>>>if not, I can forward a note about your progress.
>>>>
>>>
>>>
>>>That's fine with me, I was planning to donate this anyway, although my
>>>initial implementation supports Strut's sub-apps, so it may need some
>>>refactoring for anything more basic.
>>>
>>>I only have a couple small issues to complete before I post an
>>
>>[ANNOUNCE] to
>>
>>>the users list. In the meantime, I'm also trying to finish up
>>>XMLMessageResources.
>>>
>>>For anyone waiting for either of these, I apologize, I stopped
>>
>>working on
>>
>>>them about a week ago while I was playing around with moving
>>
>>from Win2k to
>>
>>>Mandrake 8.1 on my laptop. I'm still trying to get everything
>>
>>configured
>>
>>>and 'get back into the groove' ;)
>>>
>>>I'll post something as soon as I can.
>>>
>>
>
>
> --
> To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>
--
Charles E Brault
[EMAIL PROTECTED]
"Where are we going, and why am I in this handbasket?"
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>