Write a singleton MdbDelegate which has a onMessage methid and your mdb get
MdbDelegate injected and mdb onMessage calls delegate.onMessage.

This way you get depends on working.
Le 10 mars 2015 11:55, "Thiago Veronezi" <[email protected]> a écrit :

> Oh I see... maybe something inside the dao wasn't initialized/injected?
>
> []s,
> Thiago.
>
>
> On Tue, Mar 10, 2015 at 6:15 AM, Matej <[email protected]> wrote:
>
> > UniversalConfigurationDao is a Stateless Bean.
> >
> > BRM
> >
> >
> > 2015-03-10 10:51 GMT+01:00 Thiago Veronezi <[email protected]>:
> >
> > > Hi,
> > >
> > > Adding  @DependsOn("UniversalConfigurationDao") in your singleton bean
> > does
> > > not fix the problem?
> > >
> > > @Singleton
> > > @Startup
> > > @ConcurrencyManagement(ConcurrencyManagementType.BEAN)
> > > @DependsOn("UniversalConfigurationDao")
> > > public class UniversalConfigurationService {
> > >
> > >     @Inject
> > >     UniversalConfigurationDao configDao;
> > >
> > >     private ConcurrentHashMap<Integer, ConcurrentHashMap<Integer,
> > > ConfigValue>> configCache = new ConcurrentHashMap<>();
> > >
> > >     @PostConstruct
> > >     public void init() {
> > >         this.configCache = configDao.getAllConfigurations();
> > >     }
> > > }
> > >
> > > []s,
> > > Thiago.
> > >
> > >
> > > On Tue, Mar 10, 2015 at 4:14 AM, Matej <[email protected]> wrote:
> > >
> > > > Hi Romain.
> > > >
> > > > I don't really understand your solution. Can you please provide me
> with
> > > > simple exmaple.... So I'll understand.
> > > >
> > > > BR
> > > >
> > > > MAtej
> > > >
> > > > 2015-03-09 22:59 GMT+01:00 Romain Manni-Bucau <[email protected]
> >:
> > > >
> > > > > Why not using a dependson singleton as delegate in your mdb as
> > > > mentionned?
> > > > > Fast and reliable  as fix imo
> > > > > Le 9 mars 2015 22:13, "Matej" <[email protected]> a écrit :
> > > > >
> > > > > > Would something like that help. That's probably something what
> > David
> > > > > meant.
> > > > > >
> > > > > > @Singleton
> > > > > > @Startup
> > > > > > @Lock(LockType.READ)
> > > > > > @ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
> > > > > > public class UniversalConfigurationService {
> > > > > >
> > > > > >     @Inject
> > > > > >     UniversalConfigurationDao configDao;
> > > > > >
> > > > > >     private ConcurrentHashMap<Integer, ConcurrentHashMap<Integer,
> > > > > > ConfigValue>> configCache = new ConcurrentHashMap<>();
> > > > > >
> > > > > >     @PostConstruct
> > > > > > @Lock(LockType.WRITE) //probably not nedded right?
> > > > > >     public void init() {
> > > > > >         this.configCache = configDao.getAllConfigurations();
> > > > > >     }
> > > > > > }
> > > > > >
> > > > > > 2015-03-09 19:10 GMT+01:00 Matej <[email protected]>:
> > > > > >
> > > > > > > I added a short stacktrace. Will try to provide better one.
> > Somehow
> > > > is
> > > > > > > seems, like the system is not fully initialized, like some
> > > injection
> > > > > > > missing.. Without the (configurationService.getBoolean,
> > everything
> > > > > loads
> > > > > > > normally. Is the MDB system initialized before EJBs?
> > > > > > >
> > > > > > >
> > > > > > > Here is the Singleton snippet:
> > > > > > > @Singleton
> > > > > > > @Startup
> > > > > > > @ConcurrencyManagement(ConcurrencyManagementType.BEAN)
> > > > > > > public class UniversalConfigurationService {
> > > > > > >
> > > > > > >     @Inject
> > > > > > >     UniversalConfigurationDao configDao;
> > > > > > >
> > > > > > >     private ConcurrentHashMap<Integer,
> ConcurrentHashMap<Integer,
> > > > > > > ConfigValue>> configCache = new ConcurrentHashMap<>();
> > > > > > >
> > > > > > >     @PostConstruct
> > > > > > >     public void init() {
> > > > > > >         this.configCache = configDao.getAllConfigurations();
> > > > > > >     }
> > > > > > > }
> > > > > > >
> > > > > > > and here te MDB
> > > > > > >
> > > > > > > MessageDriven(activationConfig = {
> > > > > > >     @ActivationConfigProperty(propertyName = "destinationType",
> > > > > > > propertyValue = "javax.jms.Queue"),
> > > > > > >     @ActivationConfigProperty(propertyName = "destination",
> > > > > propertyValue
> > > > > > > = "EtaStatisticalRes")})
> > > > > > > @DependsOn("UniversalConfigurationService")
> > > > > > > public class EtaStatisticalResHandler implements
> MessageListener
> > {
> > > > > > >
> > > > > > >     @Inject
> > > > > > >     public Logger logger;
> > > > > > >
> > > > > > >     @Inject
> > > > > > >     UniversalConfigurationService configurationService;
> > > > > > >
> > > > > > >     @Override
> > > > > > >     public void onMessage(Message message) {
> > > > > > >
> > > > > > >         if (configurationService.getBoolean(ETA.getCode(),
> > > > > > > EMBEDDED_ETA_REPORTING.getCode())) {
> > > > > > >             return;
> > > > > > >         }
> > > > > > > }
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > 2015-03-08 5:31 GMT+01:00 David Blevins <
> [email protected]
> > >:
> > > > > > >
> > > > > > >> The @DependsOn annotation only works for other @Singleton
> beans.
> > > > > > >>
> > > > > > >> Definitely use CONTAINER concurrency.  Understand that this
> code
> > > is
> > > > > just
> > > > > > >> a plain jvm ReentrantReadWriteLock under the covers.  It would
> > be
> > > > hard
> > > > > > to
> > > > > > >> do much better.
> > > > > > >>
> > > > > > >>  -
> > > > > > >>
> > > > > >
> > > > >
> > > >
> > >
> >
> http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html
> > > > > > >>
> > > > > > >> All methods annotated with an @Lock(READ) acquire a read lock.
> > > All
> > > > > > >> methods annotated with @Lock(WRITE) acquire a write lock.
> > > > > > >>
> > > > > > >> That said, if you're already doing the configuration
> > > initialization
> > > > in
> > > > > > >> the @PostConstruct of the @Singleton, this issue shouldn't
> > exist.
> > > > > > >>
> > > > > > >> Can you paste the stacktrace of your NPE?
> > > > > > >>
> > > > > > >>
> > > > > > >> --
> > > > > > >> David Blevins
> > > > > > >> http://twitter.com/dblevins
> > > > > > >> http://www.tomitribe.com
> > > > > > >>
> > > > > > >> On Mar 7, 2015, at 3:51 AM, Matej <[email protected]> wrote:
> > > > > > >>
> > > > > > >> > Hi everybody.
> > > > > > >> >
> > > > > > >> > We have an annoying problem on our production system. We
> have
> > an
> > > > > > >> > Configuration Singleton which reads config things from DB.
> > Then
> > > in
> > > > > one
> > > > > > >> MDB
> > > > > > >> > we inject this Singleton to control operation based on
> > configs.
> > > > Our
> > > > > > >> problem
> > > > > > >> > is that the system is quite heavely loadded and while the
> > system
> > > > > > >> startups
> > > > > > >> > already MDB recievs onMessage events while the Singleton
> still
> > > > > > >> initliazes.
> > > > > > >> > Which produces some NPEs and system doesn't boot.
> > > > > > >> >
> > > > > > >> > The depneds on annotation seems not to help. We are doing
> BEAN
> > > > > > >> conncurency
> > > > > > >> > management could this be the issue? And the Singleton has an
> > > > > > >> Postconstruct
> > > > > > >> > annotation.
> > > > > > >> >
> > > > > > >> > Anyone has any pattern or tips how to handle this type of
> > > > scenario.
> > > > > > >> >
> > > > > > >> > BR
> > > > > > >> >
> > > > > > >> > Matej
> > > > > > >>
> > > > > > >>
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to