<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[RIFE2]]></title><description><![CDATA[Full-stack, no-declaration, framework to quickly and effortlessly create web applications with modern Java]]></description><link>https://forum.uwyn.com/category/6</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 09:41:34 GMT</lastBuildDate><atom:link href="https://forum.uwyn.com/category/6.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Jul 2024 22:23:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[RIFE2 v1.8.0 available]]></title><description><![CDATA[<p dir="auto">RIFE2 v1.8.0 is available:<br />
<a href="https://github.com/rife2/rife2/releases/tag/1.8.0" rel="nofollow ugc">https://github.com/rife2/rife2/releases/tag/1.8.0</a></p>
<ul>
<li>Added support for Java 22.</li>
<li>Added support for <a href="https://www.webjars.org" rel="nofollow ugc">WebJars</a> when running with the embedded Jetty or Tomcat servlet container.<br />
When deployed as a WAR, WebJars were already supported.</li>
<li>Added <a href="https://rife2.github.io/rife2/rife/feed/package-summary.html" rel="nofollow ugc"><code>rife.feed</code> package</a> to make it easy to generate content syndication feeds.</li>
<li>Fix to template parsing to support tags inside angled brackets without adjacent spaces.<br />
For instance: <code>&lt;{{v value1/}}&gt;&lt;/{{v value2/}}&gt;</code></li>
<li>Template improvements when being processed through web engine.<br />
The <code>Context</code> parameters are now used for the <a href="https://github.com/rife2/rife2/wiki/Filtered-Template-Tags#web-engine-filtered-tags" rel="nofollow ugc"><code>param:</code> filtered value tags</a> instead of request parameters.</li>
<li>Fix to ensure that templates going through the web engine <code>Context</code> always get the <a href="https://github.com/rife2/rife2/wiki/Value-Renderers#context-template-attribute" rel="nofollow ugc">context added as a template attribute</a> before printing the template.</li>
<li>Added ability to set custom attributes in <a href="https://rife2.github.io/rife2/rife/engine/CookieBuilder.html" rel="nofollow ugc"><code>CookieBuilder</code></a>.</li>
<li>Fixed issue where MySQL <code>TINYINT(1)</code> columns wouldn't be converted to boolean types in the <a href="https://rife2.github.io/rife2/rife/database/package-summary.html" rel="nofollow ugc">database layer</a>.</li>
<li>Improvements to tests.</li>
<li>Updated to latest <a href="https://rife2.com/bld" rel="nofollow ugc"><code>bld</code></a>.</li>
<li>Updated <a href="https://github.com/rife2/rife2-idea" rel="nofollow ugc">RIFE2 IDEA plugin</a>.</li>
<li>Updated to latest dependencies.</li>
</ul>
]]></description><link>https://forum.uwyn.com/topic/98/rife2-v1-8-0-available</link><guid isPermaLink="true">https://forum.uwyn.com/topic/98/rife2-v1-8-0-available</guid><dc:creator><![CDATA[gbevin]]></dc:creator><pubDate>Fri, 12 Jul 2024 22:23:12 GMT</pubDate></item><item><title><![CDATA[RIFE2 Tips &amp; Tricks]]></title><description><![CDATA[<p dir="auto">When converting an existing website, you will most likely want to redirect old URLs to the new ones. RIFE2 makes it pretty simple. For example, to redirect:</p>
<p dir="auto"><code>https://example.com/news/2023/09/11</code></p>
<p dir="auto">to</p>
<p dir="auto"><code>https://example.com/search?year=2023&amp;month=09&amp;day=11</code></p>
<p dir="auto">You can easily convert the path info into parameters, by doing something like:</p>
<pre><code class="language-java">public class ExampleSite extends Site {
    //...
    private void redirectMoved(Context c, String url) {
        c.setStatus(301);
        c.addHeader("Location", url);
    }

    private void setRedirects() {
        //.. 
        get("/news", PathInfoHandling.MAP(
                        m -&gt; m.p("year"),
                        m -&gt; m.p("year").s().p("month"),
                        m -&gt; m.p("year").s().p("month").s().p("day")),
                c -&gt; redirectMoved(c, c.urlFor(searchUrl).params(c.parameters()).toString()));
    }

    @Override
    public void setup() {
        //..
        setRedirects();
    }
}</code></pre>
]]></description><link>https://forum.uwyn.com/topic/46/rife2-tips-tricks</link><guid isPermaLink="true">https://forum.uwyn.com/topic/46/rife2-tips-tricks</guid><dc:creator><![CDATA[ethauvin]]></dc:creator><pubDate>Mon, 11 Sep 2023 07:18:48 GMT</pubDate></item><item><title><![CDATA[Reworked logo and colors]]></title><description><![CDATA[Looking nice!
]]></description><link>https://forum.uwyn.com/topic/21/reworked-logo-and-colors</link><guid isPermaLink="true">https://forum.uwyn.com/topic/21/reworked-logo-and-colors</guid><dc:creator><![CDATA[joshaustin]]></dc:creator><pubDate>Sun, 20 Aug 2023 21:15:50 GMT</pubDate></item><item><title><![CDATA[RIFE2 bootstrap project template available]]></title><description><![CDATA[<p dir="auto">The RIFE2 bootstrap project is now available as a GitHub template here:<br />
<a href="https://github.com/rife2/rife2-bld-hello" rel="nofollow ugc">https://github.com/rife2/rife2-bld-hello</a></p>
<p dir="auto">It's ready to run, package and deploy ... and for you to have fun developing in a very iterative, intuitive and rewarding way.</p>
<p dir="auto">I also recorded a tutorial video with a primer on the template engine and some deployment strategies:<br />
<a href="https://www.youtube.com/watch?v=AZWzYwAHDIE" rel="nofollow ugc">https://www.youtube.com/watch?v=AZWzYwAHDIE</a></p>
]]></description><link>https://forum.uwyn.com/topic/20/rife2-bootstrap-project-template-available</link><guid isPermaLink="true">https://forum.uwyn.com/topic/20/rife2-bootstrap-project-template-available</guid><dc:creator><![CDATA[gbevin]]></dc:creator><pubDate>Sun, 20 Aug 2023 21:13:22 GMT</pubDate></item><item><title><![CDATA[RIFE2 IDEA plugin available]]></title><description><![CDATA[<p dir="auto">I've released an IDEA plugin for RIFE2 that provides some cool features to make you even more productive:</p>
<ul>
<li>Provides file templates for Element, Router and Site class creation.</li>
<li>Provides Java live templates for common routing idioms.</li>
<li>Provides template engine live templates for tag creation and surrounding.</li>
<li>Supports HTML, JSON, SVG, TXT and XML template language highlighting with fallback to original languages.</li>
<li>Filtered value tags auto-completion to all template types.</li>
<li>Syntax highlighting color settings configuration panel.</li>
<li>Auto-tag closing characters addition when typing { or &lt;!.</li>
</ul>
<p dir="auto">The source code is here:<br />
<a href="https://github.com/gbevin/rife2-idea" rel="nofollow ugc">https://github.com/gbevin/rife2-idea</a></p>
<p dir="auto">Or use IDEA's built-in plugin system:<br />
<code>Settings/Preferences</code> &gt; <code>Plugins</code> &gt; <code>Marketplace</code> &gt; <code>Search for "RIFE2"</code> &gt; <code>Install Plugin</code></p>
]]></description><link>https://forum.uwyn.com/topic/19/rife2-idea-plugin-available</link><guid isPermaLink="true">https://forum.uwyn.com/topic/19/rife2-idea-plugin-available</guid><dc:creator><![CDATA[gbevin]]></dc:creator><pubDate>Sun, 20 Aug 2023 21:12:09 GMT</pubDate></item><item><title><![CDATA[RIFE2 v1.3.0 with GraalVM native-image AOT compilation support]]></title><description><![CDATA[<p dir="auto"><a href="https://github.com/gbevin/rife2/releases/tag/1.3.0" rel="nofollow ugc">RIFE2 v1.3.0</a> now supports Ahead-Of-Time compilation with GraalVM native-image, keeping your startup time and memory footprint low by doing the heavy lifting up-front.</p>
<p dir="auto">In order to try this out, please download the latest <a href="https://www.graalvm.org/downloads/" rel="nofollow ugc">GraalVM JDK 19 distribution</a>, and follow the steps to install <code>native-image</code> on your machine. <a href="https://www.graalvm.org/dev/reference-manual/native-image/" rel="nofollow ugc">https://www.graalvm.org/dev/reference-manual/native-image/</a></p>
<p dir="auto">Once that is done, package your application as an <a href="https://github.com/gbevin/rife2/wiki/Deployment#create-an-uberjar" rel="nofollow ugc">UberJar</a>  and create a single native executable using the following command:</p>
<pre><code class="language-bash">native-image --no-fallback --enable-preview -jar your-uber.jar
</code></pre>
<p dir="auto">You'll be able to launch it with:</p>
<pre><code class="language-bash">./your-uber
</code></pre>
<p dir="auto">The RIFE2 bootstrap project is fully setup for AOT compilation, so you start there.</p>
<p dir="auto">Below is a screenshot and with statistics of a micro-benchmark I did on my AMD Ryzen 9 5950X 16 Core 128GB dedicated Linux server.</p>
<p dir="auto">Key points:</p>
<ul>
<li>application startup in <strong>3ms</strong></li>
<li>standalone native executable size is 38MB</li>
<li>using <code>siege</code> locally with a concurrency of 10 x 2000 requests, gives ~33898 trans/sec</li>
<li>after the test, used up 281.7MB RES and  24.8MB SHR memory, account for 0.2% of memory</li>
</ul>
<p dir="auto"><img src="/assets/uploads/files/1692565828845-220339696-24f1fcdd-dab2-4014-be42-81331d41c6ed.png" alt="220339696-24f1fcdd-dab2-4014-be42-81331d41c6ed.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">In comparison, launching the Uber jar with the JVM:</p>
<ul>
<li>application startup in <strong>177ms</strong></li>
<li>uber jar size is 4.7MB but requires a separate JVM installation</li>
<li>using <code>siege</code> locally with a concurrency of 10 x 2000 requests, gives ~44444 trans/sec</li>
<li>after the test, used up 1.7GB RES and 39.7MB SHR memory, account for 1.3% of memory</li>
</ul>
<blockquote>
<p dir="auto"><strong>NOTE:</strong> RIFE2 support for GraalVM native-image is still in preliminary stages. There's no solution yet to replace the features of the RIFE2 Java agent, and it's only been tested in a limited context. When expanding the code of the project, you most likely will have to update the native-image configuration files located in <code>app/src/main/resources/META-INF/native-image</code>.<br />
More information about that can be found in the <a href="https://www.graalvm.org/latest/reference-manual/native-image/metadata/" rel="nofollow ugc">GraalVM manual</a>.</p>
</blockquote>
]]></description><link>https://forum.uwyn.com/topic/18/rife2-v1-3-0-with-graalvm-native-image-aot-compilation-support</link><guid isPermaLink="true">https://forum.uwyn.com/topic/18/rife2-v1-3-0-with-graalvm-native-image-aot-compilation-support</guid><dc:creator><![CDATA[gbevin]]></dc:creator><pubDate>Sun, 20 Aug 2023 21:10:48 GMT</pubDate></item></channel></rss>