use of javax.enterprise.inject.se.SeContainer in project hibernate-orm by hibernate.
the class DelayedMixedAccessTest method testDelayedMixedAccess.
@Test
public void testDelayedMixedAccess() {
try (final SeContainer cdiContainer = Helper.createSeContainer()) {
BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder().build();
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder(bsr).applySetting(AvailableSettings.HBM2DDL_AUTO, Action.CREATE_DROP).applySetting(AvailableSettings.CDI_BEAN_MANAGER, cdiContainer.getBeanManager()).applySetting(AvailableSettings.DELAY_CDI_ACCESS, "true").build();
final BeanContainer beanContainer = CdiBeanContainerBuilder.fromBeanManagerReference(cdiContainer.getBeanManager(), ssr);
assertThat(beanContainer, instanceOf(CdiBeanContainerDelayedAccessImpl.class));
final ContainedBean<HostedBean> hostedBean = beanContainer.getBean(HostedBean.class, this, FallbackBeanInstanceProducer.INSTANCE);
assertThat(hostedBean, notNullValue());
assertThat(hostedBean.getBeanInstance(), notNullValue());
assertThat(hostedBean.getBeanInstance().getInjectedHostedBean(), notNullValue());
final ContainedBean<NonHostedBean> nonHostedBean = beanContainer.getBean(NonHostedBean.class, this, FallbackBeanInstanceProducer.INSTANCE);
assertThat(nonHostedBean, notNullValue());
assertThat(nonHostedBean.getBeanInstance(), notNullValue());
}
}
use of javax.enterprise.inject.se.SeContainer in project hibernate-orm by hibernate.
the class ImmediateMixedAccessTests method testImmediateMixedAccess.
@Test
public void testImmediateMixedAccess() {
try (final SeContainer cdiContainer = Helper.createSeContainer()) {
BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder().build();
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder(bsr).applySetting(AvailableSettings.HBM2DDL_AUTO, Action.CREATE_DROP).applySetting(AvailableSettings.CDI_BEAN_MANAGER, cdiContainer.getBeanManager()).build();
final BeanContainer beanContainer = CdiBeanContainerBuilder.fromBeanManagerReference(cdiContainer.getBeanManager(), ssr);
assertThat(beanContainer, instanceOf(CdiBeanContainerImmediateAccessImpl.class));
final ContainedBean<HostedBean> hostedBean = beanContainer.getBean(HostedBean.class, this, FallbackBeanInstanceProducer.INSTANCE);
assertThat(hostedBean, notNullValue());
assertThat(hostedBean.getBeanInstance(), notNullValue());
assertThat(hostedBean.getBeanInstance().getInjectedHostedBean(), notNullValue());
final ContainedBean<NonHostedBean> nonHostedBean = beanContainer.getBean(NonHostedBean.class, this, FallbackBeanInstanceProducer.INSTANCE);
assertThat(nonHostedBean, notNullValue());
assertThat(nonHostedBean.getBeanInstance(), notNullValue());
}
}
use of javax.enterprise.inject.se.SeContainer in project hibernate-orm by hibernate.
the class DelayedCdiHostedConverterTest method testIt.
@Test
public void testIt() {
MonitorBean.reset();
final SeContainerInitializer cdiInitializer = SeContainerInitializer.newInstance().disableDiscovery().addBeanClasses(MonitorBean.class, ConverterBean.class);
try (final SeContainer cdiContainer = cdiInitializer.initialize()) {
BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder().build();
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder(bsr).applySetting(AvailableSettings.HBM2DDL_AUTO, Action.CREATE_DROP).applySetting(AvailableSettings.CDI_BEAN_MANAGER, cdiContainer.getBeanManager()).applySetting(AvailableSettings.DELAY_CDI_ACCESS, "true").build();
final SessionFactoryImplementor sessionFactory;
try {
sessionFactory = (SessionFactoryImplementor) new MetadataSources(ssr).addAnnotatedClass(TheEntity.class).buildMetadata().getSessionFactoryBuilder().build();
} catch (Exception e) {
StandardServiceRegistryBuilder.destroy(ssr);
throw e;
}
// The CDI bean should not have been built immediately...
assertFalse(MonitorBean.wasInstantiated());
assertEquals(0, MonitorBean.currentFromDbCount());
assertEquals(0, MonitorBean.currentToDbCount());
try {
inTransaction(sessionFactory, session -> session.persist(new TheEntity(1, "me", 5)));
// The CDI bean should have been built on first use
assertTrue(MonitorBean.wasInstantiated());
assertEquals(0, MonitorBean.currentFromDbCount());
assertEquals(1, MonitorBean.currentToDbCount());
inTransaction(sessionFactory, session -> {
TheEntity it = session.find(TheEntity.class, 1);
assertNotNull(it);
});
assertEquals(1, MonitorBean.currentFromDbCount());
assertEquals(1, MonitorBean.currentToDbCount());
} finally {
inTransaction(sessionFactory, session -> {
session.createQuery("delete TheEntity").executeUpdate();
});
sessionFactory.close();
}
}
}
use of javax.enterprise.inject.se.SeContainer in project hibernate-orm by hibernate.
the class NonRegistryManagedDelayedCdiSupportTest method testIt.
@Test
public void testIt() {
Monitor.reset();
final TheFallbackBeanInstanceProducer fallbackBeanInstanceProducer = new TheFallbackBeanInstanceProducer();
final NonRegistryManagedBeanConsumingIntegrator beanConsumingIntegrator = new NonRegistryManagedBeanConsumingIntegrator(fallbackBeanInstanceProducer);
final SeContainerInitializer cdiInitializer = SeContainerInitializer.newInstance().disableDiscovery().addBeanClasses(TheApplicationScopedBean.class).addBeanClasses(TheNamedApplicationScopedBean.class, TheMainNamedApplicationScopedBeanImpl.class, TheAlternativeNamedApplicationScopedBeanImpl.class).addBeanClasses(TheSharedApplicationScopedBean.class).addBeanClasses(TheDependentBean.class).addBeanClasses(TheNamedDependentBean.class, TheMainNamedDependentBeanImpl.class, TheAlternativeNamedDependentBeanImpl.class).addBeanClasses(TheNestedDependentBean.class).addBeanClasses(TheNonHibernateBeanConsumer.class);
try (final SeContainer cdiContainer = cdiInitializer.initialize()) {
// Simulate CDI bean consumers outside of Hibernate ORM
Instance<TheNonHibernateBeanConsumer> nonHibernateBeanConsumerInstance = cdiContainer.getBeanManager().createInstance().select(TheNonHibernateBeanConsumer.class);
nonHibernateBeanConsumerInstance.get();
// Expect the shared bean to have been instantiated already, but only that one
assertEquals(0, Monitor.theApplicationScopedBean().currentInstantiationCount());
assertEquals(0, Monitor.theMainNamedApplicationScopedBean().currentInstantiationCount());
assertEquals(0, Monitor.theAlternativeNamedApplicationScopedBean().currentInstantiationCount());
assertEquals(1, Monitor.theSharedApplicationScopedBean().currentInstantiationCount());
assertEquals(0, Monitor.theDependentBean().currentInstantiationCount());
assertEquals(0, Monitor.theMainNamedDependentBean().currentInstantiationCount());
assertEquals(0, Monitor.theAlternativeNamedDependentBean().currentInstantiationCount());
assertEquals(0, fallbackBeanInstanceProducer.currentInstantiationCount());
assertEquals(0, fallbackBeanInstanceProducer.currentNamedInstantiationCount());
// Nested dependent bean: 1 instance per bean that depends on it
assertEquals(1, Monitor.theNestedDependentBean().currentInstantiationCount());
try (SessionFactoryImplementor sessionFactory = buildSessionFactory(cdiContainer, beanConsumingIntegrator)) {
// Here, the NonRegistryManagedBeanConsumingIntegrator has just been integrated and has requested beans
// See NonRegistryManagedBeanConsumingIntegrator for a detailed list of requested beans
beanConsumingIntegrator.ensureInstancesInitialized();
// Application scope: maximum 1 instance as soon as at least one was requested
assertEquals(1, Monitor.theApplicationScopedBean().currentInstantiationCount());
assertEquals(1, Monitor.theMainNamedApplicationScopedBean().currentInstantiationCount());
assertEquals(0, Monitor.theAlternativeNamedApplicationScopedBean().currentInstantiationCount());
assertEquals(1, Monitor.theSharedApplicationScopedBean().currentInstantiationCount());
// Dependent scope: 1 instance per bean we requested explicitly
assertEquals(2, Monitor.theDependentBean().currentInstantiationCount());
assertEquals(2, Monitor.theMainNamedDependentBean().currentInstantiationCount());
assertEquals(0, Monitor.theAlternativeNamedDependentBean().currentInstantiationCount());
// Reflection-instantiated: 1 instance per bean we requested explicitly
assertEquals(2, fallbackBeanInstanceProducer.currentInstantiationCount());
assertEquals(2, fallbackBeanInstanceProducer.currentNamedInstantiationCount());
// Nested dependent bean: 1 instance per bean that depends on it
assertEquals(7, Monitor.theNestedDependentBean().currentInstantiationCount());
// Expect one PostConstruct call per CDI bean instance
assertEquals(1, Monitor.theApplicationScopedBean().currentPostConstructCount());
assertEquals(1, Monitor.theMainNamedApplicationScopedBean().currentPostConstructCount());
assertEquals(0, Monitor.theAlternativeNamedApplicationScopedBean().currentPostConstructCount());
assertEquals(1, Monitor.theSharedApplicationScopedBean().currentPostConstructCount());
assertEquals(2, Monitor.theDependentBean().currentPostConstructCount());
assertEquals(2, Monitor.theMainNamedDependentBean().currentPostConstructCount());
assertEquals(0, Monitor.theAlternativeNamedDependentBean().currentPostConstructCount());
assertEquals(7, Monitor.theNestedDependentBean().currentPostConstructCount());
// Expect no PreDestroy call yet
assertEquals(0, Monitor.theApplicationScopedBean().currentPreDestroyCount());
assertEquals(0, Monitor.theMainNamedApplicationScopedBean().currentPreDestroyCount());
assertEquals(0, Monitor.theAlternativeNamedApplicationScopedBean().currentPreDestroyCount());
assertEquals(0, Monitor.theSharedApplicationScopedBean().currentPreDestroyCount());
assertEquals(0, Monitor.theDependentBean().currentPreDestroyCount());
assertEquals(0, Monitor.theMainNamedDependentBean().currentPreDestroyCount());
assertEquals(0, Monitor.theAlternativeNamedDependentBean().currentPreDestroyCount());
assertEquals(0, Monitor.theNestedDependentBean().currentPreDestroyCount());
}
// Here, the NonRegistryManagedBeanConsumingIntegrator has just been disintegrated and has released beans
// release() should have an effect on exclusively used application-scoped beans
assertEquals(1, Monitor.theApplicationScopedBean().currentPreDestroyCount());
assertEquals(1, Monitor.theMainNamedApplicationScopedBean().currentPreDestroyCount());
assertEquals(0, Monitor.theAlternativeNamedApplicationScopedBean().currentPreDestroyCount());
// release() should have no effect on shared application-scoped beans (they will be released when they are no longer used)
assertEquals(0, Monitor.theSharedApplicationScopedBean().currentPreDestroyCount());
// release() should have an effect on dependent-scoped beans
assertEquals(2, Monitor.theDependentBean().currentPreDestroyCount());
assertEquals(2, Monitor.theMainNamedDependentBean().currentPreDestroyCount());
assertEquals(0, Monitor.theAlternativeNamedDependentBean().currentPreDestroyCount());
// The nested dependent bean instances should have been destroyed along with the beans that depend on them
// (the instances used in application-scoped beans should not have been destroyed)
assertEquals(6, Monitor.theNestedDependentBean().currentPreDestroyCount());
}
// After the CDI context has ended, PreDestroy should have been called on every created bean
// (see the assertions about instantiations above for an explanation of the expected counts)
assertEquals(1, Monitor.theApplicationScopedBean().currentPreDestroyCount());
assertEquals(1, Monitor.theMainNamedApplicationScopedBean().currentPreDestroyCount());
assertEquals(0, Monitor.theAlternativeNamedApplicationScopedBean().currentPreDestroyCount());
assertEquals(1, Monitor.theSharedApplicationScopedBean().currentPreDestroyCount());
assertEquals(2, Monitor.theDependentBean().currentPreDestroyCount());
assertEquals(2, Monitor.theMainNamedDependentBean().currentPreDestroyCount());
assertEquals(0, Monitor.theAlternativeNamedDependentBean().currentPreDestroyCount());
assertEquals(7, Monitor.theNestedDependentBean().currentPreDestroyCount());
}
use of javax.enterprise.inject.se.SeContainer in project hibernate-orm by hibernate.
the class ValidExtendedCdiSupportTest method testIt.
@Test
public void testIt() {
Monitor.reset();
final ExtendedBeanManagerImpl standIn = new ExtendedBeanManagerImpl();
BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder().build();
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder(bsr).applySetting(AvailableSettings.HBM2DDL_AUTO, Action.CREATE_DROP).applySetting(AvailableSettings.CDI_BEAN_MANAGER, standIn).build();
final SessionFactoryImplementor sessionFactory;
try {
sessionFactory = (SessionFactoryImplementor) new MetadataSources(ssr).addAnnotatedClass(TheEntity.class).buildMetadata().getSessionFactoryBuilder().build();
} catch (Exception e) {
StandardServiceRegistryBuilder.destroy(ssr);
throw e;
}
try {
// The CDI bean should not be built immediately...
assertFalse(Monitor.wasInstantiated());
assertEquals(0, Monitor.currentCount());
// But now lets initialize CDI and do the callback
final SeContainerInitializer cdiInitializer = SeContainerInitializer.newInstance().disableDiscovery().addBeanClasses(Monitor.class, TheListener.class);
try (final SeContainer cdiContainer = cdiInitializer.initialize()) {
standIn.beanManagerReady(cdiContainer.getBeanManager());
// at this point the bean should have been accessed
assertTrue(Monitor.wasInstantiated());
assertEquals(0, Monitor.currentCount());
try {
inTransaction(sessionFactory, session -> session.persist(new TheEntity(1)));
inTransaction(sessionFactory, session -> {
TheEntity it = session.find(TheEntity.class, 1);
assertNotNull(it);
});
} finally {
inTransaction(sessionFactory, session -> {
session.createQuery("delete TheEntity").executeUpdate();
});
}
}
} finally {
sessionFactory.close();
}
}
Aggregations