Wt (wit-ty) is a Web Toolkit. It is a C++/Java library for building modern and efficient web applications, with an API and programming model that resembles existing desktop application GUI APIs.
- Ajax / Comet / WebSockets
- Accessible and Search Engine Optimized
We used Wt as paid users through its commercial license. Wt is not reentrant. Your handler can be called again, overwriting the Wt::Request in use. Wt has no processing framework. You have to build your own MVC framework within Wt to do your work and bind Dbo. Wt::Http::Request does not tell you the set of headers set by the client. You can only query fixed keys, for a start. There's little point enumerating these faults, but a web framework that can't tell you the request headers should indicate what we're dealing with here. Dbo containers can only be traversed once. Wt::DateTime serializes and deserializes to different values and are used to hold database datetime fields. Dbo transactions are broken in this way. Transactions can be nested, and the commit only really happens when the final outermost transaction commits. However, a Dbo Session is bound to a Transaction within the framework, making transactions available to the user irrelevant because the user has no control over the session’s transaction. Consequently, the application has no control over when data is committed to the database. We found that over 6 seconds can pass before the commit occurs, beyond the completion of our handler. Boost::optional is used to map auto increment fields. However, they do not copy in a way you'd expect, and so your database record doesn't copy in a way you'd expect. Many high level problems are traced back to this kind of inconsistency. The seemingly clever search and so on that you can do with Dbo::ptr objects clash with record insert semantics. You are forced to use them in the most simple benign way to get predictable behavior, making the whole feature irrelevant. The Boost JSON parser is tricky to use, RapidJSON is much better. In fact, every aspect of Wt needed to be enhanced for basic used and eventually replaced. We spent huge amounts of time tracking unexpected behaviour to Wt components. We'd have saved time if we wrote everything from scratch. As it was, we replaced each component, one at a time, until it was all gone. I requested that compile-time warnings be fixed (for GCC 4.7 in 2016). That request was not honored. There was no expectation that it would be fixed for 5.3 or Clang. Wt is a terrible waste of time. Take a look at the projects they reference as working examples. The all have to implement some way binding message handlers to something that knows about application objects and database objects. They all have different structure. They all look and feel different. There's no portable components within the apps.