ANN: DelphiMVCFramework 3.0 beta

In the last months some of the great 9 DelphiMVCFramework contributors from all over the world, have worked hard to release the version 3.0. Now it is ready to be tested!

dmvcframework

DelphiMVCFramework is one of the most popular RESTful framework for Delphi, so any change has been accurately considered and also its impact on the current 2.x projects has been take in consideration. There are a lot of new core features that will make even more easy to work on (and with) your beloved RESTful framework. Also, all these changes will make the framework even more flexible regarding the serializators even for custom types (yes, now you can register your custom serializer for your data types). Also, JSON is no more the only “built-in” supported format. Well, now JSON is the only format, but now is really easy to add to the serializers registry a brand new serializer which serialize in XML, YAML, BSON, CSV etc. The serializers are recicled between requests to get the maximum performances.

Considering that some often-used methods have been removed or refactored, we tracked all the breacking changes in a document, so that you can evaluate the impact that the new version may have on your projects.

Here the content of the document as it is today (the latest version is available here).

DelphiMVCFramework 3.0.0 breaking changes

  • RenderListAsProperty has been removed from TMVCController. You can set such kind of specialized serializations in your custom base controller.
  • RenderJSONArrayAsProperty has been removed from TMVCController. You can set such kind of specialized serializations in your custom base controller.
  • Render has been removed from TMVCController (was deprecated).
  • Render(TJSONValue) has been removed from TMVCController (use Render(TObject)).
  • Trying to deserialize a TJSONNull the target instance will not be freed anymore (consistency with serialize).
  • Context.Request.BodyAsJSONObject dosen’t exist any more. Use BodyAs or the following pattern to migrate.
JSON := TJSONObject.ParseJSONValue(Context.Request.Body) as TJSONObject;
try
  if not Assigned(JSON) then
    raise EMVCException.Create('Invalid JSON');
  // do something here
finally
  JSON.Free;
end;
  • TMVCConfigKey moved to unit MVCFramework.Commons.
  • TMVCMimeType was renamed to TMVCMediaType.
  • TMVCController.Render (no parameter method) do not exist anymore. If the return is a ResponseStream, use the RenderResponseStream.
  • TMVCController.PushJSONToView was renamed to PushToView and Removed SystemJSON dependency, use the ToJSON method if necessary.

As you can see, the breaking changes are very few and there are very low probabilities that will require you more than 10 minutes to fix them even in a big DelphiMVCFramework 2.x project. I did it for our biggest projects, and 10 minutes are largely over-estimated.

Beta Tests

For the next weeks/months the 3.0 beta version will be available for testing. If no major bugs will be found, the 3.0 will be merged in the main branch.

To test the 3.0 beta version you have to checkout the “pluggable_mapper” branch (clone the repo if you didn’t already, and then checkout the “pluggable_mapper” branch).

You can go back to the 2.1.6 (carbon) when you finished the test. There is no reason to be afraid about the changes. They are really in the deep layers and should not affect the “normal” services.

Happy testing!

Community

Considering all the help requests coming from the users (and the fact that facebook is not permitted in some companies) we at bit Time Professionals (the company which lead the development of DelphiMVCFramework and other open source Delphi projects) decided to create a specific community and leave the facebook group only for announces and polls.

Some of bit Time Professionals Open Source Projects
Some of bit Time Professionals Open Source Projects

So, if you need help about DelphiMVCFramework, LoggerPro, Delphi Redis Client, columbusegg4delphi, Delphi Event Bus, Delphi STOMP client, you can go to the bit Time Professionals Community and ask there. If you want to support the projects or you need fast responses, you can also subscribe to the “professional support” group (with a very low fee) and your requests will get priority upon the other by our engineers (which likely wrote 80% of the framework code). When possibile, the support team will send you a specific sample written specifically to show you how to solve your problem. The “professional” groups will be available soon. If you are interested about prices or other things related to the professional support, ask to professionals(at)bittime(dot)it.

Currently is just started, go to subscribe now!

 

DT

ITDevCon Community Workshops: DelphiMVCFramework & Multithreading

As you probably know, monday and tuesday we held 2 ITDevCon Community Workshop.

On monday we had “Tutto su DelphiMVCFramework” (All about DelphiMVCFramework) a very intensive workshop which introduce al the major features about DelphiMVCFraemework:

  • DelphiMVCFramework architecture
  • Understanting Routing
  • Controllers
  • Routes and parameters
  • Renders
  • Action filters
  • Accessing data
  • Be amazed by the Mapper’s features
  • Sessions
  • JSON Web Token support (JWT)
  • Middleware
  • The built-in Authentication & Authorization framework
  • Serving static files
  • Server Side Views (a.k.a. SSV)
  • Using Push Notifications with DMVCFramework and RabbitMQ
  • The built in RESTClient
  • The amazing RESTAdapter (by Daniele Spinetti)

After a basic introduction about controllers, routing and renders, we give a look on all the advanced features. The people have been amazed by the framework flexibility and simplicity.

Here’s some photos.

img_20161128_095551

About to start…

start-dmcvframework

 

The class during the morning session

img_20161128_102706

 

Lunch time!

img_20161128_131933

 

And the end of the monday session, my friend Maurizio Del Magno brings a lot of piadinas (https://en.wikipedia.org/wiki/Piadina) and offered to cook them. So, we bring some Porchetta di Ariccia  (https://en.wikipedia.org/wiki/Porchetta) and organized the first ITDevCon Community Dinner 🙂

 

Here’s Maurizio while is cooking the piadinas.

img_20161128_181600

 

And this is the porchetta!img_20161128_181640

 

This is the link for the complete photo album

 

The day after, we had the workshop: “Tecniche per il multhreading” (multithreading tecniques). Have been introduced and explained all the major problems related to multithreading programming and then we show the fundamental tecniques to cope with them, including Parallel Programming Library. There were the topics.

 

  • What’s a thread?
  • TThread Basics
  • Synchronize background threads with the main thread: the easy way
    • Synchronize
    • TThread.Synchronize
    • Thread.Queue
  • How to correctly destroy a thread
  • When a piece of code is thread safe?
  • Fundamental synchronization tools
    • Critical section – TCriticalSection
    • Interlocked function – TInterlocked
    • Monitor – TMonitor
    • Mutex – TMutex
    • Events – TEvent
  • The producer-consumer pattern
  • Beware to the deadlock!
  • The RTL thread safe classes
    • TThreadedQueue<T>
    • TThreadList<T>
  • Practical applications of multithreading in database programming
    • Background queries
    • Parallels queries
  • Background HTTP requests
  • The parallel programming library: TTask, TFuture and TParallel.&For

Here’s some photos of the second day of workhop

img_0209

img_20161129_115604

The “multithreading” class

img_20161129_100147

This is the link for the multithreading workshop album.

 

These 2 days have been very intensive, however have been a really success: lot of people, lot of good-old Delphi programmers but also a good number of younger (50%/50% more or less).
I’m planning to organize other ITDevCon Community WorkShop in the beginning of 2017.

See you soon guys, and keep in touch!

 

 

DelphiMVCFramework is now Open Source!

delphimvcframework

Yes, just after 1 year of development, and a couple of big projects developed with it, the DelphiMVCFramework has been published as OpenSource.

The project is on google code svn https://code.google.com/p/delphimvcframework/

I’ll talk about it at ITDevCon2013 (http://www.itdevcon.it)

In the trunk there are many samples and I’m planning to put many others.

Main DMVCFramework features

  • RESTful (RMM Level 3) compliant
  • Server side generated pages using eLua (Embedded Lua)
  • Messaging extension using STOMP (tested with Apache Apollo and Apache ActiveMQ)
  • Can be used in load balanced environment using memcached (memcached.org)
  • Fancy URL with parameter mappings
  • Integrated RESTClient
  • Works with XE4 and XE5 (tested, but should works also on XE3 and XE2)
  • Experimental support for IOCP
  • Simple, but very very simple, to use…

It contains also a lot of indipendent code that can be used in other kind of projects.

These are the most notable:

  • Mapper (convert JSON <=> Object, ObjectList <=> JSONArray, ObjectLists <=> DataSets)
  • LuaBinding (integrate Lua script into Delphi native code)
  • LuaTextFilter (convert eLua into plain Lua executable script just like JSP)
Currently DMVCFramework use Embarcadero WebBroker framework, but is not tied to it. I’m working on a version that use IOCP (that is 10 times faster than plain WebBroker) and other web libraries for Delphi.
Code is enough stable and is already used in big production system.
WARNING!
There are a couple of bugs that affect WebBroker and so, DMVCFramework.
In our system, I’ve applied some patches to solve these problems. If you need those patches, ask me (I cannot publish the full code because it is Embarcadero licensed code).
The bugs are:
And another bug that affect also DataSnap and TIdHTTPWebBrokerBridge based projects.
Code is tested on XE4 and XE5 but should works also on XE3 and XE2.