Hi Neil, On Wed, Apr 26, 2017 at 4:23 PM, Neil Griffin <neil.grif...@portletfaces.org> wrote: > Hi Woonsan, > > I've spent about a day trying to get SLF4J logging to work but have run into > some setbacks. > > -=-=- > TL;DR > -=-=- > > In order for a portlet WAR context to use an implementation/adapter for > SLF4J other than slf4j-jdk14-1.7.5.jar (java.util.logging) in Pluto 3.0, the > SLF4J API must be specified as <scope>compile</scope> rather than > <scope>provided</scope>. > > For example, if using Log4J, a portlet WAR needs to include the following: > > WEB-INF/lib/log4j-1.2.17.jar > WEB-INF/lib/slf4j-api-1.7.25.jar > WEB-INF/lib/slf4j-log4j12-1.7.25.jar > > Would you be willing to +1 the release if the archetype pom.xml files > specified the following dependencies?
Yes. I think logging library issue was a minor issue anyway in release process anyway. > > <dependency> > <groupId>org.slf4j</groupId> > <artifactId>slf4j-api</artifactId> > <version>1.7.25</version> > </dependency> > <dependency> > <groupId>org.slf4j</groupId> > <artifactId>slf4j-log4j12</artifactId> > <version>1.7.25</version> > <scope>runtime</scope> > </dependency> +1 for this release. > > -=-=-=-=-=-=-=-=-=-=- > Detailed Explanation: > -=-=-=-=-=-=-=-=-=-=- > > Pluto 3.0 has the SLF4J API in the Tomcat global classloader: > tomcat/lib/slf4j-api-1.7.5.jar/ > > The reason why, is because jars like the following have a compile-time > dependency on the SLF4J API: > tomcat/lib/pluto-container-3.0.1-SNAPSHOT.jar > > Now, in order for Pluto to start without errors, there *MUST* be an impl (or > adapter impl) of the SLF4J API in the global classloader. That is probably > why the JDK14 (java.util.logging) adapter appears in the global classloader > as well: > tomcat/lib/slf4j-jdk14-1.7.5.jar > > ----------- > Problem #1: > ----------- > > If a portlet WAR relies on tomcat/lib/slf4j-api-1.7.5.jar (the SLF4J API in > the global classloader), it will be *forced* to use JDK14 logging when using > the SLF4J Logger and LoggerFactory. > > The reason why is because the SLF4J API always goes with the first impl that > it finds in the classpath. Since the JDK14 adapter is present in the global > classloader, the Tomcat ClassLoader always chooses the JDK14 adapter, even > if the Log4J adapter is found in the portlet WAR context. > > ----------- > Problem #2: > ----------- > > It is not possible to swap-out the JDK14 adapter for the Log4J adapter in > the global classpath and have Log4J read the > WEB-INF/classes/log4j.properties file. > > The reason why is because log4j-1.2.17.jar must *always* appear in the > WEB-INF/lib folder of the portlet WAR context in order for the > WEB-INF/classes/log4j.properties file to get picked up -- Log4J will only > look for a log4j.properties file with the LogManager class is loaded into > the ClassLoader: > https://github.com/apache/log4j/blob/log4j-1.2.17/src/main/java/org/apache/log4j/LogManager.java#L109 > > In other words, when log4j-1.2.17.jar is present in the global classloader, > it can't read a portlet's log4j.properties file since it only gets loaded > into the global classloader once. > > ------------------ > Proposed Solution: > ------------------ > > Since the SLF4J API always goes with the first impl/adapter that it finds, > the SLF4J API must be specified as <scope>compile</scope> rather than > <scope>provided</scope>. > > Repeating the example from the TL;DR section, if a portlet WAR wants to use > Log4J, it would need to include the following: > > WEB-INF/lib/log4j-1.2.17.jar > WEB-INF/lib/slf4j-api-1.7.25.jar > WEB-INF/lib/slf4j-log4j12-1.7.25.jar +1. I think your proposal is the best solution from what we can do in the current circumstances without big changes. If someone wants to improve the situation in a different / better way in the longer term, please feel free to start a new thread for that. Thank you so much for your investigation with the proposal! Cheers, Woonsan > > Thanks, > > Neil > > > On 4/25/17 12:04 PM, Woonsan Ko wrote: >> >> Thanks, Neil! Please see my comments inline. >> >> On Tue, Apr 25, 2017 at 11:53 AM, Neil Griffin >> <neil.grif...@portletfaces.org> wrote: >>> >>> Hi Woonsan, >>> >>> OK, I will rollback and re-release with the header present in the >>> following >>> files: >>> >>> - pom.xml >>> - src/main/resources/META-INF/maven/archetype-metadata.xml >>> - src/main/resources/META-INF/maven/archetype.xml >>> >>> Additionally, I will move from the Log4J API to the SLF4J API. >>> >>> Would it be OK if I specify "org.slf4j:slf4j-log4j12" as the logging >>> implementation? >> >> >> Absolutely. That's how we do in most portals project right now, AFAIK. >> You can keep that and log4j12 as runtime scope dependencies. >> >>> >>> Also, if I complete the work today, then will it require a new 72 hour >>> voting process? >> >> >> I don't think so. If you re-stage it with the fixes, I'll review it >> and cast my vote with +1. You don't need another 72 hours. >> >> Kind regards, >> >> Woonsan >> >>> >>> >>> Thank you, >>> >>> Neil >>> >>> >>> On 4/25/17 11:36 AM, Woonsan Ko wrote: >>>> >>>> >>>> On Tue, Apr 25, 2017 at 11:09 AM, Neil Griffin >>>> <neil.grif...@portletfaces.org> wrote: >>>>> >>>>> >>>>> Hi Woonsan, >>>>> >>>>> I don't think that I have the administrative privileges to fix the >>>>> staging >>>>> repository visibility problem you encountered. >>>>> >>>>> But thank you for your careful observations. Regarding the licensing, >>>>> the >>>>> Apache 2.0 License is specified in the pom.xml descriptor of each >>>>> archetype: >>>>> >>>>> <license> >>>>> <name>Apache License, Version 2.0</name> >>>>> <url>http://www.apache.org/licenses/LICENSE-2.0</url> >>>>> </license> >>>>> >>>>> Also, the archetype JAR artifacts contain the text of the Apache 2.0 >>>>> License >>>>> in the META-INF/LICENSE file. >>>>> >>>>> The reason why license "headers" are not present in files like >>>>> HelloWorldPortlet.java is because archetype files are essentially >>>>> templates >>>>> that will be used by the "mvn archetype:generate" command to create a >>>>> new >>>>> project. The developer would then be free to apply whatever license >>>>> they >>>>> want to their newly generated portlet project. >>>> >>>> >>>> >>>> It's totally fine not to have license headers in archetype-generated >>>> files like HelloWorldPortlet.java. >>>> My concerns were at these files, which are the archetype source >>>> itself, not generated ones, for instance: >>>> - pom.xml >>>> - src/main/resources/META-INF/maven/archetype-metadata.xml >>>> - src/main/resources/META-INF/maven/archetype.xml >>>> >>>> I think those three files must have license headers. >>>> >>>>> >>>>> Regarding log4j, I would be happy to migrate to the SLF4J API in a >>>>> future >>>>> dot release. >>>> >>>> >>>> >>>> Cool! >>>> >>>>> >>>>> Please let me know whether or not I have addressed your concerns to >>>>> your >>>>> satisfaction. >>>> >>>> >>>> >>>> Without proper license headers in those three files, I don't think >>>> that's qualified for a proper Apache release. >>>> Sometimes we miss license headers in some source files unintentionally >>>> in a bigger project, which might be excused, but in this case, it's >>>> obvious that we totally forgot adding the headers in the whole >>>> project, IMHO. >>>> >>>> Regards, >>>> >>>> Woonsan >>>> >>>>> >>>>> >>>>> Best Regards, >>>>> >>>>> Neil >>>>> >>>>> >>>>> On 4/24/17 11:46 PM, Woonsan Ko wrote: >>>>>> >>>>>> >>>>>> >>>>>> On Thu, Apr 20, 2017 at 1:44 PM, Neil Griffin >>>>>> <neil.grif...@portletfaces.org> wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>> Dear Apache Portals Pluto Team and community, >>>>>>> >>>>>>> I have staged a release candidate for the new Apache Portals Pluto >>>>>>> Maven >>>>>>> Archetypes 3.0.0 release, >>>>>>> which includes the following two artifacts: >>>>>>> >>>>>>> <groupId>org.apache.portals.pluto.archetype</groupId> >>>>>>> <artifactId>bean-portlet-archetype</artifactId> >>>>>>> <packaging>maven-archetype</packaging> >>>>>>> >>>>>>> <groupId>org.apache.portals.pluto.archetype</groupId> >>>>>>> <artifactId>generic-portlet-archetype</artifactId> >>>>>>> <packaging>maven-archetype</packaging> >>>>>>> >>>>>>> Please review the release candidate which is available from the >>>>>>> following >>>>>>> maven staging repository: >>>>>>> >>>>>>> >>>>>>> https://repository.apache.org/content/repositories/orgapacheportals-1016 >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> This link doesn't work for me. I managed to find the staging repo at >>>>>> https://repository.apache.org/#stagingRepositories. >>>>>> It shows "404 - Repository "orgapacheportals-1016 (staging: open)" >>>>>> [id=orgapacheportals-1016] exists but is not exposed" when clicked on, >>>>>> regardless whether or not I signed in https://repository.apache.org/. >>>>>> Does anyone know the reason? >>>>>> >>>>>>> >>>>>>> This vote is open for the next 72 hours. >>>>>>> >>>>>>> Please cast your vote: >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> I'm not sure if it is desirable to release this. When I downloaded the >>>>>> bean-portlet-archetype-3.0.0-source-release.zip from the Nexus, I >>>>>> could hardly find source files with Apache License header [1]. Most >>>>>> files are missing the license header. >>>>>> Wouldn't it be more desirable to correct this issue first? >>>>>> >>>>>> And, one minor thing to remark is that the archetype is using log4j >>>>>> v1, neither slf4j nor log4j v2. AFAIK, pluto project itself and its >>>>>> submodules such as container have used slf4j as logging API and log4j >>>>>> as a default binding. Not a major, but just something to consider >>>>>> later perhaps... >>>>>> >>>>>> Kind regards, >>>>>> >>>>>> Woonsan >>>>>> >>>>>> [1] http://www.apache.org/legal/src-headers.html#headers >>>>>> >>>>>>> >>>>>>> [ ] +1 for Release >>>>>>> [ ] 0 for Don't care >>>>>>> [ ] -1 Don't release (do provide a reason then) >>>>>>> >>>>>>> Thanks, >>>>>>> >>>>>>> Neil >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>> >>> >> > On Wed, Apr 26, 2017 at 4:23 PM, Neil Griffin <neil.grif...@portletfaces.org> wrote: > Hi Woonsan, > > I've spent about a day trying to get SLF4J logging to work but have run into > some setbacks. > > -=-=- > TL;DR > -=-=- > > In order for a portlet WAR context to use an implementation/adapter for > SLF4J other than slf4j-jdk14-1.7.5.jar (java.util.logging) in Pluto 3.0, the > SLF4J API must be specified as <scope>compile</scope> rather than > <scope>provided</scope>. > > For example, if using Log4J, a portlet WAR needs to include the following: > > WEB-INF/lib/log4j-1.2.17.jar > WEB-INF/lib/slf4j-api-1.7.25.jar > WEB-INF/lib/slf4j-log4j12-1.7.25.jar > > Would you be willing to +1 the release if the archetype pom.xml files > specified the following dependencies? > > <dependency> > <groupId>org.slf4j</groupId> > <artifactId>slf4j-api</artifactId> > <version>1.7.25</version> > </dependency> > <dependency> > <groupId>org.slf4j</groupId> > <artifactId>slf4j-log4j12</artifactId> > <version>1.7.25</version> > <scope>runtime</scope> > </dependency> > > -=-=-=-=-=-=-=-=-=-=- > Detailed Explanation: > -=-=-=-=-=-=-=-=-=-=- > > Pluto 3.0 has the SLF4J API in the Tomcat global classloader: > tomcat/lib/slf4j-api-1.7.5.jar/ > > The reason why, is because jars like the following have a compile-time > dependency on the SLF4J API: > tomcat/lib/pluto-container-3.0.1-SNAPSHOT.jar > > Now, in order for Pluto to start without errors, there *MUST* be an impl (or > adapter impl) of the SLF4J API in the global classloader. That is probably > why the JDK14 (java.util.logging) adapter appears in the global classloader > as well: > tomcat/lib/slf4j-jdk14-1.7.5.jar > > ----------- > Problem #1: > ----------- > > If a portlet WAR relies on tomcat/lib/slf4j-api-1.7.5.jar (the SLF4J API in > the global classloader), it will be *forced* to use JDK14 logging when using > the SLF4J Logger and LoggerFactory. > > The reason why is because the SLF4J API always goes with the first impl that > it finds in the classpath. Since the JDK14 adapter is present in the global > classloader, the Tomcat ClassLoader always chooses the JDK14 adapter, even > if the Log4J adapter is found in the portlet WAR context. > > ----------- > Problem #2: > ----------- > > It is not possible to swap-out the JDK14 adapter for the Log4J adapter in > the global classpath and have Log4J read the > WEB-INF/classes/log4j.properties file. > > The reason why is because log4j-1.2.17.jar must *always* appear in the > WEB-INF/lib folder of the portlet WAR context in order for the > WEB-INF/classes/log4j.properties file to get picked up -- Log4J will only > look for a log4j.properties file with the LogManager class is loaded into > the ClassLoader: > https://github.com/apache/log4j/blob/log4j-1.2.17/src/main/java/org/apache/log4j/LogManager.java#L109 > > In other words, when log4j-1.2.17.jar is present in the global classloader, > it can't read a portlet's log4j.properties file since it only gets loaded > into the global classloader once. > > ------------------ > Proposed Solution: > ------------------ > > Since the SLF4J API always goes with the first impl/adapter that it finds, > the SLF4J API must be specified as <scope>compile</scope> rather than > <scope>provided</scope>. > > Repeating the example from the TL;DR section, if a portlet WAR wants to use > Log4J, it would need to include the following: > > WEB-INF/lib/log4j-1.2.17.jar > WEB-INF/lib/slf4j-api-1.7.25.jar > WEB-INF/lib/slf4j-log4j12-1.7.25.jar > > Thanks, > > Neil > > > On 4/25/17 12:04 PM, Woonsan Ko wrote: >> >> Thanks, Neil! Please see my comments inline. >> >> On Tue, Apr 25, 2017 at 11:53 AM, Neil Griffin >> <neil.grif...@portletfaces.org> wrote: >>> >>> Hi Woonsan, >>> >>> OK, I will rollback and re-release with the header present in the >>> following >>> files: >>> >>> - pom.xml >>> - src/main/resources/META-INF/maven/archetype-metadata.xml >>> - src/main/resources/META-INF/maven/archetype.xml >>> >>> Additionally, I will move from the Log4J API to the SLF4J API. >>> >>> Would it be OK if I specify "org.slf4j:slf4j-log4j12" as the logging >>> implementation? >> >> >> Absolutely. That's how we do in most portals project right now, AFAIK. >> You can keep that and log4j12 as runtime scope dependencies. >> >>> >>> Also, if I complete the work today, then will it require a new 72 hour >>> voting process? >> >> >> I don't think so. If you re-stage it with the fixes, I'll review it >> and cast my vote with +1. You don't need another 72 hours. >> >> Kind regards, >> >> Woonsan >> >>> >>> >>> Thank you, >>> >>> Neil >>> >>> >>> On 4/25/17 11:36 AM, Woonsan Ko wrote: >>>> >>>> >>>> On Tue, Apr 25, 2017 at 11:09 AM, Neil Griffin >>>> <neil.grif...@portletfaces.org> wrote: >>>>> >>>>> >>>>> Hi Woonsan, >>>>> >>>>> I don't think that I have the administrative privileges to fix the >>>>> staging >>>>> repository visibility problem you encountered. >>>>> >>>>> But thank you for your careful observations. Regarding the licensing, >>>>> the >>>>> Apache 2.0 License is specified in the pom.xml descriptor of each >>>>> archetype: >>>>> >>>>> <license> >>>>> <name>Apache License, Version 2.0</name> >>>>> <url>http://www.apache.org/licenses/LICENSE-2.0</url> >>>>> </license> >>>>> >>>>> Also, the archetype JAR artifacts contain the text of the Apache 2.0 >>>>> License >>>>> in the META-INF/LICENSE file. >>>>> >>>>> The reason why license "headers" are not present in files like >>>>> HelloWorldPortlet.java is because archetype files are essentially >>>>> templates >>>>> that will be used by the "mvn archetype:generate" command to create a >>>>> new >>>>> project. The developer would then be free to apply whatever license >>>>> they >>>>> want to their newly generated portlet project. >>>> >>>> >>>> >>>> It's totally fine not to have license headers in archetype-generated >>>> files like HelloWorldPortlet.java. >>>> My concerns were at these files, which are the archetype source >>>> itself, not generated ones, for instance: >>>> - pom.xml >>>> - src/main/resources/META-INF/maven/archetype-metadata.xml >>>> - src/main/resources/META-INF/maven/archetype.xml >>>> >>>> I think those three files must have license headers. >>>> >>>>> >>>>> Regarding log4j, I would be happy to migrate to the SLF4J API in a >>>>> future >>>>> dot release. >>>> >>>> >>>> >>>> Cool! >>>> >>>>> >>>>> Please let me know whether or not I have addressed your concerns to >>>>> your >>>>> satisfaction. >>>> >>>> >>>> >>>> Without proper license headers in those three files, I don't think >>>> that's qualified for a proper Apache release. >>>> Sometimes we miss license headers in some source files unintentionally >>>> in a bigger project, which might be excused, but in this case, it's >>>> obvious that we totally forgot adding the headers in the whole >>>> project, IMHO. >>>> >>>> Regards, >>>> >>>> Woonsan >>>> >>>>> >>>>> >>>>> Best Regards, >>>>> >>>>> Neil >>>>> >>>>> >>>>> On 4/24/17 11:46 PM, Woonsan Ko wrote: >>>>>> >>>>>> >>>>>> >>>>>> On Thu, Apr 20, 2017 at 1:44 PM, Neil Griffin >>>>>> <neil.grif...@portletfaces.org> wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>> Dear Apache Portals Pluto Team and community, >>>>>>> >>>>>>> I have staged a release candidate for the new Apache Portals Pluto >>>>>>> Maven >>>>>>> Archetypes 3.0.0 release, >>>>>>> which includes the following two artifacts: >>>>>>> >>>>>>> <groupId>org.apache.portals.pluto.archetype</groupId> >>>>>>> <artifactId>bean-portlet-archetype</artifactId> >>>>>>> <packaging>maven-archetype</packaging> >>>>>>> >>>>>>> <groupId>org.apache.portals.pluto.archetype</groupId> >>>>>>> <artifactId>generic-portlet-archetype</artifactId> >>>>>>> <packaging>maven-archetype</packaging> >>>>>>> >>>>>>> Please review the release candidate which is available from the >>>>>>> following >>>>>>> maven staging repository: >>>>>>> >>>>>>> >>>>>>> https://repository.apache.org/content/repositories/orgapacheportals-1016 >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> This link doesn't work for me. I managed to find the staging repo at >>>>>> https://repository.apache.org/#stagingRepositories. >>>>>> It shows "404 - Repository "orgapacheportals-1016 (staging: open)" >>>>>> [id=orgapacheportals-1016] exists but is not exposed" when clicked on, >>>>>> regardless whether or not I signed in https://repository.apache.org/. >>>>>> Does anyone know the reason? >>>>>> >>>>>>> >>>>>>> This vote is open for the next 72 hours. >>>>>>> >>>>>>> Please cast your vote: >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> I'm not sure if it is desirable to release this. When I downloaded the >>>>>> bean-portlet-archetype-3.0.0-source-release.zip from the Nexus, I >>>>>> could hardly find source files with Apache License header [1]. Most >>>>>> files are missing the license header. >>>>>> Wouldn't it be more desirable to correct this issue first? >>>>>> >>>>>> And, one minor thing to remark is that the archetype is using log4j >>>>>> v1, neither slf4j nor log4j v2. AFAIK, pluto project itself and its >>>>>> submodules such as container have used slf4j as logging API and log4j >>>>>> as a default binding. Not a major, but just something to consider >>>>>> later perhaps... >>>>>> >>>>>> Kind regards, >>>>>> >>>>>> Woonsan >>>>>> >>>>>> [1] http://www.apache.org/legal/src-headers.html#headers >>>>>> >>>>>>> >>>>>>> [ ] +1 for Release >>>>>>> [ ] 0 for Don't care >>>>>>> [ ] -1 Don't release (do provide a reason then) >>>>>>> >>>>>>> Thanks, >>>>>>> >>>>>>> Neil >>>>>> >>>>>> >>>>>> >>>>>> >>>>> >>>> >>> >> >