On 8 December 2014 at 10:13, Hardy Ferentschik <ha...@hibernate.org> wrote: > Hi, > >> One of today's issues for Hibernate Search had the goal to move this class: >> >> org.hibernate.search.engine.spi.SearchFactoryImplementor > > Well, for me there is more to this than just moving. There are two issues imo. > > 1. The location. org.hibernate.search.engine.spi implies after our definition > that it is > and public SPI. However, according to Sanne it should not be private and > the main/sole > purpose of the class is to integrate the Search engine module with the orm > module.
s/ it should not be private/ it should be private/ > 2. The name. SearchFactoryImplementor is something which implements > SearchFactory. However, > one of the latest changes was to make SearchFactory a stand alone class of > the orm module. > SearchFactory is now only available in the orm module and has not > inheritance link anymore > to SearchFactoryImplementor or SearchIntegrator. This is awesome, since > now we are able > to evolve the engine code in the direction for "free form" entities > without affecting the > API for the users using Search in combination with Hibernate ORM. However, > it also means > that the engine module should now be agnostic of the orm module. Having a > SearchFactoryImplementor > in the engine module, but the SearchFactory defined in the orm module > seems wrong. Remember this still is "the implementor" for the SearchFactory API so the name is not wrong; what is wrong is the position in terms of modules. So while I disagree on a rename I agree on moving its role: in fact I've been working up to late tonight to move some things across modules; I had to back-off though as it's going to take me longer, and as long as we're clear this is not an SPI we an change it at any point. > > So, what can be done? Similar to Emmanuel, I am against a internal/friend > package. I think we should > look at other things we can do. > > First off, I find the separation between SearchIntegrator (former > SearchFactoryIntegrator) and > SearchFactoryImplementor quite arbitrary. For example, the integrator > contains getIndexBindings, whereas > SearchFactoryImplemtor has a getIndexBindings. Why could the latter not be > part of SearchIntegrator? > > If we move all methods of SearchFactoryImplementor into SearchIntegrator, and > an integrator cannot > implement all of them we could throw an OperationNotSupportedException. > > Other things we could do is to work with services. We could have something > like a ORMInterationService which > contains methods which are part of SearchFactoryImplemtor and which we don't > want to move to > SearchIntegrator. > > We could also keep SearchFactoryImplementor, but move it to the orm module. > During bootstrapping in > HibernateSearchSessionFactoryObserver we would create the SearchIntegrator > and then wrapp/add the > additional functionality required for the SearchFactoryImplementor. +1 Makes a lot of sense but we need to postpone such internal refactorings by a couple of weeks. > I think we would have a whole range of possibilities to address this. Just > moving the class it imo > not one of them. If we say that we don't have time to a full fledged > refactoring (which would imo > be a shame, since that was one of the targets of Search 5), I'd rather just > rename the class for now > and do a refactoring later. We could rename and deprecate the class to make > clear that it is not an > SPI. Exactly I just want to rename things to "unclassify" it from SPI. > >> So it seemed a straight-forward decision to move it to: >> >> org.hibernate.search.engine.impl.SearchFactoryImplementor > >> However then we need to patch the OSGi descriptor to export this package: >> org.hibernate.search.engine.impl > > No, you cannot just move it to org.hibernate.search.engine.impl. If anything > you would need to > move it into a standalone impl package which does not contains any other > class, say > org.hibernate.search.engine.orm.impl. If you want to move the class, I'd > rather do it this way > than creating a 'friend' package. > > --Hardy _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev