uklance / tapestry-cometd

A push library for Tapestry5 based on CometD
17 stars 3 forks source link

CometD Server is failing to load during testing. #61

Closed ebtalley closed 10 years ago

ebtalley commented 10 years ago

Im using Appfuse-Tapestry 2.2.1 as the baseline system and have dropped the cometd dependency into maven even though I have integrated as of yet.

this is using the pagetester functionality from tapestry-test

Test:

relevant:

Exception constructing service 'CometdHttpServletRequestFilter': Error invoking constructor public org.lazan.t5.cometd.services.internal.CometdHttpServletRequestFilterImpl(org.apache.tapestry5.ioc.services.RegistryShutdownHub,org.apache.tapestry5.services.ApplicationGlobals,java.lang.String,java.util.Map): javax.servlet.ServletException: 

full stack:

INFO [MLog-Init-Reporter] MLog.run(124) | MLog clients using log4j logging.
INFO [main] C3P0Registry.banner(216) | Initializing c3p0-0.9.5-pre6 [built 07-December-2013 02:33:38 +0000; debug? true; trace: 10]
INFO [main] AbstractPoolBackedDataSource.getPoolManager(522) | Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, dataSourceName -> z8kfsx8z1n3mjgcgj5h65|1b8b79b, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> org.postgresql.Driver, extensions -> {}, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> z8kfsx8z1n3mjgcgj5h65|1b8b79b, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:postgresql://localhost/portal?ApplicationName=portal-.71, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 1800, maxIdleTimeExcessConnections -> 300, maxPoolSize -> 50, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 20, numHelperThreads -> 3, preferredTestQuery -> null, privilegeSpawnedThreads -> false, properties -> {user=******, password=******}, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, userOverrides -> {}, usesTraditionalReflectiveProxies -> false ]
ERROR [main] CometdHttpServletRequestFilter.createObject(64) | Construction of service CometdHttpServletRequestFilter failed: Error invoking constructor public org.lazan.t5.cometd.services.internal.CometdHttpServletRequestFilterImpl(org.apache.tapestry5.ioc.services.RegistryShutdownHub,org.apache.tapestry5.services.ApplicationGlobals,java.lang.String,java.util.Map): javax.servlet.ServletException: java.lang.NullPointerException
org.apache.tapestry5.ioc.internal.OperationException: Error invoking constructor public org.lazan.t5.cometd.services.internal.CometdHttpServletRequestFilterImpl(org.apache.tapestry5.ioc.services.RegistryShutdownHub,org.apache.tapestry5.services.ApplicationGlobals,java.lang.String,java.util.Map): javax.servlet.ServletException: java.lang.NullPointerException
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logAndRethrow(OperationTrackerImpl.java:121)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:88)
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
    at org.apache.tapestry5.ioc.internal.util.ConstructionPlan.createObject(ConstructionPlan.java:60)
    at org.apache.tapestry5.ioc.internal.ConstructorServiceCreator.createObject(ConstructorServiceCreator.java:61)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49)
    at org.apache.tapestry5.ioc.internal.SingletonServiceLifecycle.createService(SingletonServiceLifecycle.java:29)
    at org.apache.tapestry5.ioc.internal.LifecycleWrappedServiceCreator.createObject(LifecycleWrappedServiceCreator.java:46)
    at org.apache.tapestry5.ioc.internal.AdvisorStackBuilder.createObject(AdvisorStackBuilder.java:63)
    at org.apache.tapestry5.ioc.internal.InterceptorStackBuilder.createObject(InterceptorStackBuilder.java:54)
    at org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper.createObject(RecursiveServiceCreationCheckWrapper.java:60)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49)
    at org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.obtainObjectFromCreator(JustInTimeObjectCreator.java:66)
    at org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createObject(JustInTimeObjectCreator.java:54)
    at $CometdHttpServletRequestFilter_1b22240e97.delegate(Unknown Source)
    at $CometdHttpServletRequestFilter_1b22240e97.getBayeuxServer(Unknown Source)
    at org.lazan.t5.cometd.services.CometdModule.buildBayeuxServer(CometdModule.java:64)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.tapestry5.ioc.internal.util.MethodInvoker.invoke(MethodInvoker.java:50)
    at org.apache.tapestry5.ioc.internal.util.LoggingInvokableWrapper.invoke(LoggingInvokableWrapper.java:42)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
    at org.apache.tapestry5.ioc.internal.util.ConstructionPlan.createObject(ConstructionPlan.java:60)
    at org.apache.tapestry5.ioc.internal.ServiceBuilderMethodInvoker.createObject(ServiceBuilderMethodInvoker.java:60)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49)
    at org.apache.tapestry5.ioc.internal.SingletonServiceLifecycle.createService(SingletonServiceLifecycle.java:29)
    at org.apache.tapestry5.ioc.internal.LifecycleWrappedServiceCreator.createObject(LifecycleWrappedServiceCreator.java:46)
    at org.apache.tapestry5.ioc.internal.AdvisorStackBuilder.createObject(AdvisorStackBuilder.java:63)
    at org.apache.tapestry5.ioc.internal.InterceptorStackBuilder.createObject(InterceptorStackBuilder.java:54)
    at org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper.createObject(RecursiveServiceCreationCheckWrapper.java:60)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49)
    at org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.obtainObjectFromCreator(JustInTimeObjectCreator.java:66)
    at org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createObject(JustInTimeObjectCreator.java:54)
    at $BayeuxServer_1b22240e94.delegate(Unknown Source)
    at $BayeuxServer_1b22240e94.addListener(Unknown Source)
    at org.lazan.t5.cometd.services.internal.PushManagerImpl.<init>(PushManagerImpl.java:32)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.apache.tapestry5.ioc.internal.util.ConstructorInvoker.invoke(ConstructorInvoker.java:48)
    at org.apache.tapestry5.ioc.internal.util.LoggingInvokableWrapper.invoke(LoggingInvokableWrapper.java:42)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
    at org.apache.tapestry5.ioc.internal.util.ConstructionPlan.createObject(ConstructionPlan.java:60)
    at org.apache.tapestry5.ioc.internal.ConstructorServiceCreator.createObject(ConstructorServiceCreator.java:61)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49)
    at org.apache.tapestry5.ioc.internal.SingletonServiceLifecycle.createService(SingletonServiceLifecycle.java:29)
    at org.apache.tapestry5.ioc.internal.LifecycleWrappedServiceCreator.createObject(LifecycleWrappedServiceCreator.java:46)
    at org.apache.tapestry5.ioc.internal.AdvisorStackBuilder.createObject(AdvisorStackBuilder.java:63)
    at org.apache.tapestry5.ioc.internal.InterceptorStackBuilder.createObject(InterceptorStackBuilder.java:54)
    at org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper.createObject(RecursiveServiceCreationCheckWrapper.java:60)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
    at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
    at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
    at org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49)
    at org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.obtainObjectFromCreator(JustInTimeObjectCreator.java:66)
    at org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createObject(JustInTimeObjectCreator.java:54)
    at org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.eagerLoadService(JustInTimeObjectCreator.java:86)
    at org.apache.tapestry5.ioc.internal.RegistryImpl.performRegistryStartup(RegistryImpl.java:323)
    at org.apache.tapestry5.ioc.internal.RegistryWrapper.performRegistryStartup(RegistryWrapper.java:80)
    at org.apache.tapestry5.test.PageTester.<init>(PageTester.java:118)
    at com.theagategroup.webapp.pages.BasePageTestCase$1.<init>(BasePageTestCase.java:96)
    at com.theagategroup.webapp.pages.BasePageTestCase.onSetUp(BasePageTestCase.java:96)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    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.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:232)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:175)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.RuntimeException: Error invoking constructor public org.lazan.t5.cometd.services.internal.CometdHttpServletRequestFilterImpl(org.apache.tapestry5.ioc.services.RegistryShutdownHub,org.apache.tapestry5.services.ApplicationGlobals,java.lang.String,java.util.Map): javax.servlet.ServletException: java.lang.NullPointerException
    at org.apache.tapestry5.ioc.internal.util.ConstructorInvoker.invoke(ConstructorInvoker.java:57)
    at org.apache.tapestry5.ioc.internal.util.LoggingInvokableWrapper.invoke(LoggingInvokableWrapper.java:42)
    at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
    ... 121 more
Caused by: java.lang.RuntimeException: javax.servlet.ServletException: java.lang.NullPointerException
    at org.lazan.t5.cometd.services.internal.ServletHttpServletRequestFilter.<init>(ServletHttpServletRequestFilter.java:43)
    at org.lazan.t5.cometd.services.internal.CometdHttpServletRequestFilterImpl.<init>(CometdHttpServletRequestFilterImpl.java:32)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.apache.tapestry5.ioc.internal.util.ConstructorInvoker.invoke(ConstructorInvoker.java:48)
    ... 123 more
Caused by: javax.servlet.ServletException: java.lang.NullPointerException
    at org.cometd.server.CometdServlet.init(CometdServlet.java:134)
    at javax.servlet.GenericServlet.init(GenericServlet.java:244)
    at org.lazan.t5.cometd.services.internal.ServletHttpServletRequestFilter.<init>(ServletHttpServletRequestFilter.java:35)
    ... 129 more
Caused by: java.lang.NullPointerException
    at org.cometd.server.CometdServlet.init(CometdServlet.java:75)
    ... 131 more
ERROR [main] BayeuxServer.createObject(64) | Construction of service BayeuxServer failed: Error invoking method public static org.cometd.bayeux.server.BayeuxServer org.lazan.t5.cometd.services.CometdModule.buildBayeuxServer(org.lazan.t5.cometd.services.CometdHttpServletRequestFilter,org.lazan.t5.cometd.services.Authorizers,org.lazan.t5.cometd.services.SubscriptionListeners,org.lazan.t5.cometd.services.CometdGlobals): Exception constructing service 'CometdHttpServletRequestFilter': Error invoking constructor public org.lazan.t5.cometd.services.internal.CometdHttpServletRequestFilterImpl(org.apache.tapestry5.ioc.services.RegistryShutdownHub,org.apache.tapestry5.services.ApplicationGlobals,java.lang.String,java.util.Map): javax.servlet.ServletException: java.lang.NullPointerException
java.lang.RuntimeException: Error invoking method public static org.cometd.bayeux.server.BayeuxServer org.lazan.t5.cometd.services.CometdModule.buildBayeuxServer(org.lazan.t5.cometd.services.CometdHttpServletRequestFilter,org.lazan.t5.cometd.services.Authorizers,org.lazan.t5.cometd.services.SubscriptionListeners,org.lazan.t5.cometd.services.CometdGlobals): Exception constructing service 'CometdHttpServletRequestFilter': Error invoking constructor public org.lazan.t5.cometd.services.internal.CometdHttpServletRequestFilterImpl(org.apache.tapestry5.ioc.services.RegistryShutdownHub,org.apache.tapestry5.services.ApplicationGlobals,java.lang.String,java.util.Map): javax.servlet.ServletException: java.lang.NullPointerException
uklance commented 10 years ago

Hi, which version of tapestry-cometd are you using?

ebtalley commented 10 years ago
<repository>
       <id>tapestry-cometd</id>
       <url>https://github.com/uklance/releases/raw/master</url>
</repository>
<dependency>
          <groupId>org.lazan</groupId>
            <artifactId>tapestry-cometd</artifactId>
            <version>0.9.18</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tapestry</groupId>
                    <artifactId>tapestry-core</artifactId>
                </exclusion>
         </exclusions>
</dependency>

Regarding my exclusion of tapestry-core. I'm providing my own (almost) stock version of core. all tests pass so I consider it to be a drop in replacement.

uklance commented 10 years ago

It seems like the ServletContext is null. My guess is that the PageTester has not properly mocked ApplicationGlobals.getServletContext()

You might be able to quick fix this by calling ApplicationGlobals.storeServletContext(ServletContext) with a mock ServletContext.

Please report back here with your findings so that I can close this bug and raise a jira agains tapestry-test if need be.

uklance commented 10 years ago

eg:

import org.mockito.Mockito.*;

ServletContext servletContext = Mockito.mock(ServletContext.class);
final Map<String, Object> attributes = new HashMap<String, Object>();
when(servletContext.getAttribute(anyString())).thenAnswer(new Answer() {
   Object answer(InvocationOnMock invocation) {
      return attributes.get((String) invocation.getArguments()[0]);
   }
});
when(servletContext.setAttribute(anyString(), any())).thenAnswer(new Answer() {
   Object answer(InvocationOnMock invocation) {
      attributes.put((String) invocation.getArguments()[0], invocation.getArguments()[1]);
      return null;
   }
});
pageTester.getService(ApplicationGlobals.class).storeServletContext(servletContext);