It is more work than writing a properties file.

Also, I am lazy.

Which is probably why I want to use maven on my projects.

Carlos

-----Original Message-----
From: Kris Nuttycombe [mailto:[EMAIL PROTECTED] 
Sent: Friday, June 02, 2006 11:51 AM
To: Maven Users List
Subject: Re: REPOST: [M2] external config of artifact and dependencies

Out of curiosity, why is programmatically configuring log4j (say in a 
servlet context listener) not a great idea?

Kris

[EMAIL PROTECTED] wrote:

>I don't think my team will react nicely if I tell them that in order to
>have all the maven niceties we have to buy and run oracle app server or
>have half a dozen instances of tomcat running on our servers.
>
>Is this what people commonly do with maven built wars?
>
>What I am trying to figure out is rote for a lot of people out there.
I
>just can't get my pea-sized brain to come up with a palatable solution.
>
>-----Original Message-----
>From: Wayne Fay [mailto:[EMAIL PROTECTED] 
>Sent: Friday, June 02, 2006 10:49 AM
>To: Maven Users List
>Subject: Re: REPOST: [M2] external config of artifact and dependencies
>
>One suggestion would be to use an app server that allows instancing of
>webapps.
>
>We run Oracle App Server, and each webapp is deployed to its own OC4J
>instance. Each OC4J instance has its own full directory structure
>which allows us to copy things like log4j.properties files and other
>configuration files into specific webapp directories. So webapp1 has
>its own webapp1/shared/classes type directory and webapp2 has
>webapp2/shared/classes. They run in completely separated memory so
>there is no issue of one app accessing the other's log4 configuration
>file.
>
>In Tomcat, you could do this too, but you'd be to run individual
>Tomcat instances for each webapp.
>
>This would allow you to maintain a single "build" of your code with
>different configurations for each deployment.
>
>Wayne
>
>On 6/2/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]>
>wrote:
>  
>
>>Sorry - about the repost, but my 10 month old daughter has taught me
>>that the crying wheel gets fed . . . or something like that.
>>
>>Let's say I am working on a web application.
>>
>>This application is a maven project configured as a war.  During its
>>lifecycle this application will be deployed on:
>>
>>- developer workstations
>>- testing environment
>>- production environment
>>
>>This project has a dependency on log4j.
>>
>>At runtime, my application code is configured to pull properties files
>>with configuration information from a well-known JNDI location.  The
>>prop file will include environment specific settings.  At deployment
>>time, the engineer responsible for generating the war will, if
>>necessary, also update the prop file (or individual properties) in the
>>JNDI tree.
>>
>>log4j however, looks for its configuration file on the classpath at
>>application initialization.  Although you can configure log4j
>>programmatically, that probably isn't a great idea.  log4j is
>>    
>>
>configured
>  
>
>>differently for each target environment. E.g. Developers will change
>>settings based on what they are currently working on, the testing
>>environment is set to DEBUG while production is set to WARN.
>>
>>I don't want to filter the log4j configuration file when I package the
>>artifact.  Doing so would place environment specific settings in the
>>archive, compromising its value.  I can't use JNDI to configure log4j.
>>So that seems to leave "adding it to the classpath" as the only viable
>>option.  Our app servers are tomcat 5.x.  Although I have the option
>>    
>>
>to
>  
>
>>drop the log4 files in <TomcatRoot>/shared/classes, that is the
>>    
>>
>nuclear
>  
>
>>bomb of config.  Doing so may impact other web applications, if they
>>don't have their own version of the resource locally.  Moreover, it
>>    
>>
>can
>  
>
>>only be done for a single application - I can't have two different
>>log4j.properties files in the shared/classes dir.
>>
>>So now I have to alter the exploded web application directory after it
>>is installed and add the log4j.properties file.
>>
>>That seems like a great deal of work and a kludge . . . what am I
>>missing here?
>>
>>-----Original Message-----
>>From: Fernandez, Carlos
>>Sent: Thursday, June 01, 2006 10:49 AM
>>To: users@maven.apache.org
>>Subject: RE: [M2] questions about migrating to maven
>>
>>Carlos,
>>
>>EXTERNAL CONFIGURATION OF AN ARTIFACT AND DEPENDENCIES
>>
>>Sorry for belaboring this point - but I tend to think better in
>>    
>>
>concrete
>  
>
>>terms.  Let me walk through a scenario just to make sure I understand
>>this.
>>
>>Let's say I am working on a web application.
>>
>>This application is a maven project configured as a war.  During its
>>lifecycle this application will be deployed on:
>>
>>- developer workstations
>>- testing environment
>>- production environment
>>
>>This project has a dependency on log4j.
>>
>>At runtime, my application code is configured to pull properties files
>>with configuration information from a well-known JNDI location.  The
>>prop file will include environment specific settings.  At deployment
>>time, the engineer responsible for generating the war will, if
>>necessary, also update the prop file (or individual properties) in the
>>JNDI tree.
>>
>>log4j however, looks for its configuration file on the classpath at
>>application initialization.  Although you can configure log4j
>>programmatically, that probably isn't a great idea.  log4j is
>>    
>>
>configured
>  
>
>>differently for each target environment. E.g. Developers will change
>>settings based on what they are currently working on, the testing
>>environment is set to DEBUG while production is set to WARN.
>>
>>I don't want to filter the log4j configuration file when I package the
>>artifact.  Doing so would place environment specific settings in the
>>archive, compromising its value.  I can't use JNDI to configure log4j.
>>So that seems to leave "adding it to the classpath" as the only viable
>>option.  Our app servers are tomcat 5.x.  Although I have the option
>>    
>>
>to
>  
>
>>drop the log4 files in <TomcatRoot>/shared/classes, that is the
>>    
>>
>nuclear
>  
>
>>bomb of config.  Doing so may impact other web applications, if they
>>don't have their own version of the resource locally.  Moreover, it
>>    
>>
>can
>  
>
>>only be done for a single application - I can't have two different
>>log4j.properties files in the shared/classes dir.
>>
>>So now I have to alter the exploded web application directory after it
>>is installed and add the log4j.properties file.
>>
>>That seems like a great deal of work and a kludge . . . what am I
>>missing here?
>>
>>BTW - My father's family is from Galicia, with a lot of them living in
>>    
>>
>a
>  
>
>>coruna.  My parents have been a few times and have loved each and
>>    
>>
>every
>  
>
>>trip.  I hope to visit with my wife and daughter soon, and see a bit
>>    
>>
>of
>  
>
>>the "old country" ;)
>>
>>Carlos
>>
>>-----Original Message-----
>>From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of
>>    
>>
>Carlos
>  
>
>>Sanchez
>>Sent: Tuesday, May 30, 2006 12:50 PM
>>To: Maven Users List
>>Subject: Re: [M2] questions about migrating to maven
>>
>>On 5/30/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]>
>>wrote:
>>    
>>
>>>Carlos,
>>>
>>>-->  re FILTERING PROPERTIES FILES FOR ENVIRONMENTS
>>>My suggestion is to externalie that configuration options in a way
>>>that your artifact is always the same, and only configuration
>>>      
>>>
>changes.
>  
>
>>>You can do reading your config files from the classpath or better
>>>using JNDI.
>>>
>>>++++++++++++++++++++
>>>
>>>Sorry to harp on this, but I think I am having trouble thinking
>>>      
>>>
>beyond
>  
>
>>>the way I have used ant the past few years.
>>>
>>>100% of the differences between the developer workstation,
>>>pre-production and production builds on my various projects are
>>>      
>>>
>>isolated
>>    
>>
>>>into properties files.  These are then pulled into Spring as
>>>      
>>>
>classpath
>  
>
>>>resources.
>>>
>>>If I understand you correctly, you are suggesting that the project
>>>artifacts, wars and jars alike, should not include these properties
>>>files.  These files should either:
>>>
>>>- be accessed as classpath resource.  Presumably some other
>>>build/release process would deposit them on the classpath, or they
>>>      
>>>
>>would
>>    
>>
>>>be added to the container's classpath at startup.
>>>- accessed via JNDI.  The JNDI entries would either be name/value
>>>      
>>>
>>pairs,
>>    
>>
>>>the properties files themselves or a combo.  When the war is
>>>      
>>>
>deployed,
>  
>
>>>part of the deployment process would be to configure the JNDI tree.
>>>
>>>Is this correct?
>>>      
>>>
>>Yes, that way you don't need different artifacts for each environment,
>>reducing the risks.
>>
>>If you still want to do that you can use profiles to include/exclude
>>properties files in the jar, chnging the finalName so they are named
>>differently. I encourage the other option, but still you can do it
>>this way.
>>
>>
>>    
>>
>>>--> re INTER-PROJECT DEPENDENCIES
>>>
>>>--> With maven the best way is not to rebuild all your dependencies
>>>every
>>>time, but to depend on the binaries generated by the other projects
>>>      
>>>
>as
>  
>
>>>SNAPSHOTs.
>>>
>>>If I can get past the environment configuration step - then I
>>>      
>>>
>suspect
>  
>
>>>that this would no longer be an issue.  Each artifact would be
>>>      
>>>
>generic
>  
>
>>>and just as relevant on a developers workstation as it will be in
>>>production.
>>>
>>>Carlos
>>>
>>>-----Original Message-----
>>>From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of
>>>      
>>>
>>Carlos
>>    
>>
>>>Sanchez
>>>Sent: Sunday, May 28, 2006 2:09 PM
>>>To: Maven Users List
>>>Subject: Re: [M2] questions about migrating to maven
>>>
>>>Hi Carlos,
>>>
>>>re FILTERING PROPERTIES FILES FOR ENVIRONMENTS
>>>
>>>I usually don't like this approach for the inconvinients you
>>>      
>>>
>mention,
>  
>
>>>you need to rebuild your artifacts for each environments, which is
>>>usually prone to errors, you test x-dev in your machine, and then
>>>build x-prod for production, with no guarantees that it's the same
>>>stuff you tested.
>>>
>>>My suggestion is to externalie that configuration options in a way
>>>that your artifact is always the same, and only configuration
>>>      
>>>
>changes.
>  
>
>>>You can do reading your config files from the classpath or better
>>>using JNDI. You can also have dev config as default so your
>>>      
>>>
>developers
>  
>
>>>don't have to setup anything and you do it only in prod or preprod.
>>>
>>>
>>>re INTER-PROJECT DEPENDENCIES
>>>
>>>With maven the best way is not to rebuild all your dependencies
>>>      
>>>
>every
>  
>
>>>time, but to depend on the binaries generated by the other projects
>>>      
>>>
>as
>  
>
>>>SNAPSHOTs. You can ensure the repo has the latest snapshot by
>>>      
>>>
>setting
>  
>
>>>up continuum to deploy everytime somebody changes the project. That
>>>way developers don't have to go through the extra time consuming
>>>process of building the dependencies.
>>>
>>>Regards
>>>
>>>Carlos
>>>
>>>
>>>On 5/26/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]>
>>>wrote:
>>>      
>>>
>>>>I am pretty sure that I am over thinking this ;)  However, I am
>>>>        
>>>>
>>having
>>    
>>
>>>>trouble thinking how best to migrate our ant based build process
>>>>        
>>>>
>to
>  
>
>>>>maven.  Principally:
>>>>
>>>>- Filtering properties files for environments, and
>>>>- Inter-project dependencies
>>>>
>>>>FILTERING PROPERTIES FILES FOR ENVIRONMENTS
>>>>As with most projects, our apps use properties files for
>>>>        
>>>>
>configuring
>  
>
>>a
>>    
>>
>>>>host of settings.  Many of these (e.g. db settings, log4j
>>>>        
>>>>
>settings,
>  
>
>>>web
>>>      
>>>
>>>>service host:port etc) are environment specific.  Our projects
>>>>        
>>>>
>have
>  
>
>>>>properties files for various target environments, such as
>>>>        
>>>>
>>production,
>>    
>>
>>>>pre-production, cruisecontrol.  Each developer also has a local
>>>>        
>>>>
>>props
>>    
>>
>>>>file that they can tailor for their particular needs (e.g. for
>>>>        
>>>>
>>>debugging
>>>      
>>>
>>>>you may want to log springframework as DEBUG and suppress all
>>>>        
>>>>
>>others).
>>    
>>
>>>>Ant uses these files to filter the application properties.  The
>>>>        
>>>>
>>result
>>    
>>
>>>>is a build tailored for a particular environment.  Since all
>>>>        
>>>>
>>>environment
>>>      
>>>
>>>>specific properties, beside the local, are source controlled we
>>>>        
>>>>
>have
>  
>
>>a
>>    
>>
>>>>high degree of confidence in consistent and reproducible builds to
>>>>        
>>>>
>>our
>>    
>>
>>>>shared infrastructure.
>>>>
>>>>In maven I have been able to reproduce this behavior with
>>>>        
>>>>
>profiles.
>  
>
>>>>However, I am not sure what to do with the resulting artifacts.
>>>>        
>>>>
>>Each
>>    
>>
>>>>artifact is "tainted" with environment specific properties.
>>>>
>>>>Should artifacts generated with "local" only be installed in each
>>>>developers local repository?  What about the artifacts for the
>>>>        
>>>>
>>testing
>>    
>>
>>>>and production environments?  Should the internal repository only
>>>>        
>>>>
>be
>  
>
>>>>used to store "production" artifacts?  Should there be multiple
>>>>        
>>>>
>>shared
>>    
>>
>>>>internal repositories, one for production and one for pre-prod?
>>>>
>>>>INTER-PROJECT DEPENDENCIES
>>>>Currently we have a web based application broken out into four
>>>>        
>>>>
>>>projects:
>>>      
>>>
>>>>1 - user-presentation-layer
>>>>2 - admin-presentation-layer
>>>>3 - web-service-layer
>>>>4 - common-utils
>>>>
>>>>Each project generates a primary artifact, and the
>>>>        
>>>>
>web-service-layer
>  
>
>>>>also generates a client jar.
>>>>
>>>>Currently in order to generate a fresh build of say the
>>>>user-presentation-layer, you must have the web-service-layer and
>>>>common-utils checked out in your workspace.  The ant build file
>>>>        
>>>>
>for
>  
>
>>>the
>>>      
>>>
>>>>user-presentation-layer will end up calling the other two build
>>>>        
>>>>
>>files.
>>    
>>
>>>>These builds in turn, get an update from cvs and then generating
>>>>        
>>>>
>the
>  
>
>>>>appropriate artifact.  Granted it took some time to get this
>>>>        
>>>>
>process
>  
>
>>>up
>>>      
>>>
>>>>and running, but it currently works and works pretty well.
>>>>
>>>>From my readings, it seems that this process is frowned upon.
>>>>        
>>>>
>With
>  
>
>>>>maven, the appropriate process would be to "mvn scm:update
>>>>        
>>>>
>install"
>  
>
>>on
>>    
>>
>>>>the web-service-layer and common-utils projects.  Then run the
>>>>        
>>>>
>build
>  
>
>>>for
>>>      
>>>
>>>>the user-presentation-layer.
>>>>
>>>>Or better yet, have each user pull the dependencies
>>>>        
>>>>
>>(web-service-layer
>>    
>>
>>>>and common-utils) from an internal repository that is updated by
>>>>developers checking in changes or by some source control
>>>>        
>>>>
>repository.
>  
>
>>>>However, as noted above, because of environmental impacts, I am
>>>>        
>>>>
>not
>  
>
>>>sure
>>>      
>>>
>>>>a shared repository would work for artifacts used in development.
>>>>Currently, our environment profiles only effect configuration
>>>>        
>>>>
>>>settings.
>>>      
>>>
>>>>They do not modify or impact the source code directly.  While the
>>>>        
>>>>
>>>maven
>>>      
>>>
>>>>dependencies are a result of class dependencies, which should not
>>>>        
>>>>
>be
>  
>
>>>>impacted by using an artifact configured for "production" versus
>>>>        
>>>>
>one
>  
>
>>>>configured for "preproduction".
>>>>
>>>>What is the best way to handle this problem?
>>>>
>>>>I am sure people much smarter than myself have already tackled
>>>>        
>>>>
>these
>  
>
>>>>problems and come up with very simple solutions.
>>>>
>>>>Any and all help sorting myself out would be really appreciated!
>>>>
>>>>Carlos
>>>>
>>>>
>>>>
>>>>
>>>>        
>>>>
>>---------------------------------------------------------------------
>>    
>>
>>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>>>        
>>>>
>>>--
>>>I could give you my word as a Spaniard.
>>>No good. I've known too many Spaniards.
>>>                             -- The Princess Bride
>>>
>>>
>>>      
>>>
>---------------------------------------------------------------------
>  
>
>>>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]
>>>
>>>
>>>      
>>>
>>--
>>I could give you my word as a Spaniard.
>>No good. I've known too many Spaniards.
>>                            -- The Princess Bride
>>
>>---------------------------------------------------------------------
>>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]
>
>  
>

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

Reply via email to