Skip to main content

6 posts tagged with "JVM"

JVM scripting language topics

View All Tags

Jactl Meets Apache Camel: Benchmarking camel-jactl

· 12 min read
James Crawford
Jactl Creator

camel-jactl is a new Apache Camel language module that lets you use Jactl as the scripting language inside Camel for things such as filter predicates, content-based routing rules, and message transformations. It registers itself through Camel's Language SPI under the name jactl.

import static io.jactl.camel.JactlLanguage.jactl;

from("direct:orders")
.filter(jactl("body.amount > 100 && body.status == 'NEW'"))
.to("direct:big-orders");

// Or via the Language SPI:
Language jactl = camelContext.resolveLanguage("jactl");
Predicate p = jactl.createPredicate("body.age > 20");
Expression e = jactl.createExpression("'Hello ' + body.name");

This post uses JMH benchmarks to compare the performance of Jactl against Camel's built-in Simple language and against Groovy (via camel-groovy) in the places where scripting languages typically appear in Camel applications, from single predicate evaluations up to a complete order-processing route, with a plain-Java route as the no-scripting baseline.

Jactl vs Groovy, JEXL, MVEL, and SpEL: A Performance Comparison

· 27 min read
James Crawford
Jactl Creator

This post presents the results of some representative benchmarks using the JMH benchmarking library to run comparative tests across the following five different Java-based scripting/expression languages:

LanguageVersionNotes
Jactl2.9.0Compiles to JVM bytecode
Groovy5.0.6Compiles to JVM bytecode
Apache Commons JEXL3.6.2AST interpreter
MVEL2.5.2AST interpreter with limited bytecode generation
Spring Expression Language (SpEL)5.3.39Hybrid expression tree/bytecode interpreter

Benchmarks were run on a Java 25.0.2 JVM

The benchmarks focus mostly on short, expression based tests, in an attempt to mirror the types of scenarios where scripting languages are often used (for example in rules processing systems). There is one longer benchmark with a script of around 30 lines, as well as benchmarks comparing the compilation speeds.

Groovy vs Jactl: An Honest Comparison for Embedded JVM Scripting

· 20 min read
James Crawford
Jactl Creator

Edited: Updated with benchmark results from Jactl 2.8.0

Introduction

Java applications often choose to use an embedded scripting language for reasons including the following:

  • to provide a powerful customisation mechanism for users
  • to be able to change runtime behaviour without rebuilding/redeploying the application
  • for providing business rules/logic
  • per-tenant configuration for multi-tenant applications
  • rapid prototyping for new features

When selecting a JVM scripting language there are many options to choose from including Jactl, Groovy, Jython (Python), JRuby (Ruby), JavaScript, and Lua. Out of these, Groovy is probably the most widely used scripting language for Java applications. This article compares Jactl and Groovy in order to show their strengths and weaknesses and when you might choose to use one over the other.

Proof of Concept: 20,000 Payments per Second with Checkpoint Replication

· 8 min read
James Crawford
Jactl Creator

Jactl 1.3.0 introduces the ability to checkpoint the current execution state of a script and have it restored and resumed elsewhere after a failure. In order to test this new feature, I implemented a proof-of-concept project that simulates a payment processing system that accepts payment requests, performs some operations by interacting with multiple external systems and then returns a response.

Joey: Jactl Orchestration Engine

· 5 min read
James Crawford
Jactl Creator

I am often asked what the point is in having yet another language for the JVM. Apart from the fun of writing a compiler and being able to run actual programs using my own language, I wanted a language where the execution state could be captured and persisted such that if the server where the application is running fails, the execution state can be restored and resumed on another machine.

Welcome to Jactl

· 7 min read
James Crawford
Jactl Creator

Jactl is a new programming language for JVM based applications. It provides a secure way for application developers to provide customisation and extension capabilities to their users but can also be used for commandline scripts. An interactive REPL is provided for testing out code snippets.