[ https://issues.apache.org/jira/browse/ISIS-597?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13830133#comment-13830133 ]
Oscar Bou commented on ISIS-597: -------------------------------- Services perfectly injected when executing the @PostConstruct method for all 3 cases: 1. @Inject 2. setXXX 3. injectXXX Thanks a lot ! :-) But I'm executing it from a test and seems that there's still no Isis Session opened. Not sure if it's a problem of "IsisSystemForTest" or an implementation detail of the recently committed work. The stack trace: Rerun com.xms.framework.monitoring.integration.tests.RealTimeIntelligentMonitoringServerTests com.xms.framework.monitoring.integration.tests.RealTimeIntelligentMonitoringServerTests java.lang.RuntimeException: java.lang.IllegalStateException: No Session opened for this thread at org.apache.isis.core.integtestsupport.IsisSystemForTest.setUpSystem(IsisSystemForTest.java:280) at com.xms.framework.monitoring.integration.MonitoringSystemInitializer.initIsft(MonitoringSystemInitializer.java:64) at com.xms.framework.monitoring.integration.MonitoringIntegTestAbstract.initClass(MonitoringIntegTestAbstract.java:14) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.lang.IllegalStateException: No Session opened for this thread at org.apache.isis.core.runtime.system.context.IsisContext.getSession(IsisContext.java:421) at org.apache.isis.core.runtime.system.context.IsisContext.getPersistenceSession(IsisContext.java:449) at org.apache.isis.core.runtime.system.context.IsisContext.getTransactionManager(IsisContext.java:478) at com.xms.framework.common.domain.model.AbstractXMSDomainObjectRepositoryAndFactory.findByPropMultiTenant(AbstractXMSDomainObjectRepositoryAndFactory.java:419) at com.xms.framework.common.domain.model.AbstractXMSDomainObjectRepositoryAndFactory.findByProp(AbstractXMSDomainObjectRepositoryAndFactory.java:413) at com.xms.framework.risk.domain.model.RiskMatrices.theISO27005_E1Matrix(RiskMatrices.java:39) at com.xms.framework.monitoring.services.RealTimeIntelligentMonitoringServer.initializeGlobals(RealTimeIntelligentMonitoringServer.java:201) at com.xms.framework.monitoring.services.RealTimeIntelligentMonitoringServer.createKnowledgeSession(RealTimeIntelligentMonitoringServer.java:177) at com.xms.framework.monitoring.services.RealTimeIntelligentMonitoringServer.singletonKnowledgeSession(RealTimeIntelligentMonitoringServer.java:48) at com.xms.framework.monitoring.services.RealTimeIntelligentMonitoringServer.init(RealTimeIntelligentMonitoringServer.java:70) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.isis.core.commons.lang.MethodExtensions.invoke(MethodExtensions.java:50) at org.apache.isis.core.metamodel.specloader.ServiceInitializer.postConstruct(ServiceInitializer.java:144) at org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.initServices(ObjectReflectorDefault.java:379) at org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.initAndValidate(ObjectReflectorDefault.java:281) at org.apache.isis.core.metamodel.specloader.ObjectReflectorDefault.init(ObjectReflectorDefault.java:246) at org.apache.isis.core.runtime.system.session.IsisSessionFactoryDefault.init(IsisSessionFactoryDefault.java:218) at org.apache.isis.core.runtime.system.IsisSystemFixturesHookAbstract.init(IsisSystemFixturesHookAbstract.java:133) at org.apache.isis.core.integtestsupport.IsisSystemForTest.setUpSystem(IsisSystemForTest.java:295) at org.apache.isis.core.integtestsupport.IsisSystemForTest.setUpSystem(IsisSystemForTest.java:278) ... 17 more > Services still not injected when entering @PostConstruct methods on a Service > ----------------------------------------------------------------------------- > > Key: ISIS-597 > URL: https://issues.apache.org/jira/browse/ISIS-597 > Project: Isis > Issue Type: Improvement > Components: Core, Objectstore: JDO > Affects Versions: objectstore-jdo-1.3.0, core-1.3.0 > Reporter: Oscar Bou > Assignee: Dan Haywood > Fix For: objectstore-jdo-1.4.0, core-1.4.0 > > > Methods annotated with @PostConstruct are invoked before their objects being > injected. > Steps to reproduce: > As per [1], create a method on a service annotated with @PostConstruct, like > this one: > @PostConstruct > public void init(final Map<?, ?> props) { > server.setGlobal("eventOccurrences", this.eventOccurrences); > > } > .... > // {{ injected: EventOccurrences > private EventOccurrences eventOccurrences; > public final void injectEventOccurrences(final EventOccurrences > eventOccurrences) { > this.eventOccurrences = eventOccurrences; > } > // }} > The problem is that when the execution arrives to: > server.setGlobal("eventOccurrences", this.eventOccurrences); > this.eventOccurrences is still null... So it has not yet been injected (or > instantiated). > [1] http://isis.apache.org/core/services/initializing-services.html -- This message was sent by Atlassian JIRA (v6.1#6144)