You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by tv...@apache.org on 2019/03/05 19:53:39 UTC

svn commit: r1854867 - in /turbine/core/trunk/src/java/org/apache/turbine/pipeline: DefaultSetEncodingValve.java DetermineActionValve.java DetermineTargetValve.java Valve.java ValveContext.java

Author: tv
Date: Tue Mar  5 19:53:39 2019
New Revision: 1854867

URL: http://svn.apache.org/viewvc?rev=1854867&view=rev
Log:
Made Valve and ValveContext functional interfaces
Some cosmetics

Modified:
    turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java
    turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineActionValve.java
    turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineTargetValve.java
    turbine/core/trunk/src/java/org/apache/turbine/pipeline/Valve.java
    turbine/core/trunk/src/java/org/apache/turbine/pipeline/ValveContext.java

Modified: turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java
URL: http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java?rev=1854867&r1=1854866&r2=1854867&view=diff
==============================================================================
--- turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java (original)
+++ turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java Tue Mar  5 19:53:39 2019
@@ -64,7 +64,6 @@ public class DefaultSetEncodingValve
         if (requestEncoding == null)
         {
             requestEncoding = LocaleUtils.getDefaultInputEncoding();
-
             log.debug("Changing Input Encoding to {}", requestEncoding);
 
             try

Modified: turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineActionValve.java
URL: http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineActionValve.java?rev=1854867&r1=1854866&r2=1854867&view=diff
==============================================================================
--- turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineActionValve.java (original)
+++ turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineActionValve.java Tue Mar  5 19:53:39 2019
@@ -51,7 +51,7 @@ public class DetermineActionValve
         throws IOException, TurbineException
     {
         RunData data = pipelineData.getRunData();
-        if (! data.hasAction())
+        if (!data.hasAction())
         {
             String action =
                 data.getParameters().getString(URIConstants.CGI_ACTION_PARAM);
@@ -59,7 +59,6 @@ public class DetermineActionValve
             if (action != null)
             {
                 data.setAction(action);
-
                 log.debug("Set action from request parameter");
             }
             else

Modified: turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineTargetValve.java
URL: http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineTargetValve.java?rev=1854867&r1=1854866&r2=1854867&view=diff
==============================================================================
--- turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineTargetValve.java (original)
+++ turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineTargetValve.java Tue Mar  5 19:53:39 2019
@@ -41,8 +41,7 @@ import org.apache.turbine.util.uri.URICo
  * @author <a href="mailto:james@jamestaylor.org">James Taylor</a>
  * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
  */
-public class DetermineTargetValve
-    implements Valve
+public class DetermineTargetValve implements Valve
 {
     private static final Logger log
         = LogManager.getLogger(DetermineTargetValve.class);
@@ -55,26 +54,19 @@ public class DetermineTargetValve
         throws IOException, TurbineException
     {
         RunData runData = pipelineData.getRunData();
-        if (! runData.hasScreen())
+        if (!runData.hasScreen())
         {
             String target = runData.getParameters().getString(URIConstants.CGI_SCREEN_PARAM);
 
             if (target != null)
             {
                 runData.setScreen(target);
-
                 log.debug("Set screen target from request parameter");
             }
             else
             {
-            /*    data.setScreen(Turbine.getConfiguration().getString(
-                    Turbine.TEMPLATE_HOMEPAGE));
-
-                log.debug("Set target using default value");
-                */
 				log.debug("No target screen");
             }
-
         }
 
         log.debug("Screen Target is now: {}", runData::getScreen);

Modified: turbine/core/trunk/src/java/org/apache/turbine/pipeline/Valve.java
URL: http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/pipeline/Valve.java?rev=1854867&r1=1854866&r2=1854867&view=diff
==============================================================================
--- turbine/core/trunk/src/java/org/apache/turbine/pipeline/Valve.java (original)
+++ turbine/core/trunk/src/java/org/apache/turbine/pipeline/Valve.java Tue Mar  5 19:53:39 2019
@@ -42,6 +42,7 @@ import org.apache.turbine.util.TurbineEx
  *
  * @see #invoke(PipelineData, ValveContext)
  */
+@FunctionalInterface
 public interface Valve
 {
     /**

Modified: turbine/core/trunk/src/java/org/apache/turbine/pipeline/ValveContext.java
URL: http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/pipeline/ValveContext.java?rev=1854867&r1=1854866&r2=1854867&view=diff
==============================================================================
--- turbine/core/trunk/src/java/org/apache/turbine/pipeline/ValveContext.java (original)
+++ turbine/core/trunk/src/java/org/apache/turbine/pipeline/ValveContext.java Tue Mar  5 19:53:39 2019
@@ -43,6 +43,7 @@ import org.apache.turbine.util.TurbineEx
  * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
  * @version $Revision$ $Date$
  */
+@FunctionalInterface
 public interface ValveContext
 {
     /**



Re: svn commit: r1854867 - in /turbine/core/trunk/src/java/org/apache/turbine/pipeline: DefaultSetEncodingValve.java DetermineActionValve.java DetermineTargetValve.java Valve.java ValveContext.java

Posted by Thomas Vandahl <tv...@apache.org>.
Hi Georg,

On 11.03.19 10:28, Georg Kallidis wrote:
> It started like this, that I thought it might be better to use a stream's 
> method tryAdvance in TurbinePipeline.invokeNext (to begin with setting 
> instead of valves.iterator valves.stream in TP.invoke call to state.set) - 
> but this resulted into a endless loop/stackoverflow. After this using bulk 
> stream/foreach would make ValveContext's invokeNext useless (or better it 
> have to be removed ). 

I understand that the invokeNext method exists to give valves a way of
stopping execution if they see fit. It is of not much use otherwise.

Another question was: Is ThreadLocal of use here
> really? The mechanism of using a ThreadLocal<Iterator<Valve>> might be 
> quite robust, although a valves stream seemed better. Could we not use a 
> stream instead of CopyOnWriteArrayList for valves? But if valves are 
> thread safe, do we need ThreadLocal at all?

The iterator keeps the state of a single request, so keeping it
thread-local is essential. I moved from synchronized methods to
CopyOnWriteArrayList to achieve a lock-free operation. This made
parallel execution about 30% faster.

If you make any changes, be sure to compare performance with
org.apache.turbine.pipeline.PipelineTest.testPipelinePerformance()

> Is it worth the effort?

I don't think so.

Bye, Thomas


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@turbine.apache.org
For additional commands, e-mail: dev-help@turbine.apache.org


Re: Re: svn commit: r1854867 - in /turbine/core/trunk/src/java/org/apache/turbine/pipeline: DefaultSetEncodingValve.java DetermineActionValve.java DetermineTargetValve.java Valve.java ValveContext.java

Posted by Georg Kallidis <ge...@cedis.fu-berlin.de>.
Hi Thomas,

thanks for pointing for a more precise answer ;-) This might come to the 
heart of Turbine ;-) 

It started like this, that I thought it might be better to use a stream's 
method tryAdvance in TurbinePipeline.invokeNext (to begin with setting 
instead of valves.iterator valves.stream in TP.invoke call to state.set) - 
but this resulted into a endless loop/stackoverflow. After this using bulk 
stream/foreach would make ValveContext's invokeNext useless (or better it 
have to be removed ). Another question was: Is ThreadLocal of use here 
really? The mechanism of using a ThreadLocal<Iterator<Valve>> might be 
quite robust, although a valves stream seemed better. Could we not use a 
stream instead of CopyOnWriteArrayList for valves? But if valves are 
thread safe, do we need ThreadLocal at all?

Is it worth the effort?

Best regards, 

Georg

P.S. We might need more testing to understand better, what's happening 
here? ;-) 



Von:    Thomas Vandahl <tv...@apache.org>
An:     Turbine Developers List <de...@turbine.apache.org>
Datum:  08.03.2019 17:28
Betreff:        Re: svn commit: r1854867 - in 
/turbine/core/trunk/src/java/org/apache/turbine/pipeline: 
DefaultSetEncodingValve.java DetermineActionValve.java 
DetermineTargetValve.java Valve.java ValveContext.java



Hi Georg,

On 06.03.19 14:15, Georg Kallidis wrote:
> I'll let this for now. Changing the mechanism in TurbinePipeline 
> invokeNext method seems (to me) to be more complex, if we do not want to 

> remove ValveContext entirely ... might be more performant now than 
> otherwise without it. 

Would you care to explain what your initial intention was?

Bye, Thomas

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@turbine.apache.org
For additional commands, e-mail: dev-help@turbine.apache.org



Re: svn commit: r1854867 - in /turbine/core/trunk/src/java/org/apache/turbine/pipeline: DefaultSetEncodingValve.java DetermineActionValve.java DetermineTargetValve.java Valve.java ValveContext.java

Posted by Thomas Vandahl <tv...@apache.org>.
Hi Georg,

On 06.03.19 14:15, Georg Kallidis wrote:
> I'll let this for now. Changing the mechanism in TurbinePipeline 
> invokeNext method seems (to me) to be more complex, if we do not want to 
> remove ValveContext entirely ... might be more performant now than 
> otherwise without it. 

Would you care to explain what your initial intention was?

Bye, Thomas

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@turbine.apache.org
For additional commands, e-mail: dev-help@turbine.apache.org


Re: svn commit: r1854867 - in /turbine/core/trunk/src/java/org/apache/turbine/pipeline: DefaultSetEncodingValve.java DetermineActionValve.java DetermineTargetValve.java Valve.java ValveContext.java

Posted by Georg Kallidis <ge...@cedis.fu-berlin.de>.
Hi Thomas, 

thanks! 

I'll let this for now. Changing the mechanism in TurbinePipeline 
invokeNext method seems (to me) to be more complex, if we do not want to 
remove ValveContext entirely ... might be more performant now than 
otherwise without it. 

Best regards, Georg




Von:    tv@apache.org
An:     commits@turbine.apache.org
Datum:  05.03.2019 20:53
Betreff:        svn commit: r1854867 - in 
/turbine/core/trunk/src/java/org/apache/turbine/pipeline: 
DefaultSetEncodingValve.java DetermineActionValve.java 
DetermineTargetValve.java Valve.java ValveContext.java



Author: tv
Date: Tue Mar  5 19:53:39 2019
New Revision: 1854867

URL: http://svn.apache.org/viewvc?rev=1854867&view=rev
Log:
Made Valve and ValveContext functional interfaces
Some cosmetics

Modified:
 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java
 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineActionValve.java
 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineTargetValve.java
    turbine/core/trunk/src/java/org/apache/turbine/pipeline/Valve.java
 turbine/core/trunk/src/java/org/apache/turbine/pipeline/ValveContext.java

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java?rev=1854867&r1=1854866&r2=1854867&view=diff

==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java 
(original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/DefaultSetEncodingValve.java 
Tue Mar  5 19:53:39 2019
@@ -64,7 +64,6 @@ public class DefaultSetEncodingValve
         if (requestEncoding == null)
         {
             requestEncoding = LocaleUtils.getDefaultInputEncoding();
-
             log.debug("Changing Input Encoding to {}", requestEncoding);
 
             try

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineActionValve.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineActionValve.java?rev=1854867&r1=1854866&r2=1854867&view=diff

==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineActionValve.java 
(original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineActionValve.java 
Tue Mar  5 19:53:39 2019
@@ -51,7 +51,7 @@ public class DetermineActionValve
         throws IOException, TurbineException
     {
         RunData data = pipelineData.getRunData();
-        if (! data.hasAction())
+        if (!data.hasAction())
         {
             String action =
 data.getParameters().getString(URIConstants.CGI_ACTION_PARAM);
@@ -59,7 +59,6 @@ public class DetermineActionValve
             if (action != null)
             {
                 data.setAction(action);
-
                 log.debug("Set action from request parameter");
             }
             else

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineTargetValve.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineTargetValve.java?rev=1854867&r1=1854866&r2=1854867&view=diff

==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineTargetValve.java 
(original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/DetermineTargetValve.java 
Tue Mar  5 19:53:39 2019
@@ -41,8 +41,7 @@ import org.apache.turbine.util.uri.URICo
  * @author <a href="mailto:james@jamestaylor.org">James Taylor</a>
  * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
  */
-public class DetermineTargetValve
-    implements Valve
+public class DetermineTargetValve implements Valve
 {
     private static final Logger log
         = LogManager.getLogger(DetermineTargetValve.class);
@@ -55,26 +54,19 @@ public class DetermineTargetValve
         throws IOException, TurbineException
     {
         RunData runData = pipelineData.getRunData();
-        if (! runData.hasScreen())
+        if (!runData.hasScreen())
         {
             String target = 
runData.getParameters().getString(URIConstants.CGI_SCREEN_PARAM);
 
             if (target != null)
             {
                 runData.setScreen(target);
-
                 log.debug("Set screen target from request parameter");
             }
             else
             {
-            /*    data.setScreen(Turbine.getConfiguration().getString(
-                    Turbine.TEMPLATE_HOMEPAGE));
-
-                log.debug("Set target using default value");
-                */
 log.debug("No target screen");
             }
-
         }
 
         log.debug("Screen Target is now: {}", runData::getScreen);

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/Valve.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/pipeline/Valve.java?rev=1854867&r1=1854866&r2=1854867&view=diff

==============================================================================
--- turbine/core/trunk/src/java/org/apache/turbine/pipeline/Valve.java 
(original)
+++ turbine/core/trunk/src/java/org/apache/turbine/pipeline/Valve.java Tue 
Mar  5 19:53:39 2019
@@ -42,6 +42,7 @@ import org.apache.turbine.util.TurbineEx
  *
  * @see #invoke(PipelineData, ValveContext)
  */
+@FunctionalInterface
 public interface Valve
 {
     /**

Modified: 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/ValveContext.java
URL: 
http://svn.apache.org/viewvc/turbine/core/trunk/src/java/org/apache/turbine/pipeline/ValveContext.java?rev=1854867&r1=1854866&r2=1854867&view=diff

==============================================================================
--- 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/ValveContext.java 
(original)
+++ 
turbine/core/trunk/src/java/org/apache/turbine/pipeline/ValveContext.java 
Tue Mar  5 19:53:39 2019
@@ -43,6 +43,7 @@ import org.apache.turbine.util.TurbineEx
  * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
  * @version $Revision$ $Date$
  */
+@FunctionalInterface
 public interface ValveContext
 {
     /**