You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(5) |
Nov
(68) |
Dec
(77) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(75) |
Feb
(84) |
Mar
(89) |
Apr
(96) |
May
(52) |
Jun
(73) |
Jul
(99) |
Aug
(46) |
Sep
(40) |
Oct
(46) |
Nov
(45) |
Dec
(25) |
2004 |
Jan
(13) |
Feb
(74) |
Mar
(40) |
Apr
(18) |
May
(31) |
Jun
(1) |
Jul
(16) |
Aug
(1) |
Sep
(21) |
Oct
(19) |
Nov
(10) |
Dec
(16) |
2005 |
Jan
(4) |
Feb
(12) |
Mar
(46) |
Apr
(33) |
May
(64) |
Jun
(1) |
Jul
(60) |
Aug
(31) |
Sep
(26) |
Oct
(24) |
Nov
(37) |
Dec
(10) |
2006 |
Jan
(3) |
Feb
(31) |
Mar
(122) |
Apr
(22) |
May
(4) |
Jun
|
Jul
|
Aug
(2) |
Sep
(4) |
Oct
(8) |
Nov
(3) |
Dec
|
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
(3) |
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(2) |
Dec
(8) |
From: <Web...@St...> - 2006-02-07 15:23:04
|
On Mon, 6 Feb 2006, Eric B. Ridge wrote: | I'm also considering taking my laptop and the WM sources with me. I want to | play with the parser. I hate our whitespace handing rules and have some ideas | on making it better. I think changing the whitespace rules now is a very bad idea. They do work, and changes to such fundamental parts of the system is _not_ welcome by pretty much anyone, I believe. | The long plane flights will probably give me enough time | to work it out. It will be interesting to se what you come up with - but I believe you at least should have _full_ configurable fallbacks to "as they are now" situation. Really, everyone's output will be changed!! That just ain't no good for adoption. | | I've also discovered a few classes that should probably implement the | Visitable interface that don't. I've been working on a little static analysis | tool to find usages of variables and such in templates and link them back up | to known object types... as a way to find and head off template-level bugs. I | had to revert to some reflection trickery while visiting a few Template node | types. For my own part, the thing about WebMacro is that there is _Way_ to much cruft. It should be _entirely_ ripped apart, and then about 90% of it should be deleted, and then the remaining parts should be put together again as a tight little API. The big idea with the Broker and all those little annoying caching elements and whatnot is just plain annoying. Then one have logging. And the license should be changed. GPL is bad for business when combined with Java, and "advertising clause" is just too "last century". Regards, Endre. |
From: Eric B. R. <eb...@tc...> - 2006-02-06 21:01:44
|
Yeah, you're absolutely right Keats. So is Carl. I'm headed out of town, but will work on a fix and commit it next week when I return. I'm also considering taking my laptop and the WM sources with me. I want to play with the parser. I hate our whitespace handing rules and have some ideas on making it better. The long plane flights will probably give me enough time to work it out. I've also discovered a few classes that should probably implement the Visitable interface that don't. I've been working on a little static analysis tool to find usages of variables and such in templates and link them back up to known object types... as a way to find and head off template-level bugs. I had to revert to some reflection trickery while visiting a few Template node types. eric On Feb 6, 2006, at 2:12 PM, Keats Kirsch wrote: > This is a good catch. It's important to understand how directives > work > in WM, so we can avoid this kind of problem in the future. (I know I > need to review the directives I have worked on in light of this.) > Here's my understanding of the process: > > At build time an instance of the XXXDirective class is created for > each > reference of the directive in the template. The compiled template is > cached and may be accessed by multiple threads, so any state > information > in a directive should generally not be modified during the expansion > (evaluation) phase. You could do this using synchronized access, > but in > general you're better off keeping this state information in a separate > context (Context, Session, BrokerLocal, etc.). > > Somebody please correct me if I've gotten it wrong. > > Keats > > Carl H. Sayres wrote: > >> I think I solved it! But I'm new to the inner workings of >> WebMacro, so please let me know if I've overlooked something. >> >> The problem appears to be in the IncludeDirective.write() method. >> The IncludeDirective class has two instance fields: >> protected Macro _macFilename; >> protected String _strFilename; >> >> In the case of an included file, the filename is stored in >> _strFilename. But if the included filename comes from a macro, >> then the macro name is stored in _macFilename. >> >> The write() method has no problem with the single file case, using >> _strFilename which never changes. But in the case of a macro, write >> () stores the name of the file it is trying to include in >> _strFilename. If two threads do this simultaneously, one will >> clober the other by overwriting _strFilename. >> >> My first solution was to synchronize the write() method. This does >> solve the problem, but it has negatve performance implications. >> >> My second solution is to use a local variable in write() to store >> the filename that we are including, passing through anything >> previously stored in _strFilename, to preserve the simple file >> include case. >> >> Here is my new write() method: >> >> public void write (FastWriter out, Context context) throws >> PropertyException, IOException >> { >> String localFilename = _strFilename; >> Broker broker = context.getBroker(); >> >> // the filename arg passed to us was a Macro, so >> // evaluate and check it now >> if (_macFilename != null) >> { >> localFilename = _macFilename.evaluate(context).toString(); >> if (localFilename == null || localFilename.length() == 0) >> { >> throw makePropertyException("Filename cannot be >> null or empty"); >> } >> } >> >> if (_log.loggingDebug() && context.getCurrentLocation >> ().indexOf(localFilename) > -1) >> { >> // when in debug mode, output a warning if a template >> tries to include itself >> // there are situtations where this is desired, but >> it's good to make >> // the user aware of what they're doing >> _log.warning(context.getCurrentLocation() + " includes >> itself."); >> } >> >> // this should only be true if StrictCompatibility is set >> to false >> // and "as <something>" wasn't specified in the arg list >> if (_type == TYPE_DYNAMIC) >> _type = guessType(broker, localFilename); >> >> if (_log.loggingDebug()) >> { >> _log.debug("Including '" + localFilename + "' as " >> + ((_type == TYPE_MACRO) ? "MACRO" >> : (_type == TYPE_TEMPLATE) ? "TEMPLATE" >> : (_type == TYPE_TEXT) ? "TEXT" >> : "UNKNOWN. Throwing exception")); >> } >> >> Object toInclude = getThingToInclude(broker, _type, >> localFilename); >> switch (_type) >> { >> case TYPE_MACRO: >> // during runtime evaluation of a template, >> // a TYPE_MACRO doesn't really work as expected. >> // we logged a warning above in build(), but >> // we still need to write it out as a template >> // so just fall through >> case TYPE_TEMPLATE: >> out.write(((Template) toInclude).evaluateAsBytes >> (out.getEncoding(), context)); >> break; >> >> case TYPE_TEXT: >> // static types are strings >> out.write(toInclude.toString()); >> break; >> >> default: >> // should never happen >> throw makePropertyException("Unrecognized file >> type: " + _type); >> } >> } >> >> The most important change is the third line: >> String localFilename = _strFilename; >> Then every other place where _strFilename was referenced has been >> changed to localFilename. >> This has no effect for the single included file case. In the case >> of a macro: >> if (_macFilename != null) >> { >> localFilename = _macFilename.evaluate(context).toString(); >> if (localFilename == null || localFilename.length() == 0) >> { >> throw makePropertyException("Filename cannot be >> null or empty"); >> } >> } >> then localFilename is set to the corret value within each >> thread . And the threads can't overwrite each other's data. >> >> Oh, yes, and my test now does not fail! >> >> Let me know if you agree with my analysis. >> >> Carl > > > > > > > ------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. Do you grep through > log files > for problems? Stop! Download the new AJAX search engine that makes > searching your log files as easy as surfing the web. DOWNLOAD > SPLUNK! > http://sel.as-us.falkag.net/sel? > cmd=lnk&kid=103432&bid=230486&dat=121642 > _______________________________________________ > Webmacro-user mailing list > Web...@li... > https://lists.sourceforge.net/lists/listinfo/webmacro-user |
From: Keats K. <ke...@xa...> - 2006-02-06 19:12:52
|
This is a good catch. It's important to understand how directives work in WM, so we can avoid this kind of problem in the future. (I know I need to review the directives I have worked on in light of this.) Here's my understanding of the process: At build time an instance of the XXXDirective class is created for each reference of the directive in the template. The compiled template is cached and may be accessed by multiple threads, so any state information in a directive should generally not be modified during the expansion (evaluation) phase. You could do this using synchronized access, but in general you're better off keeping this state information in a separate context (Context, Session, BrokerLocal, etc.). Somebody please correct me if I've gotten it wrong. Keats Carl H. Sayres wrote: > I think I solved it! But I'm new to the inner workings of WebMacro, so > please let me know if I've overlooked something. > > The problem appears to be in the IncludeDirective.write() method. The > IncludeDirective class has two instance fields: > protected Macro _macFilename; > protected String _strFilename; > > In the case of an included file, the filename is stored in > _strFilename. But if the included filename comes from a macro, then > the macro name is stored in _macFilename. > > The write() method has no problem with the single file case, using > _strFilename which never changes. But in the case of a macro, write() > stores the name of the file it is trying to include in _strFilename. > If two threads do this simultaneously, one will clober the other by > overwriting _strFilename. > > My first solution was to synchronize the write() method. This does > solve the problem, but it has negatve performance implications. > > My second solution is to use a local variable in write() to store the > filename that we are including, passing through anything previously > stored in _strFilename, to preserve the simple file include case. > > Here is my new write() method: > > public void write (FastWriter out, Context context) throws > PropertyException, IOException > { > String localFilename = _strFilename; > Broker broker = context.getBroker(); > > // the filename arg passed to us was a Macro, so > // evaluate and check it now > if (_macFilename != null) > { > localFilename = _macFilename.evaluate(context).toString(); > if (localFilename == null || localFilename.length() == 0) > { > throw makePropertyException("Filename cannot be null or > empty"); > } > } > > if (_log.loggingDebug() && > context.getCurrentLocation().indexOf(localFilename) > -1) > { > // when in debug mode, output a warning if a template tries > to include itself > // there are situtations where this is desired, but it's > good to make > // the user aware of what they're doing > _log.warning(context.getCurrentLocation() + " includes > itself."); > } > > // this should only be true if StrictCompatibility is set to false > // and "as <something>" wasn't specified in the arg list > if (_type == TYPE_DYNAMIC) > _type = guessType(broker, localFilename); > > if (_log.loggingDebug()) > { > _log.debug("Including '" + localFilename + "' as " > + ((_type == TYPE_MACRO) ? "MACRO" > : (_type == TYPE_TEMPLATE) ? "TEMPLATE" > : (_type == TYPE_TEXT) ? "TEXT" > : "UNKNOWN. Throwing exception")); > } > > Object toInclude = getThingToInclude(broker, _type, > localFilename); > switch (_type) > { > case TYPE_MACRO: > // during runtime evaluation of a template, > // a TYPE_MACRO doesn't really work as expected. > // we logged a warning above in build(), but > // we still need to write it out as a template > // so just fall through > case TYPE_TEMPLATE: > out.write(((Template) > toInclude).evaluateAsBytes(out.getEncoding(), context)); > break; > > case TYPE_TEXT: > // static types are strings > out.write(toInclude.toString()); > break; > > default: > // should never happen > throw makePropertyException("Unrecognized file type: " > + _type); > } > } > > The most important change is the third line: > String localFilename = _strFilename; > Then every other place where _strFilename was referenced has been > changed to localFilename. > This has no effect for the single included file case. In the case of a > macro: > if (_macFilename != null) > { > localFilename = _macFilename.evaluate(context).toString(); > if (localFilename == null || localFilename.length() == 0) > { > throw makePropertyException("Filename cannot be null or > empty"); > } > } > then localFilename is set to the corret value within each thread . > And the threads can't overwrite each other's data. > > Oh, yes, and my test now does not fail! > > Let me know if you agree with my analysis. > > Carl |
From: Carl H. S. <ca...@da...> - 2006-02-05 15:57:27
|
I think I solved it! But I'm new to the inner workings of WebMacro, so please let me know if I've overlooked something. The problem appears to be in the IncludeDirective.write() method. The IncludeDirective class has two instance fields: protected Macro _macFilename; protected String _strFilename; In the case of an included file, the filename is stored in _strFilename. But if the included filename comes from a macro, then the macro name is stored in _macFilename. The write() method has no problem with the single file case, using _strFilename which never changes. But in the case of a macro, write() stores the name of the file it is trying to include in _strFilename. If two threads do this simultaneously, one will clober the other by overwriting _strFilename. My first solution was to synchronize the write() method. This does solve the problem, but it has negatve performance implications. My second solution is to use a local variable in write() to store the filename that we are including, passing through anything previously stored in _strFilename, to preserve the simple file include case. Here is my new write() method: public void write (FastWriter out, Context context) throws PropertyException, IOException { String localFilename = _strFilename; Broker broker = context.getBroker(); // the filename arg passed to us was a Macro, so // evaluate and check it now if (_macFilename != null) { localFilename = _macFilename.evaluate(context).toString(); if (localFilename == null || localFilename.length() == 0) { throw makePropertyException("Filename cannot be null or empty"); } } if (_log.loggingDebug() && context.getCurrentLocation().indexOf(localFilename) > -1) { // when in debug mode, output a warning if a template tries to include itself // there are situtations where this is desired, but it's good to make // the user aware of what they're doing _log.warning(context.getCurrentLocation() + " includes itself."); } // this should only be true if StrictCompatibility is set to false // and "as <something>" wasn't specified in the arg list if (_type == TYPE_DYNAMIC) _type = guessType(broker, localFilename); if (_log.loggingDebug()) { _log.debug("Including '" + localFilename + "' as " + ((_type == TYPE_MACRO) ? "MACRO" : (_type == TYPE_TEMPLATE) ? "TEMPLATE" : (_type == TYPE_TEXT) ? "TEXT" : "UNKNOWN. Throwing exception")); } Object toInclude = getThingToInclude(broker, _type, localFilename); switch (_type) { case TYPE_MACRO: // during runtime evaluation of a template, // a TYPE_MACRO doesn't really work as expected. // we logged a warning above in build(), but // we still need to write it out as a template // so just fall through case TYPE_TEMPLATE: out.write(((Template) toInclude).evaluateAsBytes(out.getEncoding(), context)); break; case TYPE_TEXT: // static types are strings out.write(toInclude.toString()); break; default: // should never happen throw makePropertyException("Unrecognized file type: " + _type); } } The most important change is the third line: String localFilename = _strFilename; Then every other place where _strFilename was referenced has been changed to localFilename. This has no effect for the single included file case. In the case of a macro: if (_macFilename != null) { localFilename = _macFilename.evaluate(context).toString(); if (localFilename == null || localFilename.length() == 0) { throw makePropertyException("Filename cannot be null or empty"); } } then localFilename is set to the corret value within each thread . And the threads can't overwrite each other's data. Oh, yes, and my test now does not fail! Let me know if you agree with my analysis. Carl |
From: Carl H. S. <ca...@da...> - 2006-02-05 14:03:40
|
I tried adding the following to WebMacro.properties: PropertyOperator.CacheManager=org.webmacro.resource.TrivialCacheManager The error still occurs. Carl Eric B. Ridge wrote: > My theory is that SimpleCacheManager.java is broken (http:// > cvs.sourceforge.net/viewcvs.py/webmacro/webmacro/src/org/webmacro/ > resource/SimpleCacheManager.java?rev=1.2&view=markup) > > It seems the get(query, helper) function would allow concurrent > readers to load and put the same resource in the _cache at the same > time. Obviously, in the end we'd only have one entry in the map, but > we'd be loading the template twice. > > But I don't see how this explains getting the *wrong* template back. > I would think that concurrent.jar's ConcurrentHashMap would have to > be broken in order for this to happen. > |
From: Carl H. S. <ca...@da...> - 2006-02-05 05:45:07
|
Thanks Eric, I appreciate the help. Our application follows the WMServlet model of one WM per Servlet. In trying to track down the problem, we tried a single WM shared among servlets, one WM per servlet, and a new WM per HttpSerlvet.doPost. All three cases exhibit the same problem. Similarly, in WMTest.java, moving the WM instance out of the Test constructor and making it static has no effect on the test results. The problem remains. Eric B. Ridge wrote: > Also, a note to Carl. I realize your wmtest.jar file is designed to > expose this bug, but if your real code is creating new WM instances > for *every* thread, you should consider not doing that. Instead, > keep one global WM instance. Just make sure to give each thread > their own Context object via _wm.getContext(). When WM is working > properly, a separate Context per thread is all that's needed to > guarantee thread-safety. |
From: Eric B. R. <eb...@tc...> - 2006-02-04 21:32:48
|
My theory is that SimpleCacheManager.java is broken (http:// cvs.sourceforge.net/viewcvs.py/webmacro/webmacro/src/org/webmacro/ resource/SimpleCacheManager.java?rev=1.2&view=markup) It seems the get(query, helper) function would allow concurrent readers to load and put the same resource in the _cache at the same time. Obviously, in the end we'd only have one entry in the map, but we'd be loading the template twice. But I don't see how this explains getting the *wrong* template back. I would think that concurrent.jar's ConcurrentHashMap would have to be broken in order for this to happen. Just a theory tho. I've never run across this myself. Maybe Brian can chime in? Also, a note to Carl. I realize your wmtest.jar file is designed to expose this bug, but if your real code is creating new WM instances for *every* thread, you should consider not doing that. Instead, keep one global WM instance. Just make sure to give each thread their own Context object via _wm.getContext(). When WM is working properly, a separate Context per thread is all that's needed to guarantee thread-safety. eric On Feb 4, 2006, at 4:09 PM, Marc Palmer wrote: > > On 4 Feb 2006, at 18:56, Carl H. Sayres wrote: > >> Hello, >> >> We've encountered a concurrency problem with the #include as >> template directive. It appears that when multiple threads of >> execution are running, webmacro can intermittently select a >> different template than the one requested. We have created a test >> program that demonstrates the problem. If anyone can provide >> insight into the cause of the problem, (or even better, a fix), we >> would be very appreciative. > > Thanks for this Carl. I haven't had time to run the test but I've > looked at the source of it. > > It definitely looks like you've found some obscure problem, but > it's possible it is either in the include mechanism, template cache > implementation, or the introspection code. > > Anybody got time to look at this? > > cheers > > > > ------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. Do you grep through > log files > for problems? Stop! Download the new AJAX search engine that makes > searching your log files as easy as surfing the web. DOWNLOAD > SPLUNK! > http://sel.as-us.falkag.net/sel? > cmd=lnk&kid=103432&bid=230486&dat=121642 > _______________________________________________ > Webmacro-user mailing list > Web...@li... > https://lists.sourceforge.net/lists/listinfo/webmacro-user |
From: Marc P. <ma...@an...> - 2006-02-04 21:11:51
|
On 4 Feb 2006, at 18:56, Carl H. Sayres wrote: > Hello, > > We've encountered a concurrency problem with the #include as > template directive. It appears that when multiple threads of > execution are running, webmacro can intermittently select a > different template than the one requested. We have created a test > program that demonstrates the problem. If anyone can provide > insight into the cause of the problem, (or even better, a fix), we > would be very appreciative. Thanks for this Carl. I haven't had time to run the test but I've looked at the source of it. It definitely looks like you've found some obscure problem, but it's possible it is either in the include mechanism, template cache implementation, or the introspection code. Anybody got time to look at this? cheers |
From: Carl H. S. <ca...@da...> - 2006-02-04 18:56:33
|
Hello, We've encountered a concurrency problem with the #include as template directive. It appears that when multiple threads of execution are running, webmacro can intermittently select a different template than the one requested. We have created a test program that demonstrates the problem. If anyone can provide insight into the cause of the problem, (or even better, a fix), we would be very appreciative. I have posted wmtest.jar at http://www.datarepresentations.com/wmtest/wmtest.jar The jar contains the compiled test classes and templates, as well as the source code. In the test, we have a Page object (which extends ArrayList) that contains an arbitrary number of PageItems. Each PageItem has a getTemplate() method that returns the name of the template file for that object. In the Page template, we do the following: #foreach $pageItem in $page { #include as template "$pageItem.Template" } There are several subclasses of PageItem ( PageItemA, PageItemB, and PageItemC ). Each of these subclasses has a unique method getA, getB, or getC. In the template file that corresponds to each PageItem, we call these methods using $pageItem.A, $pageItem.B, or $pageItem.C. As long as the correct template is being used, this works. But if PageItemA's template were to call $pageItem.B, a ContextException would be thrown. If things are working correctly, this should never happen. We add 1000 of each (PageItems A,B,C) to the Page. When we run a single test, everything is fine. This confirms that our objects and templates work as expected. But when we run multiple concurrent tests, we occasionally see the following error in the log: 1:10:18 PM engine ERROR No public property C on variable $pageItem of class wmtest.PageItemB at C:\webmacroTest\src\templates\PageItemC.wmt:1.10 This says that WebMacro attempted to render PageItemB using the template for PageItemC !!! To run the test, put the wmtest.jar file (along with webmacro.jar and concurrent.jar) in the classpath and run (using j2sdk 4 or 5): java wmtest.WMTest 1 0 The first number is the number of tests to run. The second is the number of milliseconds to sleep in between starting each test. (Each test runs in a separate thread. So "wmtest.WMTest 2 1000" starts two threads 1 second apart). The output for one test should look like: Starting test #0 1:47:38 PM LogFile NOTICE --- Log Started --- 1:47:38 PM broker NOTICE starting org.webmacro.Broker: WebMacro.properties 1:47:38 PM broker NOTICE Loaded settings from WebMacro.defaults, WebMacro.properties, (System Properties) 1:47:38 PM wm NOTICE new WebMacro(WebMacro.properties) v2.0 Finished test #0 With only one test, there is never an error. But running many simultaneous test often produces the error. The problem is intermittent and very timing sensitive. On a 3GHz P4 WinXPSP2, "wmtest.WMTest 2 1000" almost always produces the error. On slower machines, you need to increase the number of tests and decrease the time interval to see the error. On a 1.0GHz P3 Win2000SP4, we found "wmtest.WMTest 8 700" usually produced the error. We have seen the error using both J2sdk 4 and 5 on Windows and Linux. With 2 tests, on the P4 we get: Starting test #0 1:48:47 PM LogFile NOTICE --- Log Started --- 1:48:47 PM broker NOTICE starting org.webmacro.Broker: WebMacro.properties 1:48:47 PM broker NOTICE Loaded settings from WebMacro.defaults, WebMacro.properties, (System Properties) 1:48:47 PM wm NOTICE new WebMacro(WebMacro.properties) v2.0 Starting test #1 1:48:47 PM wm NOTICE new WebMacro(WebMacro.properties) v2.0 1:48:47 PM engine ERROR No public property B on variable $pageItem of class wmtest.PageItemA at C:\webmacroTest\src\templates\PageItemB.wmt:1.10 Failed test #0 Finished test #1 The error is very timing sensitive, so you may need to try different numbers until you see it on your machine. Also the exact error is different each time. We have seen every erroneous combination of PageItem[ABC] and the template for [ABC]. |
From: Lane S. <la...@op...> - 2006-01-07 06:53:58
|
Hi Shane, We do not have a plug-in for Eclipse. -Lane Shane Farmer wrote: > Hi all, > > I am new to Webmacro and I am just wondering if anyone knows of a > plugin for the Eclipse IDE? > > Thanks, > Shane -- Lane Sharman Providing Private and SPAM-Free Email http://www.opendoors.com 858-755-2868 |
From: Shane F. <sha...@gm...> - 2006-01-06 09:43:47
|
Sorry, Wrong subject line. Should have been Eclipse Plugin ;-) Shane On 06/01/06, Shane Farmer <sha...@gm...> wrote: > > Hi all, > > I am new to Webmacro and I am just wondering if anyone knows of a plugin > for the Eclipse IDE? > > Thanks, > Shane > |
From: Shane F. <sha...@gm...> - 2006-01-06 09:08:23
|
Hi all, I am new to Webmacro and I am just wondering if anyone knows of a plugin fo= r the Eclipse IDE? Thanks, Shane |
From: <Web...@St...> - 2005-12-21 09:04:22
|
On Sun, 18 Dec 2005, Marc Palmer wrote: | | On 16 Nov 2005, at 17:51, Lane Sharman wrote: | | > please. plow ahead. we need it desperately. | > | | Great - I will plough (bah - you yanks and your spellings) ahead! Excellent! I had a look at this myself, but didn't get around to actually do it. What I _think_ I remember that I saw (!), was that there are instances where the semantics .. if (log.isDebugEnabled()) log.debug("construction"+object+"message"); .. wasn't follwed. This is obviously absolutely essential for good performance: *) Always use static Logger instances (or singleton instances), that is NEVER create new Loggers "on demand" for e.g. each Template being loaded. *) Always check whether the log-level is enabled _before constructing the log message_. PS: Anyone know what happened to the couple of patches/code I submitted? The one with the Exception-chaining mechanism fix for java 1.4 (use "default chaining" on java >= 1.4, and "do it ourselves" on earlier, to avoid "double chaining"), and the URLEncoder-taking-encoding-argument external class (since this lacks for java < 1.4)? Regards, Endre. |
From: <Web...@St...> - 2005-12-21 08:56:40
|
On Wed, 16 Nov 2005, Lane Sharman wrote: | Marc, | | This is a good analysis. | | What do other people think of refactoring the Broker? Absolutely positive. I think there is way to much "magic" in WebMacro. I'd rather that it was a _really_ clean little "merge macro library" than all this automagic/confusing resolving of whatnot. .. and get rid of those damn threads. I dislike libraries that fork threads without me knowing it. It makes _all kinds of dirty mess_ with Class(Re)Loaders and such things. I would like to _instantiate_ the cache-mechanism myself, choosing one of several, or, ofcourse, make a proper one / project specific myself! And then I'd _set_ it on the WebMacro instance, or something like this. Of course, this could just be a part of the mechanism Marc already suggest: if I could instantiate the TemplateProvider myself, I'd shove the caching _in there_, thank you. No caching inside of "WebMacro proper" - it does one thing: merge templates with the context, fast and _final_. The default template providers coming with the system could then maybe be pluggable in the sense that their default caching behaviour was done using some API/SPI thingy - default they wouldn't cache, but you could set the cache on the TemplateProvider on constructor or by setter before you sat the TemplateProvider again on the WebMacro instance. The Broker just complicates things hugely. Regards, Endre. |
From: Marc P. <ma...@an...> - 2005-12-18 13:23:13
|
On 16 Nov 2005, at 17:51, Lane Sharman wrote: > please. plow ahead. we need it desperately. > Great - I will plough (bah - you yanks and your spellings) ahead! :) ~ ~ ~ Marc Palmer (ma...@an...) Consultant/Analyst AnyWare Ltd. http://www.anyware.co.uk/ |
From: Lane S. <la...@op...> - 2005-12-16 17:50:01
|
Marc, This is a good analysis. What do other people think of refactoring the Broker? Lane Marc Palmer wrote: > > Hi all, > > I'm going round the houses on this again with WM. I even looked at > Velocity to get me out of this but it looks like they copied WM so > closely they took the bad (in my opinion) config mechanisms! > > However it's not all WebMacro's fault :) > > What I'm trying to do is slightly unusual - although I've been down > this road before. > > For me, it is important to be able to configure new instances of WM > at runtime. The core issue here is being able to set a specific > template location per WM instance I create, and there will be > multiple instances each with different paths. > > Issue 1: This requires you to manually create Properties objects with > the correct settings and pass them to the WM constructor. I've said > it before and I'll say it again - WebMacro.addTemplateProvider ( > myProvider) would really be very nice. Sadly the Broker complicates > all this. > > Issue 2: I'm interfacing with Spring, but this problem would likely > exist with any bean container. I'm creating a Spring MVC view > instance that creates WebMacroView objects that need a reference to a > WebMacro instance. This is easy, until you realise you want different > WM instances with different paths, and you only know the template > paths after the view resolver (which creates the WebMacroView > instances) has been created. > > The latter is a general Spring/container problem. If Spring's > ViewResolver supported a mechanism for setting paths used by the view > later to locate resources, this would be much easier to fix. > > Anyway, just whining really. There is no clean solution I can see at > the moment, and it requires specific hacking for each view technology :( > > Can we -please- have bean-based config in WM 3? I will happily do > most/all of this work if people agree it is a good idea. We'd still > emulate the old Broker mechanisms bit IMHO (I've said it so many > times) the Broker needs a refactor to simplify its interface and make > it an interface not a class. Then alternative Broker implementations > can be easily written that interface to any of the many good bean > container systems out there. > > At the very least it would be SO nice to just create a new BeanBroker > () and call addBean( new MyProvider()) to set it up, and then call > new WM( myBeanBroker). With that comes easy scriptability of WM config. > > Cheers > > ~ ~ ~ > Marc Palmer (ma...@an...) > Consultant/Analyst > AnyWare Ltd. > http://www.anyware.co.uk/ > > > > ------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. Do you grep through log > files > for problems? Stop! Download the new AJAX search engine that makes > searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! > http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click > _______________________________________________ > Webmacro-user mailing list > Web...@li... > https://lists.sourceforge.net/lists/listinfo/webmacro-user > -- Lane Sharman Providing Private and SPAM-Free Email http://www.opendoors.com 858-755-2868 |
From: Lane S. <la...@op...> - 2005-12-16 17:49:39
|
please. plow ahead. we need it desperately. Lane Marc Palmer wrote: > > Guys, > > Am I being dumb or re-inventing the wheel by creating a > CommonsLoggingLogTarget class for WM? > > I use commons logging/log4j in my application don't want logs coming > out in different places. > > If somebody has been down this path already, please let me know. > > It would be nice to have this built into WM 2.1 :) > > If there are no objections I'll just plough on and do it. > > cheers > > ~ ~ ~ > Marc Palmer (ma...@an...) > Consultant/Analyst > AnyWare Ltd. > http://www.anyware.co.uk/ > > > > ------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. Do you grep through log > files > for problems? Stop! Download the new AJAX search engine that makes > searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! > http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click > _______________________________________________ > Webmacro-user mailing list > Web...@li... > https://lists.sourceforge.net/lists/listinfo/webmacro-user > -- Lane Sharman Providing Private and SPAM-Free Email http://www.opendoors.com 858-755-2868 |
From: Marc P. <ma...@an...> - 2005-12-14 10:26:33
|
Guys, Am I being dumb or re-inventing the wheel by creating a CommonsLoggingLogTarget class for WM? I use commons logging/log4j in my application don't want logs coming out in different places. If somebody has been down this path already, please let me know. It would be nice to have this built into WM 2.1 :) If there are no objections I'll just plough on and do it. cheers ~ ~ ~ Marc Palmer (ma...@an...) Consultant/Analyst AnyWare Ltd. http://www.anyware.co.uk/ |
From: Marc P. <ma...@an...> - 2005-12-12 16:23:49
|
Hi all, I'm going round the houses on this again with WM. I even looked at Velocity to get me out of this but it looks like they copied WM so closely they took the bad (in my opinion) config mechanisms! However it's not all WebMacro's fault :) What I'm trying to do is slightly unusual - although I've been down this road before. For me, it is important to be able to configure new instances of WM at runtime. The core issue here is being able to set a specific template location per WM instance I create, and there will be multiple instances each with different paths. Issue 1: This requires you to manually create Properties objects with the correct settings and pass them to the WM constructor. I've said it before and I'll say it again - WebMacro.addTemplateProvider ( myProvider) would really be very nice. Sadly the Broker complicates all this. Issue 2: I'm interfacing with Spring, but this problem would likely exist with any bean container. I'm creating a Spring MVC view instance that creates WebMacroView objects that need a reference to a WebMacro instance. This is easy, until you realise you want different WM instances with different paths, and you only know the template paths after the view resolver (which creates the WebMacroView instances) has been created. The latter is a general Spring/container problem. If Spring's ViewResolver supported a mechanism for setting paths used by the view later to locate resources, this would be much easier to fix. Anyway, just whining really. There is no clean solution I can see at the moment, and it requires specific hacking for each view technology :( Can we -please- have bean-based config in WM 3? I will happily do most/all of this work if people agree it is a good idea. We'd still emulate the old Broker mechanisms bit IMHO (I've said it so many times) the Broker needs a refactor to simplify its interface and make it an interface not a class. Then alternative Broker implementations can be easily written that interface to any of the many good bean container systems out there. At the very least it would be SO nice to just create a new BeanBroker () and call addBean( new MyProvider()) to set it up, and then call new WM( myBeanBroker). With that comes easy scriptability of WM config. Cheers ~ ~ ~ Marc Palmer (ma...@an...) Consultant/Analyst AnyWare Ltd. http://www.anyware.co.uk/ |
From: Marc P. <ma...@an...> - 2005-12-11 16:26:16
|
On 10 Dec 2005, at 17:11, Lane Sharman wrote: > Java is at a cross-roads. The blog from Greenspun (see link below) > is just right-on about Java. What has happenned is that the > engineering theoreticians at IBM, Oracle and Sun co-opted Java into > a complex environment. Great if you believe that industry and > purchasing managers are always willing to pay for expensive, hard- > to-find, propeller-headed engineers to work on the full spectrum of > engineering problems. > > OK. What to do? There really needs to be a new initiative for Java. > > Something akin to an interpretive container for GUI and Web apps > which uses mostly reflection for dynamic instantiation of well- > known java types for database binding and presentation. The common > tasks of EVERY application. > > And, interpretive languages for Java ARE out there. What will it > take to move the Java engineering community into endorsing and > embracing Java-based interpretive environments and building on > them? What will it take for a group to build a general-purpose > application execution container with a cool GUI builder using an > interpretive, semi-typed language? Erm, Groovy. http://groovy.codehaus.org They are currently going through the JCP process to establish the language specification and testing compatibility kit. It is slated to become the de facto scripting language for Java. Groovy, JSR 241 info is at http://www.jcp.org/en/jsr/detail?id=241 Groovy is great because you can run it interpreted, it talks to Java classes fine, and you can also pre-compile it to java bytecode. I'm already writing all my JUnit unit tests as Groovy scripts now, its a real timesaver. ~ ~ ~ Marc Palmer (ma...@an...) Consultant/Analyst AnyWare Ltd. http://www.anyware.co.uk/ |
From: Lane S. <la...@op...> - 2005-12-10 17:09:46
|
Java is at a cross-roads. The blog from Greenspun (see link below) is just right-on about Java. What has happenned is that the engineering theoreticians at IBM, Oracle and Sun co-opted Java into a complex environment. Great if you believe that industry and purchasing managers are always willing to pay for expensive, hard-to-find, propeller-headed engineers to work on the full spectrum of engineering problems. OK. What to do? There really needs to be a new initiative for Java. Something akin to an interpretive container for GUI and Web apps which uses mostly reflection for dynamic instantiation of well-known java types for database binding and presentation. The common tasks of EVERY application. And, interpretive languages for Java ARE out there. What will it take to move the Java engineering community into endorsing and embracing Java-based interpretive environments and building on them? What will it take for a group to build a general-purpose application execution container with a cool GUI builder using an interpretive, semi-typed language? Lane Somerset M. wrote: > Hi all, > > Here comes another blog post (bashing, if you like) about Java, this > time from Philip Greenspun - > http://blogs.law.harvard.edu/philg/2003/09/20#a1762. > > A lot of people probably won't agree with him, but it may be a threat > to Java, if one agrees with some of his points. > If we follow the analogy, "Can SUVs remain fashionable when only > unfashionable people drive them?" > Replace "SUV" with "Java" above. > > At my company we have a rather small Java team doing a client-server > app. In terms of code, the client is where the action is, the server > mostly wraps some C/C++ pre-existing code. Some heavy GUI (Open GL, > Swing/AWT, etc.). > We have an opening there that hasn't been filled in months. The team > leader is saying that it is hard to get people who know Java GUI (yes, > I know, probably more people know Java on the server, still Java is > Java, OpenGL is not obligatory, its hidden behind a class already). > (I have to mention that some other factors that contribute to this > problem I suppose, are that our pay levels are only average and we are > not the hottest company around, but still... the market was/is rather > bad too). > > Just something to get the morning more exciting ;-) > > Regards, > Simeon > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: laj...@la... > For additional commands, e-mail: laj...@la... > > -- Lane Sharman Providing Private and SPAM-Free Email http://www.opendoors.com 858-755-2868 |
From: Nikolaos P. <nk...@cc...> - 2005-12-10 07:52:19
|
Dear all, I am trying to develop a web application (written using webmacro) using=20 openLdap to handle user authentication and roles. When I get the request in the webmacro application and try to figure out=20 the user's role using the method isUserInRole(=93userRole=94) the method=20 always returns null value. I have tried the same method in a jsp and the method returns the correct=20 value. I am using tomcat 4.1 as servlet container. Any help would be=20 appreciated. the snippet of code follows: public Template handle(WebContext context) throws HandlerException { HttpServletRequest request =3D context.getRequest(); HttpSession session =3D request.getSession(); request.isUserInRole(=93userRole=94); ............... ........ Thank you in advance, regards Nikolaos Papadakis |
From: Nikolaos P. <nk...@cc...> - 2005-11-28 17:49:55
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type"> </head> <body bgcolor="#ffffff" text="#000000"> Thank you Nick, <br> I will try it.<br> <br> Best Regards,<br> Nikolaos<br> <br> Nick Sanderson wrote: <blockquote cite="mid...@ms..." type="cite"> <pre wrap="">Hi Nikolaos There's nothing wrong with the 'token' solution that you are using . It is often called a NONCE - number once. (In the Uk this is fairly amusing as nonce is slang for a sex offender!) I use it a lot to prevent double submits, but if all you want to do is let the user use the refresh button without resubmitting the data the POST followed by GET is easier. This can be achieved in the servlet code by using a response redirect. eg webContext.getResponse().sendRedirect("<path required>"); return null; //needed to tell webmacro not to produce output for this request. Unlike the request despatcher the response send redirect actually sends a esponse to the client. This changes the page headers and causes a get request to the required resource. Thus providing an i'n between' state so that refresh no longer reposts the data. Regards Nick </pre> <blockquote type="cite"> <blockquote type="cite"> <blockquote type="cite"> <pre wrap=""><a class="moz-txt-link-abbreviated" href="mailto:nk...@cc...">nk...@cc...</a> 11/25/05 08:27PM >>> </pre> </blockquote> </blockquote> </blockquote> <pre wrap=""><!---->Hi Nick, all, First of all thx for your reply. I have managed to find another work around for this problem. The main idea is to keep a counter in the session. This counter is passed to the html page, through the context, and is incremented by one when the user presses the 'submit' button. When the request is received the value of the counter is compared to the value stored in the session. If the two values differ by one, then it is a new request. Else it means that the request came from a 'refresh' without the user pressing the submit button. This solution seems to work but it is a little complicated, so I would still be interested in a simpler, more straightforward solution, as the one you suggested. Unfortunatelly, I am a newbie in webmacro, so could you please indicate in more detail how exactly a redirect is implemented in webmacro? A code snippet would be very appreciated. Thx in advance, Nikolaos Nick Sanderson wrote: Hi NikolaosThe simple solution is to use a post to submit the data but to redirectto the display page. That way the post is not repeated as the page hasbeen reached as a result of a GET.RegardsNick <a class="moz-txt-link-abbreviated" href="mailto:ma...@an...">ma...@an...</a> 11/24/05 12:09 PM >>> Nikolaos Papadakis wrote: Hi all,I am using webmacro to develop a (small) web-based application.I am facing a problem in my application. The problem occurs when the user re-submits a request, using one of the following methods:1. reloading result page using Refresh/Reload browser button,2. clicking Back and then Forward browser buttons,3. returning back to HTML FORM after submission and clicking Submit button on the form again.Browsers usually, display a warning message when the same POST request is about to be resent to the server. But the message is too technical and obscure for an average user. Also, some browsers do not ask for confirmation at all.Is it possible to get rid of this kind of inconvenience?Is there any hint you can give me for this phenomenon?Can webmacro handle this?Any source code would be appreciated. Hi,WebMacro is not a web framework, it is just a view layer (renderer). As such WebMacro does not provide any functionality relating to the double-post problem.Cheers-------------------------------------------------------This SF.net email is sponsored by: Splunk Inc. Do you grep through logfilesfor problems? Stop! Download the new AJAX search engine that makessearching your log files as easy as surfing the web. DOWNLOAD SPLUNK!<a class="moz-txt-link-freetext" href="http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click_______________________________________________Webmacro-user">http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click_______________________________________________Webmacro-user</a> mailing <a class="moz-txt-link-abbreviated" href="mailto:lis...@li...https://lists.sourceforge.net/lists/listinfo/webmacro-userThis">lis...@li...https://lists.sourceforge.net/lists/listinfo/webmacro-userThis</a> mail has been checked at MSXI for all known virus'.You open this at your own risk. Please make sure all replies are virus free.Also, we do not accept or send attachments of the type exe, vbs, scr or bat due to the increased virus risk they contain.These types of attachments will be stripped from the message.MSXI-------------------------------------------------------This SF.net email is sponsored by: Splunk Inc. Do you grep through log filesfor problems? Stop! Download the new AJAX search engine that makessearching your log files as easy as surfing the web. DOWNLOAD SPLUNK!<a class="moz-txt-link-freetext" href="http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click_______________________________________________Webmacro-user">http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click_______________________________________________Webmacro-user</a> mailing <a class="moz-txt-link-abbreviated" href="mailto:lis...@li...https://lists.sourceforge.net/lists/listinfo/webmacro-user">lis...@li...https://lists.sourceforge.net/lists/listinfo/webmacro-user</a> ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! <a class="moz-txt-link-freetext" href="http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click">http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click</a> _______________________________________________ Webmacro-user mailing list <a class="moz-txt-link-abbreviated" href="mailto:Web...@li...">Web...@li...</a> <a class="moz-txt-link-freetext" href="https://lists.sourceforge.net/lists/listinfo/webmacro-user">https://lists.sourceforge.net/lists/listinfo/webmacro-user</a> This mail has been checked at MSXI for all known virus'. You open this at your own risk. Please make sure all replies are virus free. Also, we do not accept or send attachments of the type exe, vbs, scr or bat due to the increased virus risk they contain. These types of attachments will be stripped from the message. MSXI ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! <a class="moz-txt-link-freetext" href="http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click">http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click</a> _______________________________________________ Webmacro-user mailing list <a class="moz-txt-link-abbreviated" href="mailto:Web...@li...">Web...@li...</a> <a class="moz-txt-link-freetext" href="https://lists.sourceforge.net/lists/listinfo/webmacro-user">https://lists.sourceforge.net/lists/listinfo/webmacro-user</a> </pre> </blockquote> </body> </html> |
From: Nick S. <nsa...@ms...> - 2005-11-28 09:39:13
|
Hi Nikolaos There's nothing wrong with the 'token' solution that you are using . It is often called a NONCE - number once. (In the Uk this is fairly amusing as nonce is slang for a sex offender!) I use it a lot to prevent double submits, but if all you want to do is let the user use the refresh button without resubmitting the data the POST followed by GET is easier. This can be achieved in the servlet code by using a response redirect. eg webContext.getResponse().sendRedirect("<path required>"); return null; //needed to tell webmacro not to produce output for this request. Unlike the request despatcher the response send redirect actually sends a esponse to the client. This changes the page headers and causes a get request to the required resource. Thus providing an i'n between' state so that refresh no longer reposts the data. Regards Nick >>> nk...@cc... 11/25/05 08:27PM >>> Hi Nick, all, First of all thx for your reply. I have managed to find another work around for this problem. The main idea is to keep a counter in the session. This counter is passed to the html page, through the context, and is incremented by one when the user presses the 'submit' button. When the request is received the value of the counter is compared to the value stored in the session. If the two values differ by one, then it is a new request. Else it means that the request came from a 'refresh' without the user pressing the submit button. This solution seems to work but it is a little complicated, so I would still be interested in a simpler, more straightforward solution, as the one you suggested. Unfortunatelly, I am a newbie in webmacro, so could you please indicate in more detail how exactly a redirect is implemented in webmacro? A code snippet would be very appreciated. Thx in advance, Nikolaos Nick Sanderson wrote: Hi NikolaosThe simple solution is to use a post to submit the data but to redirectto the display page. That way the post is not repeated as the page hasbeen reached as a result of a GET.RegardsNick ma...@an... 11/24/05 12:09 PM >>> Nikolaos Papadakis wrote: Hi all,I am using webmacro to develop a (small) web-based application.I am facing a problem in my application. The problem occurs when the user re-submits a request, using one of the following methods:1. reloading result page using Refresh/Reload browser button,2. clicking Back and then Forward browser buttons,3. returning back to HTML FORM after submission and clicking Submit button on the form again.Browsers usually, display a warning message when the same POST request is about to be resent to the server. But the message is too technical and obscure for an average user. Also, some browsers do not ask for confirmation at all.Is it possible to get rid of this kind of inconvenience?Is there any hint you can give me for this phenomenon?Can webmacro handle this?Any source code would be appreciated. Hi,WebMacro is not a web framework, it is just a view layer (renderer). As such WebMacro does not provide any functionality relating to the double-post problem.Cheers-------------------------------------------------------This SF.net email is sponsored by: Splunk Inc. Do you grep through logfilesfor problems? Stop! Download the new AJAX search engine that makessearching your log files as easy as surfing the web. DOWNLOAD SPLUNK!http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click_______________________________________________Webmacro-user mailing lis...@li...https://lists.sourceforge.net/lists/listinfo/webmacro-userThis mail has been checked at MSXI for all known virus'.You open this at your own risk. Please make sure all replies are virus free.Also, we do not accept or send attachments of the type exe, vbs, scr or bat due to the increased virus risk they contain.These types of attachments will be stripped from the message.MSXI-------------------------------------------------------This SF.net email is sponsored by: Splunk Inc. Do you grep through log filesfor problems? Stop! Download the new AJAX search engine that makessearching your log files as easy as surfing the web. DOWNLOAD SPLUNK!http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click_______________________________________________Webmacro-user mailing lis...@li...https://lists.sourceforge.net/lists/listinfo/webmacro-user ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click _______________________________________________ Webmacro-user mailing list Web...@li... https://lists.sourceforge.net/lists/listinfo/webmacro-user This mail has been checked at MSXI for all known virus'. You open this at your own risk. Please make sure all replies are virus free. Also, we do not accept or send attachments of the type exe, vbs, scr or bat due to the increased virus risk they contain. These types of attachments will be stripped from the message. MSXI |
From: Marc P. <ma...@an...> - 2005-11-26 09:10:25
|
>> I hope to make progress on this next week - but I've been saying that >> for a long time ;-( > > > Marc: this must be like British sex ... lol. > LOL - I have however just (last Sunday) had a second daughter so I don't think that necessarily applies. :) > Spring into action ... commit. I am ready to try your successor to > Ignition. As above, the new child is somewhat absorbing my time. However this coming week I will start working part-time again and my order of work will be: 1. Minor bug fix and commit WM JSP taglib 2. Test and refine WM MVC layer for Spring and commit 3. Start fleshing out Ignition 2 (Spring + Groovy + Spring Web Flow + Spring Valang + WebMacro) The latter project, Ignition 2 will be released as a "proper" open source project when I have finished the initial version and deployed my next customer project, due to go live Dec 19th. This is a major UK soft drinks brand owned by PepsiCo, so you can imagine I need to get this first version done quickly and right. After that I will be looking for active contributors to the project. I will keep you posted. Cheers |