deltaspike-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Thomas Hug <thomas....@gmail.com>
Subject Re: Extending EntityRepository interface and EntityRepositoryHandler class
Date Thu, 26 Nov 2015 16:18:43 GMT
Hi Robin

Looks good except that @RequiresTransaction is an internal marker which
probably does not work outside EntityRepositoryHandler processing (I'd have
to check again for details but that's how I remember it). Wondering if
@Transactional on the interface would work (not sure how it inherits with a
partial bean).

Cheers,
Thomas

On Thu, Nov 26, 2015 at 4:23 PM, Roos, Robin <Robin.Roos@ntc-europe.co.uk>
wrote:

> Thomas / John, thanks for your input on this.
>
>
>
> Here is what I have so far.  I must apologise I am unable to test it here
> in the UK, but will propose it to the (offshore) team if you guys don't see
> any immediate issues.
>
>
>
> Here is the interface with the add() method:
>
>
>
> *public interface *PersistentCollection<E> {
>     *void *add(E entity);
> }
>
>
>
> And the handler which implements DelegateQueryHandler and provides the
> implementation:
>
>
>
> *public class *PersistentCollectionHandler<E> *implements *PersistentCollection<E>,
DelegateQueryHandler {
>     @Inject
>     *private *QueryInvocationContext *context*;
>
>     @RequiresTransaction
>     *public void *add(E entity) {
>         *context*.getEntityManager().persist(entity);
>     }
> }
>
>
>
> Our project is called Whale (don’t ask), so a Repository will no longer
> extend EntityRepository directly but will instead extend WhaleRepository:
>
>
>
> *public interface *WhaleRepository<E, PK *extends *Serializable> *extends *EntityRepository<E,
PK>, PersistentCollection<E> {
> }
>
>
>
> One of our persistent Domain objects is called Family; here is that
> Repository interface now using the WhaleRepository parent:
>
>
>
> @ApplicationScoped
> @Repository
> @EntityManagerConfig(entityManagerResolver = WhaleEntityManagerResolver.*class*)
> *public interface *FamilyRepository *extends *WhaleRepository<Family, FamilyPK>
{
>     Family findByFamilyCode(String familyCode);
> }
>
>
>
> IntelliJ is happy that FamilyRepository instances now have an add(Family)
> method:
>
>
>
>
>
> So, given that I am unable actually to test, does this look feasible?
>
>
>
> Thanks again, Robin.
>
>
>
>
>
> -----Original Message-----
> From: Thomas Hug [mailto:thomas.hug@gmail.com]
> Sent: 26 November 2015 14:50
> To: users@deltaspike.apache.org
> Subject: Re: Extending EntityRepository interface and
> EntityRepositoryHandler class
>
>
>
> Hi Robin
>
>
>
> Did you already look at the Query Delegates?
>
> http://deltaspike.apache.org/documentation/data.html#Extensions
>
>
>
> To summarize it for your context:
>
> - You can define a new interface with the add method
>
> - Provide an implementation of it which implements the new interface as
> well as DelegateQueryHandler. You can access the entityManager over an
> injected QueryInvocationContext (as in the docs).
>
> - Have your repositories implement / extend the new interface
>
> - Then ... No that's actually all, use the new add method :)
>
>
>
> Hope this helps.
>
>
>
> Cheers,
>
> Thomas
>
>
>
>
>
> On Thu, Nov 26, 2015 at 1:27 PM, Roos, Robin <Robin.Roos@ntc-europe.co.uk>
>
> wrote:
>
>
>
> > Of course, the method would be called add() and would return
>
> > void....this is consistent with the notion that Repositories model a
>
> > persistent Collection.
>
> >
>
> > @RequiresTransaction
>
> > public void add(E entity) {
>
> >     this.entityManager().persist(entity);
>
> > }
>
> >
>
> > -----Original Message-----
>
> > From: Roos, Robin [mailto:Robin.Roos@ntc-europe.co.uk
> <Robin.Roos@ntc-europe.co.uk>]
>
> > Sent: 26 November 2015 12:21
>
> > To: users@deltaspike.apache.org
>
> > Subject: Extending EntityRepository interface and
>
> > EntityRepositoryHandler class
>
> >
>
> > Hi Folks
>
> >
>
> > My developers are building a JPA application in which Domain objects
>
> > remain entirely within the transactional context.  This means we never
>
> > do detach/merge, whether implicitly or explicitly.
>
> >
>
> > I am concerned that the default Save() implementation in
>
> > EntityRepositoryHandler would incur a merge() if an already-persistent
>
> > instance was passed to save().
>
> >
>
> >
>
> > @RequiresTransaction
>
> > public E save(E entity) {
>
> >     if(this.context.isNew(entity)) {
>
> >         this.entityManager().persist(entity);
>
> >         return entity;
>
> >     } else {
>
> >         return this.entityManager().merge(entity);
>
> >     }
>
> > }
>
> >
>
> > To preclude this I would like to extend EntityRepositoryHandler to
>
> > provide an implementation of a new method add(), as follows:
>
> >
>
> > @RequiresTransaction
>
> > public E save(E entity) {
>
> >     this.entityManager().persist(entity);
>
> >     return entity;
>
> > }
>
> >
>
> > Presumably I would put this method signature into interface
>
> > MyEntityRepository extends EntityRepository, and the implementation
>
> > into class MyEntityRepositoryHandler extends EntityRepositoryHandler.
>
> > Repository interfaces would then implement MyEntityRepository.  (We do
>
> > not have any Repository "implementations" since DeltaSpike takes care
>
> > of that for us.)
>
> >
>
> > But how do I get it all joined up, i.e.  how to I nominate my new
>
> > Handler to be used when CDI is working its magic on the Repository
> interfaces?
>
> >
>
> > Thanks, Robin.
>
> >
>
> >
>
> > **********************************************************************
>
> > *************************************
>
> > Nissan Motor Manufacturing (UK) Limited is a limited liability company
>
> > registered in England and Wales under number 01806912 with its
>
> > registered office at Washington Road, Sunderland, Tyne and Wear SR5 3NS.
>
> >
>
> > CONFIDENTIALITY NOTICE AND DISCLAIMER
>
> >
>
> > This message including any attachments to it (Message) is private and
>
> > confidential and may contain proprietary or legally privileged
>
> > information.  If you have received this Message in error, please send
>
> > an email to email.security@nissan-europe.com with a copy of this
>
> > Message and remove it from your system. You must not, directly or
>
> > indirectly, use, disclose, distribute, print or copy any part of this
>
> > Message if you are not the intended recipient. The NISSAN EUROPE S.A.S
>
> > group of companies (NISSAN) reserve the right to monitor all e-mail
> communications through its networks.
>
> >
>
> > NISSAN is not liable for the proper/complete transmission or any delay
>
> > in the receipt of this Message .  Whilst NISSAN takes care to protect
>
> > its systems from electronic virus attack or other harmful event,
>
> > NISSAN gives no warranty that this Message is free of any virus or
>
> > other harmful matter and accepts no liability for any loss or damage
>
> > resulting from the recipient receiving, opening or using it.
>
> >
>
> > Any views or opinions expressed in this Message are those of the
>
> > author and do not necessarily represent those of NISSAN.
>
> >
>
> > **********************************************************************
>
> > *************************************
>
> >
>
> >
>
> > **********************************************************************
>
> > *************************************
>
> > Nissan Motor Manufacturing (UK) Limited is a limited liability company
>
> > registered in England and Wales under number 01806912 with its
>
> > registered office at Washington Road, Sunderland, Tyne and Wear SR5 3NS.
>
> >
>
> > CONFIDENTIALITY NOTICE AND DISCLAIMER
>
> >
>
> > This message including any attachments to it (Message) is private and
>
> > confidential and may contain proprietary or legally privileged
>
> > information.  If you have received this Message in error, please send
>
> > an email to email.security@nissan-europe.com with a copy of this
>
> > Message and remove it from your system. You must not, directly or
>
> > indirectly, use, disclose, distribute, print or copy any part of this
>
> > Message if you are not the intended recipient. The NISSAN EUROPE S.A.S
>
> > group of companies (NISSAN) reserve the right to monitor all e-mail
> communications through its networks.
>
> >
>
> > NISSAN is not liable for the proper/complete transmission or any delay
>
> > in the receipt of this Message .  Whilst NISSAN takes care to protect
>
> > its systems from electronic virus attack or other harmful event,
>
> > NISSAN gives no warranty that this Message is free of any virus or
>
> > other harmful matter and accepts no liability for any loss or damage
>
> > resulting from the recipient receiving, opening or using it.
>
> >
>
> > Any views or opinions expressed in this Message are those of the
>
> > author and do not necessarily represent those of NISSAN.
>
> >
>
> > **********************************************************************
>
> > *************************************
>
> >
>
> >
>
>
>
> ***********************************************************************************************************
> Nissan Motor Manufacturing (UK) Limited is a limited liability company
> registered in England and Wales under number 01806912 with its registered
> office at Washington Road, Sunderland, Tyne and Wear SR5 3NS.
>
> CONFIDENTIALITY NOTICE AND DISCLAIMER
>
> This message including any attachments to it (Message) is private and
> confidential and may contain proprietary or legally privileged
> information.  If you have received this Message in error, please send an
> email to email.security@nissan-europe.com with a copy of this Message and
> remove it from your system. You must not, directly or indirectly, use,
> disclose, distribute, print or copy any part of this Message if you are not
> the intended recipient. The NISSAN EUROPE S.A.S group of companies (NISSAN)
> reserve the right to monitor all e-mail communications through its networks.
>
> NISSAN is not liable for the proper/complete transmission or any delay in
> the receipt of this Message .  Whilst NISSAN takes care to protect its
> systems from electronic virus attack or other harmful event, NISSAN gives
> no warranty that this Message is free of any virus or other harmful matter
> and accepts no liability for any loss or damage resulting from the
> recipient receiving, opening or using it.
>
> Any views or opinions expressed in this Message are those of the author
> and do not necessarily represent those of NISSAN.
>
> ***********************************************************************************************************
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message