+1. I can envision successfully providing technical support for this, successfully explaining how this works to an implementer.
On Jan 11, 2012, at 3:35 PM, William G. Thompson, Jr. wrote: > I'd like to move forward on this for 3.5 and it seems like we might > have come to some consensus. I've restated the proposal below with > the addition of robust sample config in cas.properties. Could I get a > straw vote (including non-committers) on the following: > > CAS Configuration Principles > * Simple should be easy, complex should be possible > * Key config should be easily externalized so that a single war file > can easily be deployed to multiple tiers or nodes > * Consistent approach > * Generally seek to limit the number of files that need to be managed > in the overlay to make upgrading easier. > > Approach > * Push all defaults to the bean files where they are defined inline > using the Spring 3.x approach and continue to use cas.properties as > the deployment override file for simple parameter configuration. > (simple should be easy) > > * Continue to use deployerConfigContext for the rest of a typical > deployer config (simple should be easy) > > * Continue the use of bean xml file override for more complex behavior > configuration (complex is possible) > > * Create new property placeholders and defaults for bean properties > that could benefit from the new approach (e.g. SSO Session timeouts, > SLO on/off). (minimize the number of files that need to be managed in > the overlay) > > * Move the propertyFileConfigurer configuration block into > deployConfigContext.xml (minimize config files) > > * Provide robust sample config in cas.properties for all of the > properties that a deployment might want to override in the simple > case. (consistent approach) > > Bill > > > On Tue, Jan 3, 2012 at 5:49 PM, William G. Thompson, Jr. > <wgt...@gmail.com> wrote: >> On Tue, Jan 3, 2012 at 4:53 PM, Scott Battaglia >> <scott.battag...@gmail.com> wrote: >>>> Spring 3.x approach: >>> Q: "Hey, there's this placeholder ${ssoSession.maxTimeToLive:3600} in >>> ticketExpirationPolicies.xml, where's the value for that set?" >>> A: "Oh look, the default is right there in-line, bet I could override >>> that in cas.properties!" >>> >>> Your Q/A thing highlighted two things for me: >>> 1. We need better standards for property naming if we really name things >>> without the units (i.e. maxTimeToLiveInSeconds) :-) >> >> +1 for well named properties. >> >> >>> 2. Having people read through all the Spring XML files rather than >>> default.properties to locate the values that can be changed/paramaterized >>> seems like more work for the deployer. I would think properly named >>> placeholder names all located in one file would provide enough context as >>> well as give us a single point of reference when questions come up. Do we >>> want people to care which XML file the properties are in if they don't plan >>> on overlaying those files? >> >> I think the reference issue can be addressed by having robust sample >> config and explanation right there in cas.properties for all the >> properties one might want to override (self documenting in a way). As >> a developer/deployer I'm attracted to the default values set right >> there in context. >> >> On balance both approaches seem to achieve the same results albeit >> with slightly different qualities. The Spring 3.x approach does it >> with one less file. Simpler == better? >> >> Either way, I think this is an important (thought minor) improvement, >> and I'm willing to take on this work for 3.5 regardless of which way >> consensus takes us. >> >>> >>> I think you and I are in agreement though that its time to get it right >>> (even if we don't completely agree on what "right" is ;-)) >> >> Indeed. >> >> Bill >> >> >>> >>> Cheers, >>> Scott >>> >>> >>> On Tue, Jan 3, 2012 at 4:44 PM, William G. Thompson, Jr. <wgt...@gmail.com> >>> wrote: >>>> >>>> What started this discussion was a desired to improve maven overlay >>>> based CAS deployments for the 3.5 release. The release strategy >>>> states that in a minor release (i.e. 3.4.x -> CAS 3.5) "CAS maven >>>> overlays may require minor to moderate changes". So, I tend to want >>>> to get this right for 3.5 even if it requires some minor to moderate >>>> changes to existing deployments. >>>> >>>> Generally, the first thing I do is externalize cas.properties with the >>>> goal of having a single war file that can be deployed to multiple >>>> tiers/nodes without further configuration (i.e. deploy/unpack the war, >>>> find the right config files, edit/copy the old ones, etc). Having >>>> some configuration parameters in cas.properties file is great, having >>>> it in embedded in the war file makes it less convenient for >>>> single-war-multiple-deployments. >>>> >>>> Overtime and many enterprise CAS deployments, I've also noticed that >>>> logging configuration could also benefit from externalization, which >>>> gave rise to CAS-1082, subsequent discussions including this one, and >>>> the discovery that default values for bean configuration could be >>>> in-lined like so: >>>> >>>> <property name="arguments"> >>>> <list> >>>> <value>${log4j.config.location:classpath:log4j.xml}</value> >>>> <value>${log4j.refresh.interval:60000}</value> >>>> </list> >>>> </property> >>>> >>>> We also have the suggestion by Daniel Frett that a default.properties >>>> be added and loaded before cas.properties to allow default settings to >>>> be set for stock CAS and not cause issues for deployers when they >>>> override cas.properties in their own maven overlay. >>>> >>>> I agree with Scott's comments regarding coming up with a general >>>> strategy going forward (3.5+). So, here's a stab at an approach for >>>> this minor but helpful improvement. >>>> >>>> CAS Configuration should follow the following principles: >>>> >>>> * Simple should be easy, complex should be possible >>>> * Key config should be easily externalized so that a single war file >>>> can easily be deployed to multiple tiers or nodes >>>> * Consistent approach >>>> * Generally seek to limit the number of files that need to be managed >>>> in the overlay to make upgrading easier. >>>> >>>> A possible approach: >>>> >>>> * Push all defaults to the bean files where they are defined using the >>>> Spring 3.x approach above and continue to use cas.properties as the >>>> deployment override file for simple parameter configuration. Continue >>>> to use deployerConfigContext for the rest of a typical deployer config >>>> (simple should be easy) >>>> >>>> * Continue the use of bean xml file override for more complex behavior >>>> configuration (complex is possible) >>>> >>>> * Create new property placeholders and defaults for bean properties >>>> that could benefit from the new approach (e.g. SSO Session timeouts, >>>> SLO on/off). (minimize the number of files that need to be managed in >>>> the overlay) >>>> >>>> * Move the propertyFileConfigurer configuration block into >>>> deployConfigContext.xml (minimize the number of files that need to be >>>> managed in the overlay) >>>> >>>> Spring 3.x approach: >>>> Q: "Hey, there's this placeholder ${ssoSession.maxTimeToLive:3600} in >>>> ticketExpirationPolicies.xml, where's the value for that set?" >>>> A: "Oh look, the default is right there in-line, bet I could override >>>> that in cas.properties!" >>>> >>>> Bill >>>> >>>> >>>> On Tue, Jan 3, 2012 at 11:05 AM, Scott Battaglia >>>> <scott.battag...@gmail.com> wrote: >>>>> >>>>> On Tue, Jan 3, 2012 at 10:59 AM, Andrew Petro <ape...@unicon.net> wrote: >>>>>> >>>>>> I'm ambivalent about the value of this change to introduce an >>>>>> additional >>>>>> default.properties to be parsed prior to cas.properties, which would >>>>>> supersede default.properties' values. It feels like it's adding >>>>>> complexity >>>>>> without solving a problem worth solving. >>>>> >>>>> >>>>> Minimizing upgrade pain and placing the defaults in a single location >>>>> when >>>>> we realize something should be paramaterized is not worth solving? I'm >>>>> confused. Especially since not having a mechanism like this in place >>>>> couldn't add parameters except in major releases or if we spread the >>>>> defaults throughout all the files (a la the Spring 3 syntax) >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>>> >>>>>> >>>>>> Again, this is: >>>>>> >>>>>> https://issues.jasig.org/browse/CAS-1084 >>>>>> >>>>>> and >>>>>> >>>>>> https://github.com/Jasig/cas/pull/23 >>>>>> >>>>>> I'm having trouble empathizing with the problem that this seems to be >>>>>> trying to solve. Updating the cas.properties file on a CAS version >>>>>> upgrade >>>>>> seems like a totally reasonable burden on the upgrader. If CAS started >>>>>> configuring TGT timeouts in cas.properties, I wouldn't regard it as too >>>>>> much >>>>>> to ask *upgrading* CAS adopters to notice the new properties in the >>>>>> shipping-in-CAS cas.properties and either add these to their localized >>>>>> cas.properties or delete their local cas.properties and re-fork from >>>>>> the new >>>>>> default. I don't see having to update a local cas.properties that >>>>>> worked >>>>>> with version 3.4 of CAS to provide the properties required by 3.5 of >>>>>> CAS as >>>>>> a problem at all, and I don't value sparing adopters that particular >>>>>> pain on >>>>>> upgrade. >>>>>> >>>>>> This is different from making new deployers set these values when they >>>>>> first deploy CAS, since new deployers when first deploying CAS don't >>>>>> have an >>>>>> existing cas.properties file that would gum up getting the properties >>>>>> and >>>>>> values in the cas.properties shipping in CAS. I would have concern >>>>>> about >>>>>> CAS shipping with properties files that don't work. That's different >>>>>> from >>>>>> CAS shipping with a cas.properties that does work but worrying that >>>>>> some >>>>>> adopters won't use that working cas.properties. >>>>>> >>>>>> In my experience, updating the local cas.properties file on an upgrade >>>>>> to >>>>>> include added properties just hasn't felt anything like a real problem, >>>>>> just >>>>>> a reasonable upgrade practices checklist item. On balance, I'd >>>>>> probably >>>>>> rather have the fail-init-on-unfulfilled-placeholder behavior than the >>>>>> missing-property-is-masked-by-default.properties behavior. >>>>>> >>>>>> >>>>>> Adding default.properties feels like it's adding some complexity. >>>>>> >>>>>> Currently: >>>>>> >>>>>> Q: "Hey, there's this placeholder >>>>>> ${cas.securityContext.casProcessingFilterEntryPoint.loginUrl} in >>>>>> cas-servlet.xml, where's the value for that set?" >>>>>> A: In the properties file set in propertyFileConfigurer.xml, which by >>>>>> default is /WEB-INF/cas.properties . >>>>>> >>>>>> After this change >>>>>> >>>>>> Q: "Hey, there's this placeholder >>>>>> ${cas.securityContext.casProcessingFilterEntryPoint.loginUrl} in >>>>>> cas-servlet.xml, where's the value for that set?" >>>>>> A: Well, it depends. in propertyFileConfigurer.xml, there's a list of >>>>>> properties files, which by default is /WEB-INF/default.properties and >>>>>> /WEB-INF/cas.properties. The last-parsed value wins. So, if this >>>>>> property >>>>>> is in cas.properties, that's where it's set. But if it's not in >>>>>> cas.properties, then it's the value in default.properties. >>>>>> >>>>>> >>>>>> It's not the end of the world, but the latter felt harder to explain, >>>>>> and >>>>>> the former felt simpler. >>>>>> >>>>>> >>>>>> Currently, if I fat finger a property name in a local cas.properties, I >>>>>> notice. Under the proposed change, the fat fingering is masked by a >>>>>> default >>>>>> value in default.properties. >>>>>> >>>>>> Will CAS upgrading deployers be more grateful that we spared them >>>>>> having >>>>>> to update their cas.properties files on upgrades, or will they be more >>>>>> grateful for missing cas.properties properties continuing to fail fast? >>>>>> It's not clear to me that allowing subsets rather than complete sets >>>>>> of >>>>>> properties in cas.properties files is worth losing the >>>>>> fail-fast-on-missing-properties feature. Would deployers rather have >>>>>> just >>>>>> one properties file to worry about, or would they rather have two and >>>>>> understand what it means for properties to be in which and not the >>>>>> other? >>>>>> It's not clear to me that the complexity is worth it. >>>>>> >>>>>> >>>>>> I think I'm -0 for this change, but I don't think it's very important >>>>>> and >>>>>> I'll happily help upgrading adopters to understand the >>>>>> cascading-properties-files approach if CAS implements it. >>>>>> >>>>>> Andrew >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Jan 3, 2012, at 8:18 AM, Scott Battaglia wrote: >>>>>> >>>>>>> I'm not sure I agree with forcing you to add something. If we've >>>>>>> moved >>>>>>> a formerly hard-coded property to now being configurable, you >>>>>>> shouldn't have >>>>>>> to do anything. If its a new value, we should have a sensible >>>>>>> default >>>>>>> without requiring you to choose one (we don't make people set the TGT >>>>>>> timeouts when they first deploy CAS). >>>>>>> >>>>>>> >>>>>>> On Tue, Jan 3, 2012 at 8:14 AM, Marvin Addison >>>>>>> <marvin.addi...@gmail.com> wrote: >>>>>>> I'm really ambivalent about this approach. On the one hand it may >>>>>>> ease the burden of upgrades when new properties are inevitably added. >>>>>>> On the other hand it may facilitate upgrades inheriting undesirable >>>>>>> behavior by default. I personally find it valuable for a deploy to >>>>>>> break due to a new property missing from out custom cas.properties >>>>>>> file, which forces me to review the change and consider whether the >>>>>>> default is in fact desirable. >>>>>>> >>>>>>> M >>>>>>> >>>>>>> -- -- You are currently subscribed to cas-dev@lists.jasig.org as: arch...@mail-archive.com To unsubscribe, change settings or access archives, see http://www.ja-sig.org/wiki/display/JSG/cas-dev