Thanks a lot.
I've solved a problem using AssistedInjection and PrivateModule.
четверг, 19 сентября 2013 г., 21:52:01 UTC+3 пользователь scl написал:
>
> If I understood your question correctly, the answer is no. There is no
> way to do this.
>
> But to make sure I didn't miss read your question:
> - AbstractRepo requires MTUnitOfWork
> - MTUnitOfWork requires MTPersistServiceImpl
> - MTPersistServiceImpl requires @Named(PersistConsts.JPA_UNIT_NAME)
>
> What you want is:
> - guice should inject a different MTUnitOfWork with a different
> MTPersistServiceImpl depending on the concrete class of AbstractRepo.
>
> guice does not offer this kind of decision making.
>
> What you could do:
> Use AssistedInjection to pass the JpaUnitName from the AbstractRepo
> instance to the MTUnitOfWork and from there to the MTPersistService.
>
>
>
>
> On 09/19/2013 04:32 PM, Alex Khomchenko wrote:
> > Hello everyone.
> >
> > Sorry for my bad English.
> >
> > I have a problem with injection condition. There is custom made
> > MultitenancyPersistence and I want to use different persistence units
> > for different repository.
> >
> > Here is my code:
> >
> > I've got:
> >
> > public class MultiTenantPersistServiceImpl implements PersistService {
> >
> > ...
> >
> > @Inject
> > public
> > MultiTenantPersistServiceImpl(@Named(PersistConsts.JPA_UNIT_NAME)
> > String jpaUnitName) { ... }
> >
> > ...
> >
> > }
> >
> > and:
> >
> > public class MultiTenantUnitOfWorkImpl implements UnitOfWork,
> > EntityManagerProvider {
> >
> > ...
> >
> > @Inject
> > public MultiTenantUnitOfWorkImpl(MultiTenantPersistServiceImpl
> > persistService) {}
> >
> > ...
> >
> > }
> >
> > which is used throw Provider at repo:
> >
> > public abstract class AbstractRepo {
> > ...
> >
> > @Inject
> > private EntityManagerProvider entityManagerProvider;
> >
> >
> > protected EntityManager getEntityManager() {
> > return entityManagerProvider.get();
> > }
> >
> > ...
> > }
> >
> > and extended by:
> >
> > public abstract class AbstractFirstDbRepo extends AbstractRepo { ... }
> > public abstract class AbstractSecondDbRepo extends AbstractRepo { ... }
> >
> > and binded at module:
> >
> > public class MultiTenantPersistModule extends PersistModule {
> > ...
> >
> > @Override
> > protected void configurePersistence() {
> > bind(PersistService.class).to(MultiTenantPersistServiceImpl.class);
> > ThrowingProviderBinder.create(binder()).
> > bind(EntityManagerFactoryProvider.class, EntityManagerFactory.class).
> > to(MultiTenantPersistServiceImpl.class);
> >
> > bind(UnitOfWork.class).to(MultiTenantUnitOfWorkImpl.class);
> > ThrowingProviderBinder.create(binder()).
> > bind(EntityManagerProvider.class, EntityManager.class).
> > to(MultiTenantUnitOfWorkImpl.class);
> >
> > ...
> >
> > }
> >
> > So, at last, my question.
> > What is the simpliest way to specify jpaUnitName at
> > MultiTenantPersistServiceImpl depending on Repo (AbstractFirstDbRepo
> > or AbstractSecondDbRepo )?
> >
> > Thanks a lot.
> > --
> > You received this message because you are subscribed to the Google
> > Groups "google-guice" group.
> > To unsubscribe from this group and stop receiving emails from it, send
> > an email to [email protected] <javascript:>.
> > To post to this group, send email to
> > [email protected]<javascript:>.
>
> > Visit this group at http://groups.google.com/group/google-guice.
> > For more options, visit https://groups.google.com/groups/opt_out.
>
>
--
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/groups/opt_out.