Well, I have more information.
In CdiScanner I can see the classes in BeanInfo beans.
But just after the following condition is true :
} else if (ejbJar.webapp && !appInfo.webAppAlone) {
continue;
}
(CdiScanner: 118)
So the classes are not take in care...
Is it because I have a module for my persistenceUnit ? So What can I do to
include the metrics-cdi jar ?
From: Yann BLAZART
Sent: mercredi 23 décembre 2015 18:17
To: [email protected]
Subject: [PRIVATE] ApplicationComposer 7.0.0 and @Jars
Hello, I want to make unit test with metrics-cdi.
This lib have a CDI extension. So in my ApplicationComposer I have to embed it
with the @Jars.
If I make a simple test like in the simple project attached, it start, I have
a bug with a Singleton scope, this is not a problem because the Author will
correct it this evening.
But When I try to make a more complexe test in my real project, the classe
MetricProducer is not found, it seems the jar is not scanned correctly.
My "real" code :
@RunWith(ApplicationComposer.class)
@Classes(
cdi = true,
innerClassesAsBean = true,
cdiInterceptors = {RequiredNewInterceptor.class,
RequiredInterceptor.class},
value = {
LoggerProducer.class,
TxRunner.class,
HazelCastProducer.class,
ExtractIDService.class,
FeedsPUEntityManagerProducer.class,
HZCService.class,
FeedsFlowMapStore.class,
FeedsFlowRawMapStore.class,
FeedsFlowSourceMapStore.class,
GenericQStore.class,
GenericQStoreFactory.class,
FeedsQProducer.class,
DBReporterService.class,
MetricsCDIProducer.class,
ComponentIDCardProducer.class
}
)
@Jars(value = "metrics-cdi")
public class FeedsQProducerTest extends AbstractApplicationComposerHelper {
...
@Module
@PersistenceRootUrl(value = "") // must use value="" (BUG)
public Persistence generateFeedsPU() throws Exception {
return super.createPersistenceFromFile(FeedsFlow.class);
}
@Configuration
public Properties config() {
Properties properties = new Properties();
this.addDataSourceInProperties(properties, "feedsDS");
this.overridePersistenceUnitProperties("feedsPU", properties,
PersistenceUnitXmlProperties.SCHEMA_GEN_DATABASE_ACTION,
"drop-and-create");
return properties;
}
And the stack trace :
INFO - All injection points were validated successfully.
SEVERE - CDI Beans module deployment failed
org.apache.webbeans.exception.WebBeansDeploymentException: Error while sending
SystemEvent to a CDI Extension!
org.apache.webbeans.portable.events.discovery.AfterDeploymentValidationImpl@36aab105<mailto:org.apache.webbeans.portable.events.discovery.AfterDeploymentValidationImpl@36aab105>
at
org.apache.webbeans.event.NotificationManager.fireEvent(NotificationManager.java:697)
at
org.apache.webbeans.container.BeanManagerImpl.fireEvent(BeanManagerImpl.java:485)
at
org.apache.webbeans.container.BeanManagerImpl.fireLifecycleEvent(BeanManagerImpl.java:480)
at
org.apache.webbeans.config.BeansDeployer.fireAfterDeploymentValidationEvent(BeansDeployer.java:670)
at
org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:283)
at
org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:202)
at
org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:180)
at
org.apache.openejb.cdi.CdiBuilder.build(CdiBuilder.java:41)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:894)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:694)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:690)
at
org.apache.openejb.testing.ApplicationComposers.deployApp(ApplicationComposers.java:720)
at
org.apache.openejb.testing.ApplicationComposers.before(ApplicationComposers.java:384)
at
org.apache.openejb.testing.ApplicationComposers.evaluate(ApplicationComposers.java:1043)
at
org.apache.openejb.junit.DeployApplication.evaluate(DeployApplication.java:40)
at
org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at
org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at
org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at
org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at
org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at
org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at
org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
at
com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
at
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at
com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: org.apache.webbeans.exception.WebBeansException:
java.lang.reflect.InvocationTargetException
at
org.apache.webbeans.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:318)
at
org.apache.webbeans.event.NotificationManager.fireEvent(NotificationManager.java:676)
... 33 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at
org.apache.webbeans.event.ObserverMethodImpl.invoke(ObserverMethodImpl.java:347)
at
org.apache.webbeans.event.ContainerEventObserverMethodImpl.invoke(ContainerEventObserverMethodImpl.java:82)
at
org.apache.webbeans.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:312)
... 34 more
Caused by: java.lang.NullPointerException: bean parameter may not be null
at
org.apache.webbeans.util.Asserts.assertNotNull(Asserts.java:52)
at
org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:708)
at
org.apache.webbeans.container.InjectableBeanManager.getReference(InjectableBeanManager.java:165)
at
io.astefanutti.metrics.cdi.MetricsExtension.getBeanInstance(MetricsExtension.java:123)
at
io.astefanutti.metrics.cdi.MetricsExtension.configuration(MetricsExtension.java:99)
... 41 more
javax.enterprise.inject.spi.DeploymentException: couldn't start owb context
at
org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:182)
at
org.apache.openejb.cdi.CdiBuilder.build(CdiBuilder.java:41)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:894)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:694)
at
org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:690)
at
org.apache.openejb.testing.ApplicationComposers.deployApp(ApplicationComposers.java:720)
at
org.apache.openejb.testing.ApplicationComposers.before(ApplicationComposers.java:384)
at
org.apache.openejb.testing.ApplicationComposers.evaluate(ApplicationComposers.java:1043)
at
org.apache.openejb.junit.DeployApplication.evaluate(DeployApplication.java:40)
at
org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at
org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at
org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at
org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at
org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at
org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at
org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
at
com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
at
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at
com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: org.apache.openejb.OpenEJBRuntimeException:
org.apache.webbeans.exception.WebBeansDeploymentException: Error while sending
SystemEvent to a CDI Extension!
org.apache.webbeans.portable.events.discovery.AfterDeploymentValidationImpl@36aab105<mailto:org.apache.webbeans.portable.events.discovery.AfterDeploymentValidationImpl@36aab105>
at
org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:206)
at
org.apache.openejb.cdi.ThreadSingletonServiceImpl.initialize(ThreadSingletonServiceImpl.java:180)
... 27 more
Caused by: org.apache.webbeans.exception.WebBeansDeploymentException: Error
while sending SystemEvent to a CDI Extension!
org.apache.webbeans.portable.events.discovery.AfterDeploymentValidationImpl@36aab105<mailto:org.apache.webbeans.portable.events.discovery.AfterDeploymentValidationImpl@36aab105>
at
org.apache.webbeans.event.NotificationManager.fireEvent(NotificationManager.java:697)
at
org.apache.webbeans.container.BeanManagerImpl.fireEvent(BeanManagerImpl.java:485)
at
org.apache.webbeans.container.BeanManagerImpl.fireLifecycleEvent(BeanManagerImpl.java:480)
at
org.apache.webbeans.config.BeansDeployer.fireAfterDeploymentValidationEvent(BeansDeployer.java:670)
at
org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:283)
at
org.apache.openejb.cdi.OpenEJBLifecycle.startApplication(OpenEJBLifecycle.java:202)
... 28 more
Caused by: org.apache.webbeans.exception.WebBeansException:
java.lang.reflect.InvocationTargetException
at
org.apache.webbeans.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:318)
at
org.apache.webbeans.event.NotificationManager.fireEvent(NotificationManager.java:676)
... 33 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at
org.apache.webbeans.event.ObserverMethodImpl.invoke(ObserverMethodImpl.java:347)
at
org.apache.webbeans.event.ContainerEventObserverMethodImpl.invoke(ContainerEventObserverMethodImpl.java:82)
at
org.apache.webbeans.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:312)
... 34 more
Caused by: java.lang.NullPointerException: bean parameter may not be null
at
org.apache.webbeans.util.Asserts.assertNotNull(Asserts.java:52)
at
org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:708)
at
org.apache.webbeans.container.InjectableBeanManager.getReference(InjectableBeanManager.java:165)
at
io.astefanutti.metrics.cdi.MetricsExtension.getBeanInstance(MetricsExtension.java:123)
at
io.astefanutti.metrics.cdi.MetricsExtension.configuration(MetricsExtension.java:99)
... 41 more
The code in the extension :
private static <T> T getBeanInstance(BeanManager manager, Class<T> clazz) {
Bean<?> bean = manager.resolve(manager.getBeans(clazz));
return (T) manager.getReference(bean, clazz,
manager.createCreationalContext(bean));
}
bean is null...
Any idea why it works in the little project ? Or any suggestion for me to find ?
I run in debug, I saw that ApplicationComposer is looking well the Jar, but
when it comes in CdiScanner, no more beans....
Regards
This message and any attachments (the "message") is
intended solely for the intended addressees and is confidential.
If you receive this message in error,or are not the intended recipient(s),
please delete it and any copies from your systems and immediately notify
the sender. Any unauthorized view, use that does not comply with its purpose,
dissemination or disclosure, either whole or partial, is prohibited. Since the
internet
cannot guarantee the integrity of this message which may not be reliable, BNP
PARIBAS
(and its subsidiaries) shall not be liable for the message if modified, changed
or falsified.
Do not print this message unless it is necessary,consider the environment.
----------------------------------------------------------------------------------------------------------------------------------
Ce message et toutes les pieces jointes (ci-apres le "message")
sont etablis a l'intention exclusive de ses destinataires et sont confidentiels.
Si vous recevez ce message par erreur ou s'il ne vous est pas destine,
merci de le detruire ainsi que toute copie de votre systeme et d'en avertir
immediatement l'expediteur. Toute lecture non autorisee, toute utilisation de
ce message qui n'est pas conforme a sa destination, toute diffusion ou toute
publication, totale ou partielle, est interdite. L'Internet ne permettant pas
d'assurer
l'integrite de ce message electronique susceptible d'alteration, BNP Paribas
(et ses filiales) decline(nt) toute responsabilite au titre de ce message dans
l'hypothese
ou il aurait ete modifie, deforme ou falsifie.
N'imprimez ce message que si necessaire, pensez a l'environnement.