RegistryShutdownListener는 예외를 던졌습니다
문제
문서에 achord 서비스 수명주기 RegistryShutdownListener를 구현하고 내 리소스를 정리할 수 있어야합니다 (이 경우 ThreadPool을 종료) 예외를 던지고 셧다운 리스너를 수행하기 위해 내 서비스를 다시 시작하려고하는 것 같습니다!?
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()
그러나 집행자들은 Hivemind 서비스 Afaik이 아니며, 그것은 그 일부입니다. java.util.concurrent
해결책
찾은 후 이것 버그라는 것을 알 수 있습니다. 작업은 HiveModule의 구성 및 인터페이스 모두에 구현을 사용하는 대신 서비스에 인터페이스를 사용하는 것입니다 (때때로 건너 뛰는 것).
제휴하지 않습니다 StackOverflow