Author: ffang
Date: Tue Apr  2 05:15:24 2013
New Revision: 1463387

URL: http://svn.apache.org/r1463387
Log:
Merged revisions 1463385 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/branches/2.7.x-fixes

................
  r1463385 | ffang | 2013-04-02 13:08:19 +0800 (二, 02  4 2013) | 9 lines
  
  Merged revisions 1463382 via svnmerge from 
  https://svn.apache.org/repos/asf/cxf/trunk
  
  ........
    r1463382 | ffang | 2013-04-02 13:01:49 +0800 (二, 02  4 2013) | 1 line
    
    [CXF-4936]Expose FastInfoset serializer tuning properties
  ........
................

Modified:
    cxf/branches/2.6.x-fixes/   (props changed)
    
cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/annotations/FastInfoset.java
    
cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java
    
cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java
    
cxf/branches/2.6.x-fixes/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java

Propchange: cxf/branches/2.6.x-fixes/
------------------------------------------------------------------------------
  Merged /cxf/branches/2.7.x-fixes:r1463385
  Merged /cxf/trunk:r1463382

Propchange: cxf/branches/2.6.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: 
cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/annotations/FastInfoset.java
URL: 
http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/annotations/FastInfoset.java?rev=1463387&r1=1463386&r2=1463387&view=diff
==============================================================================
--- 
cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/annotations/FastInfoset.java
 (original)
+++ 
cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/annotations/FastInfoset.java
 Tue Apr  2 05:15:24 2013
@@ -32,6 +32,51 @@ import java.lang.annotation.Target;
 @Retention(RetentionPolicy.RUNTIME)
 @Target({ ElementType.TYPE })
 public @interface FastInfoset {
+    /**
+     * Set to true in order for FastInfoset to be always used without 
negotiation
+     */
     boolean force() default false;
+
+    /**
+     * Sets the property <code>attributeValueMapMemoryLimit</code> on 
FastInfoset StAX Serializers. The property
+     * controls attribute value map size and can be used to control the memory 
and (indirectly) CPU footprint of
+     * processing.
+     */
+    int serializerAttributeValueMapMemoryLimit() default -1;
+
+    /**
+     * Sets the property <code>minAttributeValueSize</code> on FastInfoset 
StAX Serializers. The property controls the
+     * <b>minimum</b> size of attribute values to be indexed.
+     */
+    int serializerMinAttributeValueSize() default -1;
+
+    /**
+     * Sets the property <code>maxAttributeValueSize</code> on FastInfoset 
StAX Serializers. The property controls the
+     * <b>maximum</b> size of attribute values to be indexed. Tests have shown 
that setting this property to lower
+     * values reduces CPU burden of processing, at the expense of larger sizes 
of resultant encoded Fast Infoset data.
+     */
+    int serializerMaxAttributeValueSize() default -1;
+
+    /**
+     * Sets the property <code>characterContentChunkMapMemoryLimit</code> on 
FastInfoset StAX Serializers. The property
+     * controls character content chunk map size and can be used to control 
the memory and (indirectly) CPU footprint of
+     * processing.
+     */
+    int serializerCharacterContentChunkMapMemoryLimit() default -1;
+
+    /**
+     * Sets the property <code>minCharacterContentChunkSize</code> on 
FastInfoset StAX Serializers. The property
+     * controls the <b>minimum</b> size of character content chunks to be 
indexed.
+     */
+    int serializerMinCharacterContentChunkSize() default -1;
+
+    /**
+     * Sets the property <code>maxCharacterContentChunkSize</code> on 
FastInfoset StAX Serializers. The property
+     * controls the <b>maximum</b> size of character content chunks to be 
indexed. Tests have shown that setting this
+     * property to lower values reduces CPU burden of processing, at the 
expense of larger sizes of resultant encoded
+     * Fast Infoset data.
+     */
+    int serializerMaxCharacterContentChunkSize() default -1;
+    
 }
 

Modified: 
cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java
URL: 
http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java?rev=1463387&r1=1463386&r2=1463387&view=diff
==============================================================================
--- 
cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java
 (original)
+++ 
cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/feature/FastInfosetFeature.java
 Tue Apr  2 05:15:24 2013
@@ -38,9 +38,15 @@ import org.apache.cxf.interceptor.Interc
  */
 @NoJSR250Annotations
 public class FastInfosetFeature extends AbstractFeature {
-    
+
     boolean force;
-    
+    private Integer serializerAttributeValueMapMemoryLimit;
+    private Integer serializerMinAttributeValueSize;
+    private Integer serializerMaxAttributeValueSize;
+    private Integer serializerCharacterContentChunkMapMemoryLimit;
+    private Integer serializerMinCharacterContentChunkSize;
+    private Integer serializerMaxCharacterContentChunkSize;
+
     public FastInfosetFeature() {
         //
     }
@@ -50,7 +56,29 @@ public class FastInfosetFeature extends 
     protected void initializeProvider(InterceptorProvider provider, Bus bus) {
         
         FIStaxInInterceptor in = new FIStaxInInterceptor();
+
         FIStaxOutInterceptor out = new FIStaxOutInterceptor(force);
+        if (serializerAttributeValueMapMemoryLimit != null && 
serializerAttributeValueMapMemoryLimit.intValue() > 0) {
+            
out.setSerializerAttributeValueMapMemoryLimit(serializerAttributeValueMapMemoryLimit.intValue());
+        }
+        if (serializerMinAttributeValueSize != null && 
serializerMinAttributeValueSize.intValue() > 0) {
+            
out.setSerializerMinAttributeValueSize(serializerMinAttributeValueSize.intValue());
+        }
+        if (serializerMaxAttributeValueSize != null && 
serializerMaxAttributeValueSize.intValue() > 0) {
+            
out.setSerializerMaxAttributeValueSize(serializerMaxAttributeValueSize.intValue());
+        }
+        if (serializerCharacterContentChunkMapMemoryLimit != null
+                && serializerCharacterContentChunkMapMemoryLimit.intValue() > 
0) {
+            out.setSerializerCharacterContentChunkMapMemoryLimit(
+                    serializerCharacterContentChunkMapMemoryLimit.intValue());
+        }
+        if (serializerMinCharacterContentChunkSize != null && 
serializerMinCharacterContentChunkSize.intValue() > 0) {
+            
out.setSerializerMinCharacterContentChunkSize(serializerMinCharacterContentChunkSize.intValue());
+        }
+        if (serializerMaxCharacterContentChunkSize != null && 
serializerMaxCharacterContentChunkSize.intValue() > 0) {
+            
out.setSerializerMaxCharacterContentChunkSize(serializerMaxCharacterContentChunkSize.intValue());
+        }
+        
         provider.getInInterceptors().add(in);
         provider.getInFaultInterceptors().add(in);
         provider.getOutInterceptors().add(out);

Modified: 
cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java
URL: 
http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java?rev=1463387&r1=1463386&r2=1463387&view=diff
==============================================================================
--- 
cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java
 (original)
+++ 
cxf/branches/2.6.x-fixes/api/src/main/java/org/apache/cxf/interceptor/FIStaxOutInterceptor.java
 Tue Apr  2 05:15:24 2013
@@ -24,12 +24,15 @@ import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 
 import com.sun.xml.fastinfoset.stax.StAXDocumentSerializer;
 
+import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.message.MessageUtils;
@@ -42,11 +45,19 @@ import org.apache.cxf.phase.Phase;
  */
 public class FIStaxOutInterceptor extends AbstractPhaseInterceptor<Message> {
     public static final String FI_ENABLED = 
"org.apache.cxf.fastinfoset.enabled";
+
+    private static final Logger LOG = 
LogUtils.getL7dLogger(FIStaxOutInterceptor.class);
     private static final String OUTPUT_STREAM_HOLDER = 
FIStaxOutInterceptor.class.getName() + ".outputstream";
     private static final StaxOutEndingInterceptor ENDING = new 
StaxOutEndingInterceptor(OUTPUT_STREAM_HOLDER);
 
     boolean force;
-    
+    private Integer serializerAttributeValueMapMemoryLimit;
+    private Integer serializerMinAttributeValueSize;
+    private Integer serializerMaxAttributeValueSize;
+    private Integer serializerCharacterContentChunkMapMemoryLimit;
+    private Integer serializerMinCharacterContentChunkSize;
+    private Integer serializerMaxCharacterContentChunkSize;
+
     public FIStaxOutInterceptor() {
         super(Phase.PRE_STREAM);
         addAfter(AttachmentOutInterceptor.class.getName());
@@ -138,8 +149,140 @@ public class FIStaxOutInterceptor extend
         }
         return serializer;
         */
-        return new StAXDocumentSerializer(out);
+        final StAXDocumentSerializer stAXDocumentSerializer = new 
StAXDocumentSerializer(out);
+        if (serializerAttributeValueMapMemoryLimit != null && 
serializerAttributeValueMapMemoryLimit.intValue() > 0) {
+            
stAXDocumentSerializer.setAttributeValueMapMemoryLimit(serializerAttributeValueMapMemoryLimit.intValue());
+        }
+        if (serializerMinAttributeValueSize != null && 
serializerMinAttributeValueSize.intValue() > 0) {
+            
stAXDocumentSerializer.setMinAttributeValueSize(serializerMinAttributeValueSize.intValue());
+        }
+        if (serializerMaxAttributeValueSize != null && 
serializerMaxAttributeValueSize.intValue() > 0) {
+            
stAXDocumentSerializer.setMaxAttributeValueSize(serializerMaxAttributeValueSize.intValue());
+        }
+        if (serializerCharacterContentChunkMapMemoryLimit != null
+                && serializerCharacterContentChunkMapMemoryLimit.intValue() > 
0) {
+            stAXDocumentSerializer
+                    
.setCharacterContentChunkMapMemoryLimit(serializerCharacterContentChunkMapMemoryLimit.intValue());
+        }
+        if (serializerMinCharacterContentChunkSize != null && 
serializerMinCharacterContentChunkSize.intValue() > 0) {
+            
stAXDocumentSerializer.setMinCharacterContentChunkSize(serializerMinCharacterContentChunkSize.intValue());
+        }
+        if (serializerMaxCharacterContentChunkSize != null && 
serializerMaxCharacterContentChunkSize.intValue() > 0) {
+            
stAXDocumentSerializer.setMaxCharacterContentChunkSize(serializerMaxCharacterContentChunkSize.intValue());
+        }
+        return stAXDocumentSerializer;
+    }
+
+    public Integer getSerializerMinAttributeValueSize() {
+        return serializerMinAttributeValueSize;
+    }
+
+    /**
+     * Sets the property <code>minAttributeValueSize</code> on FastInfoset 
StAX Serializers created and used
+     * by this interceptor. The property controls the <b>minimum</b> size of 
attribute values to be indexed.
+     *
+     * @param serializerMinAttributeValueSize
+     *         The <b>minimum</b> size for attribute values to be indexed,
+     *         measured as a number of characters. The default is typically 0.
+     */
+    public void setSerializerMinAttributeValueSize(Integer 
serializerMinAttributeValueSize) {
+        logSetter("serializerMinAttributeValueSize", 
serializerMinAttributeValueSize);
+        this.serializerMinAttributeValueSize = serializerMinAttributeValueSize;
+    }
+
+    public Integer getSerializerMaxAttributeValueSize() {
+        return serializerMaxAttributeValueSize;
+    }
+
+    /**
+     * Sets the property <code>maxAttributeValueSize</code> on FastInfoset 
StAX Serializers created and used
+     * by this interceptor. The property controls the <b>maximum</b> size of 
attribute values to be indexed.
+     * Tests have shown that setting this property to lower values reduces CPU 
burden of processing, at the expense
+     * of larger sizes of resultant encoded Fast Infoset data.
+     *
+     * @param serializerMaxAttributeValueSize
+     *         The <b>maximum</b> size for attribute values to be indexed,
+     *         measured as a number of characters. The default is typically 32.
+     */
+    public void setSerializerMaxAttributeValueSize(Integer 
serializerMaxAttributeValueSize) {
+        logSetter("serializerMaxAttributeValueSize", 
serializerMaxAttributeValueSize);
+        this.serializerMaxAttributeValueSize = serializerMaxAttributeValueSize;
     }
-        
 
+    public Integer getSerializerCharacterContentChunkMapMemoryLimit() {
+        return serializerCharacterContentChunkMapMemoryLimit;
+    }
+
+    /**
+     * Sets the property <code>characterContentChunkMapMemoryLimit</code> on 
FastInfoset StAX Serializers created and
+     * used by this interceptor. The property controls character content chunk 
map size and can be used to control the
+     * memory and (indirectly) CPU footprint of processing.
+     *
+     * @param serializerCharacterContentChunkMapMemoryLimit
+     *         The value for the limit, measured as a number of Unicode 
characters.
+     */
+    public void setSerializerCharacterContentChunkMapMemoryLimit(
+            Integer serializerCharacterContentChunkMapMemoryLimit) {
+        logSetter("serializerCharacterContentChunkMapMemoryLimit", 
serializerCharacterContentChunkMapMemoryLimit);
+        this.serializerCharacterContentChunkMapMemoryLimit = 
serializerCharacterContentChunkMapMemoryLimit;
+    }
+
+    public Integer getSerializerMinCharacterContentChunkSize() {
+        return serializerMinCharacterContentChunkSize;
+    }
+
+    /**
+     * Sets the property <code>minCharacterContentChunkSize</code> on 
FastInfoset StAX Serializers created and used
+     * by this interceptor. The property controls the <b>minimum</b> size of 
character content chunks to be indexed.
+     *
+     * @param serializerMinCharacterContentChunkSize
+     *         The <b>minimum</b> size for character content chunks to be 
indexed,
+     *         measured as a number of characters. The default is typically 0.
+     */
+    public void setSerializerMinCharacterContentChunkSize(Integer 
serializerMinCharacterContentChunkSize) {
+        logSetter("serializerMinCharacterContentChunkSize", 
serializerMinCharacterContentChunkSize);
+        this.serializerMinCharacterContentChunkSize = 
serializerMinCharacterContentChunkSize;
+    }
+
+    public Integer getSerializerMaxCharacterContentChunkSize() {
+        return serializerMaxCharacterContentChunkSize;
+    }
+
+    /**
+     * Sets the property <code>maxCharacterContentChunkSize</code> on 
FastInfoset StAX Serializers created and used
+     * by this interceptor. The property controls the <b>maximum</b> size of 
character content chunks to be indexed.
+     * Tests have shown that setting this property to lower values reduces CPU 
burden of processing, at the expense
+     * of larger sizes of resultant encoded Fast Infoset data.
+     *
+     * @param serializerMaxCharacterContentChunkSize
+     *         The <b>maximum</b> size for character content chunks to be 
indexed,
+     *         measured as a number of characters. The default is typically 32.
+     */
+    public void setSerializerMaxCharacterContentChunkSize(Integer 
serializerMaxCharacterContentChunkSize) {
+        logSetter("serializerMaxCharacterContentChunkSize", 
serializerMaxCharacterContentChunkSize);
+        this.serializerMaxCharacterContentChunkSize = 
serializerMaxCharacterContentChunkSize;
+    }
+
+    public Integer getSerializerAttributeValueMapMemoryLimit() {
+        return serializerAttributeValueMapMemoryLimit;
+    }
+
+    /**
+     * Sets the property <code>attributeValueMapMemoryLimit</code> on 
FastInfoset StAX Serializers created and used
+     * by this interceptor. The property controls attribute value map size and 
can be used to control
+     * the memory and (indirectly) CPU footprint of processing.
+     *
+     * @param serializerAttributeValueMapMemoryLimit
+     *         The value for the limit, measured as a number of Unicode 
characters.
+     */
+    public void setSerializerAttributeValueMapMemoryLimit(Integer 
serializerAttributeValueMapMemoryLimit) {
+        logSetter("serializerAttributeValueMapMemoryLimit", 
serializerAttributeValueMapMemoryLimit);
+        this.serializerAttributeValueMapMemoryLimit = 
serializerAttributeValueMapMemoryLimit;
+    }
+
+    private void logSetter(String propertyName, Object propertyValue) {
+        if (LOG.isLoggable(Level.CONFIG)) {
+            LOG.config("Setting " + propertyName + " to " + propertyValue);
+        }
+    }
 }

Modified: 
cxf/branches/2.6.x-fixes/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
URL: 
http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java?rev=1463387&r1=1463386&r2=1463387&view=diff
==============================================================================
--- 
cxf/branches/2.6.x-fixes/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
 (original)
+++ 
cxf/branches/2.6.x-fixes/rt/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
 Tue Apr  2 05:15:24 2013
@@ -276,7 +276,16 @@ public class AnnotationsFactoryBeanListe
     private void addFastInfosetSupport(InterceptorProvider provider, 
FastInfoset annotation) {
         if (annotation != null) {
             FIStaxInInterceptor in = new FIStaxInInterceptor();
+
             FIStaxOutInterceptor out = new 
FIStaxOutInterceptor(annotation.force());
+            
out.setSerializerAttributeValueMapMemoryLimit(annotation.serializerAttributeValueMapMemoryLimit());
+            
out.setSerializerMinAttributeValueSize(annotation.serializerMinAttributeValueSize());
+            
out.setSerializerMaxAttributeValueSize(annotation.serializerMaxAttributeValueSize());
+            out.setSerializerCharacterContentChunkMapMemoryLimit(
+                    
annotation.serializerCharacterContentChunkMapMemoryLimit());
+            
out.setSerializerMinCharacterContentChunkSize(annotation.serializerMinCharacterContentChunkSize());
+            
out.setSerializerMaxCharacterContentChunkSize(annotation.serializerMaxCharacterContentChunkSize());
+
             provider.getInInterceptors().add(in);
             provider.getInFaultInterceptors().add(in);
             provider.getOutInterceptors().add(out);


Reply via email to