You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by am...@apache.org on 2009/11/26 19:08:38 UTC
svn commit: r884657 - in /cxf/trunk:
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/converter/
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/loggin...
Author: amichalec
Date: Thu Nov 26 18:08:37 2009
New Revision: 884657
URL: http://svn.apache.org/viewvc?rev=884657&view=rev
Log:
Simpler configuration, AtomPub support, refactoring.
Added:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/converter/
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/converter/Converter.java
- copied, changed from r883650, cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/Converter.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/converter/StandardConverter.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/Deliverer.java
- copied, changed from r883650, cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/Deliverer.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/FireAndForgetDeliverer.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/RetryingDeliverer.java
- copied, changed from r883650, cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/RetryingDeliverer.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/WebClientDeliverer.java
- copied, changed from r883650, cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/WebClientDeliverer.java
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush_atompub.properties
Removed:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/Converter.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/Deliverer.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/MultiEntryContentConverter.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/MultiEntryExtensionConverter.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/RetryingDeliverer.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/SingleEntryContentConverter.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/SingleEntryExtensionConverter.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/WebClientDeliverer.java
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushBean.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngine.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngineConfigurator.java
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushHandler.java
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPushSpringTest.java
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPushTest.java
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush.properties
cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush_batch.properties
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushBean.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushBean.java?rev=884657&r1=884656&r2=884657&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushBean.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushBean.java Thu Nov 26 18:08:37 2009
@@ -27,6 +27,8 @@
import org.apache.commons.lang.Validate;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.jaxrs.ext.logging.LogLevel;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.Converter;
+import org.apache.cxf.jaxrs.ext.logging.atom.deliverer.Deliverer;
/**
* Bean used to configure {@link AtomPushHandler JUL handler} with Spring instead of properties file. Next to
@@ -81,6 +83,7 @@
* </bean>
* </pre>
*/
+// TODO add support for conversion setup (output, entries, logs, format)
public final class AtomPushBean {
private AtomPushEngineConfigurator conf = new AtomPushEngineConfigurator();
@@ -187,7 +190,7 @@
Validate.notNull(batchSize, "batchSize is null");
conf.setBatchSize(batchSize);
}
-
+
/**
* Retry pause calculation strategy, either "linear" or "exponential".
*/
@@ -214,7 +217,7 @@
Validate.notNull(timeout, "timeout is null");
conf.setRetryTimeout(timeout);
}
-
+
/**
* Initializes bean; creates ATOM push handler based on current properties state, and attaches handler to
* logger(s).
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngine.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngine.java?rev=884657&r1=884656&r2=884657&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngine.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngine.java Thu Nov 26 18:08:37 2009
@@ -26,6 +26,8 @@
import org.apache.abdera.model.Element;
import org.apache.commons.lang.Validate;
import org.apache.cxf.jaxrs.ext.logging.LogRecord;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.Converter;
+import org.apache.cxf.jaxrs.ext.logging.atom.deliverer.Deliverer;
/**
* Package private ATOM push-style engine. Engine enqueues log records as they are {@link #publish(LogRecord)
@@ -41,7 +43,8 @@
* is taken from queue only when currently processed batch finishes and queue has enough elements to proceed.
* <p>
* First failure of any delivery shuts engine down. To avoid this situation engine must have registered
- * reliable deliverer or use wrapping {@link RetryingDeliverer}.
+ * reliable deliverer or use wrapping
+ * {@link org.apache.cxf.jaxrs.ext.logging.atom.deliverer.RetryingDeliverer}.
*/
// TODO add internal diagnostics - log messages somewhere except for logger :D
final class AtomPushEngine {
@@ -101,10 +104,13 @@
// syncing for safe converter/deliverer on the fly replacement
synchronized (this) {
// TODO diagnostic output here: System.out.println(element.toString());
- Element element = converter.convert(batch);
- if (!deliverer.deliver(element)) {
- System.err.println("Delivery failed, shutting engine down");
- executor.shutdownNow();
+ List<? extends Element> elements = converter.convert(batch);
+ for (Element element : elements) {
+ if (!deliverer.deliver(element)) {
+ System.err.println("Delivery failed, shutting engine down");
+ executor.shutdownNow();
+ break;
+ }
}
}
} catch (InterruptedException e) {
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngineConfigurator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngineConfigurator.java?rev=884657&r1=884656&r2=884657&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngineConfigurator.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushEngineConfigurator.java Thu Nov 26 18:08:37 2009
@@ -20,6 +20,15 @@
import java.lang.reflect.Constructor;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.Converter;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.StandardConverter;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.StandardConverter.Format;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.StandardConverter.Multiplicity;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.StandardConverter.Output;
+import org.apache.cxf.jaxrs.ext.logging.atom.deliverer.Deliverer;
+import org.apache.cxf.jaxrs.ext.logging.atom.deliverer.RetryingDeliverer;
+import org.apache.cxf.jaxrs.ext.logging.atom.deliverer.WebClientDeliverer;
+
/**
* Package private interpreter of incomplete input of engine configuration. Used commonly by
* {@link AtomPushHandler properties file} and {@link AtomPushBean spring} configuration schemes.
@@ -36,6 +45,9 @@
private String retryTimeout;
private String retryPause;
private String retryPauseTime;
+ private String output;
+ private String multiplicity;
+ private String format;
public void setUrl(String url) {
this.delivererUrl = url;
@@ -73,10 +85,21 @@
this.converterClass = converterClass;
}
+ public void setOutput(String output) {
+ this.output = output;
+ }
+
+ public void setMultiplicity(String multiplicity) {
+ this.multiplicity = multiplicity;
+ }
+
+ public void setFormat(String format) {
+ this.format = format;
+ }
+
public AtomPushEngine createEngine() {
Deliverer d = deliverer;
Converter c = converter;
- int batch = 1;
if (d == null) {
if (delivererUrl != null) {
if (delivererClass != null) {
@@ -93,10 +116,13 @@
if (converterClass != null) {
c = createConverter(converterClass);
} else {
- c = new SingleEntryContentConverter();
+ Output out = parseEnum(output, Output.FEED);
+ Multiplicity mul = parseEnum(multiplicity, Multiplicity.ONE);
+ Format form = parseEnum(format, Format.CONTENT);
+ c = new StandardConverter(out, mul, form);
}
}
- batch = parseInt(batchSize, 1, 1);
+ int batch = parseInt(batchSize, 1, 1);
if (retryPause != null) {
int timeout = parseInt(retryTimeout, 0, 0);
int pause = parseInt(retryPauseTime, 1, 30);
@@ -112,8 +138,8 @@
private Deliverer createDeliverer(String clazz, String url) {
try {
- Constructor<?> ctor = loadClass(clazz).getConstructor(String.class);
- return (Deliverer)ctor.newInstance(url);
+ Constructor<Deliverer> ctor = loadClass(clazz, Deliverer.class).getConstructor(String.class);
+ return ctor.newInstance(url);
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
@@ -121,22 +147,24 @@
private Converter createConverter(String clazz) {
try {
- Constructor<?> ctor = loadClass(clazz).getConstructor();
- return (Converter)ctor.newInstance();
+ Constructor<Converter> ctor = loadClass(clazz, Converter.class).getConstructor();
+ return ctor.newInstance();
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
}
- private Class<?> loadClass(String clazz) throws ClassNotFoundException {
+ @SuppressWarnings("unchecked")
+ private <T> Class<T> loadClass(String clazz, Class<T> ifaceClass) throws ClassNotFoundException {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
try {
- return cl.loadClass(clazz);
+ return (Class<T>)cl.loadClass(clazz);
} catch (ClassNotFoundException e) {
try {
- // clazz could be shorted (stripped package name) retry
- String clazz2 = getClass().getPackage().getName() + "." + clazz;
- return cl.loadClass(clazz2);
+ // clazz could be shorted (stripped package name) retry for interface location
+ String pkg = ifaceClass.getPackage().getName();
+ String clazz2 = pkg + "." + clazz;
+ return (Class<T>)cl.loadClass(clazz2);
} catch (Exception e1) {
throw new ClassNotFoundException(e.getMessage() + " or " + e1.getMessage());
}
@@ -158,4 +186,16 @@
}
return ret;
}
+
+ @SuppressWarnings("unchecked")
+ private <T extends Enum<T>> T parseEnum(String value, T defaultValue) {
+ if (value == null | "".equals(value)) {
+ return defaultValue;
+ }
+ try {
+ return (T)Enum.valueOf(defaultValue.getClass(), value.toUpperCase());
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
}
Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushHandler.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushHandler.java?rev=884657&r1=884656&r2=884657&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushHandler.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/AtomPushHandler.java Thu Nov 26 18:08:37 2009
@@ -22,30 +22,36 @@
import java.util.logging.LogManager;
import org.apache.cxf.jaxrs.ext.logging.LogRecord;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.Converter;
+import org.apache.cxf.jaxrs.ext.logging.atom.deliverer.Deliverer;
/**
- * Handler pushing log records in batches as Atom Feeds to registered client. Handler responsibility is to
- * adapt to JUL framework while most of job is delegated to {@link AtomPushEngine}.
+ * Handler pushing log records in batches as Atom Feeds or Entries to registered client. Handler
+ * responsibility is to adapt to JUL framework while most of job is delegated to {@link AtomPushEngine}.
* <p>
* For simple configuration using properties file (one global root-level handler of this class) following
- * properties prefixed with full class name can be used:
+ * properties prefixed with full name of this class can be used:
* <ul>
* <li><b>url</b> - URL where feeds will be pushed (mandatory parameter)</li>
- * <li><b>converter</b> - name of class implementing {@link Converter} class. For classes from this package
- * only class name can be given e.g. instead of
- * "org.apache.cxf.jaxrs.ext.logging.atom.ContentSingleEntryConverter" one can specify
- * "ContentSingleEntryConverter". If parameter is not set {@link SingleEntryContentConverter} is used.</li>
- * <li><b>deliverer</b> - name of class implementing {@link Deliverer} class. For classes from this package
- * only class name can be given e.g. instead of "org.apache.cxf.jaxrs.ext.logging.atom.WebClientDeliverer" one
- * can specify "WebClientDeliverer". If parameter is not set {@link WebClientDeliverer} is used.</li>
* <li><b>batchSize</b> - integer number specifying minimal number of published log records that trigger
* processing and pushing ATOM document. If parameter is not set, is not greater than zero or is not a number,
* batch size is set to 1.</li>
* </ul>
- * Family of <tt>retry</tt> parameters below; availability of any of this parameters enables delivery retrying
- * (e.g. for default non-reliable deliverers) with {@link RetryingDeliverer} that can be combined with
- * provided non-reliable deliverers. Detailed explanation of these parameter, see {@link RetryingDeliverer}
- * class description.
+ * Conversion of log records into ATOM Elements can be tuned up using following parameters. Note that not all
+ * combinations are meaningful, see {@link org.apache.cxf.jaxrs.ext.logging.atom.converter.StandardConverter}
+ * for details:
+ * <ul>
+ * <li><b>output</b> - ATOM Element type pushed out, either "feed" or "entry"; when not specified or invalid
+ * value provided "feed" is used.</li>
+ * <li><b>multiplicity</b> - multiplicity of subelement(entries in feed for output=="feed" or log records in
+ * entry for output=="entry"), either "one" or "many"; when not specified or invalid value provided "one" is
+ * used.</li>
+ * <li><b>format</b> - method of embedding data in entry, either "content" or "extension"; when not specified
+ * or invalid value provided "content" is used.</li>
+ * </ul>
+ * By default delivery is served by WebClientDeliverer which does not support reliability of transport.
+ * Availability of any of this parameters enables retrying of default delivery. Detailed explanation of these
+ * parameter, see {@link org.apache.cxf.jaxrs.ext.logging.atom.deliverer.RetryingDeliverer} class description.
* <ul>
* <li><b>retry.pause</b> - pausing strategy of delivery retries, either <b>linear</b> or <b>exponential</b>
* value (mandatory parameter). If mispelled linear is used.</li>
@@ -54,19 +60,37 @@
* <li><b>retry.timeout</b> - maximum time (in seconds) retrying will be continued. If not set timeout is not
* set (infinite loop of retries).</li>
* </ul>
+ * Ultimate control on conversion and delivery is obtained specifying own implementation classes:
+ * <ul>
+ * <li><b>converter</b> - name of class implementing {@link Converter} class replacing default conversion and
+ * its specific parameters ("output", "multiplicity" and "format") are ignored. For classes located in same
+ * package as Converter interface only class name can be given e.g. instead of
+ * "org.apache.cxf.jaxrs.ext.logging.atom.converter.FooBarConverter" one can specify "FooBarConverter".</li>
+ * <li><b>deliverer</b> - name of class implementing {@link Deliverer} class replacing default delivery and
+ * its specific parameters ("retry.Xxx") are ignored. For classes located in same package as Deliverer
+ * interface only class name can be given e.g. instead of
+ * "org.apache.cxf.jaxrs.ext.logging.atom.deliverer.WebClientDeliverer" one can specify
+ * "WebClientDeliverer".</li>
+ * </ul>
* Example:
*
* <pre>
* handlers = org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler, java.util.logging.ConsoleHandler
* .level = INFO
- * ...
+ *
+ * # deliver to given URL triggering after each batch of 10 log records
* org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.url = http://localhost:9080
* org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.batchSize = 10
- * org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.deliverer = WebClientDeliverer
- * org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.converter = foo.bar.MyConverter
+ *
+ * # enable retrying delivery every 10 seconds for 5 minutes
* org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.retry.pause = linear
* org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.retry.pause.time = 10
- * org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.retry.timeout = 360
+ * org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.retry.timeout = 300
+ *
+ * # output for AtomPub: push entries not feeds, each entry with one log record as "atom:extension"
+ * org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.output = entry
+ * org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.multiplicity = one
+ * org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.format = extension
* ...
* </pre>
*/
@@ -152,6 +176,9 @@
conf.setRetryPause(manager.getProperty(cname + ".retry.pause"));
conf.setRetryPauseTime(manager.getProperty(cname + ".retry.pause.time"));
conf.setRetryTimeout(manager.getProperty(cname + ".retry.timeout"));
+ conf.setOutput(manager.getProperty(cname + ".output"));
+ conf.setMultiplicity(manager.getProperty(cname + ".multiplicity"));
+ conf.setFormat(manager.getProperty(cname + ".format"));
engine = conf.createEngine();
}
}
Copied: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/converter/Converter.java (from r883650, cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/Converter.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/converter/Converter.java?p2=cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/converter/Converter.java&p1=cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/Converter.java&r1=883650&r2=884657&rev=884657&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/Converter.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/converter/Converter.java Thu Nov 26 18:08:37 2009
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.cxf.jaxrs.ext.logging.atom;
+package org.apache.cxf.jaxrs.ext.logging.atom.converter;
import java.util.List;
@@ -24,16 +24,15 @@
import org.apache.cxf.jaxrs.ext.logging.LogRecord;
/**
- * Converts batch of log records into ATOM element to deliver. Represents strategies of conversion e.g. as
- * ATOM format extensions, as Entry content etc.
+ * Converts batch of log records into one or more ATOM Elements to deliver.
*/
public interface Converter {
/**
- * Converts collection of log records into ATOM element.
+ * Converts given collection.
*
* @param records not-null collection of records
- * @return ATOM document representing records
+ * @return non-empty collection of ATOM Elements that represent log records
*/
- Element convert(List<LogRecord> records);
+ List<? extends Element> convert(List<LogRecord> records);
}
Added: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/converter/StandardConverter.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/converter/StandardConverter.java?rev=884657&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/converter/StandardConverter.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/converter/StandardConverter.java Thu Nov 26 18:08:37 2009
@@ -0,0 +1,253 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.jaxrs.ext.logging.atom.converter;
+
+import java.io.StringWriter;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.namespace.QName;
+
+import org.apache.abdera.Abdera;
+import org.apache.abdera.factory.Factory;
+import org.apache.abdera.model.Content;
+import org.apache.abdera.model.Element;
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.model.ExtensibleElement;
+import org.apache.abdera.model.Feed;
+import org.apache.commons.lang.Validate;
+import org.apache.cxf.jaxrs.ext.logging.LogRecord;
+import org.apache.cxf.jaxrs.ext.logging.LogRecordsList;
+
+/**
+ * Converter producing ATOM Feeds on standalone Entries with LogRecords or LogRecordsLists embedded as content
+ * or extension. For configuration details see constructor documentation.
+ */
+public class StandardConverter implements Converter {
+
+ /** Conversion output */
+ public enum Output {
+ FEED,
+ ENTRY
+ }
+
+ /** Quantities of entries in feed or logrecords in entry */
+ public enum Multiplicity {
+ ONE,
+ MANY
+ }
+
+ /** Entity format */
+ public enum Format {
+ CONTENT,
+ EXTENSION
+ }
+
+ private Factory factory;
+ private Marshaller marsh;
+ private DateFormat df;
+ private Converter worker;
+
+ /**
+ * Creates configured converter. Regardless of "format", combination of "output" and "multiplicity" flags
+ * can be interpreted as follow:
+ * <ul>
+ * <li>ENTRY ONE - for each log record one entry is produced, converter returns list of entries</li>
+ * <li>ENTRY MANY - list of log records is packed in one entry, converter return one entry.</li>
+ * <li>FEED ONE - list of log records is packed in one entry, entry is inserted to feed, converter returns
+ * one feed.</li>
+ * <li>FEED MANY - for each log record one entry is produced, entries are collected in one feed, converter
+ * returns one feed.</li>
+ * </ul>
+ *
+ * @param output whether root elements if Feed or Entry (e.g. for AtomPub).
+ * @param multiplicity for output==FEED it is multiplicity of entities in feed for output==ENTITY it is
+ * multiplicity of log records in entity.
+ * @param format log records embedded as entry content or extension.
+ */
+ public StandardConverter(Output output, Multiplicity multiplicity, Format format) {
+ Validate.notNull(output, "output is null");
+ Validate.notNull(multiplicity, "multiplicity is null");
+ Validate.notNull(format, "format is null");
+ configure(output, multiplicity, format);
+ df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
+ factory = Abdera.getNewFactory();
+ try {
+ marsh = JAXBContext.newInstance(LogRecordsList.class).createMarshaller();
+ } catch (JAXBException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public List<? extends Element> convert(List<LogRecord> records) {
+ return worker.convert(records);
+ }
+
+ private void configure(final Output output, final Multiplicity multiplicity, final Format format) {
+ if (output == Output.ENTRY && multiplicity == Multiplicity.ONE) {
+ worker = new Converter() {
+ public List<? extends Element> convert(List<LogRecord> records) {
+ // produces many entries, each entry with one log record
+ List<Element> ret = new ArrayList<Element>();
+ for (LogRecord record : records) {
+ if (format == Format.CONTENT) {
+ ret.add(createEntry(createContent(record)));
+ } else {
+ ret.add(createEntry(createExtension(record)));
+ }
+ }
+ return ret;
+ }
+ };
+ }
+ if (output == Output.ENTRY && multiplicity == Multiplicity.MANY) {
+ worker = new Converter() {
+ public List<? extends Element> convert(List<LogRecord> records) {
+ // produces one entry with list of all log records
+ if (format == Format.CONTENT) {
+ return Arrays.asList(createEntry(createContent(records)));
+ } else {
+ return Arrays.asList(createEntry(createExtension(records)));
+ }
+ }
+ };
+ }
+ if (output == Output.FEED && multiplicity == Multiplicity.ONE) {
+ worker = new Converter() {
+ public List<? extends Element> convert(List<LogRecord> records) {
+ // produces one feed with one entry with list of all log records
+ if (format == Format.CONTENT) {
+ return Arrays.asList(createFeed(createEntry(createContent(records))));
+ } else {
+ return Arrays.asList(createFeed(createEntry(createExtension(records))));
+ }
+ }
+ };
+ }
+ if (output == Output.FEED && multiplicity == Multiplicity.MANY) {
+ worker = new Converter() {
+ public List<? extends Element> convert(List<LogRecord> records) {
+ // produces one feed with many entries, each entry with one log record
+ List<Entry> entries = new ArrayList<Entry>();
+ for (LogRecord record : records) {
+ if (format == Format.CONTENT) {
+ entries.add(createEntry(createContent(record)));
+ } else {
+ entries.add(createEntry(createExtension(record)));
+ }
+ }
+ return Arrays.asList(createFeed(entries));
+ }
+ };
+ }
+ if (worker == null) {
+ throw new IllegalArgumentException("Unsupported configuration");
+ }
+ }
+
+ private String createContent(LogRecord record) {
+ StringWriter writer = new StringWriter();
+ try {
+ marsh.marshal(record, writer);
+ } catch (JAXBException e) {
+ throw new RuntimeException(e);
+ }
+ return writer.toString();
+ }
+
+ private String createContent(List<LogRecord> records) {
+ StringWriter writer = new StringWriter();
+ LogRecordsList list = new LogRecordsList();
+ list.setLogRecords(records);
+ try {
+ marsh.marshal(list, writer);
+ } catch (JAXBException e) {
+ throw new RuntimeException(e);
+ }
+ return writer.toString();
+ }
+
+ private ExtensibleElement createExtension(LogRecord record) {
+ ExtensibleElement erec = factory.newExtensionElement(qn("logRecord"));
+ String date = df.format(record.getEventTimestamp());
+ // timezone in date does not have semicolon as XML Date requires
+ // e.g we have "2009-11-23T22:03:53.996+0100"
+ // instead of "2009-11-23T22:03:53.996+01:00"
+ date = date.substring(0, date.length() - 2) + ":" + date.substring(date.length() - 2);
+ // forget about single line "addExtension().setText()" since
+ // javac failure "org.apache.abdera.model.Element cannot be dereferenced"
+ Element e = erec.addExtension(qn("eventTimestamp"));
+ e.setText(date);
+ e = erec.addExtension(qn("level"));
+ e.setText(record.getLevel().toString());
+ e = erec.addExtension(qn("loggerName"));
+ e.setText(record.getLoggerName());
+ e = erec.addExtension(qn("message"));
+ e.setText(record.getMessage());
+ e = erec.addExtension(qn("threadName"));
+ e.setText(record.getThreadName());
+ e = erec.addExtension(qn("throwable"));
+ e.setText(record.getThrowable());
+ return erec;
+ }
+
+ private QName qn(String name) {
+ return new QName("http://cxf.apache.org/jaxrs/log", name, "log");
+ }
+
+ private ExtensibleElement createExtension(List<LogRecord> records) {
+ ExtensibleElement list = factory.newExtensionElement(qn("logRecordsList"));
+ for (LogRecord rec : records) {
+ list.addExtension(createExtension(rec));
+ }
+ return list;
+ }
+
+ private Entry createEntry(String content) {
+ Entry entry = factory.newEntry();
+ entry.setContent(content, Content.Type.XML);
+ return entry;
+ }
+
+ private Entry createEntry(ExtensibleElement ext) {
+ Entry entry = factory.newEntry();
+ entry.addExtension(ext);
+ return entry;
+ }
+
+ private Feed createFeed(Entry entry) {
+ Feed feed = factory.newFeed();
+ feed.addEntry(entry);
+ return feed;
+ }
+
+ private Feed createFeed(List<Entry> entries) {
+ Feed feed = factory.newFeed();
+ for (Entry entry : entries) {
+ feed.addEntry(entry);
+ }
+ return feed;
+ }
+}
Copied: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/Deliverer.java (from r883650, cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/Deliverer.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/Deliverer.java?p2=cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/Deliverer.java&p1=cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/Deliverer.java&r1=883650&r2=884657&rev=884657&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/Deliverer.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/Deliverer.java Thu Nov 26 18:08:37 2009
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.cxf.jaxrs.ext.logging.atom;
+package org.apache.cxf.jaxrs.ext.logging.atom.deliverer;
import org.apache.abdera.model.Element;
Added: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/FireAndForgetDeliverer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/FireAndForgetDeliverer.java?rev=884657&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/FireAndForgetDeliverer.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/FireAndForgetDeliverer.java Thu Nov 26 18:08:37 2009
@@ -0,0 +1,41 @@
+/**
+ * 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.
+ */
+package org.apache.cxf.jaxrs.ext.logging.atom.deliverer;
+
+import org.apache.abdera.model.Element;
+import org.apache.commons.lang.Validate;
+
+/**
+ * Fires delivery of wrapper deliverer and forgets about status always assuming success. Fire-and-forget works
+ * only for regular flow, runtime and interrupted exceptions are not handled.
+ */
+public final class FireAndForgetDeliverer implements Deliverer {
+
+ private Deliverer deliverer;
+
+ public FireAndForgetDeliverer(Deliverer worker) {
+ Validate.notNull(worker, "worker is null");
+ deliverer = worker;
+ }
+
+ public boolean deliver(Element element) throws InterruptedException {
+ deliverer.deliver(element);
+ return true;
+ }
+}
Copied: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/RetryingDeliverer.java (from r883650, cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/RetryingDeliverer.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/RetryingDeliverer.java?p2=cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/RetryingDeliverer.java&p1=cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/RetryingDeliverer.java&r1=883650&r2=884657&rev=884657&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/RetryingDeliverer.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/RetryingDeliverer.java Thu Nov 26 18:08:37 2009
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.cxf.jaxrs.ext.logging.atom;
+package org.apache.cxf.jaxrs.ext.logging.atom.deliverer;
import java.util.Calendar;
import java.util.Date;
@@ -30,7 +30,7 @@
* is configurable strategy. Two predefined strategies are given: each time pause same amount of time (linear)
* and each next time pause time doubles (exponential).
*/
-public class RetryingDeliverer implements Deliverer {
+public final class RetryingDeliverer implements Deliverer {
private Deliverer deliverer;
private PauseCalculator pauser;
@@ -83,16 +83,22 @@
if (timeout == 0 || timeoutDate.after(cal.getTime())) {
Thread.sleep(sleep * 1000);
} else {
+ pauser.reset();
return false;
}
}
+ pauser.reset();
return true;
}
/** Calculates time of subsequent pauses between delivery attempts. */
public interface PauseCalculator {
+
/** Time of next pause (in seconds). */
int nextPause();
+
+ /** Restarts calculation. */
+ void reset();
}
private static class ConstantPause implements PauseCalculator {
@@ -105,19 +111,28 @@
public int nextPause() {
return pause;
}
+
+ public void reset() {
+ }
}
private static class ExponentialPause implements PauseCalculator {
private int pause;
+ private int current;
public ExponentialPause(int pause) {
this.pause = pause;
+ current = pause;
}
public int nextPause() {
- int curr = pause;
- pause *= 2;
- return curr;
+ int c = current;
+ current *= 2;
+ return c;
+ }
+
+ public void reset() {
+ current = pause;
}
}
Copied: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/WebClientDeliverer.java (from r883650, cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/WebClientDeliverer.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/WebClientDeliverer.java?p2=cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/WebClientDeliverer.java&p1=cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/WebClientDeliverer.java&r1=883650&r2=884657&rev=884657&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/WebClientDeliverer.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/logging/atom/deliverer/WebClientDeliverer.java Thu Nov 26 18:08:37 2009
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.cxf.jaxrs.ext.logging.atom;
+package org.apache.cxf.jaxrs.ext.logging.atom.deliverer;
import java.util.Arrays;
import java.util.List;
@@ -32,7 +32,7 @@
/**
* Marshaling and delivering based on JAXRS' WebClient.
*/
-public class WebClientDeliverer implements Deliverer {
+public final class WebClientDeliverer implements Deliverer {
private WebClient wc;
@SuppressWarnings("unchecked")
Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPushSpringTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPushSpringTest.java?rev=884657&r1=884656&r2=884657&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPushSpringTest.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPushSpringTest.java Thu Nov 26 18:08:37 2009
@@ -28,6 +28,7 @@
import javax.ws.rs.POST;
import javax.ws.rs.Path;
+import org.apache.abdera.model.Element;
import org.apache.abdera.model.Feed;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.jaxrs.client.WebClient;
@@ -40,7 +41,7 @@
public class JAXRSLoggingAtomPushSpringTest extends AbstractClientServerTestBase {
- private static List<Feed> retrieved = new ArrayList<Feed>();
+ private static List<Element> retrieved = new ArrayList<Element>();
@BeforeClass
public static void beforeClass() throws Exception {
@@ -97,7 +98,6 @@
// System.out.println(feed);
retrieved.add(feed);
}
-
}
@Test
Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPushTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPushTest.java?rev=884657&r1=884656&r2=884657&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPushTest.java (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSLoggingAtomPushTest.java Thu Nov 26 18:08:37 2009
@@ -31,14 +31,19 @@
import javax.ws.rs.POST;
import javax.ws.rs.Path;
-import org.apache.abdera.model.Element;
+import org.apache.abdera.model.Entry;
import org.apache.abdera.model.Feed;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
import org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler;
-import org.apache.cxf.jaxrs.ext.logging.atom.SingleEntryContentConverter;
-import org.apache.cxf.jaxrs.ext.logging.atom.WebClientDeliverer;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.Converter;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.StandardConverter;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.StandardConverter.Format;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.StandardConverter.Multiplicity;
+import org.apache.cxf.jaxrs.ext.logging.atom.converter.StandardConverter.Output;
+import org.apache.cxf.jaxrs.ext.logging.atom.deliverer.Deliverer;
+import org.apache.cxf.jaxrs.ext.logging.atom.deliverer.WebClientDeliverer;
import org.apache.cxf.jaxrs.provider.AtomEntryProvider;
import org.apache.cxf.jaxrs.provider.AtomFeedProvider;
@@ -53,7 +58,8 @@
public class JAXRSLoggingAtomPushTest {
private static final Logger LOG = LogUtils.getL7dLogger(JAXRSLoggingAtomPushTest.class);
private static Server server;
- private static List<Element> received;
+ private static List<Feed> feeds = new ArrayList<Feed>();
+ private static List<Entry> entries = new ArrayList<Entry>();
@Ignore
@Path("/")
@@ -61,7 +67,14 @@
@POST
public void consume(Feed feed) {
System.out.println(feed);
- received.add(feed);
+ feeds.add(feed);
+ }
+
+ @POST
+ @Path("/atomPub")
+ public void consume(Entry entry) {
+ System.out.println(entry);
+ entries.add(entry);
}
}
@@ -118,7 +131,8 @@
@Before
public void before() throws Exception {
- received = new ArrayList<Element>();
+ feeds.clear();
+ entries.clear();
}
@Test
@@ -126,8 +140,8 @@
configureLogging("resources/logging_atompush.properties");
logSixEvents(LOG);
// need to wait: multithreaded and client-server journey
- Thread.sleep(3000);
- assertEquals("Different logged events count;", 6, received.size());
+ Thread.sleep(1000);
+ assertEquals("Different logged events count;", 6, feeds.size());
}
@Test
@@ -135,23 +149,35 @@
configureLogging("resources/logging_atompush_batch.properties");
logSixEvents(LOG);
// need to wait: multithreaded and client-server journey
- Thread.sleep(3000);
+ Thread.sleep(1000);
// 6 events / 3 element batch = 2 feeds expected
- assertEquals("Different logged events count;", 2, received.size());
+ assertEquals("Different logged events count;", 2, feeds.size());
}
@Test
public void testPrivateLogger() throws Exception {
configureLogging("resources/logging_atompush_disabled.properties");
Logger log = LogUtils.getL7dLogger(JAXRSLoggingAtomPushTest.class, null, "private-log");
- Handler h = new AtomPushHandler(2, new SingleEntryContentConverter(),
- new WebClientDeliverer("http://localhost:9080"));
+ Converter c = new StandardConverter(Output.FEED, Multiplicity.ONE, Format.CONTENT);
+ Deliverer d = new WebClientDeliverer("http://localhost:9080");
+ Handler h = new AtomPushHandler(2, c, d);
log.addHandler(h);
log.setLevel(Level.ALL);
logSixEvents(log);
// need to wait: multithreaded and client-server journey
- Thread.sleep(3000);
+ Thread.sleep(1000);
// 6 events / 2 element batch = 3 feeds expected
- assertEquals("Different logged events count;", 3, received.size());
+ assertEquals("Different logged events count;", 3, feeds.size());
}
+
+ @Test
+ public void testAtomPubEntries() throws Exception {
+ configureLogging("resources/logging_atompush_atompub.properties");
+ logSixEvents(LOG);
+ // need to wait: multithreaded and client-server journey
+ Thread.sleep(1000);
+ // 6 events logged as entries
+ assertEquals("Different logged events count;", 6, entries.size());
+ }
+
}
Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush.properties
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush.properties?rev=884657&r1=884656&r2=884657&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush.properties (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush.properties Thu Nov 26 18:08:37 2009
@@ -25,9 +25,6 @@
# Atom handler specific settings
org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.url = http://localhost:9080
org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.batchSize = 1
-org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.converter = SingleEntryExtensionConverter
-#org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.deliverer = WebClientDeliverer
-
-#org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.retry.pause = linear
-#org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.retry.pause.time = 5
-#org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.retry.timeout = 10
+org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.output = feed
+org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.entries = one
+org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.format = content
Added: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush_atompub.properties
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush_atompub.properties?rev=884657&view=auto
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush_atompub.properties (added)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush_atompub.properties Thu Nov 26 18:08:37 2009
@@ -0,0 +1,31 @@
+# Atom logger plus echo on console
+handlers = org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler, java.util.logging.ConsoleHandler
+
+# Set the default logging level for the root logger
+.level = ALL
+
+# Set logging levels for the package-named loggers
+org.apache.cxf.systest.jaxrs.level = ALL
+
+# Need to turn off logging from surrounding environment to properly count log entries in tests
+# (specified sub-entries since root level overrides sub-levels... yes, JUL is dumb :)
+org.apache.cxf.jaxrs.level = OFF
+org.apache.cxf.phase.level = OFF
+org.apache.cxf.service.level = OFF
+org.apache.cxf.interceptor.level = OFF
+org.apache.cxf.transport.level = OFF
+org.apache.cxf.bus.level = OFF
+org.apache.cxf.configuration.level = OFF
+org.apache.cxf.endpoint.level = OFF
+org.apache.cxf.resource.level = OFF
+org.springframework.level = OFF
+org.mortbay.level = OFF
+org.apache.axiom.level = OFF
+
+# Atom handler specific settings
+org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.url = http://localhost:9080/atomPub
+org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.batchSize = 1
+org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.output = entry
+org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.multiplicity = one
+org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.format = extension
+
Modified: cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush_batch.properties
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush_batch.properties?rev=884657&r1=884656&r2=884657&view=diff
==============================================================================
--- cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush_batch.properties (original)
+++ cxf/trunk/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/resources/logging_atompush_batch.properties Thu Nov 26 18:08:37 2009
@@ -25,9 +25,3 @@
# Atom handler specific settings
org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.url = http://localhost:9080
org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.batchSize = 3
-#org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.converter = ContentSingleEntryConverter
-#org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.deliverer = WebClientDeliverer
-
-#org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.retry.pause = linear
-#org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.retry.pause.time = 5
-#org.apache.cxf.jaxrs.ext.logging.atom.AtomPushHandler.retry.timeout = 10