2010-01-14 77 views
0

根據service lifecycle上的文檔我應該能夠實現RegistryShutdownListener並整理我的資源(在這種情況下,關閉一個線程池),但是它拋出一個異常,似乎試圖重新初始化我的服務爲了執行關機監聽器!?RegistryShutdownListener拋出異常

2010-01-14 10:59:01,750 [main] ERROR org.apache.hivemind.impl.ShutdownCoordinatorImpl - Unable to shutdown <SingletonProxy for svc.MyService($MyService_1262a1db992)>: Unable to construct service svc.MyService: The HiveMind Registry has been shutdown. 
org.apache.hivemind.ApplicationRuntimeException: Unable to construct service svc.MyService: The HiveMind Registry has been shutdown. 
    at org.apache.hivemind.impl.servicemodel.AbstractServiceModelImpl.constructNewServiceImplementation(AbstractServiceModelImpl.java:166) 
    at org.apache.hivemind.impl.servicemodel.AbstractServiceModelImpl.constructServiceImplementation(AbstractServiceModelImpl.java:140) 
    at org.apache.hivemind.impl.servicemodel.SingletonServiceModel.getActualServiceImplementation(SingletonServiceModel.java:69) 
    at $$MyService_1262a1db992_1262a1db994._service($$MyService_1262a1db992_1262a1db994.java) 
    at $$MyService_1262a1db992_1262a1db994.registryDidShutdown($$MyService_1262a1db992_1262a1db994.java) 
    at $$MyService_1262a1db992_1262a1db993.registryDidShutdown($$MyService_1262a1db992_1262a1db993.java) 
    at org.apache.hivemind.impl.ShutdownCoordinatorImpl.shutdown(ShutdownCoordinatorImpl.java:97) 
    at org.apache.hivemind.impl.ShutdownCoordinatorImpl.shutdown(ShutdownCoordinatorImpl.java:80) 
    at org.apache.hivemind.impl.RegistryInfrastructureImpl.shutdown(RegistryInfrastructureImpl.java:379) 
    at org.apache.hivemind.impl.RegistryImpl.shutdown(RegistryImpl.java:94) 
    at org.apache.tapestry.ApplicationServlet.destroy(ApplicationServlet.java:322) 
    at org.apache.catalina.core.StandardWrapper.unload(StandardWrapper.java:1394) 
    ... 
Caused by: org.apache.hivemind.ApplicationRuntimeException: The HiveMind Registry has been shutdown. 
    at org.apache.hivemind.impl.RegistryInfrastructureImpl.checkShutdown(RegistryInfrastructureImpl.java:404) 
    at org.apache.hivemind.impl.RegistryInfrastructureImpl.getServicePoint(RegistryInfrastructureImpl.java:153) 
    at org.apache.hivemind.impl.ModuleImpl.getServicePoint(ModuleImpl.java:169) 
    at org.apache.hivemind.impl.InvokeFactoryServiceConstructor.setupFactoryAndParameters(InvokeFactoryServiceConstructor.java:78) 
    at org.apache.hivemind.impl.InvokeFactoryServiceConstructor.constructCoreServiceImplementation(InvokeFactoryServiceConstructor.java:55) 
    at org.apache.hivemind.impl.servicemodel.AbstractServiceModelImpl.constructCoreServiceImplementation(AbstractServiceModelImpl.java:108) 
    at org.apache.hivemind.impl.servicemodel.AbstractServiceModelImpl.constructNewServiceImplementation(AbstractServiceModelImpl.java:158) 
    ... 31 more 

Hivemodule.xml:

<service-point id="MyService" interface="package.MyService"> 
    <invoke-factory><construct class="package.MyService" /></invoke-factory> 
</service-point> 

package.MyService.java:

public class MyService implements RegistryShutdownListener 
{ 
... 
    private ExecutorService executors; 

    private void intitialise() 
    { 
... 
    executors = Executors.newFixedThreadPool(3); 
... 
    } 

... 

    @Override 
    public void registryDidShutdown() 
    { 
     if (executors.isShutdown()) 
      return; 
     executors.shutdown(); 
    } 
} 

附言:我明白,你不能引用到其他的HiveMind服務registryDidShutdown()但執行人ISN」 t a aivemind service AFAIK,它的一部分java.util.concurrent

回答

0

找到後ing this我可以看到這是一個錯誤。解決辦法是使用服務的接口(有時我會跳過),而不是在hivemodule中使用構造和接口的實現。