If that is the case so far, then that's that! We can deal with compatible versions in the future...
Gary On Oct 29, 2015 1:35 PM, "Matt Sicker" <boa...@gmail.com> wrote: > If there's no binary compatibility between versions, it doesn't sound like > it's even possible to run both version 10 and 11 at the same time. > > On 29 October 2015 at 13:39, Gary Gregory <garydgreg...@gmail.com> wrote: > >> So users will have to resolve dependencies if one jar depends on our >> version 10 and another jar depends on version 11, right? >> >> Would it ever be possible for two of our Scala jars to run in the same >> classloader (right now, no, since they have the same Java package). >> >> Gary >> >> On Thu, Oct 29, 2015 at 9:09 AM, Mikael Ståldal < >> mikael.stal...@magine.com> wrote: >> >>> The Java package will be the same (org.apache.logging.log4j.scala), no >>> version in there. >>> >>> On Thu, Oct 29, 2015 at 5:06 PM, Gary Gregory <garydgreg...@gmail.com> >>> wrote: >>> >>>> Will the packages also have a version in the name? >>>> >>>> Gary >>>> On Oct 29, 2015 2:28 AM, "Mikael Ståldal" <mikael.stal...@magine.com> >>>> wrote: >>>> >>>>> The "_2.11" (and "_2.10" etc) suffix on Maven artifact IDs is the >>>>> Scala convention, and it is even implemented in the Scala build tool SBT. >>>>> If we use "-2.11" we break that. >>>>> >>>>> http://www.scala-sbt.org/0.12.4/docs/Detailed-Topics/Cross-Build.html >>>>> >>>>> On Wed, Oct 28, 2015 at 7:57 PM, Gary Gregory <garydgreg...@gmail.com> >>>>> wrote: >>>>> >>>>>> Hi all, >>>>>> >>>>>> I find it confusing that we use two formats for versions in names: >>>>>> >>>>>> - log4j-scala_2.11 >>>>>> - log4j-1.2-api >>>>>> >>>>>> Shouldn't we have log4j-scala-2.11? >>>>>> >>>>>> Gary >>>>>> >>>>>> ---------- Forwarded message ---------- >>>>>> From: <mi...@apache.org> >>>>>> Date: Wed, Oct 28, 2015 at 10:08 AM >>>>>> Subject: logging-log4j2 git commit: Scala 2.11 logging >>>>>> To: comm...@logging.apache.org >>>>>> >>>>>> >>>>>> Repository: logging-log4j2 >>>>>> Updated Branches: >>>>>> refs/heads/LOG4J-1181 [created] 968058160 >>>>>> >>>>>> >>>>>> Scala 2.11 logging >>>>>> >>>>>> >>>>>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo >>>>>> Commit: >>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/96805816 >>>>>> Tree: >>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/96805816 >>>>>> Diff: >>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/96805816 >>>>>> >>>>>> Branch: refs/heads/LOG4J-1181 >>>>>> Commit: 9680581602af65eaee778e85affa9e4926acf1a2 >>>>>> Parents: fdce364 >>>>>> Author: Mikael Ståldal <mikael.stal...@magine.com> >>>>>> Authored: Wed Oct 28 18:07:39 2015 +0100 >>>>>> Committer: Mikael Ståldal <mikael.stal...@magine.com> >>>>>> Committed: Wed Oct 28 18:07:39 2015 +0100 >>>>>> >>>>>> ---------------------------------------------------------------------- >>>>>> log4j-scala_2.11/pom.xml | 254 >>>>>> +++++++++++++++++++ >>>>>> .../org/apache/logging/log4j/scala/Logger.scala | 211 +++++++++++++++ >>>>>> .../logging/log4j/scala/LoggerMacro.scala | 217 >>>>>> ++++++++++++++++ >>>>>> .../apache/logging/log4j/scala/Logging.scala | 10 + >>>>>> pom.xml | 6 + >>>>>> 5 files changed, 698 insertions(+) >>>>>> ---------------------------------------------------------------------- >>>>>> >>>>>> >>>>>> >>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96805816/log4j-scala_2.11/pom.xml >>>>>> ---------------------------------------------------------------------- >>>>>> diff --git a/log4j-scala_2.11/pom.xml b/log4j-scala_2.11/pom.xml >>>>>> new file mode 100644 >>>>>> index 0000000..81132c4 >>>>>> --- /dev/null >>>>>> +++ b/log4j-scala_2.11/pom.xml >>>>>> @@ -0,0 +1,254 @@ >>>>>> +<?xml version="1.0" encoding="UTF-8"?> >>>>>> +<!-- >>>>>> + Licensed to the Apache Software Foundation (ASF) under one or more >>>>>> + contributor license agreements. See the NOTICE file distributed >>>>>> with >>>>>> + this work for additional information regarding copyright ownership. >>>>>> + The ASF licenses this file to You under the Apache License, Version >>>>>> 2.0 >>>>>> + (the "License"); you may not use this file except in compliance with >>>>>> + the License. You may obtain a copy of the License at >>>>>> + >>>>>> + http://www.apache.org/licenses/LICENSE-2.0 >>>>>> + >>>>>> + Unless required by applicable law or agreed to in writing, software >>>>>> + distributed under the License is distributed on an "AS IS" BASIS, >>>>>> + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >>>>>> implied. >>>>>> + See the License for the specific language governing permissions and >>>>>> + limitations under the License. >>>>>> +--> >>>>>> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" >>>>>> http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" >>>>>> http://maven.apache.org/POM/4.0.0 >>>>>> http://maven.apache.org/xsd/maven-4.0.0.xsd"> >>>>>> + <modelVersion>4.0.0</modelVersion> >>>>>> + <parent> >>>>>> + <groupId>org.apache.logging.log4j</groupId> >>>>>> + <artifactId>log4j</artifactId> >>>>>> + <version>2.5-SNAPSHOT</version> >>>>>> + <relativePath>../</relativePath> >>>>>> + </parent> >>>>>> + <artifactId>log4j-scala_2.11</artifactId> >>>>>> + <packaging>jar</packaging> >>>>>> + <name>Scala warpper for Log4j API</name> >>>>>> + <description>Scala warpper for Log4j API</description> >>>>>> + <properties> >>>>>> + <log4jParentDir>${basedir}/..</log4jParentDir> >>>>>> + <projectDir>/scala_2.11</projectDir> >>>>>> + <scala.version>2.11.7</scala.version> >>>>>> + </properties> >>>>>> + <dependencies> >>>>>> + <dependency> >>>>>> + <groupId>org.apache.logging.log4j</groupId> >>>>>> + <artifactId>log4j-api</artifactId> >>>>>> + </dependency> >>>>>> + <dependency> >>>>>> + <groupId>org.scala-lang</groupId> >>>>>> + <artifactId>scala-library</artifactId> >>>>>> + <version>${scala.version}</version> >>>>>> + </dependency> >>>>>> + <dependency> >>>>>> + <groupId>org.scala-lang</groupId> >>>>>> + <artifactId>scala-reflect</artifactId> >>>>>> + <version>${scala.version}</version> >>>>>> + </dependency> >>>>>> + <dependency> >>>>>> + <groupId>org.apache.logging.log4j</groupId> >>>>>> + <artifactId>log4j-api</artifactId> >>>>>> + <type>test-jar</type> >>>>>> + <scope>test</scope> >>>>>> + </dependency> >>>>>> + <dependency> >>>>>> + <groupId>org.apache.logging.log4j</groupId> >>>>>> + <artifactId>log4j-core</artifactId> >>>>>> + <scope>test</scope> >>>>>> + </dependency> >>>>>> + <dependency> >>>>>> + <groupId>org.apache.logging.log4j</groupId> >>>>>> + <artifactId>log4j-core</artifactId> >>>>>> + <type>test-jar</type> >>>>>> + <scope>test</scope> >>>>>> + </dependency> >>>>>> + <dependency> >>>>>> + <groupId>junit</groupId> >>>>>> + <artifactId>junit</artifactId> >>>>>> + <scope>test</scope> >>>>>> + </dependency> >>>>>> + </dependencies> >>>>>> + <build> >>>>>> + <sourceDirectory>src/main/scala</sourceDirectory> >>>>>> + <testSourceDirectory>src/test/scala</testSourceDirectory> >>>>>> + <plugins> >>>>>> + <plugin> >>>>>> + <groupId>net.alchim31.maven</groupId> >>>>>> + <artifactId>scala-maven-plugin</artifactId> >>>>>> + <executions> >>>>>> + <execution> >>>>>> + <goals> >>>>>> + <goal>compile</goal> >>>>>> + <goal>testCompile</goal> >>>>>> + </goals> >>>>>> + </execution> >>>>>> + </executions> >>>>>> + </plugin> >>>>>> + <plugin> >>>>>> + <groupId>org.apache.maven.plugins</groupId> >>>>>> + <artifactId>maven-surefire-plugin</artifactId> >>>>>> + <configuration> >>>>>> + <excludes> >>>>>> + <exclude>**/*Test.java</exclude> >>>>>> + </excludes> >>>>>> + </configuration> >>>>>> + <executions> >>>>>> + <execution> >>>>>> + <id>default-tests</id> >>>>>> + <phase>test</phase> >>>>>> + <goals> >>>>>> + <goal>test</goal> >>>>>> + </goals> >>>>>> + <configuration> >>>>>> + <includes> >>>>>> + <include>**/*Test.java</include> >>>>>> + </includes> >>>>>> + <excludes> >>>>>> + <exclude>**/OptionalTest.java</exclude> >>>>>> + </excludes> >>>>>> + </configuration> >>>>>> + </execution> >>>>>> + <execution> >>>>>> + <id>test-optional</id> >>>>>> + <phase>test</phase> >>>>>> + <goals> >>>>>> + <goal>test</goal> >>>>>> + </goals> >>>>>> + <configuration> >>>>>> + <excludes> >>>>>> + <exclude>**/LoggerTest.java</exclude> >>>>>> + <exclude>**/MarkerTest.java</exclude> >>>>>> + <exclude>**/SerializeTest.java</exclude> >>>>>> + </excludes> >>>>>> + <includes> >>>>>> + <include>**/OptionalTest.java</include> >>>>>> + </includes> >>>>>> + </configuration> >>>>>> + </execution> >>>>>> + </executions> >>>>>> + </plugin> >>>>>> + <!-- Include the standard NOTICE and LICENSE --> >>>>>> + <plugin> >>>>>> + <groupId>org.apache.maven.plugins</groupId> >>>>>> + <artifactId>maven-remote-resources-plugin</artifactId> >>>>>> + <executions> >>>>>> + <execution> >>>>>> + <goals> >>>>>> + <goal>process</goal> >>>>>> + </goals> >>>>>> + <configuration> >>>>>> + <skip>false</skip> >>>>>> + </configuration> >>>>>> + </execution> >>>>>> + </executions> >>>>>> + </plugin> >>>>>> + <plugin> >>>>>> + <groupId>org.apache.felix</groupId> >>>>>> + <artifactId>maven-bundle-plugin</artifactId> >>>>>> + <configuration> >>>>>> + <instructions> >>>>>> + <Export-Package> >>>>>> + liquibase.ext.logging.log4j2 >>>>>> + </Export-Package> >>>>>> + </instructions> >>>>>> + </configuration> >>>>>> + </plugin> >>>>>> + </plugins> >>>>>> + </build> >>>>>> + <reporting> >>>>>> + <plugins> >>>>>> + <plugin> >>>>>> + <groupId>org.apache.maven.plugins</groupId> >>>>>> + <artifactId>maven-changes-plugin</artifactId> >>>>>> + <version>${changes.plugin.version}</version> >>>>>> + <reportSets> >>>>>> + <reportSet> >>>>>> + <reports> >>>>>> + <report>changes-report</report> >>>>>> + </reports> >>>>>> + </reportSet> >>>>>> + </reportSets> >>>>>> + <configuration> >>>>>> + >>>>>> <issueLinkTemplate>%URL%/show_bug.cgi?id=%ISSUE%</issueLinkTemplate> >>>>>> + <useJql>true</useJql> >>>>>> + </configuration> >>>>>> + </plugin> >>>>>> + <plugin> >>>>>> + <groupId>org.apache.maven.plugins</groupId> >>>>>> + <artifactId>maven-checkstyle-plugin</artifactId> >>>>>> + <version>${checkstyle.plugin.version}</version> >>>>>> + <configuration> >>>>>> + >>>>>> <!--<propertiesLocation>${vfs.parent.dir}/checkstyle.properties</propertiesLocation> >>>>>> --> >>>>>> + >>>>>> <configLocation>${log4jParentDir}/checkstyle.xml</configLocation> >>>>>> + >>>>>> <suppressionsLocation>${log4jParentDir}/checkstyle-suppressions.xml</suppressionsLocation> >>>>>> + <enableRulesSummary>false</enableRulesSummary> >>>>>> + <propertyExpansion>basedir=${basedir}</propertyExpansion> >>>>>> + >>>>>> <propertyExpansion>licensedir=${log4jParentDir}/checkstyle-header.txt</propertyExpansion> >>>>>> + </configuration> >>>>>> + </plugin> >>>>>> + <plugin> >>>>>> + <groupId>org.apache.maven.plugins</groupId> >>>>>> + <artifactId>maven-javadoc-plugin</artifactId> >>>>>> + <version>${javadoc.plugin.version}</version> >>>>>> + <configuration> >>>>>> + <bottom><![CDATA[<p align="center">Copyright © >>>>>> {inceptionYear}-{currentYear} {organizationName}. All Rights >>>>>> Reserved.<br /> >>>>>> + Apache Logging, Apache Log4j, Log4j, Apache, the Apache >>>>>> feather logo, the Apache Logging project logo, >>>>>> + and the Apache Log4j logo are trademarks of The Apache >>>>>> Software Foundation.</p>]]></bottom> >>>>>> + <!-- module link generation is completely broken in the >>>>>> javadoc plugin for a multi-module non-aggregating >>>>>> + project --> >>>>>> + <detectOfflineLinks>false</detectOfflineLinks> >>>>>> + <linksource>true</linksource> >>>>>> + </configuration> >>>>>> + <reportSets> >>>>>> + <reportSet> >>>>>> + <id>non-aggregate</id> >>>>>> + <reports> >>>>>> + <report>javadoc</report> >>>>>> + </reports> >>>>>> + </reportSet> >>>>>> + </reportSets> >>>>>> + </plugin> >>>>>> + <plugin> >>>>>> + <groupId>org.codehaus.mojo</groupId> >>>>>> + <artifactId>findbugs-maven-plugin</artifactId> >>>>>> + <version>${findbugs.plugin.version}</version> >>>>>> + <configuration> >>>>>> + <fork>true</fork> >>>>>> + <jvmArgs>-Duser.language=en</jvmArgs> >>>>>> + <threshold>Normal</threshold> >>>>>> + <effort>Default</effort> >>>>>> + >>>>>> <excludeFilterFile>${log4jParentDir}/findbugs-exclude-filter.xml</excludeFilterFile> >>>>>> + </configuration> >>>>>> + </plugin> >>>>>> + <plugin> >>>>>> + <groupId>org.apache.maven.plugins</groupId> >>>>>> + <artifactId>maven-jxr-plugin</artifactId> >>>>>> + <version>${jxr.plugin.version}</version> >>>>>> + <reportSets> >>>>>> + <reportSet> >>>>>> + <id>non-aggregate</id> >>>>>> + <reports> >>>>>> + <report>jxr</report> >>>>>> + </reports> >>>>>> + </reportSet> >>>>>> + <reportSet> >>>>>> + <id>aggregate</id> >>>>>> + <reports> >>>>>> + <report>aggregate</report> >>>>>> + </reports> >>>>>> + </reportSet> >>>>>> + </reportSets> >>>>>> + </plugin> >>>>>> + <plugin> >>>>>> + <groupId>org.apache.maven.plugins</groupId> >>>>>> + <artifactId>maven-pmd-plugin</artifactId> >>>>>> + <version>${pmd.plugin.version}</version> >>>>>> + <configuration> >>>>>> + <targetJdk>${maven.compile.target}</targetJdk> >>>>>> + </configuration> >>>>>> + </plugin> >>>>>> + </plugins> >>>>>> + </reporting> >>>>>> +</project> >>>>>> >>>>>> >>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96805816/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logger.scala >>>>>> ---------------------------------------------------------------------- >>>>>> diff --git >>>>>> a/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logger.scala >>>>>> b/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logger.scala >>>>>> new file mode 100644 >>>>>> index 0000000..63cce4d >>>>>> --- /dev/null >>>>>> +++ >>>>>> b/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logger.scala >>>>>> @@ -0,0 +1,211 @@ >>>>>> +package org.apache.logging.log4j.scala >>>>>> + >>>>>> +import org.apache.logging.log4j.message.Message >>>>>> +import org.apache.logging.log4j.spi.ExtendedLogger >>>>>> +import org.apache.logging.log4j.{Level, Marker} >>>>>> + >>>>>> +import scala.language.experimental.macros >>>>>> + >>>>>> +class Logger(val delegate: ExtendedLogger) { >>>>>> + >>>>>> + private final val FQCN = classOf[Logger].getName >>>>>> + >>>>>> + def fatal(marker: Marker, message: Message): Unit = >>>>>> + macro LoggerMacro.fatalMarkerMsg >>>>>> + >>>>>> + def fatal(marker: Marker, message: Message, cause: Throwable): >>>>>> Unit = >>>>>> + macro LoggerMacro.fatalMarkerMsgThrowable >>>>>> + >>>>>> + def fatal(marker: Marker, message: String): Unit = >>>>>> + macro LoggerMacro.fatalMarkerString >>>>>> + >>>>>> + def fatal(marker: Marker, message: String, cause: Throwable): Unit >>>>>> = >>>>>> + macro LoggerMacro.fatalMarkerStringThrowable >>>>>> + >>>>>> + def fatal(message: Message): Unit = >>>>>> + macro LoggerMacro.fatalMsg >>>>>> + >>>>>> + def fatal(message: String): Unit = >>>>>> + macro LoggerMacro.fatalString >>>>>> + >>>>>> + def fatal(message: Message, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.fatalMsgThrowable >>>>>> + >>>>>> + def fatal(message: String, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.fatalStringThrowable >>>>>> + >>>>>> + def error(marker: Marker, message: Message): Unit = >>>>>> + macro LoggerMacro.errorMarkerMsg >>>>>> + >>>>>> + def error(marker: Marker, message: Message, cause: Throwable): >>>>>> Unit = >>>>>> + macro LoggerMacro.errorMarkerMsgThrowable >>>>>> + >>>>>> + def error(marker: Marker, message: String): Unit = >>>>>> + macro LoggerMacro.errorMarkerString >>>>>> + >>>>>> + def error(marker: Marker, message: String, cause: Throwable): Unit >>>>>> = >>>>>> + macro LoggerMacro.errorMarkerStringThrowable >>>>>> + >>>>>> + def error(message: Message): Unit = >>>>>> + macro LoggerMacro.errorMsg >>>>>> + >>>>>> + def error(message: String): Unit = >>>>>> + macro LoggerMacro.errorString >>>>>> + >>>>>> + def error(message: Message, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.errorMsgThrowable >>>>>> + >>>>>> + def error(message: String, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.errorStringThrowable >>>>>> + >>>>>> + def warn(marker: Marker, message: Message): Unit = >>>>>> + macro LoggerMacro.warnMarkerMsg >>>>>> + >>>>>> + def warn(marker: Marker, message: Message, cause: Throwable): Unit >>>>>> = >>>>>> + macro LoggerMacro.warnMarkerMsgThrowable >>>>>> + >>>>>> + def warn(marker: Marker, message: String): Unit = >>>>>> + macro LoggerMacro.warnMarkerString >>>>>> + >>>>>> + def warn(marker: Marker, message: String, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.warnMarkerStringThrowable >>>>>> + >>>>>> + def warn(message: Message): Unit = >>>>>> + macro LoggerMacro.warnMsg >>>>>> + >>>>>> + def warn(message: String): Unit = >>>>>> + macro LoggerMacro.warnString >>>>>> + >>>>>> + def warn(message: Message, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.warnMsgThrowable >>>>>> + >>>>>> + def warn(message: String, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.warnStringThrowable >>>>>> + >>>>>> + def info(marker: Marker, message: Message): Unit = >>>>>> + macro LoggerMacro.infoMarkerMsg >>>>>> + >>>>>> + def info(marker: Marker, message: Message, cause: Throwable): Unit >>>>>> = >>>>>> + macro LoggerMacro.infoMarkerMsgThrowable >>>>>> + >>>>>> + def info(marker: Marker, message: String): Unit = >>>>>> + macro LoggerMacro.infoMarkerString >>>>>> + >>>>>> + def info(marker: Marker, message: String, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.infoMarkerStringThrowable >>>>>> + >>>>>> + def info(message: Message): Unit = >>>>>> + macro LoggerMacro.infoMsg >>>>>> + >>>>>> + def info(message: String): Unit = >>>>>> + macro LoggerMacro.infoString >>>>>> + >>>>>> + def info(message: Message, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.infoMsgThrowable >>>>>> + >>>>>> + def info(message: String, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.infoStringThrowable >>>>>> + >>>>>> + def debug(marker: Marker, message: Message): Unit = >>>>>> + macro LoggerMacro.debugMarkerMsg >>>>>> + >>>>>> + def debug(marker: Marker, message: Message, cause: Throwable): >>>>>> Unit = >>>>>> + macro LoggerMacro.debugMarkerMsgThrowable >>>>>> + >>>>>> + def debug(marker: Marker, message: String): Unit = >>>>>> + macro LoggerMacro.debugMarkerString >>>>>> + >>>>>> + def debug(marker: Marker, message: String, cause: Throwable): Unit >>>>>> = >>>>>> + macro LoggerMacro.debugMarkerStringThrowable >>>>>> + >>>>>> + def debug(message: Message): Unit = >>>>>> + macro LoggerMacro.debugMsg >>>>>> + >>>>>> + def debug(message: String): Unit = >>>>>> + macro LoggerMacro.debugString >>>>>> + >>>>>> + def debug(message: Message, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.debugMsgThrowable >>>>>> + >>>>>> + def debug(message: String, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.debugStringThrowable >>>>>> + >>>>>> + def trace(marker: Marker, message: Message): Unit = >>>>>> + macro LoggerMacro.traceMarkerMsg >>>>>> + >>>>>> + def trace(marker: Marker, message: Message, cause: Throwable): >>>>>> Unit = >>>>>> + macro LoggerMacro.traceMarkerMsgThrowable >>>>>> + >>>>>> + def trace(marker: Marker, message: String): Unit = >>>>>> + macro LoggerMacro.traceMarkerString >>>>>> + >>>>>> + def trace(marker: Marker, message: String, cause: Throwable): Unit >>>>>> = >>>>>> + macro LoggerMacro.traceMarkerStringThrowable >>>>>> + >>>>>> + def trace(message: Message): Unit = >>>>>> + macro LoggerMacro.traceMsg >>>>>> + >>>>>> + def trace(message: String): Unit = >>>>>> + macro LoggerMacro.traceString >>>>>> + >>>>>> + def trace(message: Message, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.traceMsgThrowable >>>>>> + >>>>>> + def trace(message: String, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.traceStringThrowable >>>>>> + >>>>>> + def log(level: Level, marker: Marker, message: Message): Unit = >>>>>> + macro LoggerMacro.logMarkerMsg >>>>>> + >>>>>> + def log(level: Level, marker: Marker, message: Message, cause: >>>>>> Throwable): Unit = >>>>>> + macro LoggerMacro.logMarkerMsgThrowable >>>>>> + >>>>>> + def log(level: Level, marker: Marker, message: String): Unit = >>>>>> + macro LoggerMacro.logMarkerString >>>>>> + >>>>>> + def log(level: Level, marker: Marker, message: String, cause: >>>>>> Throwable): Unit = >>>>>> + macro LoggerMacro.logMarkerStringThrowable >>>>>> + >>>>>> + def log(level: Level, message: Message): Unit = >>>>>> + macro LoggerMacro.logMsg >>>>>> + >>>>>> + def log(level: Level, message: String): Unit = >>>>>> + macro LoggerMacro.logString >>>>>> + >>>>>> + def log(level: Level, message: Message, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.logMsgThrowable >>>>>> + >>>>>> + def log(level: Level, message: String, cause: Throwable): Unit = >>>>>> + macro LoggerMacro.logStringThrowable >>>>>> + >>>>>> + def isEnabled(level: Level): Boolean = delegate.isEnabled(level) >>>>>> + >>>>>> + def isEnabled(level: Level, marker: Marker): Boolean = >>>>>> delegate.isEnabled(level, marker) >>>>>> + >>>>>> + def level: Level = delegate.getLevel >>>>>> + >>>>>> + def name: String = delegate.getName >>>>>> + >>>>>> + /** Should normally not be used directly from application code, >>>>>> but needs to be public for access by macros. >>>>>> + * >>>>>> + * @param level log level >>>>>> + * @param marker marker or `null` >>>>>> + * @param message message >>>>>> + * @param cause cause or `null` >>>>>> + */ >>>>>> + def logMessage(level: Level, marker: Marker, message: Message, >>>>>> cause: Throwable): Unit = { >>>>>> + delegate.logIfEnabled(FQCN, level, marker, message, cause) >>>>>> + } >>>>>> + >>>>>> + /** Should normally not be used directly from application code, >>>>>> but needs to be public for access by macros. >>>>>> + * >>>>>> + * @param level log level >>>>>> + * @param marker marker or `null` >>>>>> + * @param message message >>>>>> + * @param cause cause or `null` >>>>>> + */ >>>>>> + def logMessage(level: Level, marker: Marker, message: String, >>>>>> cause: Throwable): Unit = { >>>>>> + delegate.logIfEnabled(FQCN, level, marker, message, cause) >>>>>> + } >>>>>> + >>>>>> +} >>>>>> >>>>>> >>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96805816/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala >>>>>> ---------------------------------------------------------------------- >>>>>> diff --git >>>>>> a/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala >>>>>> b/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala >>>>>> new file mode 100644 >>>>>> index 0000000..e8dfb3a >>>>>> --- /dev/null >>>>>> +++ >>>>>> b/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/LoggerMacro.scala >>>>>> @@ -0,0 +1,217 @@ >>>>>> +package org.apache.logging.log4j.scala >>>>>> + >>>>>> +import org.apache.logging.log4j.message.Message >>>>>> +import org.apache.logging.log4j.{Level, Marker} >>>>>> + >>>>>> +import scala.language.experimental.macros >>>>>> + >>>>>> +// Using the deprecated Context to be compatible with both Scala >>>>>> 2.10 and Scala 2.11 >>>>>> +//noinspection ScalaDeprecation >>>>>> +import scala.reflect.macros.Context >>>>>> + >>>>>> +//noinspection ScalaDeprecation >>>>>> +private object LoggerMacro { >>>>>> + >>>>>> + type LoggerContext = Context { type PrefixType = Logger } >>>>>> + >>>>>> + def fatalMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], >>>>>> message: c.Expr[Message]) = >>>>>> + logMarkerMsg(c)(c.universe.reify(Level.WARN), marker, message) >>>>>> + >>>>>> + def fatalMarkerMsgThrowable(c: LoggerContext)(marker: >>>>>> c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) = >>>>>> + logMarkerMsgThrowable(c)(c.universe.reify(Level.FATAL), marker, >>>>>> message, cause) >>>>>> + >>>>>> + def fatalMarkerString(c: LoggerContext)(marker: c.Expr[Marker], >>>>>> message: c.Expr[String]) = >>>>>> + logMarkerString(c)(c.universe.reify(Level.FATAL), marker, >>>>>> message) >>>>>> + >>>>>> + def fatalMarkerStringThrowable(c: LoggerContext)(marker: >>>>>> c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = >>>>>> + logMarkerStringThrowable(c)(c.universe.reify(Level.FATAL), >>>>>> marker, message, cause) >>>>>> + >>>>>> + def fatalMsg(c: LoggerContext)(message: c.Expr[Message]) = >>>>>> + logMsg(c)(c.universe.reify(Level.FATAL), message) >>>>>> + >>>>>> + def fatalMsgThrowable(c: LoggerContext)(message: c.Expr[Message], >>>>>> cause: c.Expr[Throwable]) = >>>>>> + logMsgThrowable(c)(c.universe.reify(Level.FATAL), message, cause) >>>>>> + >>>>>> + def fatalString(c: LoggerContext)(message: c.Expr[String]) = >>>>>> + logString(c)(c.universe.reify(Level.FATAL), message) >>>>>> + >>>>>> + def fatalStringThrowable(c: LoggerContext)(message: >>>>>> c.Expr[String], cause: c.Expr[Throwable]) = >>>>>> + logStringThrowable(c)(c.universe.reify(Level.FATAL), message, >>>>>> cause) >>>>>> + >>>>>> + def errorMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], >>>>>> message: c.Expr[Message]) = >>>>>> + logMarkerMsg(c)(c.universe.reify(Level.ERROR), marker, message) >>>>>> + >>>>>> + def errorMarkerMsgThrowable(c: LoggerContext)(marker: >>>>>> c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) = >>>>>> + logMarkerMsgThrowable(c)(c.universe.reify(Level.ERROR), marker, >>>>>> message, cause) >>>>>> + >>>>>> + def errorMarkerString(c: LoggerContext)(marker: c.Expr[Marker], >>>>>> message: c.Expr[String]) = >>>>>> + logMarkerString(c)(c.universe.reify(Level.ERROR), marker, >>>>>> message) >>>>>> + >>>>>> + def errorMarkerStringThrowable(c: LoggerContext)(marker: >>>>>> c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = >>>>>> + logMarkerStringThrowable(c)(c.universe.reify(Level.ERROR), >>>>>> marker, message, cause) >>>>>> + >>>>>> + def errorMsg(c: LoggerContext)(message: c.Expr[Message]) = >>>>>> + logMsg(c)(c.universe.reify(Level.ERROR), message) >>>>>> + >>>>>> + def errorMsgThrowable(c: LoggerContext)(message: c.Expr[Message], >>>>>> cause: c.Expr[Throwable]) = >>>>>> + logMsgThrowable(c)(c.universe.reify(Level.ERROR), message, cause) >>>>>> + >>>>>> + def errorString(c: LoggerContext)(message: c.Expr[String]) = >>>>>> + logString(c)(c.universe.reify(Level.ERROR), message) >>>>>> + >>>>>> + def errorStringThrowable(c: LoggerContext)(message: >>>>>> c.Expr[String], cause: c.Expr[Throwable]) = >>>>>> + logStringThrowable(c)(c.universe.reify(Level.ERROR), message, >>>>>> cause) >>>>>> + >>>>>> + def warnMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], >>>>>> message: c.Expr[Message]) = >>>>>> + logMarkerMsg(c)(c.universe.reify(Level.WARN), marker, message) >>>>>> + >>>>>> + def warnMarkerMsgThrowable(c: LoggerContext)(marker: >>>>>> c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) = >>>>>> + logMarkerMsgThrowable(c)(c.universe.reify(Level.WARN), marker, >>>>>> message, cause) >>>>>> + >>>>>> + def warnMarkerString(c: LoggerContext)(marker: c.Expr[Marker], >>>>>> message: c.Expr[String]) = >>>>>> + logMarkerString(c)(c.universe.reify(Level.WARN), marker, message) >>>>>> + >>>>>> + def warnMarkerStringThrowable(c: LoggerContext)(marker: >>>>>> c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = >>>>>> + logMarkerStringThrowable(c)(c.universe.reify(Level.WARN), >>>>>> marker, message, cause) >>>>>> + >>>>>> + def warnMsg(c: LoggerContext)(message: c.Expr[Message]) = >>>>>> + logMsg(c)(c.universe.reify(Level.WARN), message) >>>>>> + >>>>>> + def warnMsgThrowable(c: LoggerContext)(message: c.Expr[Message], >>>>>> cause: c.Expr[Throwable]) = >>>>>> + logMsgThrowable(c)(c.universe.reify(Level.WARN), message, cause) >>>>>> + >>>>>> + def warnString(c: LoggerContext)(message: c.Expr[String]) = >>>>>> + logString(c)(c.universe.reify(Level.WARN), message) >>>>>> + >>>>>> + def warnStringThrowable(c: LoggerContext)(message: c.Expr[String], >>>>>> cause: c.Expr[Throwable]) = >>>>>> + logStringThrowable(c)(c.universe.reify(Level.WARN), message, >>>>>> cause) >>>>>> + >>>>>> + def infoMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], >>>>>> message: c.Expr[Message]) = >>>>>> + logMarkerMsg(c)(c.universe.reify(Level.INFO), marker, message) >>>>>> + >>>>>> + def infoMarkerMsgThrowable(c: LoggerContext)(marker: >>>>>> c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) = >>>>>> + logMarkerMsgThrowable(c)(c.universe.reify(Level.INFO), marker, >>>>>> message, cause) >>>>>> + >>>>>> + def infoMarkerString(c: LoggerContext)(marker: c.Expr[Marker], >>>>>> message: c.Expr[String]) = >>>>>> + logMarkerString(c)(c.universe.reify(Level.INFO), marker, message) >>>>>> + >>>>>> + def infoMarkerStringThrowable(c: LoggerContext)(marker: >>>>>> c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = >>>>>> + logMarkerStringThrowable(c)(c.universe.reify(Level.INFO), >>>>>> marker, message, cause) >>>>>> + >>>>>> + def infoMsg(c: LoggerContext)(message: c.Expr[Message]) = >>>>>> + logMsg(c)(c.universe.reify(Level.INFO), message) >>>>>> + >>>>>> + def infoMsgThrowable(c: LoggerContext)(message: c.Expr[Message], >>>>>> cause: c.Expr[Throwable]) = >>>>>> + logMsgThrowable(c)(c.universe.reify(Level.INFO), message, cause) >>>>>> + >>>>>> + def infoString(c: LoggerContext)(message: c.Expr[String]) = >>>>>> + logString(c)(c.universe.reify(Level.INFO), message) >>>>>> + >>>>>> + def infoStringThrowable(c: LoggerContext)(message: c.Expr[String], >>>>>> cause: c.Expr[Throwable]) = >>>>>> + logStringThrowable(c)(c.universe.reify(Level.INFO), message, >>>>>> cause) >>>>>> + >>>>>> + def debugMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], >>>>>> message: c.Expr[Message]) = >>>>>> + logMarkerMsg(c)(c.universe.reify(Level.DEBUG), marker, message) >>>>>> + >>>>>> + def debugMarkerMsgThrowable(c: LoggerContext)(marker: >>>>>> c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) = >>>>>> + logMarkerMsgThrowable(c)(c.universe.reify(Level.DEBUG), marker, >>>>>> message, cause) >>>>>> + >>>>>> + def debugMarkerString(c: LoggerContext)(marker: c.Expr[Marker], >>>>>> message: c.Expr[String]) = >>>>>> + logMarkerString(c)(c.universe.reify(Level.DEBUG), marker, >>>>>> message) >>>>>> + >>>>>> + def debugMarkerStringThrowable(c: LoggerContext)(marker: >>>>>> c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = >>>>>> + logMarkerStringThrowable(c)(c.universe.reify(Level.DEBUG), >>>>>> marker, message, cause) >>>>>> + >>>>>> + def debugMsg(c: LoggerContext)(message: c.Expr[Message]) = >>>>>> + logMsg(c)(c.universe.reify(Level.DEBUG), message) >>>>>> + >>>>>> + def debugMsgThrowable(c: LoggerContext)(message: c.Expr[Message], >>>>>> cause: c.Expr[Throwable]) = >>>>>> + logMsgThrowable(c)(c.universe.reify(Level.DEBUG), message, cause) >>>>>> + >>>>>> + def debugString(c: LoggerContext)(message: c.Expr[String]) = >>>>>> + logString(c)(c.universe.reify(Level.DEBUG), message) >>>>>> + >>>>>> + def debugStringThrowable(c: LoggerContext)(message: >>>>>> c.Expr[String], cause: c.Expr[Throwable]) = >>>>>> + logStringThrowable(c)(c.universe.reify(Level.DEBUG), message, >>>>>> cause) >>>>>> + >>>>>> + def traceMarkerMsg(c: LoggerContext)(marker: c.Expr[Marker], >>>>>> message: c.Expr[Message]) = >>>>>> + logMarkerMsg(c)(c.universe.reify(Level.TRACE), marker, message) >>>>>> + >>>>>> + def traceMarkerMsgThrowable(c: LoggerContext)(marker: >>>>>> c.Expr[Marker], message: c.Expr[Message], cause: c.Expr[Throwable]) = >>>>>> + logMarkerMsgThrowable(c)(c.universe.reify(Level.TRACE), marker, >>>>>> message, cause) >>>>>> + >>>>>> + def traceMarkerString(c: LoggerContext)(marker: c.Expr[Marker], >>>>>> message: c.Expr[String]) = >>>>>> + logMarkerString(c)(c.universe.reify(Level.TRACE), marker, >>>>>> message) >>>>>> + >>>>>> + def traceMarkerStringThrowable(c: LoggerContext)(marker: >>>>>> c.Expr[Marker], message: c.Expr[String], cause: c.Expr[Throwable]) = >>>>>> + logMarkerStringThrowable(c)(c.universe.reify(Level.TRACE), >>>>>> marker, message, cause) >>>>>> + >>>>>> + def traceMsg(c: LoggerContext)(message: c.Expr[Message]) = >>>>>> + logMsg(c)(c.universe.reify(Level.TRACE), message) >>>>>> + >>>>>> + def traceMsgThrowable(c: LoggerContext)(message: c.Expr[Message], >>>>>> cause: c.Expr[Throwable]) = >>>>>> + logMsgThrowable(c)(c.universe.reify(Level.TRACE), message, cause) >>>>>> + >>>>>> + def traceString(c: LoggerContext)(message: c.Expr[String]) = >>>>>> + logString(c)(c.universe.reify(Level.TRACE), message) >>>>>> + >>>>>> + def traceStringThrowable(c: LoggerContext)(message: >>>>>> c.Expr[String], cause: c.Expr[Throwable]) = >>>>>> + logStringThrowable(c)(c.universe.reify(Level.TRACE), message, >>>>>> cause) >>>>>> + >>>>>> + def logMarkerMsg(c: LoggerContext)(level: c.Expr[Level], marker: >>>>>> c.Expr[Marker], message: c.Expr[Message]) = >>>>>> + c.universe.reify( >>>>>> + if (c.prefix.splice.delegate.isEnabled(level.splice, >>>>>> marker.splice)) { >>>>>> + c.prefix.splice.logMessage(level.splice, marker.splice, >>>>>> message.splice, null) >>>>>> + } >>>>>> + ) >>>>>> + >>>>>> + def logMarkerMsgThrowable(c: LoggerContext)(level: c.Expr[Level], >>>>>> marker: c.Expr[Marker], message: c.Expr[Message], cause: >>>>>> c.Expr[Throwable]) >>>>>> = >>>>>> + c.universe.reify( >>>>>> + if (c.prefix.splice.delegate.isEnabled(level.splice, >>>>>> marker.splice)) { >>>>>> + c.prefix.splice.logMessage(level.splice, marker.splice, >>>>>> message.splice, cause.splice) >>>>>> + } >>>>>> + ) >>>>>> + >>>>>> + def logMarkerString(c: LoggerContext)(level: c.Expr[Level], >>>>>> marker: c.Expr[Marker], message: c.Expr[String]) = >>>>>> + c.universe.reify( >>>>>> + if (c.prefix.splice.delegate.isEnabled(level.splice, >>>>>> marker.splice)) { >>>>>> + c.prefix.splice.logMessage(level.splice, marker.splice, >>>>>> message.splice, null) >>>>>> + } >>>>>> + ) >>>>>> + >>>>>> + def logMarkerStringThrowable(c: LoggerContext)(level: >>>>>> c.Expr[Level], marker: c.Expr[Marker], message: c.Expr[String], cause: >>>>>> c.Expr[Throwable]) = >>>>>> + c.universe.reify( >>>>>> + if (c.prefix.splice.delegate.isEnabled(level.splice, >>>>>> marker.splice)) { >>>>>> + c.prefix.splice.logMessage(level.splice, marker.splice, >>>>>> message.splice, cause.splice) >>>>>> + } >>>>>> + ) >>>>>> + >>>>>> + def logMsg(c: LoggerContext)(level: c.Expr[Level], message: >>>>>> c.Expr[Message]) = >>>>>> + c.universe.reify( >>>>>> + if (c.prefix.splice.delegate.isEnabled(level.splice)) { >>>>>> + c.prefix.splice.logMessage(level.splice, null, >>>>>> message.splice, null) >>>>>> + } >>>>>> + ) >>>>>> + >>>>>> + def logMsgThrowable(c: LoggerContext)(level: c.Expr[Level], >>>>>> message: c.Expr[Message], cause: c.Expr[Throwable]) = >>>>>> + c.universe.reify( >>>>>> + if (c.prefix.splice.delegate.isEnabled(level.splice)) { >>>>>> + c.prefix.splice.logMessage(level.splice, null, >>>>>> message.splice, cause.splice) >>>>>> + } >>>>>> + ) >>>>>> + >>>>>> + def logString(c: LoggerContext)(level: c.Expr[Level], message: >>>>>> c.Expr[String]) = >>>>>> + c.universe.reify( >>>>>> + if (c.prefix.splice.delegate.isEnabled(level.splice)) { >>>>>> + c.prefix.splice.logMessage(level.splice, null, >>>>>> message.splice, null) >>>>>> + } >>>>>> + ) >>>>>> + >>>>>> + def logStringThrowable(c: LoggerContext)(level: c.Expr[Level], >>>>>> message: c.Expr[String], cause: c.Expr[Throwable]) = >>>>>> + c.universe.reify( >>>>>> + if (c.prefix.splice.delegate.isEnabled(level.splice)) { >>>>>> + c.prefix.splice.logMessage(level.splice, null, >>>>>> message.splice, cause.splice) >>>>>> + } >>>>>> + ) >>>>>> + >>>>>> +} >>>>>> >>>>>> >>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96805816/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logging.scala >>>>>> ---------------------------------------------------------------------- >>>>>> diff --git >>>>>> a/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logging.scala >>>>>> b/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logging.scala >>>>>> new file mode 100644 >>>>>> index 0000000..0b3d03d >>>>>> --- /dev/null >>>>>> +++ >>>>>> b/log4j-scala_2.11/src/main/scala/org/apache/logging/log4j/scala/Logging.scala >>>>>> @@ -0,0 +1,10 @@ >>>>>> +package org.apache.logging.log4j.scala >>>>>> + >>>>>> +import org.apache.logging.log4j.LogManager >>>>>> + >>>>>> +trait Logging { >>>>>> + >>>>>> + protected lazy val logger: Logger = >>>>>> + new Logger(LogManager.getContext(getClass.getClassLoader, >>>>>> false).getLogger(getClass.getName)) >>>>>> + >>>>>> +} >>>>>> \ No newline at end of file >>>>>> >>>>>> >>>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/96805816/pom.xml >>>>>> ---------------------------------------------------------------------- >>>>>> diff --git a/pom.xml b/pom.xml >>>>>> index b62f935..84cca69 100644 >>>>>> --- a/pom.xml >>>>>> +++ b/pom.xml >>>>>> @@ -1131,6 +1131,11 @@ >>>>>> </excludes> >>>>>> </configuration> >>>>>> </plugin> >>>>>> + <plugin> >>>>>> + <groupId>net.alchim31.maven</groupId> >>>>>> + <artifactId>scala-maven-plugin</artifactId> >>>>>> + <version>3.2.2</version> >>>>>> + </plugin> >>>>>> </plugins> >>>>>> </reporting> >>>>>> <distributionManagement> >>>>>> @@ -1167,6 +1172,7 @@ >>>>>> <module>log4j-iostreams</module> >>>>>> <module>log4j-jul</module> >>>>>> <module>log4j-liquibase</module> >>>>>> + <module>log4j-scala_2.11</module> >>>>>> </modules> >>>>>> <profiles> >>>>>> <profile> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >>>>>> Java Persistence with Hibernate, Second Edition >>>>>> <http://www.manning.com/bauer3/> >>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >>>>>> Spring Batch in Action <http://www.manning.com/templier/> >>>>>> Blog: http://garygregory.wordpress.com >>>>>> Home: http://garygregory.com/ >>>>>> Tweet! http://twitter.com/GaryGregory >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> [image: MagineTV] >>>>> >>>>> *Mikael Ståldal* >>>>> Senior software developer >>>>> >>>>> *Magine TV* >>>>> mikael.stal...@magine.com >>>>> Regeringsgatan 25 | 111 53 Stockholm, Sweden | www.magine.com >>>>> >>>>> Privileged and/or Confidential Information may be contained in this >>>>> message. If you are not the addressee indicated in this message >>>>> (or responsible for delivery of the message to such a person), you may >>>>> not copy or deliver this message to anyone. In such case, >>>>> you should destroy this message and kindly notify the sender by reply >>>>> email. >>>>> >>>> >>> >>> >>> -- >>> [image: MagineTV] >>> >>> *Mikael Ståldal* >>> Senior software developer >>> >>> *Magine TV* >>> mikael.stal...@magine.com >>> Regeringsgatan 25 | 111 53 Stockholm, Sweden | www.magine.com >>> >>> Privileged and/or Confidential Information may be contained in this >>> message. If you are not the addressee indicated in this message >>> (or responsible for delivery of the message to such a person), you may >>> not copy or deliver this message to anyone. In such case, >>> you should destroy this message and kindly notify the sender by reply >>> email. >>> >> >> >> >> -- >> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >> Java Persistence with Hibernate, Second Edition >> <http://www.manning.com/bauer3/> >> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> >> Spring Batch in Action <http://www.manning.com/templier/> >> Blog: http://garygregory.wordpress.com >> Home: http://garygregory.com/ >> Tweet! http://twitter.com/GaryGregory >> > > > > -- > Matt Sicker <boa...@gmail.com> >