[ 
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)

Reply via email to