Hi Guillaume & Cameleers,
I like that there's an effort to make the code more maintainable. I do
however feel that the source of truth is best kept in the Java code,
and perhaps this new model can be generated from that. I understand
the need for having a single strictly typed source of truth.

Could we have the flow somehow like Java -> (XML?) meta model -> code
generation of XML readers/writers and DSL?

I have an inkling that we could even generate the meta model in Java
and code generate from there without the model being in XML format, we
are kinda, while awkwardly, doing it right now.

I fear that unless we add more strict checking that if the XML meta
model is the source of truth that we'll easily diverge from the Java
code. For example, if we remove a property from the endpoint we need
tooling that'll fail the build if the meta model is not updated and
the property is removed there as well.

zoran

On Wed, Jul 24, 2019 at 4:45 PM Guillaume Nodet <gno...@apache.org> wrote:
>
> Hey everyone !
>
> The last weeks, I've spend quite some time working on a camel metamodel.
> The idea is to invert the way things are built in camel so instead of
> generating the metamodel from the classes, the metamodel would be
> maintained manually and used to generate a bunch of things.
>
> This would bring the following benefits:
>   - the metamodel would necessarily be up to date
>   - generate the model classes (XyzDefinition classes) with an homogeneous
> fluent api (similar to the new endpoint DSL)
>   - get rid of some round tripping between java -> json -> java, copying
> json files everywhere , so great simplification of the build process
>   - the DSL allows type-safe + property placeholders / references everywhere
>   - generate xml readers / parsers without relying on JAXB
>   - brings extensibility of the DSL as it would be much easier to create
> DSLs based on other languages from the metamodel (yaml for example)
>
> I've pushed a branch that shows my experiments.  It's not fully working
> yet, but it gives a good idea. It's available at
>   https://github.com/gnodet/camel/tree/model
> I'm progressing a bit slowly as there are lots of step by step adjustements
> to do in order to keep compatibility of the DSL.
>
> Currently the model is generated from the json files, but the idea is to
> reverse this process and have the metamodel the real primary input for all
> generation.
> The model currently looks like:
>   https://gist.github.com/gnodet/75457febcca9a893c3c1a2b8499189b2
>
> The current JAXB model will need to be moved into a separate module so that
> it can be kept for compatibility without interfering with the new generated
> java DSL.
>
> So, still quite some work left, but I wanted to bring it to the community
> sooner rather than later, especially before I go on PTO for a few weeks
> where I'll be mostly offline.
> Happy to discuss anything or provide more infos.
>
> Cheers,
> Guillaume Nodet



-- 
Zoran Regvart

Reply via email to