2026-07-24

UMindMap: Write Mind Maps as a Nested List

UMindMap is a lightweight static web application for capturing and organizing ideas without unnecessary complexity. It requires no installation or registration—just open it in any modern web browser. Mind maps are created intuitively using nested lists, while each node can optionally include notes written in Markdown. With a single click, the entire structure is rendered as a clear graphical mind map with all its details. Thanks to its simple text-based format, your data remains easy to read, portable, and fully under your control. Mind maps can also be shared easily without any server-side support—simply upload the application together with the data file to any static web server and append the data file name to the URL as a parameter.




2026-05-30

What's new in Ujorm 3.0.3?

A new version 3.0.3 is now available. The SelectQuery class fixes SQL INSERT statement generation when using a third chained relation combined with LEFT JOIN. The negation method for Criterion conditions has been fixed as well. The new version significantly speeds up INSERT operations in cases where retrieving the generated ID key is not required, which has a positive impact especially on PostgreSQL performance tests. The library now automatically loads the logging configuration from the ujorm-config.properties file, so SQL queries are printed to the terminal in JUnit tests without any additional setup.

The changelog is available here.

2026-05-15

Ujorm 3.0 is released

Today, the final version of Ujorm 3.0.0 was released, featuring a completely new ORM module for working with JavaBean and Record objects. The goal was a transparent solution with no additional dependencies, supporting type-safe construction of SQL statements.


Ujorm3 requires Java 17 or higher.

<dependencies>
    <dependency>
        <groupId>org.ujorm</groupId>
        <artifactId>ujo-core</artifactId>
        <version>3.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.ujorm</groupId>
        <artifactId>ujo-orm</artifactId>
        <version>3.0.0</version>
    </dependency>
</dependencies>

More information is available on the project's homepage on GitHub:
  • https://github.com/pponec/ujorm/#-ujorm3-library




2026-03-23

Ujorm3 RC1 Released

 The first release candidate of the Ujorm3 ORM library has been released. It beats its competitors with its simplicity, transparent behavior, and low overhead. The code changes focused on improving performance and cleaning up the API.

Links:



Simplified API schema:


2026-03-08

Ujorm3 (a new lightweight ORM framework for JavaBeans and Records)

I have prepared a completely new implementation of a lightweight ORM in pure Java that works with JavaBean and Record objects. More details will follow gradually. For now, I am just attaching a link to the project's homepage:

https://github.com/pponec/ujorm/tree/ujorm3?tab=readme-ov-file#-ujorm3-framework

And also a link to the performance tests, which can be used as a reference for your own implementations:

https://github.com/pponec/orm-bencharks?tab=readme-ov-file#orm-benchmark

Comments and feedback are welcome :-).





2024-11-06

Ujorm release 2.26

 A new version of the Ujorm library version 2.26 was released today. The changes concern the ujo-web module in particular. The goal of the release was to completely remove the dependency on the servlet-api,

The ujo-web module can therefore be connected both to a project that uses the new servlet API specification 5 (and higher) as well as to a project that uses the older version 4. The module can now also be used to build HTML pages without depending on any version of the servlet , for example for compiling the HTML code of email messages. The module contains a new RContext class (name inspired by Servlet Request Context) that creates a wrapper for the servlet API, the implementation gets resources using Java reflection. I am attaching an example of practical use:




Maven dependency:
<dependency>
<groupId>org.ujorm</groupId>
<artifactId>ujo-web</artifactId>
<version>2.26</version>
</dependency>

The API of the module has undergone some changes, so some parts of the API version 2.26 are not backwards compatible.





2023-06-07

New ORM Framework for Kotlin

 


An article about a Kotlin API for ORMs was published on DZone.

See a sample of the SELECT statement:


Links: 

  • The full article on DZone.
  • The source code on a GitHub.


2021-07-06

Ujorm for Kotlin?

 

A very early prototype of the Kotlin library for modelling filters using a domain object meta-model. Assembled filters work on common POJO objects. The solution was inspired by the Ujorm key-value framework, but this code is completely new. Topical areas of use are:

  • dynamic validations
  • alerting
  • modelling conditions for ORM

See more information:  https://github.com/pponec/ujormKt




2021-06-21

A mini Java web application with a size about 5 MB.

I managed to build a web application with a size of only 5.18 MB.
The application contains only a short HTML form with support for simple AJAX events. The project is built on the Javalin framework and a web module from the Ujorm framework.


The source code is freely available on GitHub:
https://github.com/pponec/demo-ajax/tree/javalin

2021-05-25

Java HTML Report in a Few Lines of Code

 I’d like to show you a simple table HTML report created with only thirteen lines of source code, written in a single command line using the Java programming language. Let’s pretend the data provision service already exists.

See the full articles on DZone:


Screenshot:



2021-04-26

A Simple AJAX Website in Java

During the Covid New Year of 2020, I created a simple prototype website using AJAX, with the goal of moving Java developers away from JavaScript and ideally also text-based HTML templates. I made my original solution a little more general, moved certain parts into the Ujorm framework, and am presenting the result here for your further inspiration.

 

See the full article: https://dzone.com/articles/a-simple-ajax-website-in-java


2019-05-13

The Story of Ujorm Framework

How much time can Ujorm Framewrok save and why was it created in the first place? The following article addresses more than these questions.


Somewhere back in 2008, I had an opportunity to participate in development of an interesting transport reservations system written in Java. The frontend was built on RichFaces, a former component framework for Sun Microsystems' JavaServer Faces, a business logic was placed into service classes managed by Spring framework, persistent layer was built on Hibernate ORM framework.
See the full article on Github ...





2014-04-27

Key-value Coding in Java

I would like to introduce a guide to the key-value architecture of domain objects where their attributes are provided using objects called Keys only. The Key-value approach simplifies and accelerates the development of applications. Practical use is demonstrated in the Demo-Hotels project linked at the end of the original article. The chapter list follows:
  • Writing and reading values
  • Restoring default values
  • Shallow copy of an object
  • Validation attributes when writing
  • Composite Keys
  • Criterion as a condition model
  • Criterion for filtering collection
  • Collection sorting
  • Serialization of Keys
  • Import from CSV format

Short examples are based on the Ujorm library.

key-value-model

Link to the original article:
http://ujorm.org/sample/key-value.html

2014-03-11

Ujorm version 1.44

there is available a new version Ujorm in Maven repositories with a long-awaited support for creating hierarchical queries for a database relations to itself. Previously it was necessary to use a native SQL commands, however it can be modeled using Ujorm key type by an extended alias name for relation now. The next example shows a query for all Customers with a surename "Brown" and grandparent called "Smith":

     Criterion<Customer> crn1, crn2, crn3;
     crn1 = Customer.PARENT.alias("parent1")
       .add(Customer.PARENT).alias("parent2")
       .add(Customer.SURENAME).whereEq("Smith");
     crn2 = Customer.SURENAME.whereEq("Brown");
     crn3 = crn1.and(crn2);

     Customer customer = session.createQuery(crn3).uniqueResult();

aliases can be used also in some cases where one entity contains multiple keys to the same entity, an example may be two relations Person.MOTHER, Person.FATHER.


Other features of the Ujorm series 1.4x:
  • XML configuration of an ORM meta-model can be validated using a XSD file
  • and there is available a new module (ujo-xsd) to generate XSD files accoridng an UJO class
  • ORM supports native DB sequences using the class NativeDbSequencer
  • ORM lazy loading can be enabled (optionally by a parameter) on the closed session too, for the case an action opens a new DB connection for a necessary short time only
  • there was removed the interfaces Property, which has been deprecated since version 1.30 and should be replaced by a new interface Key (including related methods)


more detailed description is in the release notes.

2013-10-01

The CRUD application for Ujorm and Wicket

The java library Ujorm was introduced in 2008 under the old name UJO Framework. Since then, five years have passed and the source code has been modified many times but the basic idea - accessing to the properties by constants called keys - remains.

I would like to present a small web project for hotel booking to show an interesting features of the Ujorm library. Graphical interface is rendered by the  Apache Wicket framework.

See the next screenshot of the form dialog including a source code:

hotelFormGui


hotelFormCode

To be continued ...

2013-01-20

Ujorm 1.32 released

The new release of Ujorm framework is released with two major features:
  • the new validators are available for checking a consistency of the input values. The Ujorm validators have got a similar meaning for Ujo object how the Bean Validation (JSR 303) implementation for the JavaBeans.  For more information see the the documentation or a jUnit tests.
  •  the ORM supports reading a related database tables by the one SQL request using an extended implementation of the Query object. More information are described in ORM user guide.
See a more information on the release notes page.

2012-12-11

Ujorm 1.31 released

There is available a new release of Ujorm framework, the major changes are:
  • database statements UPDATE or DELETE supports entity relations in the Criterion - including batch mode
  • SQL entity and column names can be "quoted" optionally in the real SQL statements, for more information see the method: MetaParams.setQuotedSqlNames()
  • the one critical bug is fixed for some cases of the lazy loading
  • explicitly defined Key name created using a factory is fixed now
  • there is available the new great plugging to NetBeans IDE to generate getters and setters easy for UJO - thanks to Martin Mahr
See a more information on the release notes page.