In the previous paragraphs we showed some issues can be addressed by a journaling/transactional tool, but why should I use libjf instead of a relational and transactional database?
A DBMS (Data Base Management System) is not only a transactional tool, it's a more powerful object that implies a very different approach to coding, testing, software distribution and system management:
query and updates are expressed as SQL statements: you may love it, you may hate it, you have to pay a powerful language interpreter overhead for it
a DBMS must be up and running to support your application
some tables must be defined using DBMS specific DDL (Data Description Language) statements
DBMS objects (tables, indexes, ...) must be managed
some DBMS are not easily embeddable in your application and you must manage one more dependency
some DBMS do not provide an easy way to store/retrieve arbitrary data like structs and classes
DBMS have a lot of advantages too, especially if your application uses the most advanced features.
Now we can answer our original question: "Who should use libjf?"
If you need transaction support and are not interested in all the advanced features of a DBMS, libjf might be your preferred tool.
If your application needs the features of a relational DBMS and you are thinking to "re-write the wheel" using libjf, libjf is probably not what you are looking for.