We identified and fixed today several issues which may affect applications creating a lot of threads (i.e. not using a thread pool). The symptom was an unexpected access violation, when you reach a multiple of 256 threads count. You should better upgrade to at least revision 1.18.1351 if your […]
In order to enhance code modularity, we extracted logging and testing features from SynCommons.pas. Discover the new SynLog.pas and SynTests.pas units! Documentation has been updated to reflect the changes. This is a breaking change... Ensure you add SynLog and/or SynTests to your uses clauses, just […]
Our framework features an integrated logging class, ready to be enabled for support and statistics.
For debugging purposes, it could be very handy to output the logging content
to a console window.
It enables interactive debugging of a Client-Server process, for instance: you can interact with the Client, then look in real time at the server console window, and inspect which requests are processed, without the need to open the log file.
Depending on the events, colors will be used to write the corresponding information. Errors will be displayed as light red, for instance.
Even if mORMot will be more easily used in a project designed from scratch, it fits very well the purpose of evolving any existing Delphi project, or even creating the server side part of an AJAX application.
One benefit of such a framework is to facilitate the transition from a Client-Server architecture to a N-Tier layered pattern.
Our Open Source mORMot framework is now available in revision 1.16.
The main new features are the following:
- Interface-based services, i.e. comparable to WCF, but with Delphi strengths;
- ORM cache which purpose is to enhance server scaling and client responsiveness;
- Automatic JOIN query to unleash the underneath DB power;
- SQLite3 engine updated to latest revision 184.108.40.206;
- Major update of the associated documentation (now more than 800 pages);
- A lot of bug fixes and enhancements, mainly from users requests - thanks you all for your feedback, patches and ideas!
With a previous article, we introduced the concept of "Domain-Driven design" into our framework presentation.
It's now time to detail a bit more this very nice software architecture design, and how mORMot is able to achieve such an implementation pattern.
In a discussion with Henrick Hellström, in Embarcadero forums, I wrote some high-level information about mORMot.
It was clear to me that our little mORMot is now far away from a simple Client-Server solution.
The Henrick point was that with Real Thin Client (RTC), you are able to write any Client-Server solution, even a RESTful / JSON based one.
He is of course right, but it made clear to me all the work done in
mORMot since its beginning.
From a Client-Server ORM, it is now a complete SOA framework, ready to serve Domain-Driven-Design solutions.
2011-10-27. Pascal Programming
From a StackOverflow question about a freezing Delphi application, I posted some experiment-based debugging tricks.
May help any developer in his/her fight against random bugs...
We already shipped a sophisticated set of logging classes some month ago.
Since then, its features have been enhanced, and the system has been deeply interfaced with our main ORM framework. Now almost all low-level or high-level operations can be logged on request.
But since the log files tend to be huge (for instance, if you set the logging for our unitary tests, the 6,000,000 unitary tests creates a 280 MB log file), a log viewer was definitively in need.
Logging is everything... unless you never wrote a bug in your program!
Let us introduce a new logging class:
- logging with a set of levels;
- fast, low execution overhead;
- can load .map file symbols to be used in logging;
- compression of .map into binary .mab (900 KB -> 70 KB);
- inclusion of the .map/.mab into the .exe;
- reading of an external .map to add unit names and line numbers to a log file without .map available information at execution;
- exception logging (Delphi or low-level exceptions) with unit names and line numbers;
- optional stack trace with units and line numbers;
- methods or procedure recursive tracing, with Enter and auto-Leave;
- high resolution time stamps, for customer-side profiling of the application execution;
- set / enumerates / TList / TPersistent / TObjectList / TContainer / dynamic array JSON serialization;
- per-thread or global logging;
- multiple log files on the same process;
- integrated log archival (in zip or any other format);
- Open Source, works from Delphi 6 up to XE.