Since it seems all issues have been resolved I am going to start the release build. Please do not commit as it causes the release to fail.
Ralph > On Oct 1, 2016, at 4:32 AM, Remko Popma <remko.po...@gmail.com> wrote: > > LOG4J2-1618 is now also fixed. > > On Sat, Oct 1, 2016 at 3:20 AM, Gary Gregory <garydgreg...@gmail.com > <mailto:garydgreg...@gmail.com>> wrote: > On Thu, Sep 29, 2016 at 10:05 AM, Gary Gregory <garydgreg...@gmail.com > <mailto:garydgreg...@gmail.com>> wrote: > Please wait to cut rc2, I am fixing a regression: > https://issues.apache.org/jira/browse/LOG4J2-1620 > <https://issues.apache.org/jira/browse/LOG4J2-1620> > > Fixed. > > This looks like it needs addressing: > https://issues.apache.org/jira/browse/LOG4J2-1618 > <https://issues.apache.org/jira/browse/LOG4J2-1618> > > Gary > > > Gary > > On Thu, Sep 29, 2016 at 9:31 AM, Mikael Ståldal <mikael.stal...@magine.com > <mailto:mikael.stal...@magine.com>> wrote: > I created JIRA issues for the Kafka and Flume appender timeout issues, and I > have fixed both of them in master branch. > https://issues.apache.org/jira/browse/LOG4J2-1624 > <https://issues.apache.org/jira/browse/LOG4J2-1624> > https://issues.apache.org/jira/browse/LOG4J2-1625 > <https://issues.apache.org/jira/browse/LOG4J2-1625> > > I also created a JIRA issue for the JVM shutdown hook, but that not as easy > to fix and I would not consider it a blocker for the 2.7 release. We can fix > it for 2.7.1: > https://issues.apache.org/jira/browse/LOG4J2-1623 > <https://issues.apache.org/jira/browse/LOG4J2-1623> > > I think we can go ahead now and make an 2.7-rc2 from the current state of > master branch. > > > On Thu, Sep 29, 2016 at 3:45 PM, Ralph Goers <ralph.go...@dslextreme.com > <mailto:ralph.go...@dslextreme.com>> wrote: > The release is already delayed. So far we have two compatibility issues that > need to be fixed. Please create a Jira issue for the Flume Appender and the > JVM shutdown hook. Lets gets those fixed. And perhaps we should stop doing > things that aren’t directly focused on getting the release out as they may > well introduce more problems. > > Ralph > >> On Sep 29, 2016, at 5:16 AM, Mikael Ståldal <mikael.stal...@magine.com >> <mailto:mikael.stal...@magine.com>> wrote: >> >> I think that it is unfortunate that the close timeout is always zero within >> the standard JVM shutdown hook (LoggerContext.java:275). I think that should >> be configurable. However, I don't want to delay the release for that, so >> let's fix that after the 2.7 release. >> https://issues.apache.org/jira/browse/LOG4J2-1623 >> <https://issues.apache.org/jira/browse/LOG4J2-1623> >> >> However, I want to make sure that KafkaManager use the previous behavior if >> the requested timeout is zero. I just made a commit to master with that. >> >> It seems like FlumePersistentManager.releaseSub (the only other Manager >> using releaseSub timeout) tries to do something similar: >> final long shutdownWaitMillis = requestedTimeoutMillis < 0 ? >> SHUTDOWN_WAIT_MILLIS : requestedTimeoutMillis; >> But I thing the logic is wrong here. It should probably use >> SHUTDOWN_WAIT_MILLIS if requestedTimeoutMillis is <= 0. This should possibly >> be fixed before the release. >> >> >> >> On Wed, Sep 28, 2016 at 6:54 PM, Gary Gregory <garydgreg...@gmail.com >> <mailto:garydgreg...@gmail.com>> wrote: >> On Wed, Sep 28, 2016 at 8:51 AM, Mikael Ståldal <mikael.stal...@magine.com >> <mailto:mikael.stal...@magine.com>> wrote: >> Was this timeout thing implemented as part of any JIRA issue? >> >> The high level ticket is: https://issues.apache.org/jira/browse/LOG4J2-1539 >> <https://issues.apache.org/jira/browse/LOG4J2-1539> >> >> Gary >> >> >> On Wed, Sep 28, 2016 at 5:49 PM, Mikael Ståldal <mikael.stal...@magine.com >> <mailto:mikael.stal...@magine.com>> wrote: >> To track this, I temporary added this to KafkaManager.releaseSub(): >> LOGGER.info("releaseSub: timeout=" + timeout + " " + timeUnit.toString(), >> new Throwable()); >> and I get: >> 2016-09-28 17:43:14,382 pool-1-thread-1 INFO releaseSub: timeout=0 >> MILLISECONDS java.lang.Throwable >> at >> org.apache.logging.log4j.core.appender.mom.kafka.KafkaManager.releaseSub(KafkaManager.java:60) >> at >> org.apache.logging.log4j.core.appender.AbstractManager.stop(AbstractManager.java:85) >> at >> org.apache.logging.log4j.core.appender.mom.kafka.KafkaAppender.stop(KafkaAppender.java:107) >> at >> org.apache.logging.log4j.core.config.AbstractConfiguration.stop(AbstractConfiguration.java:349) >> at >> org.apache.logging.log4j.core.LoggerContext.stop(LoggerContext.java:329) >> at >> org.apache.logging.log4j.core.AbstractLifeCycle.stop(AbstractLifeCycle.java:127) >> at >> org.apache.logging.log4j.core.LoggerContext$1.run(LoggerContext.java:275) >> at >> org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry$RegisteredCancellable.run(DefaultShutdownCallbackRegistry.java:104) >> at >> org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry.run(DefaultShutdownCallbackRegistry.java:74) >> at java.lang.Thread.run(Thread.java:745) >> the culprit is AbstractLifeCycle.stop() which uses a default timeout of 0. >> >> On Wed, Sep 28, 2016 at 5:40 PM, Gary Gregory <garydgreg...@gmail.com >> <mailto:garydgreg...@gmail.com>> wrote: >> It is used when you call LifeCycle2.stop(long, TimeUnit), like stopping a >> LoggerContext or all of Log4j through the shutdown() method. >> >> Gary >> >> On Wed, Sep 28, 2016 at 8:35 AM, Mikael Ståldal <mikael.stal...@magine.com >> <mailto:mikael.stal...@magine.com>> wrote: >> I see that KafkaManager.releaseSub() is passed a timeout of 0 at runtime, >> which is not very useful. How is this actually supposed to be used? How can >> you make it get something else than 0? >> >> On Wed, Sep 28, 2016 at 5:33 PM, Mikael Ståldal <mikael.stal...@magine.com >> <mailto:mikael.stal...@magine.com>> wrote: >> We have already discussed this here: >> https://issues.apache.org/jira/browse/LOG4J2-1390 >> <https://issues.apache.org/jira/browse/LOG4J2-1390> >> >> I don't think the release process is the right occasion to reopen this >> discussion. Can we please keep the Kafka 0.8 compatibility for this release, >> and then possibly reopen this discussion after the release (and possibly >> changing it for the 2.8 release)? >> >> On Wed, Sep 28, 2016 at 5:24 PM, Gary Gregory <garydgreg...@gmail.com >> <mailto:garydgreg...@gmail.com>> wrote: >> On Wed, Sep 28, 2016 at 8:13 AM, Mikael Ståldal <mikael.stal...@magine.com >> <mailto:mikael.stal...@magine.com>> wrote: >> Kafka server 0.8 is still in use, and newer Kafka clients cannot connect to >> older Kafka servers. >> >> There will always be users of old software. That does not mean that new >> versions of Log4j must support old software, especially pre-1.0 software. >> >> Gary >> >> >> On Wed, Sep 28, 2016 at 5:10 PM, Gary Gregory <garydgreg...@gmail.com >> <mailto:garydgreg...@gmail.com>> wrote: >> I do not think it makes sense to support old versions that are not even 1.0. >> >> Gary >> >> On Wed, Sep 28, 2016 at 7:42 AM, Mikael Ståldal <mikael.stal...@magine.com >> <mailto:mikael.stal...@magine.com>> wrote: >> I fixed the Kafka issue and pushed it to master branch. >> >> However, I have another concern, what timeout value is actually passed in to >> AbstractManager.releaseSub ? >> >> On Wed, Sep 28, 2016 at 3:51 PM, Mikael Ståldal <mikael.stal...@magine.com >> <mailto:mikael.stal...@magine.com>> wrote: >> -1 since the Kafka appender now only works with Kafka client (and thus >> server) 0.9+, even though we agreed to keep compatibility with 0.8 for the >> time being: >> >> https://issues.apache.org/jira/browse/LOG4J2-1390 >> <https://issues.apache.org/jira/browse/LOG4J2-1390> >> >> The problem appeared with commit 170469514b374eb5a5a33bde6936162fd608f097 by >> Gary in KafkaManager.java (method releaseSub). >> >> I get this error with kafka-clients 0.8.2.2 <http://0.8.2.2/>: >> >> java.lang.NoSuchMethodError: >> org.apache.kafka.clients.producer.Producer.close(JLjava/util/concurrent/TimeUnit;)V >> at >> org.apache.logging.log4j.core.appender.mom.kafka.KafkaManager.releaseSub(KafkaManager.java:61) >> at >> org.apache.logging.log4j.core.appender.AbstractManager.stop(AbstractManager.java:85) >> at >> org.apache.logging.log4j.core.appender.mom.kafka.KafkaAppender.stop(KafkaAppender.java:107) >> at >> org.apache.logging.log4j.core.config.AbstractConfiguration.stop(AbstractConfiguration.java:349) >> at >> org.apache.logging.log4j.core.LoggerContext.stop(LoggerContext.java:329) >> at >> org.apache.logging.log4j.core.AbstractLifeCycle.stop(AbstractLifeCycle.java:127) >> at >> org.apache.logging.log4j.core.LoggerContext$1.run(LoggerContext.java:275) >> at >> org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry$RegisteredCancellable.run(DefaultShutdownCallbackRegistry.java:104) >> at >> org.apache.logging.log4j.core.util.DefaultShutdownCallbackRegistry.run(DefaultShutdownCallbackRegistry.java:74) >> at java.lang.Thread.run(Thread.java:745) >> >> >> >> >> On Mon, Sep 26, 2016 at 5:50 PM, Ralph Goers <ralph.go...@dslextreme.com >> <mailto:ralph.go...@dslextreme.com>> wrote: >> This is a vote to release Log4j 2.6.2, the next version of the Log4j 2 >> project. >> >> Please download, test, and cast your votes on the log4j developers list. >> [] +1, release the artifacts >> [] -1, don't release because... >> >> The vote will remain open for 72 hours (or more if required). All votes are >> welcome and we encourage everyone to test the release, but only Logging PMC >> votes are “officially” counted. As always, at least 3 +1 votes and more >> positive than negative votes are required. >> Changes in this version include: >> >> New features: >> o LOG4J2-1578: RoutingAppender can be configured with scripts. Add Script >> in a Routes element. >> o LOG4J2-1597: Add a ScriptAppenderSelector to create an Appender specified >> by a Script. >> o LOG4J2-1349: (GC) Added support for garbage-free ThreadContext map. >> Disabled by default, users need to enable this explicitly. >> o LOG4J2-1447: (GC) Changed LogEvent's internal data structure for context >> data to be garbage-free. Added method LogEvent#getContextData(), deprecated >> method #getContextMap(). >> o LOG4J2-1010: Users can now inject context data from other sources than >> ThreadContext. Values can be any Object, not just Strings. Thanks to Mikael >> Ståldal. >> o LOG4J2-1568: Added support for java.util.concurrent.LinkedTransferQueue >> to AsyncAppender. >> o LOG4J2-1430: Added optional support for Conversant DisruptorBlockingQueue >> in AsyncAppender. Thanks to John Cairns. >> o LOG4J2-1439: Added optional support for JCTools MPSC bounded lock-free >> queue in AsyncAppender. Thanks to Anthony Maire. >> o LOG4J2-1558: SocketAppender now supports IO buffering. >> o LOG4J2-1557: Add a Builder for the SocketAppender (deprecates factory >> method). >> o LOG4J2-1609: Add a Builder to ServletAppender and deprecate factory >> method. >> o LOG4J2-1553: AbstractManager now implements AutoCloseable. >> o LOG4J2-1528: Added ability to generate Log4j 2-style XML configuration >> file from ConfigurationBuilder. >> o LOG4J2-1181: Added Logging API for Scala 2.10 and 2.11. >> o LOG4J2-1512: Added options to exclude stack trace from JSON, XML and YAML >> layouts. >> o LOG4J2-1539: Added Core API Configurator.shutdown(LoggerContext, long, >> TimeUnit). >> o LOG4J2-1501: FileAppender is now able to create files on-demand. >> o LOG4J2-1504: RollingFileAppender is now able to create files on-demand. >> o LOG4J2-1471: [PatternLayout] Add an ANSI option to %xThrowable. >> o LOG4J2-1472: org.apache.logging.log4j.core.LoggerContext now implements >> Closeable. >> o LOG4J2-1458: [PatternLayout] Add an ANSI option to %message. >> o LOG4J2-1505: Create a Builder for the FileAppender plugin to facilitate >> adding attributes in the future. >> o LOG4J2-1507: Allow Builders to be completely generic. >> o LOG4J2-1508: Allow a Builder to subclass another Builder. >> o LOG4J2-1516: Add ThreadContextMap2 interface supporting method >> putAll(Map<String, String>). Thanks to Gary Gregory. >> o LOG4J2-1519: Add ThreadContext.putAll(Map<String, String>). >> o LOG4J2-1520: Add JUnit Rule implementations to manage the thread context. >> o LOG4J2-1547: The Core AbstractConfiguration now tracks its LoggerContext >> and add Configuration.getLoggerContext(). >> o LOG4J2-1540: The Core AbstractManager now tracks its LoggerContext. >> o LOG4J2-1577: Add a Builder to the RoutingAppender and deprecate factory >> method. >> >> Fixed Bugs: >> o LOG4J2-1611: Improved performance of context data injector for web >> applications to be on par with standalone applications. >> o LOG4J2-1591: Introduced new interface LifeCycle2 with stop(long,TimeUnit) >> method to avoid breaking backwards compatibility with new >> Configurator.shutdown(LoggerContext, long, TimeUnit) API. >> o LOG4J2-1590: Fixed issue with filters extending AbstractFilter that did >> not override methods with unrolled varargs. >> o LOG4J2-1583: Fixed scrambled log messages triggered by nested logging >> from toString() method of a logging parameter object. Thanks to Larry West. >> o LOG4J2-1259: Log4j threads are no longer leaking on Tomcat shutdown. >> Thanks to Misagh Moayyed, Steffen Offermann. >> o LOG4J2-1051: When starting on Google App Engine, Interpolator now >> suppresses the NoClassDefFoundError stack trace for the jvmrunargs lookup. >> Thanks to Lukasz Lenart. >> o LOG4J2-1582: When initializing on platforms where JMX is not available, >> Interpolator component no longer prints stack trace for warning messages. >> o LOG4J2-1581: Unregistering JMX components no longer prints a stack trace >> when the MBean has already been unregistered. >> o LOG4J2-1313: Support Property values to be specified in configuration as >> a value attribute as well as an element. Thanks to Philipp Knobel, Leon >> Finker. >> o LOG4J2-1575: (GC) LoggerConfig now stores configuration properties in a >> List, not a Map to prevent creating temporary Iterator objects. Added method >> LoggerConfig#getPropertyList(), deprecated method #getProperties(). >> o LOG4J2-1457: Fixed class loader deadlock when using async logging and >> extended stack trace pattern. Thanks to Leon Finker. >> o LOG4J2-1563: Fix to prevent Log4j 2.6.2 and higher from losing exceptions >> when a security manager is present. Thanks to Jason Tedor. >> o LOG4J2-1530: Fixed issue where LogEvent.getContextStack() returned null. >> o LOG4J2-1518: Prevent deadlock in Async Loggers when queue is full and >> logged Object's toString() logs another message. Thanks to Leon Finker. >> o LOG4J2-1542: Prevent ArrayIndexOutOfBoundsException in >> ParameterizedMessage.formatTo for single-char or empty messages. Thanks to >> Rogério Lecarião Leite. >> o LOG4J2-1549: Fixed issue where >> AsyncLoggerContextSelector+PropertiesConfigurationBuilder defaulted to >> includeLocation=true. Thanks to Jason Bedard. >> o LOG4J2-1562: Prevent SocketAppender memory usage from growing unbounded >> if it cannot connect to a server. >> o LOG4J2-1559: Prevent NPE in Level.isInRange. Thanks to Andrey Plotkin. >> o LOG4J2-1511: DynamicThresholdFilter filtered incorrectly when params were >> passed as individual arguments instead of varargs. Thanks to Srikanth >> Surukuntu. >> o LOG4J2-1548: [CronTriggeringPolicy] ConfigurationScheduler scheduled the >> task infinitely after first fire. >> o LOG4J2-1506: Log4j should not unregister JMX MBeans when >> log4j2.disable.jmx property is true. Thanks to Johannes Schleger. >> o LOG4J2-1490: Log4j2 should postpone creating log file until the appender >> actually receives an event. Thanks to Krzysztof Taborski. >> o LOG4J2-1320: Support loading custom plugins from jar files and >> directories whose classpath entries use the "vfs" URL protocol. Thanks to >> Paresh Varke, Pierrick Hymbert. >> o LOG4J2-1541: Fix file handle resource leak in >> XmlConfiguration.XmlConfiguration(ConfigurationSource). >> o LOG4J2-1538: Prevent NPE when dynamically removing filters. Thanks to >> Igor Karpov. >> o LOG4J2-1532: Attributes were not merged properly in composite >> configurations. >> o LOG4J2-1529: Attributes were not merged properly in composite >> configurations. Thanks to Sridevi Narra. >> o LOG4J2-1527: Prevent NPE in RingBufferLogEvent.getFormattedMessage() when >> used in web applications. Thanks to Jose Leon. >> o LOG4J2-905: Added ability to disable (date) lookup completely for >> compatibility with other libraries like Camel. Thanks to Moritz Löser. >> o LOG4J2-1526: Added support for setting StatusLogger destination in >> ConfigurationBuilder. >> o LOG4J2-1448: Allow comma separated agents, host list to be passed to >> FlumeAppender. Thanks to Keith Laban. >> o LOG4J2-1500: Merging configurations failed with an NPE when comparing >> Nodes with different attributes. Thanks to Jose Leon. >> o LOG4J2-1482: Fixed improper header in CsvParameterLayout. Thanks to Sumit >> Singhal. >> o LOG4J2-1199: Documented that JVM Input Arguments Lookup (JMX) is not >> available on Google App Engine. >> o LOG4J2-1438: (GC) Added method getParameter() to ObjectMessage (and >> ReusableObjectMessage). >> o LOG4J2-1488: (GC) Fixed ISO8601 %date conversion pattern with a period >> '.' separator for milliseconds is now garbage free. Thanks to Richard >> Zschech. >> o LOG4J2-1489: (GC) Fixed %date conversion patterns with a timezone >> parameter are now garbage free. Thanks to Richard Zschech. >> o LOG4J2-1279: Prevent NullPointerException in >> FastDateParser$TimeZoneStrategy. Thanks to Tony Baines. >> o LOG4J2-1341: (GC) HighlightConverter and StyleConverter are now GC-free. >> Thanks to Richard Zschech. >> o LOG4J2-1467: [OSGi] Fixed missing import package. Thanks to Ralf, Gary >> Gregory. >> o LOG4J2-351: [OSGi] Fixed wrong Fragment-Host in manifest files. Thanks to >> Roland Weiglhofer. >> o LOG4J2-1313: Properties declared in configuration can now have their >> value either in the element body or in an attribute named "value". Thanks to >> Philipp Knobel. >> o LOG4J2-1235: >> org.apache.logging.log4j.core.appender.routing.IdlePurgePolicy was not >> working correctly. Thanks to Niranjan Rao, Sascha Scholz, Aleksey Zvolinsky. >> o LOG4J2-1502: Fixed issue where CsvParameterLayout and CsvLogEventLayout >> inserted NUL characters if data starts with {, (, [ or " Thanks to Sumit >> Singhal. >> o LOG4J2-1573: Layout is no longer optional. Thanks to Steffen Offermann. >> o LOG4J2-1608: ServletAppender does not provide throwable object to >> ServletContext. >> o LOG4J2-1599: Prevent potential NPE in >> org.apache.logging.log4j.message.ParameterFormatter.formatMessage3(StringBuilder, >> char[], int, Object[], int, int[]). >> o LOG4J2-1600: Prevent potential NPE due to >> org.apache.logging.log4j.core.layout.MarkerPatternSelector.createSelector(PatternMatch[], >> String, boolean, boolean, Configuration). >> o LOG4J2-1601: Prevent potential NPE due to >> org.apache.logging.log4j.core.layout.ScriptPatternSelector.createSelector(AbstractScript, >> PatternMatch[], String, boolean, boolean, Configuration). >> o LOG4J2-1602: Prevent potential NPE in >> org.apache.logging.log4j.core.util.datetime.FormatCache.MultipartKey.equals(Object) >> when object is null. >> o LOG4J2-1603: Redo hashCode() and equals() methods in >> org.apache.logging.log4j.core.net.ssl classes. >> o LOG4J2-1610: Add targetNamespace to log4j-config.xsd. GitHub #43. Thanks >> to Shubhankar. >> >> Changes: >> o LOG4J2-1604: Log4j2 TcpSocketServer in background. Thanks to Colin >> Hillman. >> o LOG4J2-1574: Allow the RollingFileAppender to use default pattern layout. >> o LOG4J2-1556: Custom Log4j threads now extend Log4jThread. >> o LOG4J2-1605: Improve error messages for TcpSocketServer and >> UdpSocketServer. >> o LOG4J2-1458: Updated Jackson from 2.7.5 to 2.8.0. >> o LOG4J2-1494: Updated Jackson from 2.8.0 to 2.8.1. >> o LOG4J2-1569: Updated Jackson from 2.8.1 to 2.8.2. >> o LOG4J2-1598: Updated Jackson from 2.8.2 to 2.8.3. >> o LOG4J2-1495: Updated LMAX Disruptor from 3.3.4 to 3.3.5. >> o LOG4J2-1496: Updated Kafka client from 0.9.1.0 to 0.10.0.0. >> o LOG4J2-1533: Updated Kafka client from 0.10.0.0 to 0.10.0.1. >> o LOG4J2-1487: Updated JMS test from ActiveMQ 5.13.3 to 5.13.4. >> o LOG4J2-1551: Updated JMS test from ActiveMQ 5.13.4 to 5.14.0. >> o LOG4J2-1543: Removed deprecated Core API >> org.apache.logging.log4j.core.util.Constants.UTF_8. >> o LOG4J2-1544: Removed deprecated Core API >> org.apache.logging.log4j.core.util.Assert.requireNonNull(T, String). >> o LOG4J2-1545: Removed deprecated Web API >> org.apache.logging.log4j.web.WebLookup.getServletContext(). >> Tag: >> >> a) for a new copy do "git clone >> https://git-wip-us.apache.org/repos/asf/logging-log4j2.git >> <https://git-wip-us.apache.org/repos/asf/logging-log4j2.git>" and then "git >> checkout tags/log4j-2.7-rc1” >> b) for an existing working copy to “git pull” and then “git checkout >> tags/log4j-2.7-rc1” >> Web Site: >> <http://rgoers.github.io/log4j2-site/index.html>http://rgoers.github.io/log4j2-site/index.html >> <http://rgoers.github.io/log4j2-site/index.html> >> >> Artifacts: >> https://repository.apache.org/content/repositories/orgapachelogging-1021/ >> <https://repository.apache.org/content/repositories/orgapachelogging-1021/> >> >> You may download all the artifacts by executing: >> wget -e robots=off --cut-dirs=7 -nH -r -p -np --no-check-certificate >> https://repository.apache.org/content/repositories/orgapachelogging-1021/org/apache/logging/log4j/ >> >> <https://repository.apache.org/content/repositories/orgapachelogging-1021/org/apache/logging/log4j/> >> Ralph >> >> >> >> >> -- >> >> >> Mikael Ståldal >> Senior software developer >> >> Magine TV >> mikael.stal...@magine.com <mailto:mikael.stal...@magine.com> >> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >> <http://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. >> >> >> >> >> -- >> >> >> Mikael Ståldal >> Senior software developer >> >> Magine TV >> mikael.stal...@magine.com <mailto:mikael.stal...@magine.com> >> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >> <http://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 <mailto:garydgreg...@gmail.com> | >> ggreg...@apache.org <mailto: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 <http://garygregory.wordpress.com/> >> Home: http://garygregory.com/ <http://garygregory.com/> >> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory> >> >> >> -- >> >> >> Mikael Ståldal >> Senior software developer >> >> Magine TV >> mikael.stal...@magine.com <mailto:mikael.stal...@magine.com> >> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >> <http://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 <mailto:garydgreg...@gmail.com> | >> ggreg...@apache.org <mailto: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 <http://garygregory.wordpress.com/> >> Home: http://garygregory.com/ <http://garygregory.com/> >> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory> >> >> >> -- >> >> >> Mikael Ståldal >> Senior software developer >> >> Magine TV >> mikael.stal...@magine.com <mailto:mikael.stal...@magine.com> >> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >> <http://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. >> >> >> >> >> -- >> >> >> Mikael Ståldal >> Senior software developer >> >> Magine TV >> mikael.stal...@magine.com <mailto:mikael.stal...@magine.com> >> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >> <http://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 <mailto:garydgreg...@gmail.com> | >> ggreg...@apache.org <mailto: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 <http://garygregory.wordpress.com/> >> Home: http://garygregory.com/ <http://garygregory.com/> >> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory> >> >> >> -- >> >> >> Mikael Ståldal >> Senior software developer >> >> Magine TV >> mikael.stal...@magine.com <mailto:mikael.stal...@magine.com> >> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >> <http://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. >> >> >> >> >> -- >> >> >> Mikael Ståldal >> Senior software developer >> >> Magine TV >> mikael.stal...@magine.com <mailto:mikael.stal...@magine.com> >> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >> <http://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 <mailto:garydgreg...@gmail.com> | >> ggreg...@apache.org <mailto: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 <http://garygregory.wordpress.com/> >> Home: http://garygregory.com/ <http://garygregory.com/> >> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory> >> >> >> -- >> >> >> Mikael Ståldal >> Senior software developer >> >> Magine TV >> mikael.stal...@magine.com <mailto:mikael.stal...@magine.com> >> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >> <http://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. >> > > > > > -- > > > Mikael Ståldal > Senior software developer > > Magine TV > mikael.stal...@magine.com <mailto:mikael.stal...@magine.com> > Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com > <http://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 <mailto:garydgreg...@gmail.com> | > ggreg...@apache.org <mailto: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 <http://garygregory.wordpress.com/> > Home: http://garygregory.com/ <http://garygregory.com/> > Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory> > > > > -- > E-Mail: garydgreg...@gmail.com <mailto:garydgreg...@gmail.com> | > ggreg...@apache.org <mailto: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 <http://garygregory.wordpress.com/> > Home: http://garygregory.com/ <http://garygregory.com/> > Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory>