Akka","\ntitled \u003Ca href=). Although I don’t warm towards Scala as a programming language, Akka seems to be quite a killer\nframework for solving concurrency-related problems. It comes with a Scala and a Java API but the Scala API looks (\nnaturally?) more elegant.",[42,291,292,293,298,299,304],{},"Another very interesting talk\nwas ",[48,294,297],{"href":295,"rel":296},"http://devoxx.com/display/DV11/The+Disruptor%2C+High+Performance+Inter-Thread+Messaging",[52],"The Disruptor, High Performance Inter-Thread Messaging","\nwhich was scheduled for Monday (during the university days) but was cancelled on short notice. Fortunately that talk was\nrescheduled for Thursday during the lunch break. Michael Barker gave an introduction to\nthe ",[48,300,303],{"href":301,"rel":302},"http://code.google.com/p/disruptor/",[52],"Disruptor"," framework and walked the audience through an example utilizing it\nin a simple application.",[42,306,307,308,313],{},"And even more highlights took place on this day: Dick Wall (of Java Posse fame) talked\nabout ",[48,309,312],{"href":310,"rel":311},"http://devoxx.com/display/DV11/Courage+in+Software+Development",[52],"Courage in Software Development",". This was a\nnon-technical but very inspiring session and I recommend watching it as soon as it’s uploaded to Parleys.",[42,315,316,317,322,323,328,329,334],{},"Following the official conference program (in parallel to the BOF sessions) there was a screening of the recently\nreleased ",[48,318,321],{"href":319,"rel":320},"https://web.archive.org/web/20151116171536/http://www.us.movie.tintin.com:80/",[52],"Tintin movie"," and after that\nthe anniversary party in the nearby ",[48,324,327],{"href":325,"rel":326},"https://web.archive.org/web/20120528164636/http://noxxantwerp.eu/",[52],"Noxx"," night\nclub – of course with a dancing ",[48,330,333],{"href":331,"rel":332},"http://kenai.com/projects/duke",[52],"Duke",". 😉",[42,336,337,338,343,344,349],{},"On the fifth and last day we sadly had only time for\nthe ",[48,339,342],{"href":340,"rel":341},"http://devoxx.com/display/DV11/Technical+Discussion+Panel",[52],"Technical Discussion Panel"," and one more talk. Most of\nus\nchose ",[48,345,348],{"href":346,"rel":347},"http://devoxx.com/display/DV11/The+Evolution+of+Java++Past%2C+Present%2C+and+Future",[52],"The Evolution of Java: Past, Present, and Future","\nwhich was again very interresting and in which Joshua Bloch retrospectively reviewed changes to the Java language over\ntime and scored them from “horrible” to “best thing since sliced bread” (or something like that).",[164,351,353],{"id":352},"summary","Summary",[42,355,356,357,362],{},"In summary I really enjoyed Devoxx and learned a lot during these five extraordinary days. My days were quite stuffed\nand I wish I had more time for seeing Antwerp but you have to set priorities. I really recommend going to Devoxx (or to\nthe upcoming ",[48,358,361],{"href":359,"rel":360},"http://www.devoxx.fr/",[52],"Devoxx France",", if you are a French native speaker) to any serious Java (or\nJVM-based language) developer.",[42,364,365],{},"And in case you wondered about the title of this blog post:",[42,367,368,373],{},[48,369,372],{"href":370,"rel":371},"https://www.youtube.com/embed/8To-6VIJZRE",[52],"Video laden"," (Mit dem Laden des Videos akzeptieren Sie die\nDatenschutzerklärung von YouTube.)",{"title":11,"searchDepth":12,"depth":12,"links":375},[376,377,378],{"id":166,"depth":12,"text":167},{"id":228,"depth":12,"text":229},{"id":352,"depth":12,"text":353},[380],"synyx-blog","2011-12-01T10:33:51","Belgium, November 2011. More than three and a half thousand people are surging into Antwerp’s megaplex, the Kinepolis.\\nIt’s Devoxx-time!","https://synyx.de/blog/developers-developers-developers/",{},"/blog/developers-developers-developers",{"title":33,"description":44},"blog/developers-developers-developers",[389,390],"conference","devoxx","Belgium, November 2011. More than three and a half thousand people are surging into Antwerp’s megaplex, the Kinepolis. It’s Devoxx-time! Mit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von…","3doRV3U2v9GTiPWiYBLxrB8R9wuWA1DUkgZwjc_5OPM",{"id":394,"title":395,"author":396,"body":397,"category":612,"date":614,"description":615,"extension":16,"link":616,"meta":617,"navigation":24,"path":618,"seo":619,"slug":401,"stem":621,"tags":622,"teaser":629,"__hash__":630},"blog/blog/continuous-delivery-or-how-i-learned-to-stop-worrying-and-love-the-pipeline.md","Continuous Delivery or: How I Learned to Stop Worrying and Love the Pipeline",[27],{"type":8,"value":398,"toc":610},[399,402,445,451,454,463,466,469,496,499,505,508,537,551,560,563,579,584,590,602],[38,400,395],{"id":401},"continuous-delivery-or-how-i-learned-to-stop-worrying-and-love-the-pipeline",[42,403,404,405,409,410,415,416,421,422,427,428,433,434,427,439,444],{},"Following our principle of ",[406,407,408],"em",{},"Continuous Skill Enhancement"," here at ",[48,411,414],{"href":412,"rel":413},"https://synyx.de/leben-und-arbeiten/",[52],"Synyx"," I\nrecently read the\nbook ",[48,417,420],{"href":418,"rel":419},"http://www.informit.com/store/product.aspx?isbn=0321601912",[52],"Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation","\nby ",[48,423,426],{"href":424,"rel":425},"http://jezhumble.net/",[52],"Jez Humble"," (from ",[48,429,432],{"href":430,"rel":431},"http://www.thoughtworks.com/",[52],"ThoughtWorks",")\nand ",[48,435,438],{"href":436,"rel":437},"http://www.davefarley.net/",[52],"David Farley",[48,440,443],{"href":441,"rel":442},"http://www.lmaxtrader.co.uk/",[52],"LMAX",").",[42,446,447],{},[98,448],{"alt":449,"src":450},"\"Continuous Delivery\"","https://media.synyx.de/uploads//2011/08/continuous_delivery_cover.jpeg",[42,452,453],{},"The book consists of three distinct parts.",[42,455,456,457,462],{},"Part one provides a high-level overview about the basics of software delivery. The authors are touching topics such as\nconfiguration management, continuous integration and software testing, describing what they are good for and what the\nchallenges are when implementing them. While the chapters help to understand the terminology used throughout the book\nthey don’t (and cannot) describe each of the topics in great detail – there\nare ",[48,458,461],{"href":459,"rel":460},"http://www.informit.com/store/product.aspx?isbn=0321336380",[52],"other books"," for that. But of course you’re already\nfamiliar with these topics so it’s just a little refresher.",[42,464,465],{},"Part two is dedicated to the central concept described in Continuous Delivery: the deployment pipeline. The idea is to\nreceive immediate feedback on errors and regressions as early in the development lifecycle of a project as possible and\nto provide a working application to the users as early and often as possible.",[42,467,468],{},"This means that every commit by a developer triggers a run of the deployment pipeline. It starts with building the\nartifact (obviously), proceeds to the first test stage running unit tests, from which it continues to the integration\ntest phase. If all tests ran successfully the artifact will continue through the stages of the deployment pipeline, e.\ng. a smoke test or non-functional test stage (think security and performance tests) and to a UAT (user acceptance\ntesting) stage. Finally the artifact will end up in the staging environment and from there it should require only the\nclick of a button to deploy it to production. Of course the authors describe each step in great detail and have some\nanecdotes from their projects to lighten up the text.",[42,470,471,472,477,478,483,484,489,490,495],{},"The central theme of part three is managing different parts of the delivery ecosystem. The authors discuss pros and cons\nof physical servers, virtualized servers and cloud computing, introduce the reader to the concepts of automatic machine\nprovisioning and configuration management with ",[48,473,476],{"href":474,"rel":475},"http://www.puppetlabs.com/",[52],"Puppet",", monitoring your systems and\ncollecting logs and performance data. They talk about managing test data, how to version it and how to get a basic stock\nof data for running integration tests in the first place. One chapter is dedicated to the challenges of managing\ncomponents and dependencies in which the authors discuss different strategies of versioning the components of your\napplication. It even comprises a short introduction to ",[48,479,482],{"href":480,"rel":481},"http://maven.apache.org/",[52],"Apache Maven",". In the following\nchapter the authors give an introduction to different revision control systems\nlike ",[48,485,488],{"href":486,"rel":487},"http://subversion.apache.org/",[52],"Subversion"," and ",[48,491,494],{"href":492,"rel":493},"http://gitscm.com/",[52],"Git",", as well as commercial alternatives like\nBitKeeper and ClearCase, and their respective advantages and disadvantages over the free alternatives. They continue to\ndescribe several advanced branching and integration strategies, each with its very own advantages and disadvantages in\ndifferent situations.",[42,497,498],{},"The last chapter swiftly copes with rather non-technical questions like the project lifecycle risk management and how\ncompliance and auditing are handled in a project using continuous delivery.",[42,500,501,502,504],{},"The concepts detailed in ",[406,503,175],{}," are not new per se but it’s the first book I read that really brought\nthese together in one coherent narrative. In fact, most of the concepts will seem to be obvious once you’ve read and\ngrokked them, but somehow nobody ever thought about them in depth.",[42,506,507],{},"Some of the distilled concepts are:",[77,509,510,518,521,524,531],{},[80,511,512,513,517],{},"Build binaries exactly ",[514,515,516],"strong",{},"once",", store them in your artifact repository and promote them through the complete\ndeployment pipeline.",[80,519,520],{},"Only promote builds into staging or production that pass all unit and acceptance tests.",[80,522,523],{},"The development, testing, UAT and staging environments should be as similar as possible to the production environment.",[80,525,526,527,530],{},"Automate ",[514,528,529],{},"everything",": builds, configuration, tests. Human interaction is prone to error, try to avoid it wherever\npossible.",[80,532,533,534],{},"Use version control for ",[514,535,536],{},"everything, including the configuration of underlying operating systems and infrastructure\nsuch as networking equipment.",[42,538,539,541,542,547,548,75],{},[406,540,175],{}," has rightfully received much praise around the Internet and especially in the recently popularized\nDevOps movement. In 2011, the authors also won a ",[48,543,546],{"href":544,"rel":545},"http://drdobbs.com/joltawards/231500080?pgno=7",[52],"Jolt Excellence Award","\nin the category ",[406,549,550],{},"The Best Books",[42,552,553,554,559],{},"One thing I didn’t like about the book is the way online sources have been referenced in the text. Whenever the authors\nreference a website they provide an alphanumeric shortcode you know from URL shorteners like TinyURL. In fact that’s\nexactly what they are. These shortcodes can be used with Bit.ly or, as a fallback, directly from\nthe ",[48,555,558],{"href":556,"rel":557},"http://continuousdelivery.com/",[52],"supporting website"," of the book.",[42,561,562],{},"Example:",[77,564,565,572],{},[80,566,567],{},[48,568,571],{"href":569,"rel":570},"http://bit.ly/bibNp0",[52],"bit.ly/bibNp0",[80,573,574],{},[48,575,578],{"href":576,"rel":577},"http://continuousdelivery.com/go/bibNp0",[52],"continuousdelivery.com/go/bibNp0",[42,580,581,582,75],{},"This often interrupts the flow of reading. Instead a more traditional style, e. g. placing the shortcodes in footnotes,\nwould have been preferable in the printed version of the book. I also missed a list of all referenced online sources,\neither at the end of each chapter or in a separate appendix. Fortunately this is really the only criticism I have for\n",[406,583,175],{},[42,585,586,587,589],{},"As a conclusion, I can really recommend reading ",[406,588,175],{}," to anyone involved in developing and delivering\nsoftware. It will provide some new points of view on your work and give you some new ideas about how to improve your\ncurrent processes. I, for one, am looking forward to applying the principles outlined in this book to some of our\nprojects.",[42,591,592,593,596,597,75],{},"If you’re hooked now you might want to read the sample chapter from ",[406,594,595],{},"Continuous\nDelivery",": ",[48,598,601],{"href":599,"rel":600},"http://www.informit.com/content/images/9780321601919/samplepages/0321601912.pdf",[52],"Chapter 5 – Anatomy of the Deployment Pipeline",[42,603,604,605],{},"Oh, and by the way: ",[48,606,609],{"href":607,"rel":608},"https://jobs.synyx.de/",[52],"We’re hiring!",{"title":11,"searchDepth":12,"depth":12,"links":611},[],[613],"developer-blog","2011-08-23T12:00:36","Following our principle of Continuous Skill Enhancement here at Synyx I\\nrecently read the\\nbook Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation\\nby Jez Humble (from ThoughtWorks)\\nand David Farley (from LMAX).","https://synyx.de/blog/continuous-delivery-or-how-i-learned-to-stop-worrying-and-love-the-pipeline/",{},"/blog/continuous-delivery-or-how-i-learned-to-stop-worrying-and-love-the-pipeline",{"title":395,"description":620},"Following our principle of Continuous Skill Enhancement here at Synyx I\nrecently read the\nbook Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation\nby Jez Humble (from ThoughtWorks)\nand David Farley (from LMAX).","blog/continuous-delivery-or-how-i-learned-to-stop-worrying-and-love-the-pipeline",[623,624,625,626,627,628],"book-review","continuous-delivery","continuous-deployment","continuous-integration","processes","software-development","Following our principle of Continuous Skill Enhancement here at Synyx I recently read the book Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation by Jez Humble (from…","f_JR-CIvgZ2VCVSWsQjdTvAK1X1BsmKrdOPqauLk5lc",{"id":632,"title":633,"author":634,"body":635,"category":2589,"date":2590,"description":2591,"extension":16,"link":2592,"meta":2593,"navigation":24,"path":2594,"seo":2595,"slug":639,"stem":2597,"tags":2598,"teaser":2607,"__hash__":2608},"blog/blog/the-tale-of-jboss-and-the-7-little-logging-frameworks.md","The Tale of JBoss and the 7 Little Logging Frameworks",[27],{"type":8,"value":636,"toc":2585},[637,640,649,655,658,673,692,712,721,730,739,744,747,756,842,851,911,926,2359,2362,2401,2416,2434,2437,2487,2491,2551,2558,2562,2581],[38,638,633],{"id":639},"the-tale-of-jboss-and-the-7-little-logging-frameworks",[42,641,642,643,648],{},"At Synyx we’re currently taking care of a rather large legacy project for one of our customers in the course of\nour ",[48,644,647],{"href":645,"rel":646},"https://synyx.de/code-clinic-softwareoptimierung/",[52],"Code Clinic"," services. The project comprises several components\nsuch as a fat client implemented with a custom UI framework on top of Swing, a bulky web application using a mixture of\ncustom and obsolete frameworks, and a lot of asynchronously running jobs to process input from other systems involving\ncustom XSL transformations and a heap of stored procedures in a Oracle 9i database. You get the picture, it’s the\nprototype of a legacy system.",[42,650,651],{},[98,652],{"alt":653,"src":654},"\"7 Little Logging Frameworks\"","https://media.synyx.de/uploads//2011/06/7dwarves.jpg",[42,656,657],{},"7 Little Logging Frameworks on their way into your code base",[42,659,660,661,666,667,672],{},"The original developers of the system suffered a serious case of the\nwell-known ",[48,662,665],{"href":663,"rel":664},"http://en.wikipedia.org/wiki/Not_Invented_Here",[52],"NIH syndrome"," and thus a lot\nof ",[48,668,671],{"href":669,"rel":670},"http://www.martinfowler.com/bliki/TechnicalDebt.html",[52],"technical debt"," has been piled up over the course of its\ndevelopment.",[42,674,675,676,112,681,686,687,75],{},"One peculiar case was the use of about 7 different logging abstractions scattered over the whole code base. While some (\nwell, just one) of the implementations provide a certain added value, the other ones were just plain wrappers around the\neventually used logging frameworks. They literally just added a bad API on top of the other. There were also at least\nthree different logging frameworks in use,\nnamely ",[48,677,680],{"href":678,"rel":679},"http://commons.apache.org/logging/",[52],"Apache Commons Logging",[48,682,685],{"href":683,"rel":684},"http://www.slf4j.org/",[52],"SLF4J","\nand ",[48,688,691],{"href":689,"rel":690},"http://logging.apache.org/log4j/",[52],"Log4j",[42,693,694,695,686,700,705,706,711],{},"In order to consolidate the code base, to reduce the dependencies on external frameworks and to prevent conflicts\ninduced by the use of generic class names like Log or Logger we decided to clean up this mess and use SLF4J with its\nLog4j back end as our authoritative logging framework in this project. We chose SLF4J for several (hopefully good)\nreasons, e. g. the low number of dependencies, the ability to plug in the logging framework of choice at deployment\ntime, the clean API and the good support for legacy logging frameworks. Also read the\narticles ",[48,696,699],{"href":697,"rel":698},"http://bsnyderblog.blogspot.com/2007/08/my-soapbox-for-slf4j.html",[52],"My Soapbox for SLF4J",[48,701,704],{"href":702,"rel":703},"http://blog.frankel.ch/thoughts-on-java-logging-and-slf4j",[52],"Thoughts on Java logging and SLF4J"," for a more detailed\ndiscussion of SLF4J’s features. Did I mention SLF4J also ",[48,707,710],{"href":708,"rel":709},"http://www.slf4j.org/android/",[52],"works on Android","?",[42,713,714,715,720],{},"SLF4J thankfully makes it easy to ",[48,716,719],{"href":717,"rel":718},"http://www.slf4j.org/legacy.html",[52],"bridge legacy logging frameworks"," so that you don’t\nhave to refactor all your code at once but could incrementally migrate your code base while still using SLF4J under the\nhood.",[42,722,723,724,729],{},"As you might have already guessed from the title of this blog post, the project uses the\nestablished ",[48,725,728],{"href":726,"rel":727},"http://www.jboss.org/",[52],"JBoss"," Application Server. Unfortunately it’s currently stuck at version\n4.0.3.SP1 but that’s another topic.",[42,731,732,733,738],{},"After deciding on which framework to use we started refactoring our code base. At first this wasn’t a problem. Deleting\nthe legacy logging classes and then replacing their calls with our authoritative\nSLF4J ",[48,734,737],{"href":735,"rel":736},"http://www.slf4j.org/apidocs/org/slf4j/Logger.html",[52],"Logger"," was straight forward. Since the logging classes were\nscattered across the whole code base we sometimes missed a dependency in another component of the project, but that’s\nwhat a Continuous Integration system is for after all.",[42,740,741],{},[98,742],{"alt":743,"src":683},"\"SLF4J Logo\"",[42,745,746],{},"Simple Logging Facade for Java",[42,748,749,750,755],{},"We also adapted the dependencies in the components’ POM files to use SLF4J’s commons-logging bridge instead of\ncommons-logging itself. Pro tip from the trenches: Don’t confuse jcl-over-slf4j.jar with slf4j-jcl.jar! The former\nis the API bridge we wanted to use, the latter is a SLF4J backend implementation using commons-logging. In order to get\nthe dependencies straight we used\nMaven’s ",[48,751,754],{"href":752,"rel":753},"http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management",[52],"dependency management","\nfeature and added the following declarations in the parent POM for the project’s components:",[757,758,762],"pre",{"className":759,"code":760,"language":761,"meta":11,"style":11},"language-xml shiki shiki-themes github-light github-dark","\u003CdependencyManagement>\n \u003Cdependency>\n \u003CgroupId>commons-logging\u003C/groupId>\n \u003CartifactId>commons-logging\u003C/artifactId>\n \u003Cversion>1.1.1\u003C/version>\n \u003Cscope>provided\u003C/scope>\n \u003C/dependency>\n \u003Cdependency>\n \u003CgroupId>org.slf4j\u003C/groupId>\n \u003CartifactId>jcl-over-slf4j\u003C/artifactId>\n \u003Cversion>1.6.1\u003C/version>\n \u003C/dependency>\n\u003C/dependencyManagement>\n","xml",[763,764,765,773,778,784,790,796,802,808,813,819,825,831,836],"code",{"__ignoreMap":11},[766,767,770],"span",{"class":768,"line":769},"line",1,[766,771,772],{},"\u003CdependencyManagement>\n",[766,774,775],{"class":768,"line":12},[766,776,777],{}," \u003Cdependency>\n",[766,779,781],{"class":768,"line":780},3,[766,782,783],{}," \u003CgroupId>commons-logging\u003C/groupId>\n",[766,785,787],{"class":768,"line":786},4,[766,788,789],{}," \u003CartifactId>commons-logging\u003C/artifactId>\n",[766,791,793],{"class":768,"line":792},5,[766,794,795],{}," \u003Cversion>1.1.1\u003C/version>\n",[766,797,799],{"class":768,"line":798},6,[766,800,801],{}," \u003Cscope>provided\u003C/scope>\n",[766,803,805],{"class":768,"line":804},7,[766,806,807],{}," \u003C/dependency>\n",[766,809,811],{"class":768,"line":810},8,[766,812,777],{},[766,814,816],{"class":768,"line":815},9,[766,817,818],{}," \u003CgroupId>org.slf4j\u003C/groupId>\n",[766,820,822],{"class":768,"line":821},10,[766,823,824],{}," \u003CartifactId>jcl-over-slf4j\u003C/artifactId>\n",[766,826,828],{"class":768,"line":827},11,[766,829,830],{}," \u003Cversion>1.6.1\u003C/version>\n",[766,832,834],{"class":768,"line":833},12,[766,835,807],{},[766,837,839],{"class":768,"line":838},13,[766,840,841],{},"\u003C/dependencyManagement>\n",[42,843,844,845,850],{},"By setting\nthe ",[48,846,849],{"href":847,"rel":848},"http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope",[52],"scope"," of\ncommons-logging to “provided” we made sure that it would not be pulled in accidentally. Unfortunately this scope is not\ntransitive and we had to explicitly exclude commons-logging (and other artifacts) from some of our dependencies:",[757,852,854],{"className":759,"code":853,"language":761,"meta":11,"style":11},"\u003Cdependency>\n \u003CgroupId>org.apache.ws.commons.axiom\u003C/groupId>\n \u003CartifactId>axiom-api\u003C/artifactId>\n \u003Cversion>1.2\u003C/version>\n \u003Cexclusions>\n \u003Cexclusion>\n \u003CartifactId>commons-logging\u003C/artifactId>\n \u003CgroupId>commons-logging\u003C/groupId>\n \u003C/exclusion>\n \u003C/exclusions>\n\u003C/dependency>\n",[763,855,856,861,866,871,876,881,886,891,896,901,906],{"__ignoreMap":11},[766,857,858],{"class":768,"line":769},[766,859,860],{},"\u003Cdependency>\n",[766,862,863],{"class":768,"line":12},[766,864,865],{}," \u003CgroupId>org.apache.ws.commons.axiom\u003C/groupId>\n",[766,867,868],{"class":768,"line":780},[766,869,870],{}," \u003CartifactId>axiom-api\u003C/artifactId>\n",[766,872,873],{"class":768,"line":786},[766,874,875],{}," \u003Cversion>1.2\u003C/version>\n",[766,877,878],{"class":768,"line":792},[766,879,880],{}," \u003Cexclusions>\n",[766,882,883],{"class":768,"line":798},[766,884,885],{}," \u003Cexclusion>\n",[766,887,888],{"class":768,"line":804},[766,889,890],{}," \u003CartifactId>commons-logging\u003C/artifactId>\n",[766,892,893],{"class":768,"line":810},[766,894,895],{}," \u003CgroupId>commons-logging\u003C/groupId>\n",[766,897,898],{"class":768,"line":815},[766,899,900],{}," \u003C/exclusion>\n",[766,902,903],{"class":768,"line":821},[766,904,905],{}," \u003C/exclusions>\n",[766,907,908],{"class":768,"line":827},[766,909,910],{},"\u003C/dependency>\n",[42,912,913,914,919,920,925],{},"In order to analyze the dependency trees of our components\nthe ",[48,915,918],{"href":916,"rel":917},"http://maven.apache.org/plugins/maven-dependency-plugin/",[52],"Maven dependency plugin"," turned out to be very useful,\nespecially the ",[48,921,924],{"href":922,"rel":923},"http://maven.apache.org/plugins/maven-dependency-plugin/tree-mojo.html",[52],"dependency:tree"," mojo which will\nproduce a view of the project’s dependency tree including transitive dependencies. Of course a good IDE will also\nsupport you with graphical views of the dependency tree. Here’s the output of mvn dependency:tree for the aforementioned\nSwing application:",[757,927,931],{"className":928,"code":929,"language":930,"meta":11,"style":11},"language-shell shiki shiki-themes github-light github-dark","[INFO] [dependency:tree {execution: default-cli}]\n[INFO] com.example:swing-client:jar:1.1.0-SNAPSHOT\n[INFO] +- org.slf4j:slf4j-log4j12:jar:1.6.1:compile\n[INFO] | \\- log4j:log4j:jar:1.2.16:compile\n[INFO] +- jgoodies:plastic:jar:1.2.0:compile\n[INFO] +- com.toedter:jcalendar:jar:1.3.2:compile\n[INFO] +- com.example:jms:jar:1.0.1-SNAPSHOT:compile\n[INFO] | +- jboss:jboss-system:jar:4.0.2:compile\n[INFO] | +- jms:jms:jar:1.0.2:compile\n[INFO] | +- org.quartz-scheduler:quartz:jar:1.2.3:compile\n[INFO] | +- jboss:jbossmq-client:jar:4.0.2:compile\n[INFO] | +- jboss:jboss-jmx:jar:4.0.2:compile\n[INFO] | \\- javax.ejb:ejb:jar:2.1:compile\n[INFO] +- flex:flex-messaging-common:jar:1.0.0:compile\n[INFO] +- flex:flex-messaging-core:jar:1.0.0:compile\n[INFO] +- flex:flex-messaging-opt:jar:1.0.0:compile\n[INFO] +- flex:flex-messaging-proxy:jar:1.0.0:compile\n[INFO] +- flex:flex-messaging-remoting:jar:1.0.0:compile\n[INFO] +- poi:poi-2.5.1-final:jar:20040804:compile\n[INFO] +- com.example:docengine:jar:1.0.0-SNAPSHOT:compile\n[INFO] | +- com.example:webfw:jar:1.0.2-SNAPSHOT:compile\n[INFO] | | +- com.example:dms_client:jar:1.0.2:compile\n[INFO] | | | \\- org.apache.axis2:axis2:jar:1.1.1:compile\n[INFO] | | | +- org.apache.ws.commons.axiom:axiom-dom:jar:1.2:compile\n[INFO] | | | +- org.apache.ws.commons.axiom:axiom-impl:jar:1.2:compile\n[INFO] | | | +- ant:ant:jar:1.6.5:compile\n[INFO] | | | +- woodstox:wstx-asl:jar:3.0.1:compile\n[INFO] | | | +- org.apache.ws.commons.schema:XmlSchema:jar:1.2:compile\n[INFO] | | | +- annogen:annogen:jar:0.1.0:compile\n[INFO] | | | +- commons-httpclient:commons-httpclient:jar:3.0.1:compile\n[INFO] | | | | \\- commons-codec:commons-codec:jar:1.2:compile\n[INFO] | | | +- org.apache.httpcomponents:jakarta-httpcore:jar:4.0-alpha2:compile\n[INFO] | | | +- wsdl4j:wsdl4j:jar:1.6.1:compile\n[INFO] | | | +- backport-util-concurrent:backport-util-concurrent:jar:2.2:compile\n[INFO] | | | +- org.apache.ws.commons.neethi:neethi:jar:2.0:compile\n[INFO] | | | \\- org.apache.woden:woden-impl-om:jar:1.0M8:compile\n[INFO] | | | +- org.apache.woden:woden-api:jar:1.0M8:compile\n[INFO] | | | +- org.apache.ant:ant:jar:1.7.0:compile\n[INFO] | | | | \\- org.apache.ant:ant-launcher:jar:1.7.0:compile\n[INFO] | | | +- xerces:xmlParserAPIs:jar:2.6.0:compile\n[INFO] | | | \\- org.codehaus.woodstox:wstx-asl:jar:3.2.4:runtime\n[INFO] | | +- org.apache.ws.commons.axiom:axiom-api:jar:1.2:compile\n[INFO] | | | +- jaxen:jaxen:jar:1.1-beta-9:compile\n[INFO] | | | +- xml-apis:xml-apis:jar:1.3.03:compile\n[INFO] | | | \\- stax:stax-api:jar:1.0.1:compile\n[INFO] | | +- org.slf4j:jcl-over-slf4j:jar:1.6.1:compile\n[INFO] | | +- org.apache.struts:struts-core:jar:1.3.8:compile\n[INFO] | | | \\- commons-chain:commons-chain:jar:1.1:compile\n[INFO] | | +- com.sun.xml:xml:jar:0.8.0:compile\n[INFO] | | +- xmlc:xmlc-all-runtime:jar:2.2.8.1:compile\n[INFO] | | +- xalan:xalan:jar:2.7.1:compile\n[INFO] | | | \\- xalan:serializer:jar:2.7.1:compile\n[INFO] | | \\- com.lowagie:itext:jar:2.0.7:compile\n[INFO] | | +- bouncycastle:bcmail-jdk14:jar:138:compile\n[INFO] | | \\- bouncycastle:bcprov-jdk14:jar:138:compile\n[INFO] | +- org.apache.xmlgraphics:fop:jar:0.95-1:compile\n[INFO] | | +- org.apache.xmlgraphics:xmlgraphics-commons:jar:1.3.1:compile\n[INFO] | | +- org.apache.xmlgraphics:batik-svg-dom:jar:1.7:compile\n[INFO] | | | +- org.apache.xmlgraphics:batik-anim:jar:1.7:compile\n[INFO] | | | +- org.apache.xmlgraphics:batik-css:jar:1.7:compile\n[INFO] | | | +- org.apache.xmlgraphics:batik-dom:jar:1.7:compile\n[INFO] | | | +- org.apache.xmlgraphics:batik-parser:jar:1.7:compile\n[INFO] | | | +- org.apache.xmlgraphics:batik-util:jar:1.7:compile\n[INFO] | | | \\- xml-apis:xml-apis-ext:jar:1.3.04:compile\n[INFO] | | +- org.apache.xmlgraphics:batik-bridge:jar:1.7:compile\n[INFO] | | | +- org.apache.xmlgraphics:batik-script:jar:1.7:compile\n[INFO] | | | \\- org.apache.xmlgraphics:batik-xml:jar:1.7:compile\n[INFO] | | +- org.apache.xmlgraphics:batik-awt-util:jar:1.7:compile\n[INFO] | | +- org.apache.xmlgraphics:batik-gvt:jar:1.7:compile\n[INFO] | | +- org.apache.xmlgraphics:batik-transcoder:jar:1.7:compile\n[INFO] | | | \\- org.apache.xmlgraphics:batik-svggen:jar:1.7:compile\n[INFO] | | +- org.apache.xmlgraphics:batik-extension:jar:1.7:compile\n[INFO] | | +- org.apache.xmlgraphics:batik-ext:jar:1.7:compile\n[INFO] | | +- commons-io:commons-io:jar:1.3.1:compile\n[INFO] | | \\- org.apache.avalon.framework:avalon-framework-impl:jar:4.3.1:compile\n[INFO] | +- org.apache.avalon.framework:avalon-framework-api:jar:4.3.1:compile\n[INFO] | +- poi:poi:jar:2.5.1-final-20040804:compile\n[INFO] | +- javax.servlet:servlet-api:jar:2.5:compile\n[INFO] | +- javax.mail:mail:jar:1.4.1:compile\n[INFO] | | \\- javax.activation:activation:jar:1.1.1:compile\n[INFO] | +- org.openoffice:jurt:jar:3.2.1:compile\n[INFO] | | \\- org.openoffice:ridl:jar:3.2.1:compile\n[INFO] | +- org.openoffice:unoil:jar:3.1.0:compile\n[INFO] | +- org.openoffice:juh:jar:3.1.0:compile\n[INFO] | \\- ru.novosoft.dc:rtf2fo:jar:eval:compile\n[INFO] +- com.jgoodies:forms:jar:1.0.7:compile\n[INFO] +- xerces:xercesImpl:jar:2.4.0:compile\n[INFO] +- com.oracle:ojdbc5:jar:11.1.0.6.0:compile\n[INFO] +- javax.help:javahelp:jar:2.0.02:compile\n[INFO] +- com.example:custom-swing-framework:jar:1.1.2-SNAPSHOT:compile\n[INFO] | +- com.whirlycott:whirlycache:jar:0.7.1:compile\n[INFO] | | +- commons-collections:commons-collections:jar:3.1:compile\n[INFO] | | +- jdom:jdom:jar:1.0:compile\n[INFO] | | \\- concurrent:concurrent:jar:1.3.4:compile\n[INFO] | +- ehcache:ehcache:jar:0.9:compile\n[INFO] | +- org.enhydra.xmlc:xmlc:jar:2.2.7.1:compile\n[INFO] | +- com.jgoodies:looks:jar:2.2.2:compile\n[INFO] | +- org.swinglabs:swingx:jar:1.6.1:compile\n[INFO] | | +- com.jhlabs:filters:jar:2.0.235:compile\n[INFO] | | \\- org.swinglabs:swing-worker:jar:1.1:compile\n[INFO] | \\- struts:struts:jar:1.2.9:compile\n[INFO] | +- commons-beanutils:commons-beanutils:jar:1.7.0:compile\n[INFO] | +- commons-digester:commons-digester:jar:1.6:compile\n[INFO] | +- commons-fileupload:commons-fileupload:jar:1.0:compile\n[INFO] | +- commons-validator:commons-validator:jar:1.1.4:compile\n[INFO] | +- oro:oro:jar:2.0.7:compile\n[INFO] | \\- antlr:antlr:jar:2.7.2:compile\n[INFO] +- junit:junit:jar:4.8.2:test\n[INFO] \\- org.slf4j:slf4j-api:jar:1.6.1:compile\n[INFO] ------------------------------------------------------------------------\n[INFO] BUILD SUCCESSFUL\n[INFO] ------------------------------------------------------------------------\n[INFO] Total time: 2 seconds\n[INFO] Finished at: Tue Jun 28 14:10:29 CEST 2011\n[INFO] Final Memory: 22M/257M\n[INFO] ------------------------------------------------------------------------\n","shell",[763,932,933,939,944,949,966,971,976,981,993,1004,1015,1026,1037,1048,1054,1060,1066,1072,1078,1084,1090,1102,1117,1133,1150,1166,1182,1198,1214,1230,1246,1265,1281,1297,1313,1329,1346,1363,1379,1398,1414,1431,1445,1461,1477,1493,1507,1521,1537,1551,1565,1579,1595,1609,1623,1637,1649,1663,1677,1693,1709,1725,1741,1757,1773,1787,1803,1819,1833,1847,1861,1877,1891,1905,1919,1933,1945,1957,1969,1981,1995,2007,2021,2033,2045,2057,2063,2069,2075,2081,2087,2099,2113,2127,2141,2153,2165,2177,2189,2203,2217,2229,2241,2253,2265,2277,2289,2301,2307,2319,2325,2331,2336,2342,2348,2354],{"__ignoreMap":11},[766,934,935],{"class":768,"line":769},[766,936,938],{"class":937},"sVt8B","[INFO] [dependency:tree {execution: default-cli}]\n",[766,940,941],{"class":768,"line":12},[766,942,943],{"class":937},"[INFO] com.example:swing-client:jar:1.1.0-SNAPSHOT\n",[766,945,946],{"class":768,"line":780},[766,947,948],{"class":937},"[INFO] +- org.slf4j:slf4j-log4j12:jar:1.6.1:compile\n",[766,950,951,954,958,962],{"class":768,"line":786},[766,952,953],{"class":937},"[INFO] ",[766,955,957],{"class":956},"szBVR","|",[766,959,961],{"class":960},"sScJk"," \\-",[766,963,965],{"class":964},"sZZnC"," log4j:log4j:jar:1.2.16:compile\n",[766,967,968],{"class":768,"line":792},[766,969,970],{"class":937},"[INFO] +- jgoodies:plastic:jar:1.2.0:compile\n",[766,972,973],{"class":768,"line":798},[766,974,975],{"class":937},"[INFO] +- com.toedter:jcalendar:jar:1.3.2:compile\n",[766,977,978],{"class":768,"line":804},[766,979,980],{"class":937},"[INFO] +- com.example:jms:jar:1.0.1-SNAPSHOT:compile\n",[766,982,983,985,987,990],{"class":768,"line":810},[766,984,953],{"class":937},[766,986,957],{"class":956},[766,988,989],{"class":960}," +-",[766,991,992],{"class":964}," jboss:jboss-system:jar:4.0.2:compile\n",[766,994,995,997,999,1001],{"class":768,"line":815},[766,996,953],{"class":937},[766,998,957],{"class":956},[766,1000,989],{"class":960},[766,1002,1003],{"class":964}," jms:jms:jar:1.0.2:compile\n",[766,1005,1006,1008,1010,1012],{"class":768,"line":821},[766,1007,953],{"class":937},[766,1009,957],{"class":956},[766,1011,989],{"class":960},[766,1013,1014],{"class":964}," org.quartz-scheduler:quartz:jar:1.2.3:compile\n",[766,1016,1017,1019,1021,1023],{"class":768,"line":827},[766,1018,953],{"class":937},[766,1020,957],{"class":956},[766,1022,989],{"class":960},[766,1024,1025],{"class":964}," jboss:jbossmq-client:jar:4.0.2:compile\n",[766,1027,1028,1030,1032,1034],{"class":768,"line":833},[766,1029,953],{"class":937},[766,1031,957],{"class":956},[766,1033,989],{"class":960},[766,1035,1036],{"class":964}," jboss:jboss-jmx:jar:4.0.2:compile\n",[766,1038,1039,1041,1043,1045],{"class":768,"line":838},[766,1040,953],{"class":937},[766,1042,957],{"class":956},[766,1044,961],{"class":960},[766,1046,1047],{"class":964}," javax.ejb:ejb:jar:2.1:compile\n",[766,1049,1051],{"class":768,"line":1050},14,[766,1052,1053],{"class":937},"[INFO] +- flex:flex-messaging-common:jar:1.0.0:compile\n",[766,1055,1057],{"class":768,"line":1056},15,[766,1058,1059],{"class":937},"[INFO] +- flex:flex-messaging-core:jar:1.0.0:compile\n",[766,1061,1063],{"class":768,"line":1062},16,[766,1064,1065],{"class":937},"[INFO] +- flex:flex-messaging-opt:jar:1.0.0:compile\n",[766,1067,1069],{"class":768,"line":1068},17,[766,1070,1071],{"class":937},"[INFO] +- flex:flex-messaging-proxy:jar:1.0.0:compile\n",[766,1073,1075],{"class":768,"line":1074},18,[766,1076,1077],{"class":937},"[INFO] +- flex:flex-messaging-remoting:jar:1.0.0:compile\n",[766,1079,1081],{"class":768,"line":1080},19,[766,1082,1083],{"class":937},"[INFO] +- poi:poi-2.5.1-final:jar:20040804:compile\n",[766,1085,1087],{"class":768,"line":1086},20,[766,1088,1089],{"class":937},"[INFO] +- com.example:docengine:jar:1.0.0-SNAPSHOT:compile\n",[766,1091,1093,1095,1097,1099],{"class":768,"line":1092},21,[766,1094,953],{"class":937},[766,1096,957],{"class":956},[766,1098,989],{"class":960},[766,1100,1101],{"class":964}," com.example:webfw:jar:1.0.2-SNAPSHOT:compile\n",[766,1103,1105,1107,1109,1112,1114],{"class":768,"line":1104},22,[766,1106,953],{"class":937},[766,1108,957],{"class":956},[766,1110,1111],{"class":956}," |",[766,1113,989],{"class":960},[766,1115,1116],{"class":964}," com.example:dms_client:jar:1.0.2:compile\n",[766,1118,1120,1122,1124,1126,1128,1130],{"class":768,"line":1119},23,[766,1121,953],{"class":937},[766,1123,957],{"class":956},[766,1125,1111],{"class":956},[766,1127,1111],{"class":956},[766,1129,961],{"class":960},[766,1131,1132],{"class":964}," org.apache.axis2:axis2:jar:1.1.1:compile\n",[766,1134,1136,1138,1140,1142,1144,1147],{"class":768,"line":1135},24,[766,1137,953],{"class":937},[766,1139,957],{"class":956},[766,1141,1111],{"class":956},[766,1143,1111],{"class":956},[766,1145,1146],{"class":960}," +-",[766,1148,1149],{"class":964}," org.apache.ws.commons.axiom:axiom-dom:jar:1.2:compile\n",[766,1151,1153,1155,1157,1159,1161,1163],{"class":768,"line":1152},25,[766,1154,953],{"class":937},[766,1156,957],{"class":956},[766,1158,1111],{"class":956},[766,1160,1111],{"class":956},[766,1162,1146],{"class":960},[766,1164,1165],{"class":964}," org.apache.ws.commons.axiom:axiom-impl:jar:1.2:compile\n",[766,1167,1169,1171,1173,1175,1177,1179],{"class":768,"line":1168},26,[766,1170,953],{"class":937},[766,1172,957],{"class":956},[766,1174,1111],{"class":956},[766,1176,1111],{"class":956},[766,1178,1146],{"class":960},[766,1180,1181],{"class":964}," ant:ant:jar:1.6.5:compile\n",[766,1183,1185,1187,1189,1191,1193,1195],{"class":768,"line":1184},27,[766,1186,953],{"class":937},[766,1188,957],{"class":956},[766,1190,1111],{"class":956},[766,1192,1111],{"class":956},[766,1194,1146],{"class":960},[766,1196,1197],{"class":964}," woodstox:wstx-asl:jar:3.0.1:compile\n",[766,1199,1201,1203,1205,1207,1209,1211],{"class":768,"line":1200},28,[766,1202,953],{"class":937},[766,1204,957],{"class":956},[766,1206,1111],{"class":956},[766,1208,1111],{"class":956},[766,1210,1146],{"class":960},[766,1212,1213],{"class":964}," org.apache.ws.commons.schema:XmlSchema:jar:1.2:compile\n",[766,1215,1217,1219,1221,1223,1225,1227],{"class":768,"line":1216},29,[766,1218,953],{"class":937},[766,1220,957],{"class":956},[766,1222,1111],{"class":956},[766,1224,1111],{"class":956},[766,1226,1146],{"class":960},[766,1228,1229],{"class":964}," annogen:annogen:jar:0.1.0:compile\n",[766,1231,1233,1235,1237,1239,1241,1243],{"class":768,"line":1232},30,[766,1234,953],{"class":937},[766,1236,957],{"class":956},[766,1238,1111],{"class":956},[766,1240,1111],{"class":956},[766,1242,1146],{"class":960},[766,1244,1245],{"class":964}," commons-httpclient:commons-httpclient:jar:3.0.1:compile\n",[766,1247,1249,1251,1253,1255,1257,1260,1262],{"class":768,"line":1248},31,[766,1250,953],{"class":937},[766,1252,957],{"class":956},[766,1254,1111],{"class":956},[766,1256,1111],{"class":956},[766,1258,1259],{"class":956}," |",[766,1261,961],{"class":960},[766,1263,1264],{"class":964}," commons-codec:commons-codec:jar:1.2:compile\n",[766,1266,1268,1270,1272,1274,1276,1278],{"class":768,"line":1267},32,[766,1269,953],{"class":937},[766,1271,957],{"class":956},[766,1273,1111],{"class":956},[766,1275,1111],{"class":956},[766,1277,1146],{"class":960},[766,1279,1280],{"class":964}," org.apache.httpcomponents:jakarta-httpcore:jar:4.0-alpha2:compile\n",[766,1282,1284,1286,1288,1290,1292,1294],{"class":768,"line":1283},33,[766,1285,953],{"class":937},[766,1287,957],{"class":956},[766,1289,1111],{"class":956},[766,1291,1111],{"class":956},[766,1293,1146],{"class":960},[766,1295,1296],{"class":964}," wsdl4j:wsdl4j:jar:1.6.1:compile\n",[766,1298,1300,1302,1304,1306,1308,1310],{"class":768,"line":1299},34,[766,1301,953],{"class":937},[766,1303,957],{"class":956},[766,1305,1111],{"class":956},[766,1307,1111],{"class":956},[766,1309,1146],{"class":960},[766,1311,1312],{"class":964}," backport-util-concurrent:backport-util-concurrent:jar:2.2:compile\n",[766,1314,1316,1318,1320,1322,1324,1326],{"class":768,"line":1315},35,[766,1317,953],{"class":937},[766,1319,957],{"class":956},[766,1321,1111],{"class":956},[766,1323,1111],{"class":956},[766,1325,1146],{"class":960},[766,1327,1328],{"class":964}," org.apache.ws.commons.neethi:neethi:jar:2.0:compile\n",[766,1330,1332,1334,1336,1338,1340,1343],{"class":768,"line":1331},36,[766,1333,953],{"class":937},[766,1335,957],{"class":956},[766,1337,1111],{"class":956},[766,1339,1111],{"class":956},[766,1341,1342],{"class":960}," \\-",[766,1344,1345],{"class":964}," org.apache.woden:woden-impl-om:jar:1.0M8:compile\n",[766,1347,1349,1351,1353,1355,1357,1360],{"class":768,"line":1348},37,[766,1350,953],{"class":937},[766,1352,957],{"class":956},[766,1354,1111],{"class":956},[766,1356,1111],{"class":956},[766,1358,1359],{"class":960}," +-",[766,1361,1362],{"class":964}," org.apache.woden:woden-api:jar:1.0M8:compile\n",[766,1364,1366,1368,1370,1372,1374,1376],{"class":768,"line":1365},38,[766,1367,953],{"class":937},[766,1369,957],{"class":956},[766,1371,1111],{"class":956},[766,1373,1111],{"class":956},[766,1375,1359],{"class":960},[766,1377,1378],{"class":964}," org.apache.ant:ant:jar:1.7.0:compile\n",[766,1380,1382,1384,1386,1388,1390,1393,1395],{"class":768,"line":1381},39,[766,1383,953],{"class":937},[766,1385,957],{"class":956},[766,1387,1111],{"class":956},[766,1389,1111],{"class":956},[766,1391,1392],{"class":956}," |",[766,1394,961],{"class":960},[766,1396,1397],{"class":964}," org.apache.ant:ant-launcher:jar:1.7.0:compile\n",[766,1399,1401,1403,1405,1407,1409,1411],{"class":768,"line":1400},40,[766,1402,953],{"class":937},[766,1404,957],{"class":956},[766,1406,1111],{"class":956},[766,1408,1111],{"class":956},[766,1410,1359],{"class":960},[766,1412,1413],{"class":964}," xerces:xmlParserAPIs:jar:2.6.0:compile\n",[766,1415,1417,1419,1421,1423,1425,1428],{"class":768,"line":1416},41,[766,1418,953],{"class":937},[766,1420,957],{"class":956},[766,1422,1111],{"class":956},[766,1424,1111],{"class":956},[766,1426,1427],{"class":960}," \\-",[766,1429,1430],{"class":964}," org.codehaus.woodstox:wstx-asl:jar:3.2.4:runtime\n",[766,1432,1434,1436,1438,1440,1442],{"class":768,"line":1433},42,[766,1435,953],{"class":937},[766,1437,957],{"class":956},[766,1439,1111],{"class":956},[766,1441,989],{"class":960},[766,1443,1444],{"class":964}," org.apache.ws.commons.axiom:axiom-api:jar:1.2:compile\n",[766,1446,1448,1450,1452,1454,1456,1458],{"class":768,"line":1447},43,[766,1449,953],{"class":937},[766,1451,957],{"class":956},[766,1453,1111],{"class":956},[766,1455,1111],{"class":956},[766,1457,989],{"class":960},[766,1459,1460],{"class":964}," jaxen:jaxen:jar:1.1-beta-9:compile\n",[766,1462,1464,1466,1468,1470,1472,1474],{"class":768,"line":1463},44,[766,1465,953],{"class":937},[766,1467,957],{"class":956},[766,1469,1111],{"class":956},[766,1471,1111],{"class":956},[766,1473,989],{"class":960},[766,1475,1476],{"class":964}," xml-apis:xml-apis:jar:1.3.03:compile\n",[766,1478,1480,1482,1484,1486,1488,1490],{"class":768,"line":1479},45,[766,1481,953],{"class":937},[766,1483,957],{"class":956},[766,1485,1111],{"class":956},[766,1487,1111],{"class":956},[766,1489,961],{"class":960},[766,1491,1492],{"class":964}," stax:stax-api:jar:1.0.1:compile\n",[766,1494,1496,1498,1500,1502,1504],{"class":768,"line":1495},46,[766,1497,953],{"class":937},[766,1499,957],{"class":956},[766,1501,1111],{"class":956},[766,1503,989],{"class":960},[766,1505,1506],{"class":964}," org.slf4j:jcl-over-slf4j:jar:1.6.1:compile\n",[766,1508,1510,1512,1514,1516,1518],{"class":768,"line":1509},47,[766,1511,953],{"class":937},[766,1513,957],{"class":956},[766,1515,1111],{"class":956},[766,1517,989],{"class":960},[766,1519,1520],{"class":964}," org.apache.struts:struts-core:jar:1.3.8:compile\n",[766,1522,1524,1526,1528,1530,1532,1534],{"class":768,"line":1523},48,[766,1525,953],{"class":937},[766,1527,957],{"class":956},[766,1529,1111],{"class":956},[766,1531,1111],{"class":956},[766,1533,961],{"class":960},[766,1535,1536],{"class":964}," commons-chain:commons-chain:jar:1.1:compile\n",[766,1538,1540,1542,1544,1546,1548],{"class":768,"line":1539},49,[766,1541,953],{"class":937},[766,1543,957],{"class":956},[766,1545,1111],{"class":956},[766,1547,989],{"class":960},[766,1549,1550],{"class":964}," com.sun.xml:xml:jar:0.8.0:compile\n",[766,1552,1554,1556,1558,1560,1562],{"class":768,"line":1553},50,[766,1555,953],{"class":937},[766,1557,957],{"class":956},[766,1559,1111],{"class":956},[766,1561,989],{"class":960},[766,1563,1564],{"class":964}," xmlc:xmlc-all-runtime:jar:2.2.8.1:compile\n",[766,1566,1568,1570,1572,1574,1576],{"class":768,"line":1567},51,[766,1569,953],{"class":937},[766,1571,957],{"class":956},[766,1573,1111],{"class":956},[766,1575,989],{"class":960},[766,1577,1578],{"class":964}," xalan:xalan:jar:2.7.1:compile\n",[766,1580,1582,1584,1586,1588,1590,1592],{"class":768,"line":1581},52,[766,1583,953],{"class":937},[766,1585,957],{"class":956},[766,1587,1111],{"class":956},[766,1589,1111],{"class":956},[766,1591,961],{"class":960},[766,1593,1594],{"class":964}," xalan:serializer:jar:2.7.1:compile\n",[766,1596,1598,1600,1602,1604,1606],{"class":768,"line":1597},53,[766,1599,953],{"class":937},[766,1601,957],{"class":956},[766,1603,1111],{"class":956},[766,1605,961],{"class":960},[766,1607,1608],{"class":964}," com.lowagie:itext:jar:2.0.7:compile\n",[766,1610,1612,1614,1616,1618,1620],{"class":768,"line":1611},54,[766,1613,953],{"class":937},[766,1615,957],{"class":956},[766,1617,1111],{"class":956},[766,1619,1146],{"class":960},[766,1621,1622],{"class":964}," bouncycastle:bcmail-jdk14:jar:138:compile\n",[766,1624,1626,1628,1630,1632,1634],{"class":768,"line":1625},55,[766,1627,953],{"class":937},[766,1629,957],{"class":956},[766,1631,1111],{"class":956},[766,1633,1342],{"class":960},[766,1635,1636],{"class":964}," bouncycastle:bcprov-jdk14:jar:138:compile\n",[766,1638,1640,1642,1644,1646],{"class":768,"line":1639},56,[766,1641,953],{"class":937},[766,1643,957],{"class":956},[766,1645,989],{"class":960},[766,1647,1648],{"class":964}," org.apache.xmlgraphics:fop:jar:0.95-1:compile\n",[766,1650,1652,1654,1656,1658,1660],{"class":768,"line":1651},57,[766,1653,953],{"class":937},[766,1655,957],{"class":956},[766,1657,1111],{"class":956},[766,1659,989],{"class":960},[766,1661,1662],{"class":964}," org.apache.xmlgraphics:xmlgraphics-commons:jar:1.3.1:compile\n",[766,1664,1666,1668,1670,1672,1674],{"class":768,"line":1665},58,[766,1667,953],{"class":937},[766,1669,957],{"class":956},[766,1671,1111],{"class":956},[766,1673,989],{"class":960},[766,1675,1676],{"class":964}," org.apache.xmlgraphics:batik-svg-dom:jar:1.7:compile\n",[766,1678,1680,1682,1684,1686,1688,1690],{"class":768,"line":1679},59,[766,1681,953],{"class":937},[766,1683,957],{"class":956},[766,1685,1111],{"class":956},[766,1687,1111],{"class":956},[766,1689,989],{"class":960},[766,1691,1692],{"class":964}," org.apache.xmlgraphics:batik-anim:jar:1.7:compile\n",[766,1694,1696,1698,1700,1702,1704,1706],{"class":768,"line":1695},60,[766,1697,953],{"class":937},[766,1699,957],{"class":956},[766,1701,1111],{"class":956},[766,1703,1111],{"class":956},[766,1705,989],{"class":960},[766,1707,1708],{"class":964}," org.apache.xmlgraphics:batik-css:jar:1.7:compile\n",[766,1710,1712,1714,1716,1718,1720,1722],{"class":768,"line":1711},61,[766,1713,953],{"class":937},[766,1715,957],{"class":956},[766,1717,1111],{"class":956},[766,1719,1111],{"class":956},[766,1721,989],{"class":960},[766,1723,1724],{"class":964}," org.apache.xmlgraphics:batik-dom:jar:1.7:compile\n",[766,1726,1728,1730,1732,1734,1736,1738],{"class":768,"line":1727},62,[766,1729,953],{"class":937},[766,1731,957],{"class":956},[766,1733,1111],{"class":956},[766,1735,1111],{"class":956},[766,1737,989],{"class":960},[766,1739,1740],{"class":964}," org.apache.xmlgraphics:batik-parser:jar:1.7:compile\n",[766,1742,1744,1746,1748,1750,1752,1754],{"class":768,"line":1743},63,[766,1745,953],{"class":937},[766,1747,957],{"class":956},[766,1749,1111],{"class":956},[766,1751,1111],{"class":956},[766,1753,989],{"class":960},[766,1755,1756],{"class":964}," org.apache.xmlgraphics:batik-util:jar:1.7:compile\n",[766,1758,1760,1762,1764,1766,1768,1770],{"class":768,"line":1759},64,[766,1761,953],{"class":937},[766,1763,957],{"class":956},[766,1765,1111],{"class":956},[766,1767,1111],{"class":956},[766,1769,961],{"class":960},[766,1771,1772],{"class":964}," xml-apis:xml-apis-ext:jar:1.3.04:compile\n",[766,1774,1776,1778,1780,1782,1784],{"class":768,"line":1775},65,[766,1777,953],{"class":937},[766,1779,957],{"class":956},[766,1781,1111],{"class":956},[766,1783,989],{"class":960},[766,1785,1786],{"class":964}," org.apache.xmlgraphics:batik-bridge:jar:1.7:compile\n",[766,1788,1790,1792,1794,1796,1798,1800],{"class":768,"line":1789},66,[766,1791,953],{"class":937},[766,1793,957],{"class":956},[766,1795,1111],{"class":956},[766,1797,1111],{"class":956},[766,1799,989],{"class":960},[766,1801,1802],{"class":964}," org.apache.xmlgraphics:batik-script:jar:1.7:compile\n",[766,1804,1806,1808,1810,1812,1814,1816],{"class":768,"line":1805},67,[766,1807,953],{"class":937},[766,1809,957],{"class":956},[766,1811,1111],{"class":956},[766,1813,1111],{"class":956},[766,1815,961],{"class":960},[766,1817,1818],{"class":964}," org.apache.xmlgraphics:batik-xml:jar:1.7:compile\n",[766,1820,1822,1824,1826,1828,1830],{"class":768,"line":1821},68,[766,1823,953],{"class":937},[766,1825,957],{"class":956},[766,1827,1111],{"class":956},[766,1829,989],{"class":960},[766,1831,1832],{"class":964}," org.apache.xmlgraphics:batik-awt-util:jar:1.7:compile\n",[766,1834,1836,1838,1840,1842,1844],{"class":768,"line":1835},69,[766,1837,953],{"class":937},[766,1839,957],{"class":956},[766,1841,1111],{"class":956},[766,1843,989],{"class":960},[766,1845,1846],{"class":964}," org.apache.xmlgraphics:batik-gvt:jar:1.7:compile\n",[766,1848,1850,1852,1854,1856,1858],{"class":768,"line":1849},70,[766,1851,953],{"class":937},[766,1853,957],{"class":956},[766,1855,1111],{"class":956},[766,1857,989],{"class":960},[766,1859,1860],{"class":964}," org.apache.xmlgraphics:batik-transcoder:jar:1.7:compile\n",[766,1862,1864,1866,1868,1870,1872,1874],{"class":768,"line":1863},71,[766,1865,953],{"class":937},[766,1867,957],{"class":956},[766,1869,1111],{"class":956},[766,1871,1111],{"class":956},[766,1873,961],{"class":960},[766,1875,1876],{"class":964}," org.apache.xmlgraphics:batik-svggen:jar:1.7:compile\n",[766,1878,1880,1882,1884,1886,1888],{"class":768,"line":1879},72,[766,1881,953],{"class":937},[766,1883,957],{"class":956},[766,1885,1111],{"class":956},[766,1887,989],{"class":960},[766,1889,1890],{"class":964}," org.apache.xmlgraphics:batik-extension:jar:1.7:compile\n",[766,1892,1894,1896,1898,1900,1902],{"class":768,"line":1893},73,[766,1895,953],{"class":937},[766,1897,957],{"class":956},[766,1899,1111],{"class":956},[766,1901,989],{"class":960},[766,1903,1904],{"class":964}," org.apache.xmlgraphics:batik-ext:jar:1.7:compile\n",[766,1906,1908,1910,1912,1914,1916],{"class":768,"line":1907},74,[766,1909,953],{"class":937},[766,1911,957],{"class":956},[766,1913,1111],{"class":956},[766,1915,989],{"class":960},[766,1917,1918],{"class":964}," commons-io:commons-io:jar:1.3.1:compile\n",[766,1920,1922,1924,1926,1928,1930],{"class":768,"line":1921},75,[766,1923,953],{"class":937},[766,1925,957],{"class":956},[766,1927,1111],{"class":956},[766,1929,961],{"class":960},[766,1931,1932],{"class":964}," org.apache.avalon.framework:avalon-framework-impl:jar:4.3.1:compile\n",[766,1934,1936,1938,1940,1942],{"class":768,"line":1935},76,[766,1937,953],{"class":937},[766,1939,957],{"class":956},[766,1941,989],{"class":960},[766,1943,1944],{"class":964}," org.apache.avalon.framework:avalon-framework-api:jar:4.3.1:compile\n",[766,1946,1948,1950,1952,1954],{"class":768,"line":1947},77,[766,1949,953],{"class":937},[766,1951,957],{"class":956},[766,1953,989],{"class":960},[766,1955,1956],{"class":964}," poi:poi:jar:2.5.1-final-20040804:compile\n",[766,1958,1960,1962,1964,1966],{"class":768,"line":1959},78,[766,1961,953],{"class":937},[766,1963,957],{"class":956},[766,1965,989],{"class":960},[766,1967,1968],{"class":964}," javax.servlet:servlet-api:jar:2.5:compile\n",[766,1970,1972,1974,1976,1978],{"class":768,"line":1971},79,[766,1973,953],{"class":937},[766,1975,957],{"class":956},[766,1977,989],{"class":960},[766,1979,1980],{"class":964}," javax.mail:mail:jar:1.4.1:compile\n",[766,1982,1984,1986,1988,1990,1992],{"class":768,"line":1983},80,[766,1985,953],{"class":937},[766,1987,957],{"class":956},[766,1989,1111],{"class":956},[766,1991,961],{"class":960},[766,1993,1994],{"class":964}," javax.activation:activation:jar:1.1.1:compile\n",[766,1996,1998,2000,2002,2004],{"class":768,"line":1997},81,[766,1999,953],{"class":937},[766,2001,957],{"class":956},[766,2003,989],{"class":960},[766,2005,2006],{"class":964}," org.openoffice:jurt:jar:3.2.1:compile\n",[766,2008,2010,2012,2014,2016,2018],{"class":768,"line":2009},82,[766,2011,953],{"class":937},[766,2013,957],{"class":956},[766,2015,1111],{"class":956},[766,2017,961],{"class":960},[766,2019,2020],{"class":964}," org.openoffice:ridl:jar:3.2.1:compile\n",[766,2022,2024,2026,2028,2030],{"class":768,"line":2023},83,[766,2025,953],{"class":937},[766,2027,957],{"class":956},[766,2029,989],{"class":960},[766,2031,2032],{"class":964}," org.openoffice:unoil:jar:3.1.0:compile\n",[766,2034,2036,2038,2040,2042],{"class":768,"line":2035},84,[766,2037,953],{"class":937},[766,2039,957],{"class":956},[766,2041,989],{"class":960},[766,2043,2044],{"class":964}," org.openoffice:juh:jar:3.1.0:compile\n",[766,2046,2048,2050,2052,2054],{"class":768,"line":2047},85,[766,2049,953],{"class":937},[766,2051,957],{"class":956},[766,2053,961],{"class":960},[766,2055,2056],{"class":964}," ru.novosoft.dc:rtf2fo:jar:eval:compile\n",[766,2058,2060],{"class":768,"line":2059},86,[766,2061,2062],{"class":937},"[INFO] +- com.jgoodies:forms:jar:1.0.7:compile\n",[766,2064,2066],{"class":768,"line":2065},87,[766,2067,2068],{"class":937},"[INFO] +- xerces:xercesImpl:jar:2.4.0:compile\n",[766,2070,2072],{"class":768,"line":2071},88,[766,2073,2074],{"class":937},"[INFO] +- com.oracle:ojdbc5:jar:11.1.0.6.0:compile\n",[766,2076,2078],{"class":768,"line":2077},89,[766,2079,2080],{"class":937},"[INFO] +- javax.help:javahelp:jar:2.0.02:compile\n",[766,2082,2084],{"class":768,"line":2083},90,[766,2085,2086],{"class":937},"[INFO] +- com.example:custom-swing-framework:jar:1.1.2-SNAPSHOT:compile\n",[766,2088,2090,2092,2094,2096],{"class":768,"line":2089},91,[766,2091,953],{"class":937},[766,2093,957],{"class":956},[766,2095,989],{"class":960},[766,2097,2098],{"class":964}," com.whirlycott:whirlycache:jar:0.7.1:compile\n",[766,2100,2102,2104,2106,2108,2110],{"class":768,"line":2101},92,[766,2103,953],{"class":937},[766,2105,957],{"class":956},[766,2107,1111],{"class":956},[766,2109,989],{"class":960},[766,2111,2112],{"class":964}," commons-collections:commons-collections:jar:3.1:compile\n",[766,2114,2116,2118,2120,2122,2124],{"class":768,"line":2115},93,[766,2117,953],{"class":937},[766,2119,957],{"class":956},[766,2121,1111],{"class":956},[766,2123,989],{"class":960},[766,2125,2126],{"class":964}," jdom:jdom:jar:1.0:compile\n",[766,2128,2130,2132,2134,2136,2138],{"class":768,"line":2129},94,[766,2131,953],{"class":937},[766,2133,957],{"class":956},[766,2135,1111],{"class":956},[766,2137,961],{"class":960},[766,2139,2140],{"class":964}," concurrent:concurrent:jar:1.3.4:compile\n",[766,2142,2144,2146,2148,2150],{"class":768,"line":2143},95,[766,2145,953],{"class":937},[766,2147,957],{"class":956},[766,2149,989],{"class":960},[766,2151,2152],{"class":964}," ehcache:ehcache:jar:0.9:compile\n",[766,2154,2156,2158,2160,2162],{"class":768,"line":2155},96,[766,2157,953],{"class":937},[766,2159,957],{"class":956},[766,2161,989],{"class":960},[766,2163,2164],{"class":964}," org.enhydra.xmlc:xmlc:jar:2.2.7.1:compile\n",[766,2166,2168,2170,2172,2174],{"class":768,"line":2167},97,[766,2169,953],{"class":937},[766,2171,957],{"class":956},[766,2173,989],{"class":960},[766,2175,2176],{"class":964}," com.jgoodies:looks:jar:2.2.2:compile\n",[766,2178,2180,2182,2184,2186],{"class":768,"line":2179},98,[766,2181,953],{"class":937},[766,2183,957],{"class":956},[766,2185,989],{"class":960},[766,2187,2188],{"class":964}," org.swinglabs:swingx:jar:1.6.1:compile\n",[766,2190,2192,2194,2196,2198,2200],{"class":768,"line":2191},99,[766,2193,953],{"class":937},[766,2195,957],{"class":956},[766,2197,1111],{"class":956},[766,2199,989],{"class":960},[766,2201,2202],{"class":964}," com.jhlabs:filters:jar:2.0.235:compile\n",[766,2204,2206,2208,2210,2212,2214],{"class":768,"line":2205},100,[766,2207,953],{"class":937},[766,2209,957],{"class":956},[766,2211,1111],{"class":956},[766,2213,961],{"class":960},[766,2215,2216],{"class":964}," org.swinglabs:swing-worker:jar:1.1:compile\n",[766,2218,2220,2222,2224,2226],{"class":768,"line":2219},101,[766,2221,953],{"class":937},[766,2223,957],{"class":956},[766,2225,961],{"class":960},[766,2227,2228],{"class":964}," struts:struts:jar:1.2.9:compile\n",[766,2230,2232,2234,2236,2238],{"class":768,"line":2231},102,[766,2233,953],{"class":937},[766,2235,957],{"class":956},[766,2237,1146],{"class":960},[766,2239,2240],{"class":964}," commons-beanutils:commons-beanutils:jar:1.7.0:compile\n",[766,2242,2244,2246,2248,2250],{"class":768,"line":2243},103,[766,2245,953],{"class":937},[766,2247,957],{"class":956},[766,2249,1146],{"class":960},[766,2251,2252],{"class":964}," commons-digester:commons-digester:jar:1.6:compile\n",[766,2254,2256,2258,2260,2262],{"class":768,"line":2255},104,[766,2257,953],{"class":937},[766,2259,957],{"class":956},[766,2261,1146],{"class":960},[766,2263,2264],{"class":964}," commons-fileupload:commons-fileupload:jar:1.0:compile\n",[766,2266,2268,2270,2272,2274],{"class":768,"line":2267},105,[766,2269,953],{"class":937},[766,2271,957],{"class":956},[766,2273,1146],{"class":960},[766,2275,2276],{"class":964}," commons-validator:commons-validator:jar:1.1.4:compile\n",[766,2278,2280,2282,2284,2286],{"class":768,"line":2279},106,[766,2281,953],{"class":937},[766,2283,957],{"class":956},[766,2285,1146],{"class":960},[766,2287,2288],{"class":964}," oro:oro:jar:2.0.7:compile\n",[766,2290,2292,2294,2296,2298],{"class":768,"line":2291},107,[766,2293,953],{"class":937},[766,2295,957],{"class":956},[766,2297,1342],{"class":960},[766,2299,2300],{"class":964}," antlr:antlr:jar:2.7.2:compile\n",[766,2302,2304],{"class":768,"line":2303},108,[766,2305,2306],{"class":937},"[INFO] +- junit:junit:jar:4.8.2:test\n",[766,2308,2310,2312,2316],{"class":768,"line":2309},109,[766,2311,953],{"class":937},[766,2313,2315],{"class":2314},"sj4cs","\\-",[766,2317,2318],{"class":937}," org.slf4j:slf4j-api:jar:1.6.1:compile\n",[766,2320,2322],{"class":768,"line":2321},110,[766,2323,2324],{"class":937},"[INFO] ------------------------------------------------------------------------\n",[766,2326,2328],{"class":768,"line":2327},111,[766,2329,2330],{"class":937},"[INFO] BUILD SUCCESSFUL\n",[766,2332,2334],{"class":768,"line":2333},112,[766,2335,2324],{"class":937},[766,2337,2339],{"class":768,"line":2338},113,[766,2340,2341],{"class":937},"[INFO] Total time: 2 seconds\n",[766,2343,2345],{"class":768,"line":2344},114,[766,2346,2347],{"class":937},"[INFO] Finished at: Tue Jun 28 14:10:29 CEST 2011\n",[766,2349,2351],{"class":768,"line":2350},115,[766,2352,2353],{"class":937},"[INFO] Final Memory: 22M/257M\n",[766,2355,2357],{"class":768,"line":2356},116,[766,2358,2324],{"class":937},[42,2360,2361],{},"As described before the elimination of the “rogue” logging class wasn’t a big problem. But we hadn’t reached the finish\nline yet.",[42,2363,2364,2365,2370,2371,2376,2377,2382,2383,2388,2389,2394,2395,2400],{},"The final application is being assembled into one big EAR file which contains a lot\nof ",[48,2366,2369],{"href":2367,"rel":2368},"http://docs.jboss.org/jbossas/jboss4guide/r4/html/ch5.chapter.html",[52],"EJBs",", SAR\nfiles (",[48,2372,2375],{"href":2373,"rel":2374},"http://community.jboss.org/wiki/ServiceArchive",[52],"JBoss Service Archives","), and\nthree ",[48,2378,2381],{"href":2379,"rel":2380},"http://docs.jboss.org/jbossas/jboss4guide/r4/html/ch9.chapt.html",[52],"WARs"," (web applications). By default JBoss uses\nits unified class loader (well described in the JBoss Admin Guide in\nsection ",[48,2384,2387],{"href":2385,"rel":2386},"http://docs.jboss.org/jbossas/jboss4guide/r4/html/ch2.chapter.html#d0e2490",[52],"2.2.2.4. Inside the JBoss Class Loading Architecture",")\nwhich is for several reasons not suitable for the architecture of this legacy application (using incompatible versions\nof the same library in different components for example). Thus we wanted to utilize Apache Tomcat’s class loading\nmechanism, described in\nthe ",[48,2390,2393],{"href":2391,"rel":2392},"http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html",[52],"Apache Tomcat 5.5 Class Loader HOW-TO",", which\nbasically isolates the deployed web applications from each other. The wiki article\non ",[48,2396,2399],{"href":2397,"rel":2398},"http://community.jboss.org/wiki/JBossClassLoadingUseCases",[52],"Advanced JBoss Class Loading"," is also very informative in\nthis context.",[42,2402,2403,2404,2409,2410,2415],{},"Since JBoss 4.0.3.SP1 is using Apache Tomcat 5.5 as servlet container it\nprovides ",[48,2405,2408],{"href":2406,"rel":2407},"http://community.jboss.org/wiki/UseJBossWebLoader",[52],"a simple configuration setting"," to achieve exactly the\nabove described behaviour. Unfortunately we encountered a lot of class loading problems when we first deployed the\napplication after the log framework refactoring. We checked the dependencies for each component but everything seemed to\nbe correct. So we started what we do best:\nset ",[48,2411,2414],{"href":2412,"rel":2413},"http://community.jboss.org/wiki/EnableClassloaderLogging",[52],"logging to DEBUG"," and engage!",[42,2417,2418,2419,2424,2425,2430,2431,75],{},"In the end some knee-deep class loader debugging hinted us in the right direction: It’s not advisable to have more than\none instance of the SLF4J JARs in your class path. Basically the class loader was complaining that the classes it was\ntrying to load (e.\ng. ",[48,2420,2423],{"href":2421,"rel":2422},"http://www.slf4j.org/apidocs/org/slf4j/spi/LoggerFactoryBinder.html",[52],"org.slf4j.spi.LoggerFactoryBinder",") had already\nbeen loaded from another repository. If you recall the details of Apache\nTomcat’s ",[48,2426,2429],{"href":2427,"rel":2428},"http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html#Overview",[52],"class loader"," this makes perfect\nsense but we thought that it was intelligent enough to actually share these classes. As it turns out there’s a (somewhat\nundocumented) configuration option which will exactly do this for us: ",[514,2432,2433],{},"FilteredPackages",[42,2435,2436],{},"After adding the SLF4J package prefix to our jbossweb-tomcat.sar/META-INF/jboss-service.xml file as shown below, the\napplication magically started working again.",[757,2438,2440],{"className":759,"code":2439,"language":761,"meta":11,"style":11}," \u003C!-- The list of package prefixes that should not be loaded without\n delegating to the parent class loader before trying the web app\n class loader. The packages listed here are those tha are used by\n the web container implementation and cannot be overriden. The format\n is a comma separated list of the package names. There cannot be any\n whitespace between the package prefixes.\n This setting only applies when UseJBossWebLoader=false.\n -->\n \u003Cattribute name=\"FilteredPackages\">javax.servlet,org.slf4j\u003C/attribute>\n",[763,2441,2442,2447,2452,2457,2462,2467,2472,2477,2482],{"__ignoreMap":11},[766,2443,2444],{"class":768,"line":769},[766,2445,2446],{}," \u003C!-- The list of package prefixes that should not be loaded without\n",[766,2448,2449],{"class":768,"line":12},[766,2450,2451],{}," delegating to the parent class loader before trying the web app\n",[766,2453,2454],{"class":768,"line":780},[766,2455,2456],{}," class loader. The packages listed here are those tha are used by\n",[766,2458,2459],{"class":768,"line":786},[766,2460,2461],{}," the web container implementation and cannot be overriden. The format\n",[766,2463,2464],{"class":768,"line":792},[766,2465,2466],{}," is a comma separated list of the package names. There cannot be any\n",[766,2468,2469],{"class":768,"line":798},[766,2470,2471],{}," whitespace between the package prefixes.\n",[766,2473,2474],{"class":768,"line":804},[766,2475,2476],{}," This setting only applies when UseJBossWebLoader=false.\n",[766,2478,2479],{"class":768,"line":810},[766,2480,2481],{}," -->\n",[766,2483,2484],{"class":768,"line":815},[766,2485,2486],{}," \u003Cattribute name=\"FilteredPackages\">javax.servlet,org.slf4j\u003C/attribute>\n",[164,2488,2490],{"id":2489},"lessons-learned","Lessons learned",[77,2492,2493,2506,2509,2512,2515,2518,2548],{},[80,2494,2495,2496,2499,2500,2505],{},"If you’re starting a new project choose exactly one logging framework and stick with it. I recommend\nusing ",[48,2497,685],{"href":683,"rel":2498},[52]," for its stable API and ",[48,2501,2504],{"href":2502,"rel":2503},"http://logback.qos.ch/",[52],"Logback"," as backend at the\nmoment.",[80,2507,2508],{},"Don’t create log wrappers if they provide no additional value and if you really, really need to implement your own,\nuse the logging framework’s API instead of thinking up your own.",[80,2510,2511],{},"Dependencies over a lot of distinct components which should be assembled into a single EAR can be quite hairy. Think\nvery well about how to partition your application and which components have common dependencies which can be separated\ninto a parent POM.",[80,2513,2514],{},"The one configuration option that might solve all of your problems is not documented very well. Scan through your (\ncommented) configuration files once in a while.",[80,2516,2517],{},"Use the tools your IDE provides. It makes refactoring so much easier if you know what your IDE is capable of.",[80,2519,2520,2521,112,2526,2531,2532,2531,2537,2531,2542,2547],{},"Never underestimate the grief that class loading issues can cause\nyou. ",[48,2522,2525],{"href":2523,"rel":2524},"http://onjava.com/lpt/a/5586",[52],"Really",[48,2527,2530],{"href":2528,"rel":2529},"http://www.devx.com/Java/Article/31614/1954?pf=true",[52],"read"," ",[48,2533,2536],{"href":2534,"rel":2535},"http://onjava.com/lpt/a/4337",[52],"up",[48,2538,2541],{"href":2539,"rel":2540},"http://onjava.com/lpt/a/5795",[52],"on",[48,2543,2546],{"href":2544,"rel":2545},"http://www.theserverside.com/news/1364680/Understanding-J2EE-Application-Server-ClassLoading-Architectures",[52],"it","!",[80,2549,2550],{},"Continuous integration the way we do it is nice but it doesn’t help you with class loading issues appearing in your\nJEE application server.",[42,2552,2553,2554,2557],{},"How about you? Did you experience similar stories with large legacy applications? What did you take from it? We’re\nthrilled to hear ",[514,2555,2556],{},"your"," “Development War Stories” in the comments!",[164,2559,2561],{"id":2560},"attributions","Attributions",[77,2563,2564],{},[80,2565,2566,421,2571,112,2576],{},[48,2567,2570],{"href":2568,"rel":2569},"http://www.flickr.com/photos/lorenjavier/3537572809/",[52],"Seven Dwarves “Homeward Bound” statue by Jim Shore as soon from the China Closet on Main Street",[48,2572,2575],{"href":2573,"rel":2574},"http://www.flickr.com/photos/lorenjavier/",[52],"Loren Javier",[48,2577,2580],{"href":2578,"rel":2579},"http://creativecommons.org/licenses/by-nd/2.0/",[52],"CC BY-ND 2.0",[2582,2583,2584],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":11,"searchDepth":12,"depth":12,"links":2586},[2587,2588],{"id":2489,"depth":12,"text":2490},{"id":2560,"depth":12,"text":2561},[613],"2011-06-30T09:37:07","At Synyx we’re currently taking care of a rather large legacy project for one of our customers in the course of\\nour Code Clinic services. The project comprises several components\\nsuch as a fat client implemented with a custom UI framework on top of Swing, a bulky web application using a mixture of\\ncustom and obsolete frameworks, and a lot of asynchronously running jobs to process input from other systems involving\\ncustom XSL transformations and a heap of stored procedures in a Oracle 9i database. You get the picture, it’s the\\nprototype of a legacy system.","https://synyx.de/blog/the-tale-of-jboss-and-the-7-little-logging-frameworks/",{},"/blog/the-tale-of-jboss-and-the-7-little-logging-frameworks",{"title":633,"description":2596},"At Synyx we’re currently taking care of a rather large legacy project for one of our customers in the course of\nour Code Clinic services. The project comprises several components\nsuch as a fat client implemented with a custom UI framework on top of Swing, a bulky web application using a mixture of\ncustom and obsolete frameworks, and a lot of asynchronously running jobs to process input from other systems involving\ncustom XSL transformations and a heap of stored procedures in a Oracle 9i database. You get the picture, it’s the\nprototype of a legacy system.","blog/the-tale-of-jboss-and-the-7-little-logging-frameworks",[2599,2600,2601,2602,2603,2604,2605,2606],"apache","class-loader","commons-logging","java","jboss","log4j","slf4j","tomcat","At Synyx we’re currently taking care of a rather large legacy project for one of our customers in the course of our Code Clinic services. The project comprises several components…","ppWPHxzoN11zneoOW2aVj0eAXHnxYFD4vHMnjUtyqHs",["Reactive",2610],{"$scookieConsent":2611,"$ssite-config":2613},{"functional":2612,"analytics":2612},false,{"_priority":2614,"env":2618,"name":2619,"url":2620},{"name":2615,"env":2616,"url":2617},-10,-15,0,"production","nuxt-app","https://synyx.de",["Set"],["ShallowReactive",2623],{"author-speaker-schalanda":-1,"roughlyFilteredArticles":-1},"/blog/author/speaker-schalanda"]