On Fri, 2010-01-29 at 14:58 +0000, Pid wrote: > On 29/01/2010 11:33, Martin Grotzke wrote: > > Hi Pid, > > > > what you describe is correct and works, I've implemented a Manager > > implementation that uses simple attributes until now (for memcached > > based session failover, memcached-session-manager: > > http://code.google.com/p/memcached-session-manager/ ). > > > > However, now I want to support a complex, nested child element for a > > TranscoderStrategy in my case (somehow comparable to the Store element > > that is allowed as child element for the PersistentManager), that > > supports different attributes depending on the TranscoderStrategy > > implementation. It's possible to put all attributes into the Manager > > element, but this is not what one would want to do - the related > > attributes are spread between the Manager related attributes. > > I'm not sure I understand. > Is the requirement an aesthetic thing or does the existing method not > actually work for your use case? Well, you might call it aesthetic. But you might also call it a better design, as closely related attributes are encapsulated by a dedicated element (high-cohesion).
To make it more concrete, instead of <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:localhost:11211 n2:localhost:11212" failoverNodes="n2" requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" copyCollectionsForSerialization="true" customXmlFormat="org.example.SomeXmlFormat,org.example.AnotherXmlFormat" /> I want <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:localhost:11211 n2:localhost:11212" failoverNodes="n2" requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$" > <TranscoderFactory className="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" copyCollectionsForSerialization="true" customXmlFormat="org.example.SomeXmlFormat,org.example.AnotherXmlFormat" /> </Manager> where the allowed attributes of the TranscoderFactory element depend on the actual TranscoderFactory class (specified with className). Unfortunately, this is not possible in the current version of tomcat (don't know if there are any plans to change this). > > In recent versions of Tomcat the Digester complains if it finds > unexpected elements during startup. Do you get any error messages in > the catalina.out log or on the console, when you implement your > preferred structure? No, I got no errors, the element was just ignored. > > http://tomcat.apache.org/tomcat-6.0-doc/config/manager.html > > If you've extended PersistentManagerBase then you must supply a Store > element, maybe your configuration options can be set as attributes on > that element. I don't want to use the Store element... > > If you've extended ManagerBase then maybe you can add an object FooBar > (with getter & setter) and attributes as needed. > > Or have you tried this already? Yes, I had already tried this without success. What's evaluated for the Manager element is defined in the org.apache.catalina.startup.ContextRuleSet.java, e.g. this are the relevant lines for the Store: digester.addObjectCreate(prefix + "Context/Manager/Store", null, // MUST be specified in the element "className"); digester.addSetProperties(prefix + "Context/Manager/Store"); digester.addSetNext(prefix + "Context/Manager/Store", "setStore", "org.apache.catalina.Store"); Cheers, Martin > > > p > > > > Cheers, > > Martin > > > > > > On Fri, 2010-01-29 at 10:10 +0000, Pid wrote: > >> On 29/01/2010 00:31, Martin Grotzke wrote: > >>> Hi, > >>> > >>> is it somehow possible to have a custom nested element below the Manager > >>> element in server.xml/context.xml? E.g. > >>> > >>> <Manager className="org.app.MyManager"> > >>> <FooBar foo="bar"/> > >>> </Manager> > >>> > >>> where the MyManager class has a property fooBar? > >> > >> If the MyManager class has a field called fooBar, with matching getter > >> and setter, then (my guess, based on how Valves work, is that) you can > >> probably set it by doing this: > >> > >> <Manager className="org.app.MyManager" fooBar="somevalue"> > >> > >> </Manager> > >> > >> > >> p > >> > >>> AFAICS the ContextRuleSet defines what's possible in the Context element > >>> without any hook - so it seems that there's no possibility to achieve > >>> this. > >>> > >>> If someone could tell me that I'm wrong with this asumption I would be > >>> happy! :-) > >>> > >>> Thanx&& cheers, > >>> Martin > >>> > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > >> For additional commands, e-mail: users-h...@tomcat.apache.org > >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > -- Martin Grotzke http://www.javakaffee.de/blog/
signature.asc
Description: This is a digitally signed message part