Re: [collections] idea for quick map creation method(s)
[lang] ArrayUtils.toMap() Stephen - Original Message - From: Janek Bogucki [EMAIL PROTECTED] To: Jakarta Commons Developers List [EMAIL PROTECTED] Sent: Friday, September 12, 2003 10:55 PM Subject: Re: idea for quick map creation method(s) On Fri, 2003-09-12 at 18:36, __matthewHawthorne wrote: One thing that I've always wanted is the ability to create a Map in one line of code. For example, it would allow initialization of a static Map without having to resort to static blocks of code. I'm thinking of something like: createMap(Object[][]) createMap(Map.Entry[]) There was some discussion about this a while back. I'm not sure how it concluded but here's part of the relevant thread: http://marc.theaimsgroup.com/?l=jakarta-commons-devm=103426665022869w=2 -Janek - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23159] - [collections][PATCH] makes code easier to understand
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23159. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23159 [collections][PATCH] makes code easier to understand --- Additional Comments From [EMAIL PROTECTED] 2003-09-17 08:13 --- OK, I didn't write this class! The strange thing is that the code says I did, so someone is being done a dis-service here. I probably created the decorators, but this was based on code from elsewhere. In design terms, I suggest making changes if you are agreed that they make sense. Threading issues cause me headaches ;-) One thing I can say is that the lock variable is used by collection views, such as subList(), headSet() and tailSet(). So lock!=this is possible in some collections. This collection is unreleased, so changes can be made. We must just document very clearly the intent of the classes. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons/collections project.xml
scolebourne2003/09/17 01:33:14 Modified:collections project.xml Log: Update maven script to process all the tests Revision ChangesPath 1.14 +1 -1 jakarta-commons/collections/project.xml Index: project.xml === RCS file: /home/cvs/jakarta-commons/collections/project.xml,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- project.xml 5 Sep 2003 01:58:48 - 1.13 +++ project.xml 17 Sep 2003 08:33:14 - 1.14 @@ -249,7 +249,7 @@ build unitTest includes -includeorg/apache/commons/collections/TestAll.java/include +includeorg/apache/commons/collections/TestAllPackages.java/include /includes /unitTest /build - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23155] - [collections][PATCH] increase number of tests run from 2484 to 7429
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23155. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23155 [collections][PATCH] increase number of tests run from 2484 to 7429 [EMAIL PROTECTED] changed: What|Removed |Added Status|NEW |RESOLVED Resolution||FIXED --- Additional Comments From [EMAIL PROTECTED] 2003-09-17 08:36 --- Should be fixed now, thanks - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons/collections/src/java/org/apache/commons/collections/comparators FixedOrderComparator.java TransformingComparator.java ComparatorChain.java
scolebourne2003/09/17 01:38:59 Modified:collections/src/java/org/apache/commons/collections/comparators FixedOrderComparator.java TransformingComparator.java ComparatorChain.java Log: Javadoc fixes bug 23087, from Janek Bogucki Revision ChangesPath 1.6 +3 -3 jakarta-commons/collections/src/java/org/apache/commons/collections/comparators/FixedOrderComparator.java Index: FixedOrderComparator.java === RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/comparators/FixedOrderComparator.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- FixedOrderComparator.java 31 Aug 2003 17:25:49 - 1.5 +++ FixedOrderComparator.java 17 Sep 2003 08:38:59 - 1.6 @@ -99,7 +99,7 @@ /** * Behavior when comparing unknown Objects: - * unknown objects compare as before known Objects. + * unknown objects compare as after known Objects. */ public static final int UNKNOWN_AFTER = 1; 1.5 +2 -2 jakarta-commons/collections/src/java/org/apache/commons/collections/comparators/TransformingComparator.java Index: TransformingComparator.java === RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/comparators/TransformingComparator.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 1.14 +3 -3 jakarta-commons/collections/src/java/org/apache/commons/collections/comparators/ComparatorChain.java Index: ComparatorChain.java === RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/comparators/ComparatorChain.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- ComparatorChain.java 31 Aug 2003 17:25:49 - 1.13 +++ ComparatorChain.java 17 Sep 2003 08:38:59 - 1.14 @@ -206,7 +206,7 @@ * @param index index of the Comparator to replace * @param comparator Comparator to place at the given index * @exception IndexOutOfBoundsException - * if index lt; 0 or index gt; size() + * if index lt; 0 or index gt;= size() */ public void setComparator(int index, Comparator comparator) throws IndexOutOfBoundsException { - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23087] - [collections][PATCH] JavaDoc fixes for iterators
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23087. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23087 [collections][PATCH] JavaDoc fixes for iterators [EMAIL PROTECTED] changed: What|Removed |Added Status|NEW |RESOLVED Resolution||FIXED --- Additional Comments From [EMAIL PROTECTED] 2003-09-17 08:42 --- You meant comparators package of course... Thanks - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23087] - [collections][PATCH] JavaDoc fixes for iterators
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23087. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23087 [collections][PATCH] JavaDoc fixes for iterators --- Additional Comments From [EMAIL PROTECTED] 2003-09-17 09:03 --- ...yes I did! Thanks! - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: [HiveMind] Extension to adder example
Right on the money ... except that I probably would not both defining the service model for Adder and Subtractor; the default (deferred) is less efficient, but less trouble as well. Making those services singletons (rather than deferred singletons) is a premature optimization. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: Harish Krishnaswamy [mailto:[EMAIL PROTECTED] Sent: Tuesday, September 16, 2003 7:31 PM To: Jakarta Commons Developers List Subject: Re: [HiveMind] Extension to adder example You wouldn't believe, I had done the very same thing except called it a Calculator! Here are my modules... Service point module: ?xml version=1.0? module id=hivemind.examples version=1.0.0 service id=Adder interface=hivemind.examples.Adder model=singleton/ service id=Subtracter interface=hivemind.examples.Subtracter model=singleton/ service id=Calculator interface=hivemind.examples.Calculator model=singleton invoke-factory service-id=hivemind.BuilderFactory construct class=hivemind.examples.impl.CalculatorImpl set-service property=adder service-id=Adder/ set-service property=subtracter service-id=Subtracter/ /construct /invoke-factory /service /module Service module: ?xml version=1.0? module id=hivemind.examples.impl version=1.0.0 extend-service service-id=hivemind.examples.Adder create-instance class=hivemind.examples.impl.AdderImpl/ /extend-service extend-service service-id=hivemind.examples.Subtracter create-instance class=hivemind.examples.impl.SubtracterImpl/ /extend-service /module Client module: ?xml version=1.0? module id=hivemind.examples.log version=1.0.0 extend-service service-id=hivemind.examples.Adder interceptor service-id=hivemind.LoggingInterceptor order=10/ /extend-service /module And the rest is Hivemind! I am really liking it a lot. I can't wait for Tapestry 3.1! -Harish Bill Lear wrote: What I'd like to do is to define a service analogous to the Adder, Subtracter. Then, I'd like to define a service, Math that uses the Adder and Subtracter modules to provide the following interface: public interface Math { int add(int arg0, int arg1); int subtract(int arg0, int arg1); } with implementation: package hivemind.examples.impl; import hivemind.examples.Math; import hivemind.examples.Adder; import hivemind.examples.Subtracter; public class MathImpl implements Math { private Adder adder; public void setAdder(Adder adder) { this.adder = adder; } private Subtracter subtracter; public void setSubtracter(Subtracter subtracter) { this.subtracter = subtracter; } public int add(int arg0, int arg1) { return adder.add(arg0, arg1); } public int subtract(int arg0, int arg1) { return subtracter.add(arg0, arg1); } } and call it from code thus (after appropriate registry construction, etc.): Math math = (Math) registry.getService(hivemind.examples.Math, Math.class); System.out.println(Result of add: + math.add(arg0, arg1)); System.out.println(Result of subtract: + math.subtract(arg0, arg1)); I'm a bit confused as to how to tie all of this together. Could someone provide some pointers? Thanks. Bill - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: [HIVEMIND] Examples Please?
We're working on the docs and are setup now to provide more and better examples. HiveMind is very, very new. If it looks polished, that's a compliment ... and reflects that many of the ideas in HiveMind gestated inside Tapestry over the last couple of years. I'm using HiveMind at work ... I think of it largely as a refactoring tool. Case study #1 is based on one usage of HiveMind. However, its a proprietary application and completely huge. A module maps to a jar; you'll have multple packages in the jar but only a single HiveMind module. If that's a problem, one solution is to refactor your code into more small modules. HiveMind really supports this well, since it (effectively) adds a late binding, where module A defines the interface, and module B supplies the implementation. Due to our current build process, we have a similar issue: multiple logical modules that are packaged together as a single JAR. In an ideal world, there would be a ClassLoader.getTResourceInFolder(/META-INF/hivemind) ... but there isn't. Instead, we have external descriptors, a directory under WebLogic where we store the extra class loaders; our servlet's registry bootstrap code processes all the XML files there as well as those found normally. It works well, but is not quite ideal for a clustered EAR deployment; we'll want to graft something together for that soon. Possibly, our build system will write a catalog of these external descriptors into a central file. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: James Carman [mailto:[EMAIL PROTECTED] Sent: Tuesday, September 16, 2003 9:46 PM To: [EMAIL PROTECTED] Subject: [HIVEMIND] Examples Please? Does anyone have a good example application (very simple, please) for HiveMind? I would like to start using it and I just need a little nudge to get me going. Like, how do I obtain a handle to a Registry object in the first place to set it as the default? And, how many of these hivemind.xml files am I going to have to have floating around? It appears as if I need one for each package in my project, but only one can be in my jar file located at /META-INF/hivemind.xml? Is this true? If so, packaging an application could turn out to be rather tedious if I do indeed plan to separate things out into these small, testable modules. I may be misunderstanding the documentation, though. Anyway, if anyone has a good starter application (maybe even with the entire project set up with an Ant build script), I would be very appreciative. I sure wish I would have known about hivemind before. It looks as if it does everything (and more) that my little business object factory framework (http://www.javaworld.com/javaworld/jw-07-2003/jw-0718-factory .html) does. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [Fwd: Re: [HIVEMIND] Examples Please?]]
Did you get all the jars I mentioned, looks like you don't have the HiveMind jar. [EMAIL PROTECTED] wrote: Am I doing something wrong? When I tried to run your example, I got the output contained in the attached file. - Original Message - From: Harish Krishnaswamy mailto:[EMAIL PROTECTED] To: [EMAIL PROTECTED] mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 9:43 AM Subject: [Fwd: Re: [Fwd: Re: [HIVEMIND] Examples Please?]] Apparently this was sent to myself :-( Original Message Subject:Re: [Fwd: Re: [HIVEMIND] Examples Please?] Date: Tue, 16 Sep 2003 23:40:23 -0400 From: Harish Krishnaswamy [EMAIL PROTECTED] To: Harish Krishnaswamy [EMAIL PROTECTED] References: [EMAIL PROTECTED] Trying again without HiveMind.jar. So you will have to download HiveMind.jar also. Harish Krishnaswamy wrote: I had to strip out the jars 'cause of the size and apache servers would n't let it go through, I kept the HiveMind jar though. So you would want to download the following jars to the lib folder. commons-beanutils-1.6.1.jar commons-collections-2.1.jar commons-lang-2.0.jar commons-logging-1.0.2.jar javassist-2.5.1.jar log4j-1.2.6.jar xercesImpl.jar xmlParserAPIs.jar -Harish Original Message Subject:Re: [HIVEMIND] Examples Please? Date: Tue, 16 Sep 2003 23:17:21 -0400 From: Harish Krishnaswamy [EMAIL PROTECTED] To: Jakarta Commons Developers List [EMAIL PROTECTED] References: [EMAIL PROTECTED] James Carman wrote: Does anyone have a good example application (very simple, please) for HiveMind? Unzip the attached zip to a folder and run target run. Its a very simple Calculator service pretty much the same that would find on the website with two functions/services - add and subtract! I would like to start using it and I just need a little nudge to get me going. Like, how do I obtain a handle to a Registry object in the first place to set it as the default? And, how many of these hivemind.xml files am I going to have to have floating around? As many as you want. You can in fact bundle up everything in one mumbo module if you like! It appears as if I need one for each package in my project, but only one can be in my jar file located at /META-INF/hivemind.xml? Is this true? No, you need one hivemodule.xml per module and a module can be anything you want like I said before. If so, packaging an application could turn out to be rather tedious if I do indeed plan to separate things out into these small, testable modules. I may be misunderstanding the documentation, though. Anyway, if anyone has a good starter application (maybe even with the entire project set up with an Ant build script), I would be very appreciative. I sure wish I would have known about hivemind before. It looks as if it does everything (and more) that my little business object factory framework (http://www.javaworld.com/javaworld/jw-07-2003/jw-0718-factory.html) does. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] Buildfile: build.xml compile: [mkdir] Created dir: C:\Java\projects\HivemindExample\target\classes [javac] Compiling 7 source files to C:\Java\projects\HivemindExample\target\classes jar: [jar] Building jar: C:\Java\projects\HivemindExample\target\hivemind-examples-service.jar [jar] Building jar: C:\Java\projects\HivemindExample\target\hivemind-examples-service-impl.jar [jar] Building jar: C:\Java\projects\HivemindExample\target\hivemind-examples-main.jar run: [echo] Adding 11 and 23, should get 34. [java] 0 ServiceTranslator [ERROR] Error resolving service hivemind.ClassFactory (in element construct/set-service at jar:file:/C:/Java/projects/HivemindExample/lib/commons-hivemind-1.0-alpha-2.jar!/META-INF/hivemodule.xml, line 143): Unable to construct service hivemind.ClassFactory: Could not load class org.apache.commons.hivemind.service.impl.ClassFactoryImpl from [EMAIL PROTECTED]: javassist/ClassPath - [java] org.apache.commons.hivemind.ApplicationRuntimeException: Unable to construct service hivemind.ClassFactory: Could not load class org.apache.commons.hivemind.service.impl.ClassFactoryImpl from [EMAIL PROTECTED]: javassist/ClassPath [java] at org.apache.commons.hivemind.impl.ServiceExtensionPointImpl.constructNewServiceImplementation(ServiceExtensionPointImpl.java:266) [java] at org.apache.commons.hivemind.impl.ServiceExtensionPointImpl.constructServiceImplementation(ServiceExtensionPointImpl.java:195) [java] at
Re: [Fwd: Re: [HIVEMIND] Examples Please?]]
Oops, that's not it, something else, my bad, sorry. Let me take another look, Harish Krishnaswamy wrote: Did you get all the jars I mentioned, looks like you don't have the HiveMind jar. [EMAIL PROTECTED] wrote: Am I doing something wrong? When I tried to run your example, I got the output contained in the attached file. - Original Message - From: Harish Krishnaswamy mailto:[EMAIL PROTECTED] To: [EMAIL PROTECTED] mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 9:43 AM Subject: [Fwd: Re: [Fwd: Re: [HIVEMIND] Examples Please?]] Apparently this was sent to myself :-( Original Message Subject: Re: [Fwd: Re: [HIVEMIND] Examples Please?] Date: Tue, 16 Sep 2003 23:40:23 -0400 From: Harish Krishnaswamy [EMAIL PROTECTED] To: Harish Krishnaswamy [EMAIL PROTECTED] References: [EMAIL PROTECTED] Trying again without HiveMind.jar. So you will have to download HiveMind.jar also. Harish Krishnaswamy wrote: I had to strip out the jars 'cause of the size and apache servers would n't let it go through, I kept the HiveMind jar though. So you would want to download the following jars to the lib folder. commons-beanutils-1.6.1.jar commons-collections-2.1.jar commons-lang-2.0.jar commons-logging-1.0.2.jar javassist-2.5.1.jar log4j-1.2.6.jar xercesImpl.jar xmlParserAPIs.jar -Harish Original Message Subject: Re: [HIVEMIND] Examples Please? Date: Tue, 16 Sep 2003 23:17:21 -0400 From: Harish Krishnaswamy [EMAIL PROTECTED] To: Jakarta Commons Developers List [EMAIL PROTECTED] References: [EMAIL PROTECTED] James Carman wrote: Does anyone have a good example application (very simple, please) for HiveMind? Unzip the attached zip to a folder and run target run. Its a very simple Calculator service pretty much the same that would find on the website with two functions/services - add and subtract! I would like to start using it and I just need a little nudge to get me going. Like, how do I obtain a handle to a Registry object in the first place to set it as the default? And, how many of these hivemind.xml files am I going to have to have floating around? As many as you want. You can in fact bundle up everything in one mumbo module if you like! It appears as if I need one for each package in my project, but only one can be in my jar file located at /META-INF/hivemind.xml? Is this true? No, you need one hivemodule.xml per module and a module can be anything you want like I said before. If so, packaging an application could turn out to be rather tedious if I do indeed plan to separate things out into these small, testable modules. I may be misunderstanding the documentation, though. Anyway, if anyone has a good starter application (maybe even with the entire project set up with an Ant build script), I would be very appreciative. I sure wish I would have known about hivemind before. It looks as if it does everything (and more) that my little business object factory framework (http://www.javaworld.com/javaworld/jw-07-2003/jw-0718-factory.html) does. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] Buildfile: build.xml compile: [mkdir] Created dir: C:\Java\projects\HivemindExample\target\classes [javac] Compiling 7 source files to C:\Java\projects\HivemindExample\target\classes jar: [jar] Building jar: C:\Java\projects\HivemindExample\target\hivemind-examples-service.jar [jar] Building jar: C:\Java\projects\HivemindExample\target\hivemind-examples-service-impl.jar [jar] Building jar: C:\Java\projects\HivemindExample\target\hivemind-examples-main.jar run: [echo] Adding 11 and 23, should get 34. [java] 0 ServiceTranslator [ERROR] Error resolving service hivemind.ClassFactory (in element construct/set-service at jar:file:/C:/Java/projects/HivemindExample/lib/commons-hivemind-1.0-alpha-2.jar!/META-INF/hivemodule.xml, line 143): Unable to construct service hivemind.ClassFactory: Could not load class org.apache.commons.hivemind.service.impl.ClassFactoryImpl from [EMAIL PROTECTED]: javassist/ClassPath - [java] org.apache.commons.hivemind.ApplicationRuntimeException: Unable to construct service hivemind.ClassFactory: Could not load class org.apache.commons.hivemind.service.impl.ClassFactoryImpl from [EMAIL PROTECTED]: javassist/ClassPath [java] at org.apache.commons.hivemind.impl.ServiceExtensionPointImpl.constructNewServiceImplementation(ServiceExtensionPointImpl.java:266) [java] at
RE: [HiveMind] Extension to adder example
Could you share with me how to build the Adder.jar and Subtracter.jar (if indeed there is any difference between the current example), and then how to use them? If all I have to do is build the jars, and put them in the classpath, then follow your example, very cool, I'm 100% of the way there! Thanks Harish. Yep, that's the whole point ... build the two jars and you have Adder and Subtractor ready to go. HiveMind will locate and parse all the hivemodule.xml's into one consistent registry. If you get hivemind.examples.Adder it will combine the interface from the first jar with the implementaion contributed by the second jar. So ... obviously I've been failing on getting the message out about what HiveMind does if this is coming as a surprise now. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: Re: [Fwd: Re: [HIVEMIND] Examples Please?]]
Looks like you don't have the javassist-2.6.jar on the classpath. This is why Maven is cool ... it will download the jar for you; you can see then when you get the HiveMInd source, which is built using Maven. http://maven.apache.org -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com http://javatapestry.blogspot.com/ -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 9:59 AM To: [EMAIL PROTECTED] Subject: Re: Re: [Fwd: Re: [HIVEMIND] Examples Please?]] Am I doing something wrong? When I tried to run your example, I got the output contained in the attached file. - Original Message - From: Harish Krishnaswamy mailto:[EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 9:43 AM Subject: [Fwd: Re: [Fwd: Re: [HIVEMIND] Examples Please?]] Apparently this was sent to myself :-( Original Message Subject:Re: [Fwd: Re: [HIVEMIND] Examples Please?] Date: Tue, 16 Sep 2003 23:40:23 -0400 From: Harish Krishnaswamy mailto:[EMAIL PROTECTED] [EMAIL PROTECTED] To: Harish Krishnaswamy mailto:[EMAIL PROTECTED] [EMAIL PROTECTED] References: mailto:[EMAIL PROTECTED] [EMAIL PROTECTED] Trying again without HiveMind.jar. So you will have to download HiveMind.jar also. Harish Krishnaswamy wrote: I had to strip out the jars 'cause of the size and apache servers would n't let it go through, I kept the HiveMind jar though. So you would want to download the following jars to the lib folder. commons-beanutils-1.6.1.jar commons-collections-2.1.jar commons-lang-2.0.jar commons-logging-1.0.2.jar javassist-2.5.1.jar log4j-1.2.6.jar xercesImpl.jar xmlParserAPIs.jar -Harish Original Message Subject:Re: [HIVEMIND] Examples Please? Date: Tue, 16 Sep 2003 23:17:21 -0400 From: Harish Krishnaswamy mailto:[EMAIL PROTECTED] [EMAIL PROTECTED] To: Jakarta Commons Developers List mailto:[EMAIL PROTECTED] [EMAIL PROTECTED] References: [EMAIL PROTECTED] James Carman wrote: Does anyone have a good example application (very simple, please) for HiveMind? Unzip the attached zip to a folder and run target run. Its a very simple Calculator service pretty much the same that would find on the website with two functions/services - add and subtract! I would like to start using it and I just need a little nudge to get me going. Like, how do I obtain a handle to a Registry object in the first place to set it as the default? And, how many of these hivemind.xml files am I going to have to have floating around? As many as you want. You can in fact bundle up everything in one mumbo module if you like! It appears as if I need one for each package in my project, but only one can be in my jar file located at /META-INF/hivemind.xml? Is this true? No, you need one hivemodule.xml per module and a module can be anything you want like I said before. If so, packaging an application could turn out to be rather tedious if I do indeed plan to separate things out into these small, testable modules. I may be misunderstanding the documentation, though. Anyway, if anyone has a good starter application (maybe even with the entire project set up with an Ant build script), I would be very appreciative. I sure wish I would have known about hivemind before. It looks as if it does everything (and more) that my little business object factory framework (http://www.javaworld.com/javaworld/jw-07-2003/jw-0718-factory.html) does. _ - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: Re: [Fwd: Re: [HIVEMIND] Examples Please?]]
On Wednesday, September 17, 2003 at 10:09:57 (-0400) Howard M. Lewis Ship writes: Looks like you don't have the javassist-2.6.jar on the classpath. This is why Maven is cool ... it will download the jar for you; you can see then when you get the HiveMInd source, which is built using Maven. http://maven.apache.org If Maven holds up to its promise, I think it and HiveMind would work together very nicely. Bill - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: [HiveMind] Extension to adder example
On Wednesday, September 17, 2003 at 10:08:14 (-0400) Howard M. Lewis Ship writes: ... Yep, that's the whole point ... build the two jars and you have Adder and Subtractor ready to go. HiveMind will locate and parse all the hivemodule.xml's into one consistent registry. If you get hivemind.examples.Adder it will combine the interface from the first jar with the implementaion contributed by the second jar. So ... obviously I've been failing on getting the message out about what HiveMind does if this is coming as a surprise now. I think the issue is very simple: programming in this paradigm is a radical departure for us not used to it. I'm not used to gluing things together with such little effort. Not only are the concepts different, but, as one might expect, the language one uses to convey the concepts is altogether new. In such cases, it's not so much a question of being clear, as providing concrete examples that cover the initial case, and then the initial case plus one --- sort of teaching by induction, if you will (prove case 1, then prove if case N is true, case N+1 is true, etc.). So, I don't think you have missed wildly (failing); I think that the examples could encompass this (and, critically, I think examples need to be *structured*, starting from simple to simple + 1); and, finally, I think a tweak to the language, as we have discussed, would also help. By having structured examples, it allows intellectual movement from simple cases to those beyond, which is what learning new things like this is all about. [Just a thought: why service, service point? I realize that service is a useful term, but why not interface and implementation? Those terms seem to be broad enough and easy to understand...] Bill - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [HiveMind] Extension to adder example
I would agree with Bill here that there is only so much words can convey. I had the same problem until the bootstrapping example was published, that's when everything clicked in place. I always like the illustration kind of documents (and hence my Illustrating Tapestry!) which is always concrete and leaves little room for ambiguity. As far as the names go, I am still with service and service-point. An interface would tend to imply that this is the definition of the interface which it is not and the same applies to implementation. -Harish Bill Lear wrote: On Wednesday, September 17, 2003 at 10:08:14 (-0400) Howard M. Lewis Ship writes: ... Yep, that's the whole point ... build the two jars and you have Adder and Subtractor ready to go. HiveMind will locate and parse all the hivemodule.xml's into one consistent registry. If you get hivemind.examples.Adder it will combine the interface from the first jar with the implementaion contributed by the second jar. So ... obviously I've been failing on getting the message out about what HiveMind does if this is coming as a surprise now. I think the issue is very simple: programming in this paradigm is a radical departure for us not used to it. I'm not used to gluing things together with such little effort. Not only are the concepts different, but, as one might expect, the language one uses to convey the concepts is altogether new. In such cases, it's not so much a question of being clear, as providing concrete examples that cover the initial case, and then the initial case plus one --- sort of teaching by induction, if you will (prove case 1, then prove if case N is true, case N+1 is true, etc.). So, I don't think you have missed wildly (failing); I think that the examples could encompass this (and, critically, I think examples need to be *structured*, starting from simple to simple + 1); and, finally, I think a tweak to the language, as we have discussed, would also help. By having structured examples, it allows intellectual movement from simple cases to those beyond, which is what learning new things like this is all about. [Just a thought: why service, service point? I realize that service is a useful term, but why not interface and implementation? Those terms seem to be broad enough and easy to understand...] Bill - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: [HiveMind] Extension to adder example
service -- interface extend-service -- implementation I like that, except that service is a super-element of implementation and I want to keep it that way, since that's the normal usage. That is, you can define a service and provide the implementation (core service impl plus interceptors) all in one go. And that loops me back to service-point and extend-service. contribute-service? I think many people only give lip-service to OO ... they still think in terms of massive, central brain objects with a bunch of helpers attached. I tend to think in terms of lots of smaller objects, peers, working together ... and HiveMind lets me structure it all that way. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: Bill Lear [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 10:34 AM To: Jakarta Commons Developers List Subject: RE: [HiveMind] Extension to adder example On Wednesday, September 17, 2003 at 10:08:14 (-0400) Howard M. Lewis Ship writes: ... Yep, that's the whole point ... build the two jars and you have Adder and Subtractor ready to go. HiveMind will locate and parse all the hivemodule.xml's into one consistent registry. If you get hivemind.examples.Adder it will combine the interface from the first jar with the implementaion contributed by the second jar. So ... obviously I've been failing on getting the message out about what HiveMind does if this is coming as a surprise now. I think the issue is very simple: programming in this paradigm is a radical departure for us not used to it. I'm not used to gluing things together with such little effort. Not only are the concepts different, but, as one might expect, the language one uses to convey the concepts is altogether new. In such cases, it's not so much a question of being clear, as providing concrete examples that cover the initial case, and then the initial case plus one --- sort of teaching by induction, if you will (prove case 1, then prove if case N is true, case N+1 is true, etc.). So, I don't think you have missed wildly (failing); I think that the examples could encompass this (and, critically, I think examples need to be *structured*, starting from simple to simple + 1); and, finally, I think a tweak to the language, as we have discussed, would also help. By having structured examples, it allows intellectual movement from simple cases to those beyond, which is what learning new things like this is all about. [Just a thought: why service, service point? I realize that service is a useful term, but why not interface and implementation? Those terms seem to be broad enough and easy to understand...] Bill - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: [HiveMind] Suggestion for Bootstrap documentation addition / naming!
I am still thinking... service -- service-point extend-service -- service extension-point -- configuration-point extension -- configuration I like this, except that I would keep extend-service as is. I think the typical use of extend-service is to provide additional interceptors to an existing service (even though you can occasinally provide a service implementation as well). Perhaps the more verbose extend-configuration would be good too? I think even Bill initially missed that all the extension's for an extension-point are cumulative ... would extend-configuration make that more clear? -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [HiveMind] Extension to adder example
Howard M. Lewis Ship wrote: service -- interface extend-service -- implementation I like that, except that service is a super-element of implementation and I want to keep it that way, since that's the normal usage. That is, you can define a service and provide the implementation (core service impl plus interceptors) all in one go. And that loops me back to service-point and extend-service. contribute-service? Exactly what I intended to say, you said it better. But why don't you like service for extend-service? I think many people only give lip-service to OO ... they still think in terms of massive, central brain objects with a bunch of helpers attached. I tend to think in terms of lots of smaller objects, peers, working together ... and HiveMind lets me structure it all that way. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: Bill Lear [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 10:34 AM To: Jakarta Commons Developers List Subject: RE: [HiveMind] Extension to adder example On Wednesday, September 17, 2003 at 10:08:14 (-0400) Howard M. Lewis Ship writes: ... Yep, that's the whole point ... build the two jars and you have Adder and Subtractor ready to go. HiveMind will locate and parse all the hivemodule.xml's into one consistent registry. If you get hivemind.examples.Adder it will combine the interface from the first jar with the implementaion contributed by the second jar. So ... obviously I've been failing on getting the message out about what HiveMind does if this is coming as a surprise now. I think the issue is very simple: programming in this paradigm is a radical departure for us not used to it. I'm not used to gluing things together with such little effort. Not only are the concepts different, but, as one might expect, the language one uses to convey the concepts is altogether new. In such cases, it's not so much a question of being clear, as providing concrete examples that cover the initial case, and then the initial case plus one --- sort of teaching by induction, if you will (prove case 1, then prove if case N is true, case N+1 is true, etc.). So, I don't think you have missed wildly (failing); I think that the examples could encompass this (and, critically, I think examples need to be *structured*, starting from simple to simple + 1); and, finally, I think a tweak to the language, as we have discussed, would also help. By having structured examples, it allows intellectual movement from simple cases to those beyond, which is what learning new things like this is all about. [Just a thought: why service, service point? I realize that service is a useful term, but why not interface and implementation? Those terms seem to be broad enough and easy to understand...] Bill - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons-sandbox/chain PROPOSAL.html
husted 2003/09/17 08:03:47 Modified:chainPROPOSAL.html Log: Closing parentheses Revision ChangesPath 1.3 +1 -1 jakarta-commons-sandbox/chain/PROPOSAL.html Index: PROPOSAL.html === RCS file: /home/cvs/jakarta-commons-sandbox/chain/PROPOSAL.html,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- PROPOSAL.html 12 Aug 2003 19:33:56 - 1.2 +++ PROPOSAL.html 17 Sep 2003 15:03:47 - 1.3 @@ -31,7 +31,7 @@ used in either a Servlet or Portlet, without being tied directly to the API contracts of either of these environments). For commands that need to allocate resources prior to delegation, and then release them upon return (even if a -delegated-to command throws an exception, the filter extension to command +delegated-to command throws an exception), the filter extension to command provides a codepostprocess()/code method for this cleanup. Finally, commands can be stored and looked up in a catalog to allow deferral of the decision on which command (or chain) is actually executed./p - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [HiveMind] Suggestion for Bootstrap documentation addition / naming!
You read my mind, I just asked you about this in my other mail! But a service is both the core implementation and all its interceptors put together, right? Extend was always confusing for me right from the start because of its established presence in OO, I guess. -Harish Howard M. Lewis Ship wrote: I am still thinking... service -- service-point extend-service -- service extension-point -- configuration-point extension -- configuration I like this, except that I would keep extend-service as is. I think the typical use of extend-service is to provide additional interceptors to an existing service (even though you can occasinally provide a service implementation as well). Perhaps the more verbose extend-configuration would be good too? I think even Bill initially missed that all the extension's for an extension-point are cumulative ... would extend-configuration make that more clear? -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Re: [Fwd: Re: [HIVEMIND] Examples Please?]]
That did it! That's why I was unable to run it! Thanks. - Original Message - From: Howard M. Lewis Ship [EMAIL PROTECTED] To: 'Jakarta Commons Developers List' [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 10:09 AM Subject: RE: Re: [Fwd: Re: [HIVEMIND] Examples Please?]] Looks like you don't have the javassist-2.6.jar on the classpath. This is why Maven is cool ... it will download the jar for you; you can see then when you get the HiveMInd source, which is built using Maven. http://maven.apache.org -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com http://javatapestry.blogspot.com/ -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 9:59 AM To: [EMAIL PROTECTED] Subject: Re: Re: [Fwd: Re: [HIVEMIND] Examples Please?]] Am I doing something wrong? When I tried to run your example, I got the output contained in the attached file. - Original Message - From: Harish Krishnaswamy mailto:[EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 9:43 AM Subject: [Fwd: Re: [Fwd: Re: [HIVEMIND] Examples Please?]] Apparently this was sent to myself :-( Original Message Subject: Re: [Fwd: Re: [HIVEMIND] Examples Please?] Date: Tue, 16 Sep 2003 23:40:23 -0400 From: Harish Krishnaswamy mailto:[EMAIL PROTECTED] [EMAIL PROTECTED] To: Harish Krishnaswamy mailto:[EMAIL PROTECTED] [EMAIL PROTECTED] References: mailto:[EMAIL PROTECTED] [EMAIL PROTECTED] Trying again without HiveMind.jar. So you will have to download HiveMind.jar also. Harish Krishnaswamy wrote: I had to strip out the jars 'cause of the size and apache servers would n't let it go through, I kept the HiveMind jar though. So you would want to download the following jars to the lib folder. commons-beanutils-1.6.1.jar commons-collections-2.1.jar commons-lang-2.0.jar commons-logging-1.0.2.jar javassist-2.5.1.jar log4j-1.2.6.jar xercesImpl.jar xmlParserAPIs.jar -Harish Original Message Subject: Re: [HIVEMIND] Examples Please? Date: Tue, 16 Sep 2003 23:17:21 -0400 From: Harish Krishnaswamy mailto:[EMAIL PROTECTED] [EMAIL PROTECTED] To: Jakarta Commons Developers List mailto:[EMAIL PROTECTED] [EMAIL PROTECTED] References: [EMAIL PROTECTED] James Carman wrote: Does anyone have a good example application (very simple, please) for HiveMind? Unzip the attached zip to a folder and run target run. Its a very simple Calculator service pretty much the same that would find on the website with two functions/services - add and subtract! I would like to start using it and I just need a little nudge to get me going. Like, how do I obtain a handle to a Registry object in the first place to set it as the default? And, how many of these hivemind.xml files am I going to have to have floating around? As many as you want. You can in fact bundle up everything in one mumbo module if you like! It appears as if I need one for each package in my project, but only one can be in my jar file located at /META-INF/hivemind.xml? Is this true? No, you need one hivemodule.xml per module and a module can be anything you want like I said before. If so, packaging an application could turn out to be rather tedious if I do indeed plan to separate things out into these small, testable modules. I may be misunderstanding the documentation, though. Anyway, if anyone has a good starter application (maybe even with the entire project set up with an Ant build script), I would be very appreciative. I sure wish I would have known about hivemind before. It looks as if it does everything (and more) that my little business object factory framework (http://www.javaworld.com/javaworld/jw-07-2003/jw-0718-factory.html) does. _ - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons-sandbox/chain PROPOSAL.html
husted 2003/09/17 08:06:04 Modified:chainPROPOSAL.html Log: Apply Tidy to markup. No content changes. Revision ChangesPath 1.4 +231 -187 jakarta-commons-sandbox/chain/PROPOSAL.html Index: PROPOSAL.html === RCS file: /home/cvs/jakarta-commons-sandbox/chain/PROPOSAL.html,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- PROPOSAL.html 17 Sep 2003 15:03:47 - 1.3 +++ PROPOSAL.html 17 Sep 2003 15:06:04 - 1.4 @@ -1,195 +1,239 @@ -html +!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN +http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd; + +html xmlns=http://www.w3.org/1999/xhtml; head -titleProposal for Chain of Responsibility Package/title + meta name=generator content= + HTML Tidy for Windows (vers 1st July 2003), see www.w3.org / + + titleProposal for Chain of Responsibility Package/title /head -body bgcolor=white -div align=center -h1Proposal for emChain of Responsibility/em Package/h1 -/div - -h3(0) Rationale/h3 - -pA popular technique for organizing the execution of complex processing -flows is the Chain of Responsibility pattern, as described (among many -other places) in the classic Gang of Four design patterns book. Although -the fundamental API contracts required to implement this design patten are -extremely simple, it is useful to have a base API that facilitates using -the pattern, and (more importantly) encouraging composition of command -implementations from multiple diverse sources./p - -pTowards that end, the proposed API models a computation as a series of -commands that can be combined into a chain. The API for a command -consists of a single method (codeexecute()/code), which is passed a -context parameter containing the dynamic state of the computation, and -whose return value is a boolean that determines whether or not processing -for the current chain has been completed (true), or whether processing -should be delegated to the next command in the chain (false)./p - -pThe context abstraction is designed to isolate command implementations -from the environment in which they are run (such as a command that can be -used in either a Servlet or Portlet, without being tied directly to the API -contracts of either of these environments). For commands that need to allocate -resources prior to delegation, and then release them upon return (even if a -delegated-to command throws an exception), the filter extension to command -provides a codepostprocess()/code method for this cleanup. Finally, -commands can be stored and looked up in a catalog to allow deferral of the -decision on which command (or chain) is actually executed./p - -pTo maximize the usefulness of the Chain of Responsibility pattern APIs, -the fundamental interface contracts are defined in a manner with zero -dependencies other than an appropriate JDK. Convenience base class -implementations of these APIs are provided, as well as more specialized (but -optional) implementations for the web environment (i.e. servlets and portlets). -However, conditional compilation in the build script allows graceful creation -of the underlying API JAR file even in the absence of the optional dependencies. -/p - -pGiven that command implementations are designed to conform with these -recommendations, it should be feasible to utilize the Chain of Responsibility -APIs in the front controller of a web application framework (such as Struts), -but also be able to use it in the business logic and persistence tiers to -model complex computational requirements via composition. In addition, -separation of a computation into discrete commands that operate on a general -purpose context allows easier creation of commands that are unit testable, -because the impact of executing a command can be directly measured by observing -the corresponding state changes in the context that is supplied./p - - -h3(1) Scope of the Package/h3 - -pThe fundamental API contracts of the Chain of Responsibility pattern are -encapsulated in the following interfaces in package -codeorg.apache.commons.chain/code:/p -ul -listrongCommand/strong - An individual unit of work whose -codeexecute()/code method is called to perform that work./li -listrongChain/strong - A set of commands to which work will be -delegated, in a well-defined order, until one of the commands indicates -that work on a request has been completed. Note that a codeChain/code -is itself a codeCommand/code, so arbitrarily complex hierarchies of +body bgcolor=white + div align=center +h1Proposal for emChain of Responsibility/em Package/h1 + /div + + h3(0) Rationale/h3 + + pA popular technique for organizing the execution of complex
[configuration] Change Commons-Configuration getVector to getSet?
Hi all, I am looking at a chunk of code like this: Vector packages = Turbine.getConfiguration() .getVector(TurbineConstants.MODULE_PACKAGES); ObjectUtils.addOnce(packages, GenericLoader.getBasePackage()); from Layout Loader... And it seems to me that commons-configuration getVector should be deprecated in favor of getSet(). I can't think why you would want duplicate values, so getSet() makes more sense then getList(). Then, funky call's like the ObjectUtils.addOnce() wouldn't be needed... Opinons? And do we have to deprecate getVector() since we haven't released from sandbox yet? Eric Pugh - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [configuration] Change Commons-Configuration getVector to getSet?
A Set is too restrictive i think, there are valid reasons for preserving duplicate configuration entries. I would use a Collection or better, a List when the element order matters. Emmanuel Eric Pugh wrote: Hi all, I am looking at a chunk of code like this: Vector packages = Turbine.getConfiguration() .getVector(TurbineConstants.MODULE_PACKAGES); ObjectUtils.addOnce(packages, GenericLoader.getBasePackage()); from Layout Loader... And it seems to me that commons-configuration getVector should be deprecated in favor of getSet(). I can't think why you would want duplicate values, so getSet() makes more sense then getList(). Then, funky call's like the ObjectUtils.addOnce() wouldn't be needed... Opinons? And do we have to deprecate getVector() since we haven't released from sandbox yet? Eric Pugh - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] smime.p7s Description: S/MIME Cryptographic Signature
RE: [HIVEMIND] Examples Please?
HiveMind really is similar to the framework you described in the article --- honest, I never saw your article before! For me, HiveMind is about eliminating boring plumbing code, like the static factory classes. HiveMind is the uber-factory. It's also the inter-jar glue and does all your XML parsing for you. ... looks like you have another article to write! Dion at TSS was looking for an article on HiveMind; perhaps we should hook you guys up (or anyone else who wants to take a crack). My dance card is full right now. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: James Carman [mailto:[EMAIL PROTECTED] Sent: Tuesday, September 16, 2003 9:46 PM To: [EMAIL PROTECTED] Subject: [HIVEMIND] Examples Please? Does anyone have a good example application (very simple, please) for HiveMind? I would like to start using it and I just need a little nudge to get me going. Like, how do I obtain a handle to a Registry object in the first place to set it as the default? And, how many of these hivemind.xml files am I going to have to have floating around? It appears as if I need one for each package in my project, but only one can be in my jar file located at /META-INF/hivemind.xml? Is this true? If so, packaging an application could turn out to be rather tedious if I do indeed plan to separate things out into these small, testable modules. I may be misunderstanding the documentation, though. Anyway, if anyone has a good starter application (maybe even with the entire project set up with an Ant build script), I would be very appreciative. I sure wish I would have known about hivemind before. It looks as if it does everything (and more) that my little business object factory framework (http://www.javaworld.com/javaworld/jw-07-2003/jw-0718-factory .html) does. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [HIVEMIND] Examples Please?
I would love to write the article! When do they want it? - Original Message - From: Howard M. Lewis Ship [EMAIL PROTECTED] To: 'Jakarta Commons Developers List' [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 11:12 AM Subject: RE: [HIVEMIND] Examples Please? HiveMind really is similar to the framework you described in the article --- honest, I never saw your article before! For me, HiveMind is about eliminating boring plumbing code, like the static factory classes. HiveMind is the uber-factory. It's also the inter-jar glue and does all your XML parsing for you. ... looks like you have another article to write! Dion at TSS was looking for an article on HiveMind; perhaps we should hook you guys up (or anyone else who wants to take a crack). My dance card is full right now. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: James Carman [mailto:[EMAIL PROTECTED] Sent: Tuesday, September 16, 2003 9:46 PM To: [EMAIL PROTECTED] Subject: [HIVEMIND] Examples Please? Does anyone have a good example application (very simple, please) for HiveMind? I would like to start using it and I just need a little nudge to get me going. Like, how do I obtain a handle to a Registry object in the first place to set it as the default? And, how many of these hivemind.xml files am I going to have to have floating around? It appears as if I need one for each package in my project, but only one can be in my jar file located at /META-INF/hivemind.xml? Is this true? If so, packaging an application could turn out to be rather tedious if I do indeed plan to separate things out into these small, testable modules. I may be misunderstanding the documentation, though. Anyway, if anyone has a good starter application (maybe even with the entire project set up with an Ant build script), I would be very appreciative. I sure wish I would have known about hivemind before. It looks as if it does everything (and more) that my little business object factory framework (http://www.javaworld.com/javaworld/jw-07-2003/jw-0718-factory .html) does. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons-sandbox/chain/src/java/org/apache/commons/chain Context.java
husted 2003/09/17 08:16:08 Modified:chain/src/java/org/apache/commons/chain Context.java Log: JavaDoc update. Revision ChangesPath 1.2 +6 -4 jakarta-commons-sandbox/chain/src/java/org/apache/commons/chain/Context.java Index: Context.java === RCS file: /home/cvs/jakarta-commons-sandbox/chain/src/java/org/apache/commons/chain/Context.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Context.java 11 Aug 2003 04:44:16 - 1.1 +++ Context.java 17 Sep 2003 15:16:08 - 1.2 @@ -138,6 +138,8 @@ * of key-value pairs that maintain the state information associated * with the processing of the transaction that is represented by * this [EMAIL PROTECTED] Context} instance./p + * + * @return The state information for this context as a Map */ public Map getAttributes(); - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons-sandbox/chain/src/java/org/apache/commons/chain/impl ContextBase2.java ContextBaseAttributes.java ContextBase.java
husted 2003/09/17 08:17:58 Modified:chain/src/java/org/apache/commons/chain/impl ContextBaseAttributes.java ContextBase.java Added: chain/src/java/org/apache/commons/chain/impl ContextBase2.java Log: *EXPERIMENTAL* change that allows JavaBean properties to use the internal Map for storage, rather than defining an external field. I like the concept, but I'm concerned about breaking encapsulation. Revision ChangesPath 1.2 +72 -3 jakarta-commons-sandbox/chain/src/java/org/apache/commons/chain/impl/ContextBaseAttributes.java Index: ContextBaseAttributes.java === RCS file: /home/cvs/jakarta-commons-sandbox/chain/src/java/org/apache/commons/chain/impl/ContextBaseAttributes.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ContextBaseAttributes.java11 Aug 2003 04:44:17 - 1.1 +++ ContextBaseAttributes.java17 Sep 2003 15:17:58 - 1.2 @@ -271,6 +271,75 @@ } +// - Public Methods + + +/** + * pemWARNING: This is an EXPERIMENTAL feature and may be removed at + * any time./em/p + * + * pReturns the value to which the internal map maps the specified key, + * bypassing any JavaBean style getters. This method allows a + * JavaBean getter to be defined for any additional processing but still + * use the internal map for storage, if desired. Since this class is not + * public, this method can only be accessed by another member of hte + * codeorg.apache.commons.chain.impl/code package./p + * + * @param key key whose associated value is to be returned. + * @return the value to which this map maps the specified key, or + * ttnull/tt if the map contains no mapping for this key. + * + * @throws ClassCastException if the key is of an inappropriate type for + * this map (optional). + * @throws NullPointerException key is ttnull/tt and this map does not + * not permit ttnull/tt keys (optional). + * + * @see #get(Object) + */ +public Object getField(Object key) { + +return attributes.get(key); + +} + +/** + * pemWARNING: This is an EXPERIMENTAL feature and may be removed at + * any time./em/p + * + * pAssociates the key/value pair within the internal map, + * bypassing any JavaBean style getters. This method allows a + * JavaBean getter to be defined for any additional processing but still + * use the internal map for storage, if desired. Since this class is not + * public, this method can only be accessed by another member of hte + * codeorg.apache.commons.chain.impl/code package./p + * + * @param key key with which the specified value is to be associated. + * @param value value to be associated with the specified key. + * @return previous value associated with specified key, or ttnull/tt + * if there was no mapping for key. A ttnull/tt return can + * also indicate that the map previously associated ttnull/tt + * with the specified key, if the implementation supports + * ttnull/tt values. + * + * @throws UnsupportedOperationException if the ttput/tt operation is + * not supported by this map. + * @throws ClassCastException if the class of the specified key or value + * prevents it from being stored in this map. + * @throws IllegalArgumentException if some aspect of this key or value + * prevents it from being stored in this map. + * @throws NullPointerException this map does not permit ttnull/tt + *keys or values, and the specified key or value is + *ttnull/tt. + * + * @see #put(Object, Object) + */ +public Object putField(Object key, Object value) { + +return attributes.put(key,value); + +} + + // Private Methods 1.3 +22 -12 jakarta-commons-sandbox/chain/src/java/org/apache/commons/chain/impl/ContextBase.java Index: ContextBase.java === RCS file: /home/cvs/jakarta-commons-sandbox/chain/src/java/org/apache/commons/chain/impl/ContextBase.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ContextBase.java 12 Aug 2003 20:33:24 - 1.2 +++ ContextBase.java 17 Sep 2003 15:17:58 - 1.3 @@ -85,6 +85,23 @@ public class ContextBase implements Context {
cvs commit: jakarta-commons-sandbox/chain PROPOSAL.html
husted 2003/09/17 08:19:14 Modified:chainPROPOSAL.html Log: Add Husted to the Committers list. Revision ChangesPath 1.5 +1 -0 jakarta-commons-sandbox/chain/PROPOSAL.html Index: PROPOSAL.html === RCS file: /home/cvs/jakarta-commons-sandbox/chain/PROPOSAL.html,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- PROPOSAL.html 17 Sep 2003 15:06:04 - 1.4 +++ PROPOSAL.html 17 Sep 2003 15:19:14 - 1.5 @@ -230,6 +230,7 @@ ul liCraig R. McClanahan/li +liTed Husted/li liTBD/li /ul - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23217] New: - [Messenger] Messenger.dtd's JNDI attributes rules mistakenly require className
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23217. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23217 [Messenger] Messenger.dtd's JNDI attributes rules mistakenly require className Summary: [Messenger] Messenger.dtd's JNDI attributes rules mistakenly require className Product: Commons Version: Nightly Builds Platform: PC OS/Version: Windows XP Status: NEW Severity: Minor Priority: Other Component: Sandbox AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] The dtd for a jndi entry states that it requires a className attribute, when in fact this attribute is optional. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23217] - [Messenger] Messenger.dtd's JNDI attributes rules mistakenly require className
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23217. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23217 [Messenger] Messenger.dtd's JNDI attributes rules mistakenly require className --- Additional Comments From [EMAIL PROTECTED] 2003-09-17 16:24 --- Created an attachment (id=8256) Patch for messenger.dtd - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [HiveMind] Registry
Ole Arndt wrote: Hello infant HiveMind community, first a short self-introduction: I am a developer from Germany. For my pet project, a mud like simulation, inhabited by (more or less) intelligent agents, I was looking for a framework to use. I knew Avalon from my job and had heard of pico- and swing container. When I discovered HiveMind I was equally impressed by the underlying concepts, the amount of documentation and the clean code. Until now I haven't build anything with HiveMind but I have compiled it, ran the tests and did some source code reading. I lurked on the devel list (via gmane) for a few days to learn about the people and the current status of the project. But now it's time to step forward with a few questions/remarks. Here we go: The HiveMind registry is currently static, right? Once constructed it can't be changed. This is correct. Due to the potentially very long run times of my simulation I want to be able to add/remove modules/services on the fly at any time. If get it right, this is currently only possible by building an new registry. Correct? What I want to have in the end is some kind of new service notification mechanism like in the beancontext API, or with a Jini lookup service. This does not need to be build into HiveMind, but is probably only possible/easier with some support from the lower level. Any plans in this direction or is this out-of-scope for HiveMind? I think that will depend on the needs of the community, but Howard is the best person to answer that. An easy improvement in this direction would be if the RegistryBuilder took an old Registry to build upon as a parameter. This would probably imply that the registry keeps its XML configuration. Regarding the XML configuration: I agree that the current naming really isn't very intuitive. I think the best proposal until now is the one Harish made: service -- service-point extend-service -- service extension-point -- configuration-point extension -- configuration There you go..!! Though, if some native English speaker found a more descriptive word for `point', like `definition' but not as long, it would be even better :-) Another issue: There isn't much visual difference between the following two lines and that makes it hard to read: extension-point id= / extension point-id= / What speaks against calling the id attribute `id' in both cases? I actually like this as it is more intuitive even if it is visually confusing initially. You soon get used to it! Ole - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23218] New: - [patch] small error text patch
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23218. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23218 [patch] small error text patch Summary: [patch] small error text patch Product: Commons Version: 1.0 Alpha Platform: Other OS/Version: Other Status: NEW Severity: Enhancement Priority: Other Component: CLI AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] Hi, attached is a small patch which makes the 'missing option' text a bit more printable to users. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23218] - [patch] small error text patch
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23218. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23218 [patch] small error text patch --- Additional Comments From [EMAIL PROTECTED] 2003-09-17 16:43 --- Created an attachment (id=8257) [patch] attached patch to 'missing option' error - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
[RESULT] Re: [VOTE] New committer - Fredrik Westermarck
5 +1 votes from: Phil Steitz Juozas Baliuka Yoav Shapira Matthew Hawthorne Henri Yandell So Fredrik is in :) Fredrik, please complete the CLA available at: http://incubator.apache.org/forms/ASF_Contributor_License_2_form.pdf and follow instructions contained in it etc. Once that goes in, you should get an email back from Jim Jagielski confirming that the CLA has been received. Let me know when this has happened and I can send a request to root asking for accounts etc to be made for you. FYI, http://www.apache.org/dev/pmc.html details the process. Hen On Fri, 12 Sep 2003, Henri Yandell wrote: I would like to nominate Fredrik Westermarck as an Apache Jakarta Commons committer. Fredrik has put tons of work into improving the Javadoc for [lang] in the latest 2.0 release, in fact, looking at my archives he's offered 13 patches in the last year [that I saved], many of which were substantial [20k+]. http://marc.theaimsgroup.com/?a=10031948822r=1w=2 appears to show the years worth of patches. Votes please, closing Monday 15th midnight EST Hen [ ] +1, let him commit! [ ] +0 [ ] -0 [ ] -1, no, because - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Commons site: contributors.html
http://jakarta.apache.org/commons/contributors.html is a list of the participants in Commons. It's not currently up to date. Anyone not on there who is a Commons committer is welcome to add their name [note, you have to modify the xdocs, generate the site and commit the xdocs/docs, then cvs update on minotaur]. Up until now that has meant you need an account on www.apache.org, but with the unification of the machines [cvs/www] anyone can do this. I figure not everyone knew of this :) Hen - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: [HIVEMIND] Examples Please?
Not sure if people have had enough of examples, but attached is a zip file with a simple (and probably buggy) xdoclet module for hivemind (with source) + the calculator example previously discussed implemented using it. Didn't want to inclde all the dependant jars but they are: - commons-collections-2.1.jar - commons-logging-1.0.3.jar - xjavadoc-1.0.jar - xdoclet-1.2b4.jar The ant target 'jar' will build all the necessary jars in ./release Mainly wondering what the interest in a hivemind xdoclet module would be? Johan -- you too? example.zip Description: Zip compressed data - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
[HiveMind] TSS
A couple of ideas I may be pursuing at work ... Creating interceptors to enforce transaction boundaries. Creating intreceptors to enforce declarative security. Creating interceptors that record invocations counts as JMX beans. HiveMind's take on the DAO factory: Define a DAO interface and supply several implementations (for different databases or environments) in a configuration point. Have a service factory create a service implementation that delegates to a particular implementation, i.e. client code -- wrapper service -- actual service The wrapper service is created at runtime. Client code only sees the wrapper service, never has to even know that a dynamic selection takes place. Wrapper service is constructed at runtime using a service impl factory ... look at how EJBFactory is implemented to understand this. Service that creates C#-style delegates for use in Swing apps. You feed in: object, name of public method (of object), listener interface type ... it spits out delegate object that implements the interface and invokes the public method (possibly, passing the event in). Optional: if listener interface defines multiple methods, you decide which to connect. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 12:16 PM To: [EMAIL PROTECTED]; [EMAIL PROTECTED] Subject: Re: Hivemind on TSS Well, I don't really have an idea of how I am going to use HiveMind in my example yet, as I am quite a newbie still. However, I plan on giving a talk on HiveMind at our local users group (www.cinjug.org) in November and I would imagine that I could have something together for you guys by the end of November. I will be playing around with HiveMind over the weekend and I might get a brilliant idea for an example. I'll try to get you an abstract sometime next week. Will that be okay? - Original Message - From: Dion Almaer [EMAIL PROTECTED] To: 'Howard M. Lewis Ship' [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 11:53 AM Subject: RE: Hivemind on TSS Hi Howard and James - Howard: I totally understand both your time requirements, and the idea of having a secondary source providing the info James: We would love to have you work on the article. Feel free to be as creative as you would like. The TSS articles that we publish try to be as hard core as possible, since our audience tends to prefer that. Maybe you could put together a quick abstract (nothing formal), and a guesstimate of when you feel you could get us an article. Then I will book you into our editorial calendar. Cheers, Dion -Original Message- From: Howard M. Lewis Ship [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 11:43 AM To: 'Dion Almaer' Cc: [EMAIL PROTECTED] Subject: RE: Hivemind on TSS A fellow by the name of James Carman has started using HiveMind recently as is very enthusiastic. He was recently published in JDJ discussing his own framework, which is something of a subset of HiveMind. http://www.javaworld.com/javaworld/jw-07-2003/jw-0718-factory.html I mentioned to him the possibility of writing a TSS article about HiveMind and he's very enthusiastic. Since TiA is requiring some rewrites, I'm fully booked ... and I think from a marketing HiveMind / marketing Howard Lewis Ship perspective that these articles are received better by the audience when authored by a secondary party, rather than by the subject matter's creator. Of course, I'll be able to spare a few moments to review his work before it goes forward. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: Dion Almaer [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 10, 2003 9:39 AM To: 'Howard M. Lewis Ship' Subject: RE: Hivemind on TSS Hi Howard - I am glad to hear that you are up for it! I am also glad to hear that you may almost have something :) After you review / tweak the content, send it along. The more code/hard core the better for this audience (as you know). The HiveMind case study would be a great starting point for you to write an article. Again, get something to me at your leisure (I know you are busy). Manning kinda sends me their book chapters, and I will make sure that I get a look at the Tapestry In Action book. I am excited to see how it is, and glad to hear that a full book is devoted to
Re: [HIVEMIND] Examples Please?
I think an xdoclet module for HiveMind would be WONDERFUL! That way, you could describe services, extension-points, interceptors, etc. in the JavaDoc comments of your class and have your module descriptor file generated for you automagically! IMHO, anytime a descriptor file like that needs to be created, there should be an XDoclet module for it. - Original Message - From: Johan Lindquist [EMAIL PROTECTED] To: Jakarta Commons Developers List [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 12:52 PM Subject: RE: [HIVEMIND] Examples Please? Not sure if people have had enough of examples, but attached is a zip file with a simple (and probably buggy) xdoclet module for hivemind (with source) + the calculator example previously discussed implemented using it. Didn't want to inclde all the dependant jars but they are: - commons-collections-2.1.jar - commons-logging-1.0.3.jar - xjavadoc-1.0.jar - xdoclet-1.2b4.jar The ant target 'jar' will build all the necessary jars in ./release Mainly wondering what the interest in a hivemind xdoclet module would be? Johan -- you too? - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [HiveMind] TSS
I think the first idea is PERFECT. I came up with the idea for my framework by using JDO in a web application (no transactional support involved). So, I used invocation decorators or, in HiveMind, interceptors to begin the transaction if one didn't exist already (and commit it upon successful completion of the method). I think that might be a great idea for an example. I also like the DAO idea. I wrote an article about a new-and-improved DAO framework (http://www.javaworld.com/javaworld/jw-03-2002/jw-0301-dao.html) and I wish I had HiveMind around for that! - Original Message - From: Howard M. Lewis Ship [EMAIL PROTECTED] To: [EMAIL PROTECTED] Cc: Jakarta Commons Developers List [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 1:02 PM Subject: [HiveMind] TSS A couple of ideas I may be pursuing at work ... Creating interceptors to enforce transaction boundaries. Creating intreceptors to enforce declarative security. Creating interceptors that record invocations counts as JMX beans. HiveMind's take on the DAO factory: Define a DAO interface and supply several implementations (for different databases or environments) in a configuration point. Have a service factory create a service implementation that delegates to a particular implementation, i.e. client code -- wrapper service -- actual service The wrapper service is created at runtime. Client code only sees the wrapper service, never has to even know that a dynamic selection takes place. Wrapper service is constructed at runtime using a service impl factory ... look at how EJBFactory is implemented to understand this. Service that creates C#-style delegates for use in Swing apps. You feed in: object, name of public method (of object), listener interface type ... it spits out delegate object that implements the interface and invokes the public method (possibly, passing the event in). Optional: if listener interface defines multiple methods, you decide which to connect. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 12:16 PM To: [EMAIL PROTECTED]; [EMAIL PROTECTED] Subject: Re: Hivemind on TSS Well, I don't really have an idea of how I am going to use HiveMind in my example yet, as I am quite a newbie still. However, I plan on giving a talk on HiveMind at our local users group (www.cinjug.org) in November and I would imagine that I could have something together for you guys by the end of November. I will be playing around with HiveMind over the weekend and I might get a brilliant idea for an example. I'll try to get you an abstract sometime next week. Will that be okay? - Original Message - From: Dion Almaer [EMAIL PROTECTED] To: 'Howard M. Lewis Ship' [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 11:53 AM Subject: RE: Hivemind on TSS Hi Howard and James - Howard: I totally understand both your time requirements, and the idea of having a secondary source providing the info James: We would love to have you work on the article. Feel free to be as creative as you would like. The TSS articles that we publish try to be as hard core as possible, since our audience tends to prefer that. Maybe you could put together a quick abstract (nothing formal), and a guesstimate of when you feel you could get us an article. Then I will book you into our editorial calendar. Cheers, Dion -Original Message- From: Howard M. Lewis Ship [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 11:43 AM To: 'Dion Almaer' Cc: [EMAIL PROTECTED] Subject: RE: Hivemind on TSS A fellow by the name of James Carman has started using HiveMind recently as is very enthusiastic. He was recently published in JDJ discussing his own framework, which is something of a subset of HiveMind. http://www.javaworld.com/javaworld/jw-07-2003/jw-0718-factory.html I mentioned to him the possibility of writing a TSS article about HiveMind and he's very enthusiastic. Since TiA is requiring some rewrites, I'm fully booked ... and I think from a marketing HiveMind / marketing Howard Lewis Ship perspective that these articles are received better by the audience when authored by a secondary party, rather than by the subject matter's creator. Of course, I'll be able to spare a few moments to review his work before it goes forward. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com
RE: [HIVEMIND] Examples Please?
Another lovely technology I haven't had a chance to investigate. I know people rave about XDoclet; I had hoped that HiveMind was succinct enough not to need it. Can this generate a single module DD from many classes that may define configurations and services? -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: Johan Lindquist [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 12:52 PM To: Jakarta Commons Developers List Subject: RE: [HIVEMIND] Examples Please? Not sure if people have had enough of examples, but attached is a zip file with a simple (and probably buggy) xdoclet module for hivemind (with source) + the calculator example previously discussed implemented using it. Didn't want to inclde all the dependant jars but they are: - commons-collections-2.1.jar - commons-logging-1.0.3.jar - xjavadoc-1.0.jar - xdoclet-1.2b4.jar The ant target 'jar' will build all the necessary jars in ./release Mainly wondering what the interest in a hivemind xdoclet module would be? Johan -- you too? - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [HIVEMIND] Examples Please?
I would imagine. XDoclet can generate one ejb-jar.xml file from many EJB implementation bean sources, so I don't see why it couldn't. - Original Message - From: Howard M. Lewis Ship [EMAIL PROTECTED] To: 'Jakarta Commons Developers List' [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 1:14 PM Subject: RE: [HIVEMIND] Examples Please? Another lovely technology I haven't had a chance to investigate. I know people rave about XDoclet; I had hoped that HiveMind was succinct enough not to need it. Can this generate a single module DD from many classes that may define configurations and services? -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: Johan Lindquist [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 12:52 PM To: Jakarta Commons Developers List Subject: RE: [HIVEMIND] Examples Please? Not sure if people have had enough of examples, but attached is a zip file with a simple (and probably buggy) xdoclet module for hivemind (with source) + the calculator example previously discussed implemented using it. Didn't want to inclde all the dependant jars but they are: - commons-collections-2.1.jar - commons-logging-1.0.3.jar - xjavadoc-1.0.jar - xdoclet-1.2b4.jar The ant target 'jar' will build all the necessary jars in ./release Mainly wondering what the interest in a hivemind xdoclet module would be? Johan -- you too? - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
[hivemind] Design comparison
I have been monitoring hivemind as it is similar to a framework I helped design for work (not OSS). What interests me is the way that different groups in Java-land are moving towards the small POJO approach, and away from dreaded EJBs. I just want to sketch out some features of the framework I use in case it gives you some ideas. Similar to hivemind: Aims to enable a system to be written as a large number of small services. Each service can call other service in flexible ways. Each service is defined by an interface. The interface must have only _one_method. Each implementation must have no instance variables (singleton). Differences: - 1) The first parameter of each interface method must be a Context object giving access to configuration and connections. Is this IoC? 2) The selection of which implementation to use is performed late. The selection is based on - data in the method arguments - the services in the stack calling this one - the configuration lookupGroup interface=blah.TheInterface lookup caller caller=blah.SomeCallerImplementation / process process=blah.ImplIfCallerInStack / lookup/ lookup dataSourceType=Database process process=blah.ImplIfParamsWantDB / lookup/ lookup dataSourceType=File process process=blah.ImplIfParamsWantFile / lookup/ lookupGroup/ I include this to give some idea of what is going on. The process elements are the implementations, and which is returned will depend on the current state of the system and the method parameters. It acts like a big if statement. The lookup is hidden from callers by a class that simply has all the interfaces as methods, performs the lookup and then calls the implementation. 3) We have the concept of interceptors, again bytecode generated. We use them to open and close connections. Thus there is a doPre() method that opens the connection and attaches it to the Context, and a doFinally(), that is called as a finally block, that closes the connection. This obviously simplifies the service itself, and separates system logic from application logic. It is very powerful, and could be worth thinking about for hivemind. (our limitation is that each service can only talk to one datasource). 4) All our configuration is in XML resource bundles. This allows locale based config for the core server behaviour which we can control on a per session basis (although we haven't needed to yet). We chose to separate configuration from the services themselves, different to hivemind. The system we use allows single Strings, Lists, Maps and raw XML to be loaded from the resources by the program. There is no auto-bean conversion though which is nice in hivemind (although it only takes one line in our code). So, similar ideas in places but different in others :-) Stephen - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [HIVEMIND] Examples Please?
Yeap it does ... As i said, just a first go at it, but if you point it to a bunch of classes, it will attempt to extract the services and extensions contained in them and bundle that into a module dd ... It needs a lot of work - no validation to ensure you are extending a already defined service is done yet for example ... Johan On Wed, 17 Sep 2003 13:16:43 -0400, [EMAIL PROTECTED] wrote: I would imagine. XDoclet can generate one ejb-jar.xml file from many EJB implementation bean sources, so I don't see why it couldn't. - Original Message - From: Howard M. Lewis Ship [EMAIL PROTECTED] To: 'Jakarta Commons Developers List' [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 1:14 PM Subject: RE: [HIVEMIND] Examples Please? Another lovely technology I haven't had a chance to investigate. I know people rave about XDoclet; I had hoped that HiveMind was succinct enough not to need it. Can this generate a single module DD from many classes that may define configurations and services? -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: Johan Lindquist [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 12:52 PM To: Jakarta Commons Developers List Subject: RE: [HIVEMIND] Examples Please? Not sure if people have had enough of examples, but attached is a zip file with a simple (and probably buggy) xdoclet module for hivemind (with source) + the calculator example previously discussed implemented using it. Didn't want to inclde all the dependant jars but they are: - commons-collections-2.1.jar - commons-logging-1.0.3.jar - xjavadoc-1.0.jar - xdoclet-1.2b4.jar The ant target 'jar' will build all the necessary jars in ./release Mainly wondering what the interest in a hivemind xdoclet module would be? Johan -- you too? - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- you too? - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: [hivemind] Design comparison
I have been monitoring hivemind as it is similar to a framework I helped design for work (not OSS). What interests me is the way that different groups in Java-land are moving towards the small POJO approach, and away from dreaded EJBs. I just want to sketch out some features of the framework I use in case it gives you some ideas. I read a great article that, boiled down, said that Enterprise JavaBeans should be called Transactional JavaBeans because that's all you really get. Bloat, complexity and (due to dependencies on the app server runtime environment) limited testablility is the problem. All these POJOs (Picocontainer, swing, HiveMind, Avalon) are the reaction. Lots of HiveMind percolated and gestated in Tapestry. Similar to hivemind: Aims to enable a system to be written as a large number of small services. Each service can call other service in flexible ways. Each service is defined by an interface. The interface must have only _one_method. Each implementation must have no instance variables (singleton). HiveMind services may have any number of methods. They don't have to be singletons, though singletons are generally sufficient; the threaded service model allows one-instance-per-thread (but mandates that you tell HiveMind when the instances may be discarded). More service models on the way. Differences: - 1) The first parameter of each interface method must be a Context object giving access to configuration and connections. Is this IoC? I would say not; that's configuration information that should be provided by the container. 2) The selection of which implementation to use is performed late. The selection is based on - data in the method arguments - the services in the stack calling this one - the configuration lookupGroup interface=blah.TheInterface lookup caller caller=blah.SomeCallerImplementation / process process=blah.ImplIfCallerInStack / lookup/ lookup dataSourceType=Database process process=blah.ImplIfParamsWantDB / lookup/ lookup dataSourceType=File process process=blah.ImplIfParamsWantFile / lookup/ lookupGroup/ I include this to give some idea of what is going on. The process elements are the implementations, and which is returned will depend on the current state of the system and the method parameters. It acts like a big if statement. Those almost look like AOP method introductions; this doesn't have a parallel in HiveMind per se. The lookup is hidden from callers by a class that simply has all the interfaces as methods, performs the lookup and then calls the implementation. I'm not following this; in HiveMind services are represented by interfaces; the implementation of the interface may be a fabricated proxy or interceptor, or a user-supplied core implementation (or a fabricated core implementation). 3) We have the concept of interceptors, again bytecode generated. We use them to open and close connections. Thus there is a doPre() method that opens the connection and attaches it to the Context, and a doFinally(), that is called as a finally block, that closes the connection. This obviously simplifies the service itself, and separates system logic from application logic. It is very powerful, and could be worth thinking about for hivemind. (our limitation is that each service can only talk to one datasource). HiveMind allows multiple interceptors in a stack. There are examples of them performing logging operations, and more interceptors are on the way. 4) All our configuration is in XML resource bundles. This allows locale based config for the core server behaviour which we can control on a per session basis (although we haven't needed to yet). We chose to separate configuration from the services themselves, different to hivemind. The system we use allows single Strings, Lists, Maps and raw XML to be loaded from the resources by the program. There is no auto-bean conversion though which is nice in hivemind (although it only takes one line in our code). Having unified module deployment descriptors enahnces the IoC aspects of HiveMind. The framework, as container, can set properties of core implementations to configurations or other services. Proxies get in there to keep unecessary work from occuring until actually needed, and to defuse cyclic dependencies. Additionally, having interlationships between modules is very powerful; especially for pluggability reasons. For example, module A could define a DAO interface and service, and modules B and C (only one available at runtime) would contribute an implementation of the service. HiveMind also feeds on itself ... services are used to construct other services. BuilderFactory is the IoC engine; it constructs core implementations and can set properties of the impl to other services and configs. EJBFactory creates a core impl that's a wrapper
Re: [HiveMind] TSS
James, There is a Mapper project in the Commons Sandbox which aims to be a simple DAO abstraction layer. It's not a lot of code but it's really been quite useful in my projects and it may be helpful in this discussion. BTW, your article (among many others) was part of my research in developing Mapper. http://jakarta.apache.org/commons/sandbox/mapper/ David --- [EMAIL PROTECTED] wrote: I think the first idea is PERFECT. I came up with the idea for my framework by using JDO in a web application (no transactional support involved). So, I used invocation decorators or, in HiveMind, interceptors to begin the transaction if one didn't exist already (and commit it upon successful completion of the method). I think that might be a great idea for an example. I also like the DAO idea. I wrote an article about a new-and-improved DAO framework (http://www.javaworld.com/javaworld/jw-03-2002/jw-0301-dao.html) and I wish I had HiveMind around for that! - Original Message - From: Howard M. Lewis Ship [EMAIL PROTECTED] To: [EMAIL PROTECTED] Cc: Jakarta Commons Developers List [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 1:02 PM Subject: [HiveMind] TSS A couple of ideas I may be pursuing at work ... Creating interceptors to enforce transaction boundaries. Creating intreceptors to enforce declarative security. Creating interceptors that record invocations counts as JMX beans. HiveMind's take on the DAO factory: Define a DAO interface and supply several implementations (for different databases or environments) in a configuration point. Have a service factory create a service implementation that delegates to a particular implementation, i.e. client code -- wrapper service -- actual service The wrapper service is created at runtime. Client code only sees the wrapper service, never has to even know that a dynamic selection takes place. Wrapper service is constructed at runtime using a service impl factory ... look at how EJBFactory is implemented to understand this. Service that creates C#-style delegates for use in Swing apps. You feed in: object, name of public method (of object), listener interface type ... it spits out delegate object that implements the interface and invokes the public method (possibly, passing the event in). Optional: if listener interface defines multiple methods, you decide which to connect. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 12:16 PM To: [EMAIL PROTECTED]; [EMAIL PROTECTED] Subject: Re: Hivemind on TSS Well, I don't really have an idea of how I am going to use HiveMind in my example yet, as I am quite a newbie still. However, I plan on giving a talk on HiveMind at our local users group (www.cinjug.org) in November and I would imagine that I could have something together for you guys by the end of November. I will be playing around with HiveMind over the weekend and I might get a brilliant idea for an example. I'll try to get you an abstract sometime next week. Will that be okay? - Original Message - From: Dion Almaer [EMAIL PROTECTED] To: 'Howard M. Lewis Ship' [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 11:53 AM Subject: RE: Hivemind on TSS Hi Howard and James - Howard: I totally understand both your time requirements, and the idea of having a secondary source providing the info James: We would love to have you work on the article. Feel free to be as creative as you would like. The TSS articles that we publish try to be as hard core as possible, since our audience tends to prefer that. Maybe you could put together a quick abstract (nothing formal), and a guesstimate of when you feel you could get us an article. Then I will book you into our editorial calendar. Cheers, Dion -Original Message- From: Howard M. Lewis Ship [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 11:43 AM To: 'Dion Almaer' Cc: [EMAIL PROTECTED] Subject: RE: Hivemind on TSS A fellow by the name of James Carman has started using HiveMind recently as is very enthusiastic. He was recently published in JDJ discussing his own framework, which is something of a subset of HiveMind. http://www.javaworld.com/javaworld/jw-07-2003/jw-0718-factory.html I mentioned to him the possibility of writing a TSS article about HiveMind and he's very enthusiastic. Since TiA is requiring some rewrites, I'm fully booked ... and I think from a
Re: [HIVEMIND] Examples Please?
Realise now that the source for the xdoclet module didn't make it into the email ... Will forward it tomorrow if anyone is interested as the zip is left at work ... Johan On Wed, 17 Sep 2003 18:52:02 +0200, Johan Lindquist [EMAIL PROTECTED] wrote: Not sure if people have had enough of examples, but attached is a zip file with a simple (and probably buggy) xdoclet module for hivemind (with source) + the calculator example previously discussed implemented using it. Didn't want to inclde all the dependant jars but they are: - commons-collections-2.1.jar - commons-logging-1.0.3.jar - xjavadoc-1.0.jar - xdoclet-1.2b4.jar The ant target 'jar' will build all the necessary jars in ./release Mainly wondering what the interest in a hivemind xdoclet module would be? Johan -- you too? - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [hivemind] Design comparison
Just for my knowledge, how are method introductions different from interceptors? -Harish Howard M. Lewis Ship wrote: I have been monitoring hivemind as it is similar to a framework I helped design for work (not OSS). What interests me is the way that different groups in Java-land are moving towards the small POJO approach, and away from dreaded EJBs. I just want to sketch out some features of the framework I use in case it gives you some ideas. I read a great article that, boiled down, said that Enterprise JavaBeans should be called Transactional JavaBeans because that's all you really get. Bloat, complexity and (due to dependencies on the app server runtime environment) limited testablility is the problem. All these POJOs (Picocontainer, swing, HiveMind, Avalon) are the reaction. Lots of HiveMind percolated and gestated in Tapestry. Similar to hivemind: Aims to enable a system to be written as a large number of small services. Each service can call other service in flexible ways. Each service is defined by an interface. The interface must have only _one_method. Each implementation must have no instance variables (singleton). HiveMind services may have any number of methods. They don't have to be singletons, though singletons are generally sufficient; the threaded service model allows one-instance-per-thread (but mandates that you tell HiveMind when the instances may be discarded). More service models on the way. Differences: - 1) The first parameter of each interface method must be a Context object giving access to configuration and connections. Is this IoC? I would say not; that's configuration information that should be provided by the container. 2) The selection of which implementation to use is performed late. The selection is based on - data in the method arguments - the services in the stack calling this one - the configuration lookupGroup interface=blah.TheInterface lookup caller caller=blah.SomeCallerImplementation / process process=blah.ImplIfCallerInStack / lookup/ lookup dataSourceType=Database process process=blah.ImplIfParamsWantDB / lookup/ lookup dataSourceType=File process process=blah.ImplIfParamsWantFile / lookup/ lookupGroup/ I include this to give some idea of what is going on. The process elements are the implementations, and which is returned will depend on the current state of the system and the method parameters. It acts like a big if statement. Those almost look like AOP method introductions; this doesn't have a parallel in HiveMind per se. The lookup is hidden from callers by a class that simply has all the interfaces as methods, performs the lookup and then calls the implementation. I'm not following this; in HiveMind services are represented by interfaces; the implementation of the interface may be a fabricated proxy or interceptor, or a user-supplied core implementation (or a fabricated core implementation). 3) We have the concept of interceptors, again bytecode generated. We use them to open and close connections. Thus there is a doPre() method that opens the connection and attaches it to the Context, and a doFinally(), that is called as a finally block, that closes the connection. This obviously simplifies the service itself, and separates system logic from application logic. It is very powerful, and could be worth thinking about for hivemind. (our limitation is that each service can only talk to one datasource). HiveMind allows multiple interceptors in a stack. There are examples of them performing logging operations, and more interceptors are on the way. 4) All our configuration is in XML resource bundles. This allows locale based config for the core server behaviour which we can control on a per session basis (although we haven't needed to yet). We chose to separate configuration from the services themselves, different to hivemind. The system we use allows single Strings, Lists, Maps and raw XML to be loaded from the resources by the program. There is no auto-bean conversion though which is nice in hivemind (although it only takes one line in our code). Having unified module deployment descriptors enahnces the IoC aspects of HiveMind. The framework, as container, can set properties of core implementations to configurations or other services. Proxies get in there to keep unecessary work from occuring until actually needed, and to defuse cyclic dependencies. Additionally, having interlationships between modules is very powerful; especially for pluggability reasons. For example, module A could define a DAO interface and service, and modules B and C (only one available at runtime) would contribute an implementation of the service. HiveMind also feeds on itself ... services are used to construct other services. BuilderFactory is the IoC engine; it constructs core implementations and can set properties of the impl to other
RE: [hivemind] Design comparison
I'm not an aspect guru (not yet), but I believe a method introduction (at least in AspectJ) can take into account who the caller is. So, the interceptor could make the method operate different dependeing on whether, for example, the method was invoked be test code, by the container, or by the object itself (recursively). With HiveMind, the interceptor is more simply a wrapper, and makes no decision about the caller. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: Harish Krishnaswamy [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 1:51 PM To: Jakarta Commons Developers List Subject: Re: [hivemind] Design comparison Just for my knowledge, how are method introductions different from interceptors? -Harish Howard M. Lewis Ship wrote: I have been monitoring hivemind as it is similar to a framework I helped design for work (not OSS). What interests me is the way that different groups in Java-land are moving towards the small POJO approach, and away from dreaded EJBs. I just want to sketch out some features of the framework I use in case it gives you some ideas. I read a great article that, boiled down, said that Enterprise JavaBeans should be called Transactional JavaBeans because that's all you really get. Bloat, complexity and (due to dependencies on the app server runtime environment) limited testablility is the problem. All these POJOs (Picocontainer, swing, HiveMind, Avalon) are the reaction. Lots of HiveMind percolated and gestated in Tapestry. Similar to hivemind: Aims to enable a system to be written as a large number of small services. Each service can call other service in flexible ways. Each service is defined by an interface. The interface must have only _one_method. Each implementation must have no instance variables (singleton). HiveMind services may have any number of methods. They don't have to be singletons, though singletons are generally sufficient; the threaded service model allows one-instance-per-thread (but mandates that you tell HiveMind when the instances may be discarded). More service models on the way. Differences: - 1) The first parameter of each interface method must be a Context object giving access to configuration and connections. Is this IoC? I would say not; that's configuration information that should be provided by the container. 2) The selection of which implementation to use is performed late. The selection is based on - data in the method arguments - the services in the stack calling this one - the configuration lookupGroup interface=blah.TheInterface lookup caller caller=blah.SomeCallerImplementation / process process=blah.ImplIfCallerInStack / lookup/ lookup dataSourceType=Database process process=blah.ImplIfParamsWantDB / lookup/ lookup dataSourceType=File process process=blah.ImplIfParamsWantFile / lookup/ lookupGroup/ I include this to give some idea of what is going on. The process elements are the implementations, and which is returned will depend on the current state of the system and the method parameters. It acts like a big if statement. Those almost look like AOP method introductions; this doesn't have a parallel in HiveMind per se. The lookup is hidden from callers by a class that simply has all the interfaces as methods, performs the lookup and then calls the implementation. I'm not following this; in HiveMind services are represented by interfaces; the implementation of the interface may be a fabricated proxy or interceptor, or a user-supplied core implementation (or a fabricated core implementation). 3) We have the concept of interceptors, again bytecode generated. We use them to open and close connections. Thus there is a doPre() method that opens the connection and attaches it to the Context, and a doFinally(), that is called as a finally block, that closes the connection. This obviously simplifies the service itself, and separates system logic from application logic. It is very powerful, and could be worth thinking about for hivemind. (our limitation is that each service can only talk to one datasource). HiveMind allows multiple interceptors in a stack. There are examples of them performing logging operations, and more interceptors are on the way. 4) All our configuration is in XML resource bundles. This allows locale based config for the core server behaviour which we can control on a per session basis (although we haven't needed to yet). We chose to separate configuration from the services themselves, different to hivemind. The system we use allows single
Re: [HiveMind] TSS
Wow! Glad to know somebody actually READ my article! :-) - Original Message - From: David Graham [EMAIL PROTECTED] To: Jakarta Commons Developers List [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 1:40 PM Subject: Re: [HiveMind] TSS James, There is a Mapper project in the Commons Sandbox which aims to be a simple DAO abstraction layer. It's not a lot of code but it's really been quite useful in my projects and it may be helpful in this discussion. BTW, your article (among many others) was part of my research in developing Mapper. http://jakarta.apache.org/commons/sandbox/mapper/ David --- [EMAIL PROTECTED] wrote: I think the first idea is PERFECT. I came up with the idea for my framework by using JDO in a web application (no transactional support involved). So, I used invocation decorators or, in HiveMind, interceptors to begin the transaction if one didn't exist already (and commit it upon successful completion of the method). I think that might be a great idea for an example. I also like the DAO idea. I wrote an article about a new-and-improved DAO framework (http://www.javaworld.com/javaworld/jw-03-2002/jw-0301-dao.html) and I wish I had HiveMind around for that! - Original Message - From: Howard M. Lewis Ship [EMAIL PROTECTED] To: [EMAIL PROTECTED] Cc: Jakarta Commons Developers List [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 1:02 PM Subject: [HiveMind] TSS A couple of ideas I may be pursuing at work ... Creating interceptors to enforce transaction boundaries. Creating intreceptors to enforce declarative security. Creating interceptors that record invocations counts as JMX beans. HiveMind's take on the DAO factory: Define a DAO interface and supply several implementations (for different databases or environments) in a configuration point. Have a service factory create a service implementation that delegates to a particular implementation, i.e. client code -- wrapper service -- actual service The wrapper service is created at runtime. Client code only sees the wrapper service, never has to even know that a dynamic selection takes place. Wrapper service is constructed at runtime using a service impl factory ... look at how EJBFactory is implemented to understand this. Service that creates C#-style delegates for use in Swing apps. You feed in: object, name of public method (of object), listener interface type ... it spits out delegate object that implements the interface and invokes the public method (possibly, passing the event in). Optional: if listener interface defines multiple methods, you decide which to connect. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 12:16 PM To: [EMAIL PROTECTED]; [EMAIL PROTECTED] Subject: Re: Hivemind on TSS Well, I don't really have an idea of how I am going to use HiveMind in my example yet, as I am quite a newbie still. However, I plan on giving a talk on HiveMind at our local users group (www.cinjug.org) in November and I would imagine that I could have something together for you guys by the end of November. I will be playing around with HiveMind over the weekend and I might get a brilliant idea for an example. I'll try to get you an abstract sometime next week. Will that be okay? - Original Message - From: Dion Almaer [EMAIL PROTECTED] To: 'Howard M. Lewis Ship' [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 11:53 AM Subject: RE: Hivemind on TSS Hi Howard and James - Howard: I totally understand both your time requirements, and the idea of having a secondary source providing the info James: We would love to have you work on the article. Feel free to be as creative as you would like. The TSS articles that we publish try to be as hard core as possible, since our audience tends to prefer that. Maybe you could put together a quick abstract (nothing formal), and a guesstimate of when you feel you could get us an article. Then I will book you into our editorial calendar. Cheers, Dion -Original Message- From: Howard M. Lewis Ship [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 11:43 AM To: 'Dion Almaer' Cc: [EMAIL PROTECTED] Subject: RE: Hivemind on TSS A fellow by the name of James Carman has started using HiveMind recently as is very enthusiastic. He was recently
Re: [hivemind] Design comparison
Ah, I see. Thanks. Howard M. Lewis Ship wrote: I'm not an aspect guru (not yet), but I believe a method introduction (at least in AspectJ) can take into account who the caller is. So, the interceptor could make the method operate different dependeing on whether, for example, the method was invoked be test code, by the container, or by the object itself (recursively). With HiveMind, the interceptor is more simply a wrapper, and makes no decision about the caller. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: Harish Krishnaswamy [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 1:51 PM To: Jakarta Commons Developers List Subject: Re: [hivemind] Design comparison Just for my knowledge, how are method introductions different from interceptors? -Harish Howard M. Lewis Ship wrote: I have been monitoring hivemind as it is similar to a framework I helped design for work (not OSS). What interests me is the way that different groups in Java-land are moving towards the small POJO approach, and away from dreaded EJBs. I just want to sketch out some features of the framework I use in case it gives you some ideas. I read a great article that, boiled down, said that Enterprise JavaBeans should be called Transactional JavaBeans because that's all you really get. Bloat, complexity and (due to dependencies on the app server runtime environment) limited testablility is the problem. All these POJOs (Picocontainer, swing, HiveMind, Avalon) are the reaction. Lots of HiveMind percolated and gestated in Tapestry. Similar to hivemind: Aims to enable a system to be written as a large number of small services. Each service can call other service in flexible ways. Each service is defined by an interface. The interface must have only _one_method. Each implementation must have no instance variables (singleton). HiveMind services may have any number of methods. They don't have to be singletons, though singletons are generally sufficient; the threaded service model allows one-instance-per-thread (but mandates that you tell HiveMind when the instances may be discarded). More service models on the way. Differences: - 1) The first parameter of each interface method must be a Context object giving access to configuration and connections. Is this IoC? I would say not; that's configuration information that should be provided by the container. 2) The selection of which implementation to use is performed late. The selection is based on - data in the method arguments - the services in the stack calling this one - the configuration lookupGroup interface=blah.TheInterface lookup caller caller=blah.SomeCallerImplementation / process process=blah.ImplIfCallerInStack / lookup/ lookup dataSourceType=Database process process=blah.ImplIfParamsWantDB / lookup/ lookup dataSourceType=File process process=blah.ImplIfParamsWantFile / lookup/ lookupGroup/ I include this to give some idea of what is going on. The process elements are the implementations, and which is returned will depend on the current state of the system and the method parameters. It acts like a big if statement. Those almost look like AOP method introductions; this doesn't have a parallel in HiveMind per se. The lookup is hidden from callers by a class that simply has all the interfaces as methods, performs the lookup and then calls the implementation. I'm not following this; in HiveMind services are represented by interfaces; the implementation of the interface may be a fabricated proxy or interceptor, or a user-supplied core implementation (or a fabricated core implementation). 3) We have the concept of interceptors, again bytecode generated. We use them to open and close connections. Thus there is a doPre() method that opens the connection and attaches it to the Context, and a doFinally(), that is called as a finally block, that closes the connection. This obviously simplifies the service itself, and separates system logic from application logic. It is very powerful, and could be worth thinking about for hivemind. (our limitation is that each service can only talk to one datasource). HiveMind allows multiple interceptors in a stack. There are examples of them performing logging operations, and more interceptors are on the way. 4) All our configuration is in XML resource bundles. This allows locale based config for the core server behaviour which we can control on a per session basis (although we haven't needed to yet). We chose to separate configuration from the services themselves, different to hivemind. The system we use allows single
[HiveMind] How to add interceptor to embedded service
I have the following module, and I would like to add a logging interceptor to the Divider service, and only the Divider service. How do I do this? module id=hivemind.examples version=1.0.0 service id=Calculator interface=hivemind.examples.Calculator invoke-factory service-id=hivemind.BuilderFactory construct class=hivemind.examples.impl.CalculatorImpl set-service property=adder service-id=org.puppies.math.Adder/ set-service property=subtracter service-id=org.kitties.math.Subtracter/ set-service property=multiplier service-id=org.gerbils.math.Multiplier/ set-service property=divider service-id=org.fishies.math.Divider/ /construct /invoke-factory /service /module I am able to add an interceptor to the Calculator service as a whole, but can't figure out how to wrap just the Divider by a logger. I tried adding the following: extend-service service-id=org.fishies.math.Divider interceptor service-id=hivemind.LoggingInterceptor/ /extend-service but it did nothing. Harish did this in his example by adding a separate module, log, with a simple module, but that seems to require building a separate jar. Bill - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23222] New: - [betwixt] o.a.c.betwixt.strategy.Testi18nObjectStringConversion.testFrenchDefaultLocale failure on Win2k
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23222. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23222 [betwixt] o.a.c.betwixt.strategy.Testi18nObjectStringConversion.testFrenchDefaultLocale failure on Win2k Summary: [betwixt] o.a.c.betwixt.strategy.Testi18nObjectStringConversion.te stFrenchDefaultLocale failure on Win2k Product: Commons Version: Nightly Builds Platform: All OS/Version: Other Status: NEW Severity: Minor Priority: Other Component: Betwixt AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] I grabbed the latest source from CVS HEAD, ran maven test and there was a failure: Testcase: testFrenchDefaultLocale took 0.031 sec FAILED Locale dependent conversions expected:...Ž... but was:...é... junit.framework.ComparisonFailure: Locale dependent conversions expected:...Ž... but was:...é... at org.apache.commons.betwixt.strategy.Testi18nObjectStringConversion.testFrenchDefaultLocale(Testi18nObjectStringConversion.java:100) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) uname -a in cygwin CYGWIN_NT-5.0 localhost 1.5.4(0.94/3/2) 2003-09-12 23:08 i686 unknown unknown Cygwin My Computer/Properties/General Microsoft Windows 2000 5.00.2195 Service Pack 4 Intel(R) Pentium (r) 4 CPU 1.80 GHz AT/AT COMPATIBLE 523,808 KB RAM - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: [HiveMind] How to add interceptor to embedded service
Strange that that didn't work. The fact that Divider is used as part of Calculator's implementation does not affect your ability to add interceptors to it. Can we see the complete hivemodule.xml? -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: Bill Lear [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 2:47 PM To: [EMAIL PROTECTED] Subject: [HiveMind] How to add interceptor to embedded service I have the following module, and I would like to add a logging interceptor to the Divider service, and only the Divider service. How do I do this? module id=hivemind.examples version=1.0.0 service id=Calculator interface=hivemind.examples.Calculator invoke-factory service-id=hivemind.BuilderFactory construct class=hivemind.examples.impl.CalculatorImpl set-service property=adder service-id=org.puppies.math.Adder/ set-service property=subtracter service-id=org.kitties.math.Subtracter/ set-service property=multiplier service-id=org.gerbils.math.Multiplier/ set-service property=divider service-id=org.fishies.math.Divider/ /construct /invoke-factory /service /module I am able to add an interceptor to the Calculator service as a whole, but can't figure out how to wrap just the Divider by a logger. I tried adding the following: extend-service service-id=org.fishies.math.Divider interceptor service-id=hivemind.LoggingInterceptor/ /extend-service but it did nothing. Harish did this in his example by adding a separate module, log, with a simple module, but that seems to require building a separate jar. Bill - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: [HiveMind] How to add interceptor to embedded service
On Wednesday, September 17, 2003 at 14:47:36 (-0400) Howard M. Lewis Ship writes: Strange that that didn't work. The fact that Divider is used as part of Calculator's implementation does not affect your ability to add interceptors to it. Can we see the complete hivemodule.xml? That's really it. Here is the Calculator one, as I just sent, but with the extension attempt: ?xml version=1.0? module id=hivemind.examples version=1.0.0 service id=Calculator interface=hivemind.examples.Calculator invoke-factory service-id=hivemind.BuilderFactory construct class=hivemind.examples.impl.CalculatorImpl set-service property=adder service-id=org.puppies.math.Adder/ set-service property=subtracter service-id=org.kitties.math.Subtracter/ set-service property=multiplier service-id=org.gerbils.math.Multiplier/ set-service property=divider service-id=org.fishies.math.Divider/ /construct /invoke-factory /service extend-service service-id=org.fishies.math.Divider interceptor service-id=hivemind.LoggingInterceptor/ /extend-service /module When run, I get identical results whether or not I include the above extend-service element, and whether or not it precedes the above service element. Bill - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [HiveMind] How to add interceptor to embedded service
Is your module id for Divider org.fishies.math and service id just Divider? -Harish Bill Lear wrote: On Wednesday, September 17, 2003 at 14:47:36 (-0400) Howard M. Lewis Ship writes: Strange that that didn't work. The fact that Divider is used as part of Calculator's implementation does not affect your ability to add interceptors to it. Can we see the complete hivemodule.xml? That's really it. Here is the Calculator one, as I just sent, but with the extension attempt: ?xml version=1.0? module id=hivemind.examples version=1.0.0 service id=Calculator interface=hivemind.examples.Calculator invoke-factory service-id=hivemind.BuilderFactory construct class=hivemind.examples.impl.CalculatorImpl set-service property=adder service-id=org.puppies.math.Adder/ set-service property=subtracter service-id=org.kitties.math.Subtracter/ set-service property=multiplier service-id=org.gerbils.math.Multiplier/ set-service property=divider service-id=org.fishies.math.Divider/ /construct /invoke-factory /service extend-service service-id=org.fishies.math.Divider interceptor service-id=hivemind.LoggingInterceptor/ /extend-service /module When run, I get identical results whether or not I include the above extend-service element, and whether or not it precedes the above service element. Bill - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: [HiveMind] How to add interceptor to embedded service
Is there any chance that the logging is simply not being output? LoggingInterceptor works at level DEBUG. Check your log4j.properties. -- Howard M. Lewis Ship Creator, Tapestry: Java Web Components http://jakarta.apache.org/tapestry http://jakarta.apache.org/commons/sandbox/hivemind/ http://javatapestry.blogspot.com -Original Message- From: Bill Lear [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 2:58 PM To: Jakarta Commons Developers List Subject: RE: [HiveMind] How to add interceptor to embedded service On Wednesday, September 17, 2003 at 14:47:36 (-0400) Howard M. Lewis Ship writes: Strange that that didn't work. The fact that Divider is used as part of Calculator's implementation does not affect your ability to add interceptors to it. Can we see the complete hivemodule.xml? That's really it. Here is the Calculator one, as I just sent, but with the extension attempt: ?xml version=1.0? module id=hivemind.examples version=1.0.0 service id=Calculator interface=hivemind.examples.Calculator invoke-factory service-id=hivemind.BuilderFactory construct class=hivemind.examples.impl.CalculatorImpl set-service property=adder service-id=org.puppies.math.Adder/ set-service property=subtracter service-id=org.kitties.math.Subtracter/ set-service property=multiplier service-id=org.gerbils.math.Multiplier/ set-service property=divider service-id=org.fishies.math.Divider/ /construct /invoke-factory /service extend-service service-id=org.fishies.math.Divider interceptor service-id=hivemind.LoggingInterceptor/ /extend-service /module When run, I get identical results whether or not I include the above extend-service element, and whether or not it precedes the above service element. Bill - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: [HiveMind] How to add interceptor to embedded service
On Wednesday, September 17, 2003 at 15:04:42 (-0400) Howard M. Lewis Ship writes: Is there any chance that the logging is simply not being output? LoggingInterceptor works at level DEBUG. Check your log4j.properties. Color me moron. That was it. Bill - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [hivemind] Design comparison
From: Howard M. Lewis Ship [EMAIL PROTECTED] 2) The selection of which implementation to use is performed late. The selection is based on - data in the method arguments - the services in the stack calling this one - the configuration the method parameters. It acts like a big if statement. Those almost look like AOP method introductions; this doesn't have a parallel in HiveMind per se. Yes hivemind does not seem to allow multiple implementations for the same interface, and choose the one to use each time it is called. This late binding is a key part of this framework. --- The lookup is hidden from callers by a class that simply has all the interfaces as methods, performs the lookup and then calls the implementation. I'm not following this; in HiveMind services are represented by interfaces; the implementation of the interface may be a fabricated proxy or interceptor, or a user-supplied core implementation (or a fabricated core implementation). Yes, services are represented by interfaces, with an implementation that may be decorated with a fabricated proxy. To achieve this you need a lookup to get the correct implementation class for the interface. (In hivemind this is performed by a set method on the implementation, but that won't work for late binding singletons. --- Stephen - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons-sandbox/math/src/java/org/apache/commons/math/util BeanTransformer.java NumberTransformer.java
mdiggory2003/09/17 12:19:09 Modified:math/src/java/org/apache/commons/math/stat/distribution BinomialDistribution.java DistributionFactory.java DistributionFactoryImpl.java math/src/test/org/apache/commons/math/stat/distribution BinomialDistributionTest.java DistributionFactoryImplTest.java math/src/java/org/apache/commons/math/stat Univariate.java math/src/java/org/apache/commons/math/util BeanTransformer.java NumberTransformer.java Added: math/src/java/org/apache/commons/math/stat/distribution HypergeometricDistribution.java HypergeometricDistributionImpl.java math/src/test/org/apache/commons/math/stat/distribution HypergeometricDistributionTest.java math/src/java/org/apache/commons/math/stat Applyable.java Log: PR: http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23010 Submitted by: Brent Worden Reviewed by: Mark Diggory Revision ChangesPath 1.2 +2 -2 jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat/distribution/BinomialDistribution.java Index: BinomialDistribution.java === RCS file: /home/cvs/jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat/distribution/BinomialDistribution.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- BinomialDistribution.java 16 Aug 2003 17:06:15 - 1.1 +++ BinomialDistribution.java 17 Sep 2003 19:19:08 - 1.2 @@ -57,7 +57,7 @@ * The Binomial Distribution. * * Instances of BinomialDistribution objects should be created using - * [EMAIL PROTECTED] DistributionFactory#createBinomailDistribution(int, double)}. + * [EMAIL PROTECTED] DistributionFactory#createBinomialDistribution(int, double)}. * * References: * ul 1.11 +15 -2 jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat/distribution/DistributionFactory.java Index: DistributionFactory.java === RCS file: /home/cvs/jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat/distribution/DistributionFactory.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- DistributionFactory.java 16 Aug 2003 17:06:15 - 1.10 +++ DistributionFactory.java 17 Sep 2003 19:19:08 - 1.11 @@ -51,6 +51,7 @@ * information on the Apache Software Foundation, please see * http://www.apache.org/. */ + package org.apache.commons.math.stat.distribution; /** @@ -99,7 +100,7 @@ * @param probabilityOfSuccess the probability of success. * @return a new binomial distribution. */ -public abstract BinomialDistribution createBinomailDistribution( +public abstract BinomialDistribution createBinomialDistribution( int numberOfTrials, double probabilityOfSuccess); /** @@ -142,4 +143,16 @@ * @return a new t distribution. */ public abstract TDistribution createTDistribution(double degreesOfFreedom); + +/** + * Create a new hypergeometric distribution with the given the population + * size, the number of successes in the population, and the sample size. + * @param populationSize the population size. + * @param numberOfSuccesses number of successes in the population. + * @param sampleSize the sample size. + * @return a new hypergeometric desitribution. + */ +public abstract HypergeometricDistribution +createHypergeometricDistribution(int populationSize, +int numberOfSuccesses, int sampleSize); } 1.9 +19 -2 jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat/distribution/DistributionFactoryImpl.java Index: DistributionFactoryImpl.java === RCS file: /home/cvs/jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat/distribution/DistributionFactoryImpl.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- DistributionFactoryImpl.java 16 Aug 2003 17:06:15 - 1.8 +++ DistributionFactoryImpl.java 17 Sep 2003 19:19:08 - 1.9 @@ -129,10 +129,27 @@ * @param probabilityOfSuccess the probability of success. * @return a new binomial distribution. */ -public BinomialDistribution createBinomailDistribution( +public BinomialDistribution createBinomialDistribution( int numberOfTrials, double probabilityOfSuccess) { return new BinomialDistributionImpl(numberOfTrials,
DO NOT REPLY [Bug 23010] - [math] hypergeometric distribution patch
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23010. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23010 [math] hypergeometric distribution patch [EMAIL PROTECTED] changed: What|Removed |Added Status|NEW |RESOLVED Resolution||FIXED --- Additional Comments From [EMAIL PROTECTED] 2003-09-17 19:22 --- Applied and tested - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [PATCH] StringValueTransformer added to TransformerUtils
Unfortunately, I can't access your patch. Perhaps you could open a Bugzilla entry and attach the patch to that? Thanks Stephen - Original Message - From: [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, September 11, 2003 7:57 PM Subject: [PATCH] StringValueTransformer added to TransformerUtils James Carman, President Carman Consulting, Inc. 1218 Bob White Ct. Edgewood, KY 41018 (513) 325-7977 - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons/betwixt/src/test/org/apache/commons/betwixt TestBeanWriter.java
rdonkin 2003/09/17 14:31:58 Modified:betwixt/src/java/org/apache/commons/betwixt/digester XMLIntrospectorHelper.java betwixt/src/test/org/apache/commons/betwixt TestBeanWriter.java Log: Fixed bug when using writing a bean with an adder called add that adds to a collection. Submitted by Christoph Sturm. Revision ChangesPath 1.24 +3 -1 jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/digester/XMLIntrospectorHelper.java Index: XMLIntrospectorHelper.java === RCS file: /home/cvs/jakarta-commons/betwixt/src/java/org/apache/commons/betwixt/digester/XMLIntrospectorHelper.java,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- XMLIntrospectorHelper.java13 Jul 2003 21:28:10 - 1.23 +++ XMLIntrospectorHelper.java17 Sep 2003 21:31:58 - 1.24 @@ -462,6 +462,8 @@ if ( ( types.length == 1 ) || types.length == 2 ) { String propertyName = Introspector.decapitalize( name.substring(3) ); +if (propertyName.length() == 0) +continue; if ( log.isTraceEnabled() ) { log.trace( name + - + propertyName ); } 1.16 +28 -1 jakarta-commons/betwixt/src/test/org/apache/commons/betwixt/TestBeanWriter.java Index: TestBeanWriter.java === RCS file: /home/cvs/jakarta-commons/betwixt/src/test/org/apache/commons/betwixt/TestBeanWriter.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- TestBeanWriter.java 28 Jun 2003 10:34:28 - 1.15 +++ TestBeanWriter.java 17 Sep 2003 21:31:58 - 1.16 @@ -66,6 +66,7 @@ import java.io.StringWriter; import java.util.ArrayList; +import java.util.Collection; import junit.framework.Test; import junit.framework.TestSuite; @@ -74,7 +75,6 @@ import org.apache.commons.betwixt.io.BeanWriter; import org.apache.commons.betwixt.io.CyclicReferenceException; import org.apache.commons.logging.impl.SimpleLog; -import org.apache.commons.betwixt.digester.XMLIntrospectorHelper; import org.apache.commons.betwixt.strategy.CapitalizeNameMapper; import org.apache.commons.betwixt.strategy.HyphenatedNameMapper; @@ -669,6 +669,33 @@ parseString(out.getBuffer().toString()), parseString(xml), true); +} + +public void testBeanWriterWorksWithAnAddMethodAndACollection() throws Exception { + +BeanWriter bw = new BeanWriter(); +try { +bw.write(new BeanWithAddMethod()); +} catch (IllegalArgumentException e) { +fail(BeanWriter fails when a method is just called add(type) and there is also a collection); +} +} + +// used in testBeanWriterWorksWithAnAddMethodAndACollection +public static class BeanWithAddMethod { +private Collection x; +public void add(Object x) +{ +// do nothing +} + +public Collection getX() { +return x; +} + +public void setX(Collection x) { +this.x = x; +} } } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [collections] 3.0 release (1)
On Wed, 17 Sep 2003, Stephen Colebourne wrote: - OrderedMap decorator? Have begun work on this. I'll go ahead and check in where I am at the moment, with some nice big comments saying it's unfinished, but passing unit tests. [mainly because the unit tests are very basic at the moment]. Hen - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons/betwixt/src/test/org/apache/commons/betwixt/strategy Testi18nObjectStringConversion.java
rdonkin 2003/09/17 14:36:30 Modified:betwixt/src/test/org/apache/commons/betwixt/strategy Testi18nObjectStringConversion.java Log: Converted test file to UTF-8. Revision ChangesPath 1.2 +5 -5 jakarta-commons/betwixt/src/test/org/apache/commons/betwixt/strategy/Testi18nObjectStringConversion.java Index: Testi18nObjectStringConversion.java === RCS file: /home/cvs/jakarta-commons/betwixt/src/test/org/apache/commons/betwixt/strategy/Testi18nObjectStringConversion.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Testi18nObjectStringConversion.java 9 Sep 2003 22:57:49 - 1.1 +++ Testi18nObjectStringConversion.java 17 Sep 2003 21:36:30 - 1.2 @@ -97,7 +97,7 @@ calendar.set(1980, 11, 9, 5, 0, 0); java.util.Date date = calendar.getTime(); String formatted = format.format(date); -assertEquals(Locale dependent conversions, mar. dc. 09 05:00:000 1980, formatted); +assertEquals(Locale dependent conversions, mar. déc. 09 05:00:000 1980, formatted); } } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons/betwixt/src/test/org/apache/commons/betwixt/strategy Testi18nObjectStringConversion.java
rdonkin 2003/09/17 14:46:13 Modified:betwixt/src/test/org/apache/commons/betwixt/strategy Testi18nObjectStringConversion.java Log: Escaped french character to unicode value Revision ChangesPath 1.3 +6 -6 jakarta-commons/betwixt/src/test/org/apache/commons/betwixt/strategy/Testi18nObjectStringConversion.java Index: Testi18nObjectStringConversion.java === RCS file: /home/cvs/jakarta-commons/betwixt/src/test/org/apache/commons/betwixt/strategy/Testi18nObjectStringConversion.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Testi18nObjectStringConversion.java 17 Sep 2003 21:36:30 - 1.2 +++ Testi18nObjectStringConversion.java 17 Sep 2003 21:46:13 - 1.3 @@ -97,7 +97,7 @@ calendar.set(1980, 11, 9, 5, 0, 0); java.util.Date date = calendar.getTime(); String formatted = format.format(date); -assertEquals(Locale dependent conversions, mar. déc. 09 05:00:000 1980, formatted); +assertEquals(Locale dependent conversions, mar. d\u00E9c. 09 05:00:000 1980, formatted); } } - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23222] - [betwixt] o.a.c.betwixt.strategy.Testi18nObjectStringConversion.testFrenchDefaultLocale failure on Win2k
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23222. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23222 [betwixt] o.a.c.betwixt.strategy.Testi18nObjectStringConversion.testFrenchDefaultLocale failure on Win2k [EMAIL PROTECTED] changed: What|Removed |Added Status|NEW |RESOLVED Resolution||FIXED --- Additional Comments From [EMAIL PROTECTED] 2003-09-17 21:51 --- hi matthew i've taken another look at the code (and the encodings of the source files) and think that i've found a possible cause. i've just committed a change to escape the french character to it's unicode value. i think that this should solve this problem. please feel free to reopen it if it does not. Robert - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [collections] Observed
How useful are these convenience methods? I added them, then removed them. Trouble is that not every handler will necessarily use listeners (although most will). Synchronized - collection is always synchronized Bounded - collection is always bounded Predicated - collection is always predicated Unmodifiable - collection can not be modified Observed - collection is always observed Observable - collection can be observed Naming is dubious, but I guess Observable might be marginally better as the observer is optional. Any other views? Stephen From: Michael Heuer [EMAIL PROTECTED] Could you add methods to ObservableCollection and friends that forward to the ModificationHandler, public void addPreModificationListener(Object l) { getHandler().addPreModificationListener(l); } public void removePreModificationListener(Object l) public void addPostModificationListener(Object l) public void removePostModificationListener(Object l) etc. Also, before release, does anyone else want to weigh in on Observable vs. Observed? michael On Wed, 17 Sep 2003, Stephen Colebourne wrote: We still have too many issues for a freeze this weekend, so I'll extend the deadline by two weeks at this point, although I shan't be surprised if it slips again. The code is improving greatly however, so this is good. Still to do: - ObservedMap - write observedXxx() methods for CollectionUtils et al - write release notes - tidy up the Bugzilla entries - MultiMap changes?? - Bag interface changes?? - OrderedMap decorator? Stephen - Original Message - From: Stephen Colebourne [EMAIL PROTECTED] To: Jakarta Commons Developers List [EMAIL PROTECTED] Sent: Wednesday, September 03, 2003 10:34 PM Subject: [collections] 3.0 release (1) I am volunteering to arrange the 3.0 release of [collections], which is long overdue. I am currently: - finishing the ObservedCollection code - writing release notes - trying to separate the primitive collections code - rename SequencedSet to OrderedSet - reviewing the bugzilla entries Other tasks: - write OrderedMap decorator (Hen) - review Bag interface where it deviates from Collection - see if MultiMap code on bugzilla can be integrated Henri has volunteered to do the actual final builds and release to Minatour/Mirrors, but (unless someone objects) I will manage the release. Stephen - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [graph] is the projec alive?
On Wed, 2003-09-17 at 16:50, robert burrell donkin wrote: henri's right but there's one corollary i'd like to add: in order to gain promotion to the commons proper, graph needs an apache committer to champion it. maven seems like the best place to find one. I was talking to David Dixon-Peugh and what might happen is we just pick up the code and move it to codehaus. - robert On Wednesday, September 17, 2003, at 02:10 PM, Henri Yandell wrote: People to talk to look like jvanzyl, dion and mvdb. I think they all listen here, but the Maven list might be better monitored. There's no PROPOSAL.html or STATUS.html in there, so it's not got the necessary requirements for a promotion to Commons proper to be considered. Hen On Wed, 17 Sep 2003, Tomasz Pik wrote: Commons developers, There's a 'graph2' module in sandbox CVS containing implementation of 'graph' structure. I'd like to ask about status of this project. CVS looks like untouched for about a year. This package is not released (because it's in sandbox). On the other side Maven depends on this. So - are there any plans for promoting this to 'commons' and release? Thanks Tomek - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- jvz. Jason van Zyl [EMAIL PROTECTED] http://tambora.zenplex.org In short, man creates for himself a new religion of a rational and technical order to justify his work and to be justified in it. -- Jacques Ellul, The Technological Society - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23229] New: - File Upload Not Compatible With IE 5.2.3 MacOS X
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23229. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23229 File Upload Not Compatible With IE 5.2.3 MacOS X Summary: File Upload Not Compatible With IE 5.2.3 MacOS X Product: Commons Version: 1.0 Final Platform: Other OS/Version: Linux Status: NEW Severity: Normal Priority: Other Component: File Upload AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] I've got a Struts 1.1 application with a file upload field that works on all the browsers that I can think of (IE5/6 PC, Mozilla, Safari, etc) except IE5 Macintosh. I get this exception whether or not a file has been selected to upload: [Thread-50] ERROR org.apache.struts.upload.CommonsMultipartRequestHandler - Failed to parse multipart request org.apache.commons.fileupload.FileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:429) at org.apache.struts.upload.CommonsMultipartRequestHandler.handleRequest(CommonsMultipartRe questHandler.java:233) at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1209) at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.etp.voter.web.client.LoginFilter.doFilter(LoginFilter.java:49) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.etp.voter.web.HibernateFilter.doFilter(HibernateFilter.java:84) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.etp.commons.web.UnicodeFormFilter.doFilter(UnicodeFormFilter.java:35) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipel ine.java:643) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipel ine.java:643) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipel ine.java:641) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipel ine.java:643) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipel ine.java:641) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipel ine.java:641) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at
Re: [collections] Observed
On Wed, 17 Sep 2003, Stephen Colebourne wrote: How useful are these convenience methods? I added them, then removed them. Trouble is that not every handler will necessarily use listeners (although most will). It seems to me that the Handler is more an artifact of designing flexibility into the implementation than something that a client (in most cases) wants to concern themselves with. You raise a good exception though. michael Synchronized - collection is always synchronized Bounded - collection is always bounded Predicated - collection is always predicated Unmodifiable - collection can not be modified Observed - collection is always observed Observable - collection can be observed Naming is dubious, but I guess Observable might be marginally better as the observer is optional. Any other views? Stephen From: Michael Heuer [EMAIL PROTECTED] Could you add methods to ObservableCollection and friends that forward to the ModificationHandler, public void addPreModificationListener(Object l) { getHandler().addPreModificationListener(l); } public void removePreModificationListener(Object l) public void addPostModificationListener(Object l) public void removePostModificationListener(Object l) etc. Also, before release, does anyone else want to weigh in on Observable vs. Observed? michael On Wed, 17 Sep 2003, Stephen Colebourne wrote: We still have too many issues for a freeze this weekend, so I'll extend the deadline by two weeks at this point, although I shan't be surprised if it slips again. The code is improving greatly however, so this is good. Still to do: - ObservedMap - write observedXxx() methods for CollectionUtils et al - write release notes - tidy up the Bugzilla entries - MultiMap changes?? - Bag interface changes?? - OrderedMap decorator? Stephen - Original Message - From: Stephen Colebourne [EMAIL PROTECTED] To: Jakarta Commons Developers List [EMAIL PROTECTED] Sent: Wednesday, September 03, 2003 10:34 PM Subject: [collections] 3.0 release (1) I am volunteering to arrange the 3.0 release of [collections], which is long overdue. I am currently: - finishing the ObservedCollection code - writing release notes - trying to separate the primitive collections code - rename SequencedSet to OrderedSet - reviewing the bugzilla entries Other tasks: - write OrderedMap decorator (Hen) - review Bag interface where it deviates from Collection - see if MultiMap code on bugzilla can be integrated Henri has volunteered to do the actual final builds and release to Minatour/Mirrors, but (unless someone objects) I will manage the release. Stephen - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23232] New: - [collections][PATCH] TestBlockingBuffer extensions and BlockingBuffer fix
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23232. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23232 [collections][PATCH] TestBlockingBuffer extensions and BlockingBuffer fix Summary: [collections][PATCH] TestBlockingBuffer extensions and BlockingBuffer fix Product: Commons Version: Nightly Builds Platform: Other OS/Version: Other Status: NEW Severity: Normal Priority: Other Component: Collections AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] The attached patch adds some tests to assert the behaviour of BlockingBuffer.get()/remove()/add()/addAll in various combinations. The discussion that led to this patch can be found at bug 23159. Also attached is a patch to change notify() to notifyAll() in BlockingBuffer which allows the tests in TestBlockingBuffer to pass. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/params DefaultHttpParams.java HttpParamsFactory.java DefaultHttpParamsFactory.java
mbecke 2003/09/17 16:29:05 Modified:httpclient/src/java/org/apache/commons/httpclient/util DateParser.java httpclient/src/java/org/apache/commons/httpclient HttpClient.java httpclient/src/java/org/apache/commons/httpclient/params DefaultHttpParams.java HttpParamsFactory.java DefaultHttpParamsFactory.java Log: Adds Javadocs and moves DateParser formats to configuration system. PR: 15435 Submitted by: Michael Becke Reviewed by: Oleg Kalnichevski Revision ChangesPath 1.7 +44 -29 jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/util/DateParser.java Index: DateParser.java === RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/util/DateParser.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- DateParser.java 25 Aug 2003 03:09:57 - 1.6 +++ DateParser.java 17 Sep 2003 23:29:05 - 1.7 @@ -65,10 +65,17 @@ import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Collection; import java.util.Date; +import java.util.Iterator; import java.util.Locale; import java.util.TimeZone; +import org.apache.commons.httpclient.params.DefaultHttpParams; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + /** * A utility class for parsing HTTP dates as used in cookies and other headers. * This class handles dates as defined by RFC 2616 section 3.3.1 as well as @@ -79,6 +86,17 @@ */ public class DateParser { +/** Log object for this class. */ +private static final Log LOG = LogFactory.getLog(DateParser.class); + +/** + * The key used to look up the date patterns used for parsing. The String patterns are stored + * in a [EMAIL PROTECTED] Collection} and must be compatible with [EMAIL PROTECTED] SimpleDateFormat}. + * + * @see org.apache.commons.httpclient.params.DefaultHttpParams + */ +public static final String KEY_DATE_PATTERNS = http.dateParser.patterns; + /** * Date format pattern used to parse HTTP date headers in RFC 1123 format. */ @@ -95,26 +113,9 @@ */ public static final String PATTERN_ASCTIME = EEE MMM d HH:mm:ss ; -/** The patterns used for parsing dates */ -private static final String[] DATE_PATTERNS = { -PATTERN_RFC1123, -PATTERN_RFC1036, -PATTERN_ASCTIME, -EEE, dd-MMM- HH:mm:ss z, -EEE, dd-MMM- HH-mm-ss z, -EEE, dd MMM yy HH:mm:ss z, -EEE dd-MMM- HH:mm:ss z, -EEE dd MMM HH:mm:ss z, -EEE dd-MMM- HH-mm-ss z, -EEE dd-MMM-yy HH:mm:ss z, -EEE dd MMM yy HH:mm:ss z, -EEE,dd-MMM-yy HH:mm:ss z, -EEE,dd-MMM- HH:mm:ss z, -EEE, dd-MM- HH:mm:ss z, -}; - /** - * Parses a date value. + * Parses a date value. The formats used for parsing the date value are retrieved from + * the default http params. * * @param dateValue the date value to parse * @@ -122,13 +123,25 @@ * * @throws DateParseException if the value could not be parsed using any of the * supported date formats + * + * @see DefaultHttpParams#getDefaultParams() */ public static Date parseDate(String dateValue) throws DateParseException { -return parseDate(dateValue, DATE_PATTERNS); + +Collection patterns = (Collection) DefaultHttpParams.getDefaultParams().getParameter( +KEY_DATE_PATTERNS +); +if (patterns == null) { +LOG.warn(DateParser patterns not included in the default params.); +patterns = Arrays.asList( +new String[] { PATTERN_ASCTIME, PATTERN_RFC1036, PATTERN_RFC1123 } +); +} +return parseDate(dateValue, patterns); } /** - * Parses the date value using the array of date formats. + * Parses the date value using the given date formats. * * @param dateValue the date value to parse * @param dateFormats the date formats to use @@ -139,7 +152,7 @@ */ private static Date parseDate( String dateValue, -String[] dateFormats +Collection dateFormats ) throws DateParseException { if (dateValue == null) { @@ -155,14 +168,16 @@ dateValue = dateValue.substring (1, dateValue.length() - 1); } -SimpleDateFormat dateParser = null; +SimpleDateFormat
DO NOT REPLY [Bug 23232] - [collections][PATCH] TestBlockingBuffer extensions and BlockingBuffer fix
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23232. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23232 [collections][PATCH] TestBlockingBuffer extensions and BlockingBuffer fix --- Additional Comments From [EMAIL PROTECTED] 2003-09-17 23:33 --- Created an attachment (id=8265) patch adding several useful test cases to o.a.c.c.decorators.TestBlockingBuffer - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23232] - [collections][PATCH] TestBlockingBuffer extensions and BlockingBuffer fix
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23232. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23232 [collections][PATCH] TestBlockingBuffer extensions and BlockingBuffer fix --- Additional Comments From [EMAIL PROTECTED] 2003-09-17 23:37 --- Created an attachment (id=8266) patch fixing BlockingBuffer to use notifyAll - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23234] New: - [collections][PATCH] BlockingBuffer JavaDoc improvement
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23234. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23234 [collections][PATCH] BlockingBuffer JavaDoc improvement Summary: [collections][PATCH] BlockingBuffer JavaDoc improvement Product: Commons Version: Nightly Builds Platform: Other OS/Version: Other Status: NEW Severity: Normal Priority: Other Component: Collections AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] The attached patch improvements the JavaDoc for o.a.c.c.decorators.BlockingBuffer by describing the behaviour of get() and remove() in a multithreaded environment. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23234] - [collections][PATCH] BlockingBuffer JavaDoc improvement
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23234. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23234 [collections][PATCH] BlockingBuffer JavaDoc improvement --- Additional Comments From [EMAIL PROTECTED] 2003-09-18 00:14 --- Created an attachment (id=8267) patch to improve JavaDoc for o.a.c.c.decorators.BlockingBuffer - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23159] - [collections][PATCH] makes code easier to understand
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23159. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23159 [collections][PATCH] makes code easier to understand [EMAIL PROTECTED] changed: What|Removed |Added Status|NEW |RESOLVED Resolution||FIXED --- Additional Comments From [EMAIL PROTECTED] 2003-09-18 00:23 --- The patch at bug 23234 attempts to be clear about the method behaviours while the patches at bug 23232 address the threading issue. lock!=this (or not) is not addressed by any of these patches. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [graph] is the projec alive?
I hardly remember where Maven uses it to be honest. -- dIon Gillard, Multitask Consulting Blog: http://blogs.codehaus.org/people/dion/ Henri Yandell [EMAIL PROTECTED] wrote on 17/09/2003 11:10:06 PM: People to talk to look like jvanzyl, dion and mvdb. I think they all listen here, but the Maven list might be better monitored. There's no PROPOSAL.html or STATUS.html in there, so it's not got the necessary requirements for a promotion to Commons proper to be considered. Hen On Wed, 17 Sep 2003, Tomasz Pik wrote: Commons developers, There's a 'graph2' module in sandbox CVS containing implementation of 'graph' structure. I'd like to ask about status of this project. CVS looks like untouched for about a year. This package is not released (because it's in sandbox). On the other side Maven depends on this. So - are there any plans for promoting this to 'commons' and release? Thanks Tomek - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: Re: [Fwd: Re: [HIVEMIND] Examples Please?]]
Bill Lear [EMAIL PROTECTED] wrote on 18/09/2003 12:20:24 AM: On Wednesday, September 17, 2003 at 10:09:57 (-0400) Howard M. Lewis Ship writes: Looks like you don't have the javassist-2.6.jar on the classpath. This is why Maven is cool ... it will download the jar for you; you can see then when you get the HiveMInd source, which is built using Maven. http://maven.apache.org If Maven holds up to its promise, I think it and HiveMind would work together very nicely. Which promise is that? -- dIon Gillard, Multitask Consulting Blog: http://blogs.codehaus.org/people/dion/ - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons/collections/src/test/org/apache/commons/collections/decorators TestBlockingBuffer.java
psteitz 2003/09/17 20:28:28 Modified:collections/src/java/org/apache/commons/collections/decorators BlockingBuffer.java collections/src/test/org/apache/commons/collections/decorators TestBlockingBuffer.java Log: Modified BlockingBuffer add method to notifyAll instead of notify. Added tests to verify blocking behavior. Patch submitted by: Janek Bogucki Reviewed by: Phil Steitz Pr #23232, 23159 Revision ChangesPath 1.3 +5 -4 jakarta-commons/collections/src/java/org/apache/commons/collections/decorators/BlockingBuffer.java Index: BlockingBuffer.java === RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/decorators/BlockingBuffer.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- BlockingBuffer.java 31 Aug 2003 17:24:46 - 1.2 +++ BlockingBuffer.java 18 Sep 2003 03:28:28 - 1.3 @@ -64,13 +64,14 @@ /** * codeBlockingBuffer/code decorates another codeBuffer/code - * to block on calls to the get method to wait until entries are + * to block on calls to the get and remove methods to wait until entries are * added to the buffer. * * @since Commons Collections 3.0 * @version $Revision$ $Date$ * * @author Stephen Colebourne + * @author Janek Bogucki */ public class BlockingBuffer extends SynchronizedBuffer { @@ -98,7 +99,7 @@ public boolean add(Object o) { synchronized (lock) { boolean result = collection.add(o); -notify(); +notifyAll(); return result; } } 1.2 +181 -77 jakarta-commons/collections/src/test/org/apache/commons/collections/decorators/TestBlockingBuffer.java Index: TestBlockingBuffer.java === RCS file: /home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/decorators/TestBlockingBuffer.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- TestBlockingBuffer.java 15 Sep 2003 03:50:41 - 1.1 +++ TestBlockingBuffer.java 18 Sep 2003 03:28:28 - 1.2 @@ -57,15 +57,16 @@ */ package org.apache.commons.collections.decorators; +import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.LinkedList; -import java.util.ArrayList; +import java.util.Set; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.commons.collections.Buffer; -import org.apache.commons.collections.ArrayStack; import org.apache.commons.collections.BufferUnderflowException; import org.apache.commons.collections.decorators.BlockingBuffer; @@ -102,7 +103,7 @@ //--- /** - * Tests [EMAIL PROTECTED] BlockingBuffer#get()}. + * Tests [EMAIL PROTECTED] BlockingBuffer#get()} in combination with [EMAIL PROTECTED] BlockingBuffer#add()}. */ public void testGetWithAdd() { @@ -117,7 +118,7 @@ //--- /** - * Tests [EMAIL PROTECTED] BlockingBuffer#get()}. + * Tests [EMAIL PROTECTED] BlockingBuffer#get()} in combination with [EMAIL PROTECTED] BlockingBuffer#addAll()}. */ public void testGetWithAddAll() { @@ -132,7 +133,7 @@ //--- /** - * Tests [EMAIL PROTECTED] BlockingBuffer#remove()}. + * Tests [EMAIL PROTECTED] BlockingBuffer#remove()} in combination with [EMAIL PROTECTED] BlockingBuffer#add()}. */ public void testRemoveWithAdd() { @@ -147,7 +148,7 @@ //--- /** - * Tests [EMAIL PROTECTED] BlockingBuffer#remove()}. + * Tests [EMAIL PROTECTED] BlockingBuffer#remove()} in combination with [EMAIL PROTECTED] BlockingBuffer#addAll()}. */ public void testRemoveWithAddAll() { @@ -159,107 +160,74 @@ // verify does not throw BufferUnderflowException; should block until other thread has added to the buffer . assertSame(obj, blockingBuffer.remove()); } - + //--- /** - * Tests get using multiple read threads. + * Tests [EMAIL PROTECTED] BlockingBuffer#get()} in combination with [EMAIL PROTECTED] BlockingBuffer#add()} using multiple read threads. * - * Verifies that multiple adds are
Re: [RESULT] Re: [VOTE] New committer - Matthew Hawthorne
On Wed, 17 Sep 2003, Dirk Verbeeck wrote: Matthew, Jim received your CLA (see his mail on commons-dev 10 sept 2003) But nobody notified the infrastructure team to do the actual account creation. (You're still listed as no CLA) Jim, infrastructure guys, can you get the ball rolling again... Somehow I missed seeing this and one other one in jim's commit to foundation/clas.txt about a week ago. (We're still trying to iron out this whole CLA process.) I'll create those two accounts tonight; sorry for the delay. --Cliff - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
cvs commit: jakarta-commons/collections/src/java/org/apache/commons/collections/decorators BlockingBuffer.java
psteitz 2003/09/17 22:09:15 Modified:collections/src/java/org/apache/commons/collections/decorators BlockingBuffer.java Log: Clarified blocking behavior in javadoc. Submitted by: Janek Bogucki Reviewed/Edited by: Phil Steitz Pr #23234 Revision ChangesPath 1.4 +17 -5 jakarta-commons/collections/src/java/org/apache/commons/collections/decorators/BlockingBuffer.java Index: BlockingBuffer.java === RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/decorators/BlockingBuffer.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- BlockingBuffer.java 18 Sep 2003 03:28:28 - 1.3 +++ BlockingBuffer.java 18 Sep 2003 05:09:15 - 1.4 @@ -63,15 +63,27 @@ import org.apache.commons.collections.BufferUnderflowException; /** - * codeBlockingBuffer/code decorates another codeBuffer/code - * to block on calls to the get and remove methods to wait until entries are - * added to the buffer. + * codeBlockingBuffer/code decorates a codeBuffer/code to make + * [EMAIL PROTECTED] #get()} and [EMAIL PROTECTED] #remove()} block when the codeBuffer/code + * is empty. + * p + * If either codeget/code or coderemove/code is called on an empty + * codeBuffer/code, the calling thread waits for notification that + * an [EMAIL PROTECTED] #add} or [EMAIL PROTECTED] #addAll} operation has completed. + * p + * When one or more entries are added to an empty codeBuffer/code, + * all threads blocked in codeget/code or coderemove/code are notified. + * There is no guarantee that concurrent blocked codeget/code or + * coderemove/code requests will be unblocked and receive data in the + * order that they arrive. + * * * @since Commons Collections 3.0 * @version $Revision$ $Date$ * * @author Stephen Colebourne * @author Janek Bogucki + * @author Phil Steitz */ public class BlockingBuffer extends SynchronizedBuffer { - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23234] - [collections][PATCH] BlockingBuffer JavaDoc improvement
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23234. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23234 [collections][PATCH] BlockingBuffer JavaDoc improvement [EMAIL PROTECTED] changed: What|Removed |Added Status|NEW |RESOLVED Resolution||FIXED --- Additional Comments From [EMAIL PROTECTED] 2003-09-18 05:12 --- Slightly edited patch applied. Thanks. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 23232] - [collections][PATCH] TestBlockingBuffer extensions and BlockingBuffer fix
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23232. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23232 [collections][PATCH] TestBlockingBuffer extensions and BlockingBuffer fix [EMAIL PROTECTED] changed: What|Removed |Added Status|NEW |RESOLVED Resolution||FIXED --- Additional Comments From [EMAIL PROTECTED] 2003-09-18 05:14 --- Patches applied. Thanks. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [RESULT] Re: [VOTE] New committer - Matthew Hawthorne
Thanks! Cliff Woolley wrote: On Wed, 17 Sep 2003, Dirk Verbeeck wrote: Matthew, Jim received your CLA (see his mail on commons-dev 10 sept 2003) But nobody notified the infrastructure team to do the actual account creation. (You're still listed as no CLA) Jim, infrastructure guys, can you get the ball rolling again... Somehow I missed seeing this and one other one in jim's commit to foundation/clas.txt about a week ago. (We're still trying to iron out this whole CLA process.) I'll create those two accounts tonight; sorry for the delay. --Cliff - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
[jelly] Re: XML tag library
This appears to be a Jelly problem. -- dIon Gillard, Multitask Consulting Blog: http://blogs.codehaus.org/people/dion/ Pavel Sher [EMAIL PROTECTED] wrote on 17/09/2003 10:32:22 PM: Hello, When I am trying to process the following Jelly script I've got the error: [java] org.apache.commons.jelly.JellyTagException: file:/C: /Work/SDS/templates/sample1.xhtml:31:105: x:transform The node [EMAIL PROTECTED] [Element: h1 attributes: [] /] could not be added to the branch null because: Cannot add another element to this Document as it already has a root element of: h1 [java] at org.apache.commons.jelly.impl.TagScript. handleException(TagScript.java:683) Script: ?xml version=1.0? j:jelly xmlns=http://my.uri.com; xmlns:j=jelly:core xmlns:x=jelly:xml ${systemScope.setProperty('javax.xml.transform. TransformerFactory','net.sf.saxon.TransformerFactoryImpl')} ${systemScope.setProperty('org.xml.sax.driver','org.apache.xerces. parsers.SAXParser')} html head titleThe first sample/title /head body x:transform xslt=${basedir}/stylesheets/sample1-toc.xsl xml=${basedir}/xml/sample1.xml var=toc/ x:transform xslt=${basedir}/stylesheets/sample1.xsl xml=${basedir}/xml/sample1.xml var=book/ table border=1 cellspacing=0 cellpadding=0 tr tdTable Of Contents/td /tr tr td !-- TOC -- x:copyOf select=$toc/ !-- TOC -- /td /tr /table table border=0 cellspacing=0 cellpadding=0 tr td !-- BODY -- x:copyOf select=$book/ !-- BODY -- /td /tr /table /body /html /j:jelly If I use comment out second x:transform var=book/ and remove second x:copyOf/ then the script works fine. Maybe somebody knows why? -- Best regards Pavel Sher, [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: [PATCH] Reworked digest auth
Take 2: - DigestScheme requires a nonce in every challange now (according to RFC 2617) test cases changed accordingly - included Olegs feedback After reading RFC 2617 I came to the conclusion, that we need to rework out authentication mechanism to support stateful authentication retries. Digest Authentication requires you to keep track of the number of times authentication has been retries (NC) and to calculate some values only on the first time etc. This can be achieved by making the DigestScheme more stateful (a1) and by changing authenticator to keep the DigestScheme instance across retries and pass in the challenge each time. Odi Oleg Kalnichevski wrote: Odi, The patch looks fine to me. There is just a few minor points that I would like to be considered before the patch is committed: - DigestScheme#DigestScheme( String ) constructor should probably log a warning message or even throw an exception if it encounters an unrecognised 'qop' element. Currently they are just silently ignored. - Use StringBuffer to concatenate strings in DigestScheme#createDigest( String, String ). - A test case for unsupported qop in HTTP Digest authentication would be nice. - The patch makes a few public methods private (quite appropriately in my opinion). Nobody is going to miss them, I think, however, the fact of 2.0 API breakage should be reflected in API_CHANGES_2_1.txt Cheers Oleg Index: API_CHANGES_2_1.txt === RCS file: /home/cvspublic/jakarta-commons/httpclient/API_CHANGES_2_1.txt,v retrieving revision 1.2 diff -u -r1.2 API_CHANGES_2_1.txt --- API_CHANGES_2_1.txt 5 Jul 2003 22:59:15 - 1.2 +++ API_CHANGES_2_1.txt 17 Sep 2003 08:07:18 - @@ -22,3 +22,12 @@ * NTLM classes moved to org.apache.commons.httpclient.auth package amd made private +* DigestSheme: +the following public methods were removed, as they were only public for testing +- authenticate(UsernamePasswordCredentials, Map) +- createDigest(String, String, Map) +- createDigestHeader(String, Map, String) +the following public methods were made private, as they now depend on or mutate the +state of DigestScheme: +- createDigest(String, String) +- createDigestHeader(String, String) Index: release_notes.txt === RCS file: /home/cvspublic/jakarta-commons/httpclient/release_notes.txt,v retrieving revision 1.13 diff -u -r1.13 release_notes.txt --- release_notes.txt 1 Aug 2003 23:20:09 - 1.13 +++ release_notes.txt 17 Sep 2003 08:07:18 - @@ -1,5 +1,9 @@ Changes on the CVS trunk: + * added support for MD5-sess Digest authentication scheme + + * improved compliance to RFC 2617 + * 10791 - Improved HTTP Version configuration and tracking. * 21880 - Content-Length Transfer-Encoding request headers formerly set by abstract Index: src/java/org/apache/commons/httpclient/auth/DigestScheme.java === RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/auth/DigestScheme.java,v retrieving revision 1.8 diff -u -r1.8 DigestScheme.java --- src/java/org/apache/commons/httpclient/auth/DigestScheme.java 11 Sep 2003 09:09:42 - 1.8 +++ src/java/org/apache/commons/httpclient/auth/DigestScheme.java 17 Sep 2003 08:07:21 - @@ -1,7 +1,7 @@ /* - * $Header: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/auth/DigestScheme.java,v 1.8 2003/09/11 09:09:42 oglueck Exp $ - * $Revision: 1.8 $ - * $Date: 2003/09/11 09:09:42 $ + * $Header: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/auth/DigestScheme.java,v 1.7 2003/09/08 02:00:03 mbecke Exp $ + * $Revision: 1.7 $ + * $Date: 2003/09/08 02:00:03 $ * * * @@ -63,7 +63,7 @@ package org.apache.commons.httpclient.auth; -import java.util.Map; +import java.util.StringTokenizer; import java.security.MessageDigest; import org.apache.commons.httpclient.HttpConstants; @@ -75,7 +75,12 @@ /** * p * Digest authentication scheme as defined in RFC 2617. + * Both MD5 (default) and MD5-sess are supported. + * Currently only qop=auth or no qop is supported. qop=auth-int + * is unsupported. If auth and auth-int are provided, auth is + * used. * /p + * @TODO: make class more stateful regarding repeated authentication requests * * @author a href=mailto:[EMAIL PROTECTED]Remy Maucherat/a * @author Rodney Waldhoff @@ -102,6 +107,15 @@ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; + +//@TODO: supply a real nonce-count, currently a server will interprete a repeated request as a replay +private static final String NC = 0001; //nonce-count is always 1 +private static final int
Seeking help using Cookie and Session
Hi I am write a small client/server web app to understand more about httpclient/cookie/and httpsession. On the httpclient side, I use a get method to keep calling a servlet on server. clientcode HttpClient client = new HttpClient(); GetMethod method = new GetMethod(url); while ( !done ) { client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { method.getResponseBody(); method.releaseConnection(); } else { System.out.println(Unexpected failure: + method.getStatusLine().toString()); done = true; } method.recycle(); method.setPath(url); sleep(sometime) } /clientcode on the server side, the doGet() method use this servercode public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getSession(); } /servercode The first loop, the client is happy. I found a cookie in the response. After that it throws the following warning message in my lo4j warning-snippet 06:22:37,843 - WARN org.apache.commons.httpclient.HttpMethodBase - Cookie reject ed: $Version=0; JSESSIONID=6D150D24B3D022F9AB835EF4E0AFEC5E; $Path=/webtest. I llegal path attribute /webtest. Path of origin: http://localhost:8080/webtest /webgenservlet /waring-snippet On server side, new session is created for each request Questions are: Why server keeps creating new session instead of reuse the old one? What does it mean regarding the Warning. Advices are greately appreciated. Happy Coding -Dan
RE: Seeking help using Cookie and Session
Dan, Before I could give you a more precise answer, I would need some additional input from you. - What kind of cookie policy have you been using? Have you tried using browser compatibility policy? If unsure, you may want to consult our cookie guide: http://jakarta.apache.org/commons/httpclient/cookies.html - What kind of servlet engine are you running on the server? - Could you produce the wire log of the session in question. Take a look at the logging guide for the instructions on how to activate wire logging: http://jakarta.apache.org/commons/httpclient/logging.html Cheers Oleg -Original Message- From: Dan Tran [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 4:44 PM To: Commons HttpClient Project Subject: Seeking help using Cookie and Session Hi I am write a small client/server web app to understand more about httpclient/cookie/and httpsession. On the httpclient side, I use a get method to keep calling a servlet on server. clientcode HttpClient client = new HttpClient(); GetMethod method = new GetMethod(url); while ( !done ) { client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { method.getResponseBody(); method.releaseConnection(); } else { System.out.println(Unexpected failure: + method.getStatusLine().toString()); done = true; } method.recycle(); method.setPath(url); sleep(sometime) } /clientcode on the server side, the doGet() method use this servercode public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getSession(); } /servercode The first loop, the client is happy. I found a cookie in the response. After that it throws the following warning message in my lo4j warning-snippet 06:22:37,843 - WARN org.apache.commons.httpclient.HttpMethodBase - Cookie reject ed: $Version=0; JSESSIONID=6D150D24B3D022F9AB835EF4E0AFEC5E; $Path=/webtest. I llegal path attribute /webtest. Path of origin: http://localhost:8080/webtest /webgenservlet /waring-snippet On server side, new session is created for each request Questions are: Why server keeps creating new session instead of reuse the old one? What does it mean regarding the Warning. Advices are greately appreciated. Happy Coding -Dan - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Seeking help using Cookie and Session
Dear Eric and Oleg, I put in the code to handle brower compatibility cookie. Now it works. Thank you Thank you. Eric, thanks for the advice. I took out recycle call and handle releaseConnection correctly. Thanks for every thing -Dan - Original Message - From: Eric Johnson [EMAIL PROTECTED] To: Commons HttpClient Project [EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 8:09 AM Subject: Re: Seeking help using Cookie and Session A follow-up question, directed towards the rest of the group Shouldn't recycle be deprecated for the 2.1 release? Seems like we've discussed it before, and all it gives us is a chance for uses like the following, where my first reaction was that maybe the recycle call didn't work properly. I don't think it adds much for performance, and it makes the API more confusing, I think. To Dan, You might want to structure your call slightly differently, as well: try { client.executeMethod(method); // do what you want here... } finally { // guarantee that you always release the connection - critical if you switch // to MultiThreadedHttpConnectionManager(). method.releaseConnection(); } -Eric. Dan Tran wrote: Hi I am write a small client/server web app to understand more about httpclient/cookie/and httpsession. On the httpclient side, I use a get method to keep calling a servlet on server. clientcode HttpClient client = new HttpClient(); GetMethod method = new GetMethod(url); while ( !done ) { client.executeMethod(method); if (method.getStatusCode() == HttpStatus.SC_OK) { method.getResponseBody(); method.releaseConnection(); } else { System.out.println(Unexpected failure: + method.getStatusLine().toString()); done = true; } method.recycle(); method.setPath(url); sleep(sometime) } /clientcode on the server side, the doGet() method use this servercode public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getSession(); } /servercode The first loop, the client is happy. I found a cookie in the response. After that it throws the following warning message in my lo4j warning-snippet 06:22:37,843 - WARN org.apache.commons.httpclient.HttpMethodBase - Cookie reject ed: $Version=0; JSESSIONID=6D150D24B3D022F9AB835EF4E0AFEC5E; $Path=/webtest. I llegal path attribute /webtest. Path of origin: http://localhost:8080/webtest /webgenservlet /waring-snippet On server side, new session is created for each request Questions are: Why server keeps creating new session instead of reuse the old one? What does it mean regarding the Warning. Advices are greately appreciated. Happy Coding -Dan - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
HTTP/1.1 status 100 help needed
Hello, I have the following code snippet that seems to never return from httpClient.executeMethod(). [actually another post has happened that issued a cookie that the code below is trying to use] I have also attached a modified/truncated output of the logs that are are being produced. Can someone provide some insight ? I don't know what to do. I am using 2.0-rc1 build available from http://jakarta.apache.org/site/binindex.cgi Sincerely, -Mohsin Code :- // the http client has been set like this // somewhere else in the code //httpClient = new HttpClient(); //httpClient.getHostConfiguration().setHost( LOGON_SITE, LOGON_PORT, http ); //httpClient.getState().setCookiePolicy( CookiePolicy.RFC2109 ); //httpClient.setConnectionTimeout( 1 ); // Log messages at end of this email // are shown from this point onwards postMethod = new PostMethod( url ); postMethod.setRequestHeader( Content-type, PostMethod.FORM_URL_ENCODED_CONTENT_TYPE ); NameValuePair msgTransaction = new NameValuePair( XML, request ); postMethod.addParameter( msgTransaction ); int statusCode = httpClient.executeMethod( postMethod ); Log output :- 2003/09/17 10:21:46:638 PDT [DEBUG] HttpClient - -Java version: 1.4.1_02 2003/09/17 10:21:46:648 PDT [DEBUG] HttpClient - -Java vendor: Sun Microsystems Inc. 2003/09/17 10:21:46:660 PDT [DEBUG] HttpClient - -Operating system name: Linux 2003/09/17 10:21:46:665 PDT [DEBUG] HttpClient - -Operating system architecture: i386 2003/09/17 10:21:46:666 PDT [DEBUG] HttpClient - -Operating system version: 2.4.18-10smp 2003/09/17 10:22:07:142 PDT [TRACE] GetMethod - -enter GetMethod(String) 2003/09/17 10:22:07:142 PDT [TRACE] PostMethod - -enter PostMethod.addParameter(NameValuePair) 2003/09/17 10:22:07:143 PDT [TRACE] PostMethod - -enter PostMethod.addParameter(String, String) 2003/09/17 10:22:07:143 PDT [TRACE] EntityEnclosingMethod - -enter EntityEnclosingMethod.clearRequestBody() 2003/09/17 10:22:07:144 PDT [TRACE] HttpClient - -enter HttpClient.executeMethod(HttpMethod) 2003/09/17 10:22:07:144 PDT [TRACE] HttpClient - -enter HttpClient.executeMethod(HostConfiguration,HttpMethod,HttpState) 2003/09/17 10:22:07:158 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.execute(HttpState, HttpConnection) 2003/09/17 10:22:07:158 PDT [DEBUG] HttpMethodBase - -Execute loop try 1 2003/09/17 10:22:07:159 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.processRequest(HttpState, HttpConnection) 2003/09/17 10:22:07:159 PDT [TRACE] HttpMethodBase - -Attempt number 1 to process request 2003/09/17 10:22:07:178 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.writeRequest(HttpState, HttpConnection) 2003/09/17 10:22:07:178 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.writeRequestLine(HttpState, HttpConnection) 2003/09/17 10:22:07:179 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.generateRequestLine(HttpConnection, String, String, String, String) 2003/09/17 10:22:07:180 PDT [DEBUG] wire - - POST /NodeWarrior/xml/ HTTP/1.1[\r][\n] 2003/09/17 10:22:07:180 PDT [TRACE] HttpConnection - -enter HttpConnection.print(String) 2003/09/17 10:22:07:181 PDT [TRACE] HttpConnection - -enter HttpConnection.write(byte[]) 2003/09/17 10:22:07:181 PDT [TRACE] HttpConnection - -enter HttpConnection.write(byte[], int, int) 2003/09/17 10:22:07:182 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.writeRequestHeaders(HttpState,HttpConnection) 2003/09/17 10:22:07:182 PDT [TRACE] ExpectContinueMethod - -enter ExpectContinueMethod.addRequestHeaders(HttpState, HttpConnection) 2003/09/17 10:22:07:182 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.addRequestHeaders(HttpState, HttpConnection) 2003/09/17 10:22:07:183 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.addUserAgentRequestHeaders(HttpState, HttpConnection) 2003/09/17 10:22:07:183 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.addHostRequestHeader(HttpState, HttpConnection) 2003/09/17 10:22:07:184 PDT [DEBUG] HttpMethodBase - -Adding Host request header 2003/09/17 10:22:07:184 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.addCookieRequestHeader(HttpState, HttpConnection) 2003/09/17 10:22:07:185 PDT [TRACE] HttpState - -enter HttpState.getCookies() 2003/09/17 10:22:07:185 PDT [TRACE] CookieSpec - -enter CookieSpecBase.match(String, int, String, boolean, Cookie[]) 2003/09/17 10:22:07:186 PDT [TRACE] CookieSpec - -enter CookieSpecBase.match(String, int, String, boolean, Cookie 2003/09/17 10:22:07:187 PDT [TRACE] CookieSpec - -enter CookieSpecBase.formatCookieHeader(Cookie) 2003/09/17 10:22:07:187 PDT [TRACE] CookieSpec - -enter RFC2109Spec.formatCookie(Cookie) 2003/09/17 10:22:07:188 PDT [TRACE] CookieSpec - -enter RFC2109Spec.formatCookieAsVer(Cookie) 2003/09/17 10:22:07:188 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.addAuthorizationRequestHeader(HttpState, HttpConnection) 2003/09/17 10:22:07:189 PDT [TRACE] HttpMethodBase - -enter
Re: HTTP/1.1 status 100 help needed
Mohsin, Do you know what kind of HTTP server runs on the server side? The HTTP server appears to be using the 'expect: 100-continue' handshake even though the client did not request it. You may what to try the following measures: - activating 'expect: 100-continue' on the client side - using HTTP/1.0 Oleg On Wed, 2003-09-17 at 19:40, Beg, Mohsin wrote: Hello, I have the following code snippet that seems to never return from httpClient.executeMethod(). [actually another post has happened that issued a cookie that the code below is trying to use] I have also attached a modified/truncated output of the logs that are are being produced. Can someone provide some insight ? I don't know what to do. I am using 2.0-rc1 build available from http://jakarta.apache.org/site/binindex.cgi Sincerely, -Mohsin Code :- // the http client has been set like this // somewhere else in the code //httpClient = new HttpClient(); //httpClient.getHostConfiguration().setHost( LOGON_SITE, LOGON_PORT, http ); //httpClient.getState().setCookiePolicy( CookiePolicy.RFC2109 ); //httpClient.setConnectionTimeout( 1 ); // Log messages at end of this email // are shown from this point onwards postMethod = new PostMethod( url ); postMethod.setRequestHeader( Content-type, PostMethod.FORM_URL_ENCODED_CONTENT_TYPE ); NameValuePair msgTransaction = new NameValuePair( XML, request ); postMethod.addParameter( msgTransaction ); int statusCode = httpClient.executeMethod( postMethod ); Log output :- 2003/09/17 10:21:46:638 PDT [DEBUG] HttpClient - -Java version: 1.4.1_02 2003/09/17 10:21:46:648 PDT [DEBUG] HttpClient - -Java vendor: Sun Microsystems Inc. 2003/09/17 10:21:46:660 PDT [DEBUG] HttpClient - -Operating system name: Linux 2003/09/17 10:21:46:665 PDT [DEBUG] HttpClient - -Operating system architecture: i386 2003/09/17 10:21:46:666 PDT [DEBUG] HttpClient - -Operating system version: 2.4.18-10smp 2003/09/17 10:22:07:142 PDT [TRACE] GetMethod - -enter GetMethod(String) 2003/09/17 10:22:07:142 PDT [TRACE] PostMethod - -enter PostMethod.addParameter(NameValuePair) 2003/09/17 10:22:07:143 PDT [TRACE] PostMethod - -enter PostMethod.addParameter(String, String) 2003/09/17 10:22:07:143 PDT [TRACE] EntityEnclosingMethod - -enter EntityEnclosingMethod.clearRequestBody() 2003/09/17 10:22:07:144 PDT [TRACE] HttpClient - -enter HttpClient.executeMethod(HttpMethod) 2003/09/17 10:22:07:144 PDT [TRACE] HttpClient - -enter HttpClient.executeMethod(HostConfiguration,HttpMethod,HttpState) 2003/09/17 10:22:07:158 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.execute(HttpState, HttpConnection) 2003/09/17 10:22:07:158 PDT [DEBUG] HttpMethodBase - -Execute loop try 1 2003/09/17 10:22:07:159 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.processRequest(HttpState, HttpConnection) 2003/09/17 10:22:07:159 PDT [TRACE] HttpMethodBase - -Attempt number 1 to process request 2003/09/17 10:22:07:178 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.writeRequest(HttpState, HttpConnection) 2003/09/17 10:22:07:178 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.writeRequestLine(HttpState, HttpConnection) 2003/09/17 10:22:07:179 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.generateRequestLine(HttpConnection, String, String, String, String) 2003/09/17 10:22:07:180 PDT [DEBUG] wire - - POST /NodeWarrior/xml/ HTTP/1.1[\r][\n] 2003/09/17 10:22:07:180 PDT [TRACE] HttpConnection - -enter HttpConnection.print(String) 2003/09/17 10:22:07:181 PDT [TRACE] HttpConnection - -enter HttpConnection.write(byte[]) 2003/09/17 10:22:07:181 PDT [TRACE] HttpConnection - -enter HttpConnection.write(byte[], int, int) 2003/09/17 10:22:07:182 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.writeRequestHeaders(HttpState,HttpConnection) 2003/09/17 10:22:07:182 PDT [TRACE] ExpectContinueMethod - -enter ExpectContinueMethod.addRequestHeaders(HttpState, HttpConnection) 2003/09/17 10:22:07:182 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.addRequestHeaders(HttpState, HttpConnection) 2003/09/17 10:22:07:183 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.addUserAgentRequestHeaders(HttpState, HttpConnection) 2003/09/17 10:22:07:183 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.addHostRequestHeader(HttpState, HttpConnection) 2003/09/17 10:22:07:184 PDT [DEBUG] HttpMethodBase - -Adding Host request header 2003/09/17 10:22:07:184 PDT [TRACE] HttpMethodBase - -enter HttpMethodBase.addCookieRequestHeader(HttpState, HttpConnection) 2003/09/17 10:22:07:185 PDT [TRACE] HttpState - -enter HttpState.getCookies() 2003/09/17 10:22:07:185 PDT [TRACE] CookieSpec - -enter CookieSpecBase.match(String, int, String, boolean, Cookie[]) 2003/09/17 10:22:07:186 PDT [TRACE] CookieSpec - -enter CookieSpecBase.match(String, int, String, boolean, Cookie 2003/09/17 10:22:07:187 PDT [TRACE] CookieSpec -
RE: HTTP/1.1 status 100 help needed
Hi Oleg, Below is my server info. Also can you point me to some code examples as how I may be able to do what you suggested ? Sincerely, -Mohsin 2003/09/17 13:54:59:809 PDT [DEBUG] wire - - Date: Wed, 17 Sep 2003 20:54:59 GMT[\r][\n] 2003/09/17 13:54:59:813 PDT [DEBUG] wire - - Server: Jetty/3.1.5 (Linux 2.4.18-10smp i386)[\r][\n] 2003/09/17 13:54:59:814 PDT [DEBUG] wire - - Servlet-Engine: Jetty/3.1 (JSP 1.1; Servlet 2.2; java 1.4.2_01)[\r][\n] 2003/09/17 13:54:59:815 PDT [DEBUG] wire - - Content-Type: text/html;charset=UTF-8[\r][\n] 2003/09/17 13:54:59:816 PDT [DEBUG] wire - - Transfer-Encoding: chunked[\r][\n] -Original Message- From: Oleg Kalnichevski [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 11:52 AM To: Commons HttpClient Project Subject: Re: HTTP/1.1 status 100 help needed Mohsin, Do you know what kind of HTTP server runs on the server side? The HTTP server appears to be using the 'expect: 100-continue' handshake even though the client did not request it. You may what to try the following measures: - activating 'expect: 100-continue' on the client side - using HTTP/1.0 Oleg - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: HTTP/1.1 status 100 help needed
Oh. well, I knew it. This is a very strange quirk on the part of Jetty, which once was reported as a bug, but Jetty folks were not too enthusiastic to fix. Anyways, try this: PostMethod#setUseExpectHeader(true) and see if that makes any difference. If not, try disabling HTTP/1.1 support altogether: PostMethod#setHttp11(false) If nothing helps, you may have to consider upgrading Jetty to its latest stable version (4.2.12 as of writing). Cheers Oleg On Wed, 2003-09-17 at 23:04, Beg, Mohsin wrote: Hi Oleg, Below is my server info. Also can you point me to some code examples as how I may be able to do what you suggested ? Sincerely, -Mohsin 2003/09/17 13:54:59:809 PDT [DEBUG] wire - - Date: Wed, 17 Sep 2003 20:54:59 GMT[\r][\n] 2003/09/17 13:54:59:813 PDT [DEBUG] wire - - Server: Jetty/3.1.5 (Linux 2.4.18-10smp i386)[\r][\n] 2003/09/17 13:54:59:814 PDT [DEBUG] wire - - Servlet-Engine: Jetty/3.1 (JSP 1.1; Servlet 2.2; java 1.4.2_01)[\r][\n] 2003/09/17 13:54:59:815 PDT [DEBUG] wire - - Content-Type: text/html;charset=UTF-8[\r][\n] 2003/09/17 13:54:59:816 PDT [DEBUG] wire - - Transfer-Encoding: chunked[\r][\n] -Original Message- From: Oleg Kalnichevski [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 17, 2003 11:52 AM To: Commons HttpClient Project Subject: Re: HTTP/1.1 status 100 help needed Mohsin, Do you know what kind of HTTP server runs on the server side? The HTTP server appears to be using the 'expect: 100-continue' handshake even though the client did not request it. You may what to try the following measures: - activating 'expect: 100-continue' on the client side - using HTTP/1.0 Oleg - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
DO NOT REPLY [Bug 15435] - New Preferences Architecture
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15435. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE. http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15435 New Preferences Architecture --- Additional Comments From [EMAIL PROTECTED] 2003-09-17 23:04 --- Oleg, I heartily agree. A collection makes much more sense than an array. I will make this change and apply the patch. Mike - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]