So, I took a stab at this and made some progress.
The generated tests needing Docker will now automatically be skipped if
no docker service is available.
IOW, the generated projects aren't broken anymore for people that do not
run docker.
I fixed Memcache, MongoDB, Riak, Redis, JClouds, H2SQL docker
integration.
I disabled tests in generated projects when MySQL or PostgreSQL is
involved because I couldn't get the former to work (timing issue?) and
the latter requires a custom docker image. We can fix that post 3.0.
So, in the reduced set of tests, only 2 fail now, the ones using XML or
msgpack serialization.
I think there's a hiccup with how Serialization is assembled in the
generated applications.
The generator asks for which serialization subsystem to use, json, xml
or msgpack, and assemble it in infra/serialization with an application
visibility, the infra layer is used by all other layers except 'config'.
But, what is the intent really?
All JSONMapEntityStores uses JSON, and requires a JsonSerialization
service.
RdfIndexing uses some JSON under the hood, and requires a
JsonSerialization service.
The generated projects fail to bootstrap.
Values toString() method uses the Serialization visible from the value's
module.
What happen with XML or msgpack?
It will respectively return XML or Base64 encoded binary.
The rest library assumes JSON Serialization but it should require a
JsonSerialization service explicitly.
What happen with XML or msgpack?
HTTP requests are expected in application/json but parsed as XML /
Base64 encoded binary.
HTTP responses are advertised as application/json but contains XML /
Base64 encoded binary.
In this context, a HTTP/JSON service, XML and MessagePack serializations
aren't that useful.
The rest library could be enhanced to provide XML, even binary,
representations at some point.
We could use Message Pack in the configuration Memory ES instead of JSON
to save some memory, maybe.
The user might implement e.g. a custom service that need XML or binary
serialization.
I would remove the choice of serialization from the generator for 3.0
and assemble default JSON serialization where appropriate instead. Any
objections ?
/Paul
Le 2017-06-04 11:09, Paul Merlin a écrit :
Le 2017-06-04 02:54, Niclas Hedhman a écrit :
As for Docker;
Don't forget that this is code generation and it is EXPECTED that
people
tailor it to their needs. I chose ":latest" so that we don't have to
constantly maintain the version as those dependencies are likely to
upgrade
faster than we do. It is not important whether the generated project
will
break long-term for using ":latest".
`:latest` could eventually start breaking the day after we release
3.0. We do already have the list of qualified docker images in a
central place. It's like any other dependency. "maintaining" boils
down to not repeat ourselves.
BTW, it's the same with java dependencies that are also already
duplicated in the templates. We should reuse those defined in
~/dependencies.gradle at some point. That can be post 3.0.
Docker being present is a similar thing. If you don't want Docker,
kill the
DockerRule and change to connect to the external system available
through
other means.
I think the main point is; We don't need to tailor for all possible
situations, as generated code is not 'final' in any shape, way or
form. But
perhaps the generator should "check for Docker" and don't generate a
Dockerrule and disable the test if it is not present.
Well, I get your point but I strongly think that the generated
projects should not be broken. They are if they fail to build/run. And
users will think the same way I suppose. The generated projects are
just scaffoldings yes, but getting started with a broken build (as in
not building/running) will confuse users and produce noise.