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]>