[hibernate-dev] HSEARCH-3000 Pick Jigsaw Automatic Module names for all published modules
Yoann Rodiere
yoann at hibernate.org
Thu May 3 08:17:17 EDT 2018
Since the names are about to be set in stone, and there has been some
discussion off list, I'd like to talk a bit about the Elasticsearch/Lucene
module names...
In the Search 6 architecture, these modules really provide a "backend",
i.e. a component that actually implements indexing/querying over multiple
indexes, but operates "behind" the engine (the engine uses the backend).
Essentially the data flow is:
Indexing: User => Mapper (user APIs) => Engine => Backend => Disk/network
Querying: User <= Mapper (user APIs) <= Engine <= Backend <= Disk/network
We discussed it a bit with Sanne (and with Guillaume) and agreed that
"backend" was the right word for this part of our architecture.
Now, the discussion is about module names, not component names.
Still, there are several reasons because of which I'd rather use
"org.hibernate.search.backend.<elasticsearch/lucene>":
- It is closer to how we will probably refer to the module on a
day-to-day basis: I don't know about you, but I'll probably talk about "the
Elasticsearch backend" rather than "Elasticsearch indexing" or "the
Elasticsearch module".
- It is generic enough to cover all of the tasks we delegate to
Elasticsearch/Lucene.
"org.hibernate.search.indexing.<elasticsearch/lucene>",
on the other hand, feels like it's only about indexing, and not querying,
maybe not even about defining a schema.
- It is consistent with our architecture and APIs in Search 6:
- The main component (and entry point) in those modules will be an
object implementing BackendImplementor (SPI)
- We will actually expose "backends" as part of our Java APIs, for
instance to allow users to retrieve the Elasticsearch client, or to query
some backend-scoped metadata.
- We will also use the word "backend" in the user configuration,
where the user will have to define a backend, its type and its options
using the "hibernate.search.backends.<backendName>.*" properties
- As opposed to the "prefix-less" naming scheme
("org.hibernate.search.<elasticsearch/lucene>"), it makes it easy to infer
what the module actually provides to users: the actual implementation
behind Hibernate Search, even without extensive knowledge about Hibernate
Search.
- When listing all the modules of Hibernate Search, it makes it easy
to spot which module is about what, and which modules provide the same
thing using a different technology:
org.hibernate.search.engine
org.hibernate.search.orm
org.hibernate.search.clustering.jms
org.hibernate.search.clustering.jgroups
org.hibernate.search.backend.elasticsearch
org.hibernate.search.backend.lucene
vs:
org.hibernate.search.engine
org.hibernate.search.orm
org.hibernate.search.jms
org.hibernate.search.jgroups
org.hibernate.search.elasticsearch
org.hibernate.search.lucene
- When the module name appears in some error message (for instance
when a user starts experimenting with Java 9), it will also make it clear
which part of Hibernate Search is misconfigured. And that may be
important
to some users, since not all the people working on an application
know the details of every part of the application...
Of course, in the meantime in Search 5, there will be some confusion due to
the fact "backend" has a different meaning in Search 5.
If you are worried about that, I'm not opposed to slightly altering the
module names between Search 5 and Search 6: users will have to make changes
when migrating anyway.
In particular, a lot of APIs will change, some class may be moved to
different packages to comply the "no split package" constraint of Java 9,
Maven coordinates will change to use the "org.hibernate.search" group ID
instead of "org.hibernate", and people using the Lucene backend will have
to depend on a new module (both in their Maven dependencies and in their
Java 9 module dependencies).
So we could just use "org.hibernate.elasticsearch" in Search 5, and switch
to "org.hibernate.backend.elasticsearch" in Search 6. It's not even a big
deal, since the Elastisearch module is openly advertised as experimental.
On Tue, 13 Feb 2018 at 22:51 Sanne Grinovero <sanne at hibernate.org> wrote:
> On 13 February 2018 at 11:48, Guillaume Smet <guillaume.smet at gmail.com>
> wrote:
> > On Tue, Feb 13, 2018 at 11:59 AM, Yoann Rodiere <yoann at hibernate.org>
> wrote:
> >>
> >> > - org.hibernate.search.jms-support
> >>
> >> Not sure it's a valid name (aren't hyphens forbidden in package names,
> and
> >> aren't module names constrained by the same rules?), but apart from that
> >> it
> >> looks good. Maybe "jms_support" instead, if "jms-support" is not
> allowed.
> >> I would like to find a name for what the JMS and JGroups modules provide
> >> in
> >> Hibernate Search 6 though, something less misleading than "backend".
> >> Something like "work routing" or "clustering support" or "distribution
> >> support" or whatever. Would you be ok with changing the module name in
> 6?
> >> If not, maybe we have to think about it now... Note that we'll change
> the
> >> Maven group ID anyway, so it's arguably just another breaking change.
> >
> >
> > +1 to find a distinctive name for JGroups and JMS artifacts and same for
> > Lucene and Elasticsearch (either this round or for 6).
> >
> > org.hibernate.search.clustering.jms
> > org.hibernate.search.clustering.jgroups
> >
> > and
> >
> > org.hibernate.search.indexing.lucene
> > org.hibernate.search.indexing.elasticsearch
> >
> > would be my choice as it's very understandable by the end user.
>
> Great names! I'll take them. These will allow us to gracefully phase
> out the backend terminology, and also suggest the additional
> dependency tree they will pull in.
>
> >
> > It might be an orthogonal discussion so feel free to ignore me :).
> >
> > --
> > Guillaume
> >
> _______________________________________________
> hibernate-dev mailing list
> hibernate-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>
--
Yoann Rodiere
yoann at hibernate.org / yrodiere at redhat.com
Software Engineer
Hibernate NoORM team
More information about the hibernate-dev
mailing list