onApplicationEnd - CF на самом деле закрывается?

Я должен использовать onApplicationEnd() как часть Application.cfc для выполнения запроса к стороннему Java возражают для закрытия соединения с другим устройством в сети.

Код я работал отлично, если я называю его как нормальный запрос, но когда я помещаю его в onApplicationEnd() метод я сталкиваюсь с некоторыми ошибками. Эти ошибки предполагают, что CF мог бы на самом деле закрываться уже до такой степени, когда, я не могу получить доступ к этим сторонним классам Java.

Код:

    
    

    

    
    


    

        
            
        
            
        

        
        

            

            
            <

        
            
        

            

                

            

        
    


Строка для закрытия соединения на моем объекте перестала работать с сообщением: 'java.lang. IllegalStateException: происходящее Завершение работы'.

Вот полные журналы для одного выполнения:

"Information","Thread-8","10/23/09","09:05:54",,"*** [Application.cfc]  - **** START RUN 

"Information","Thread-8","10/23/09","09:05:54",,"*** [Application.cfc]  - 09:05:54 - onApplicationEnd() called "

"Information","Thread-8","10/23/09","09:05:54",,"*** [Application.cfc]  - 09:05:54 - ARGUMENTS.appScope is defined"

"Information","Thread-8","10/23/09","09:05:54",,"*** [Application.cfc]  - 09:05:54 - onApplicationEnd() - crypto object exists in app scope"

"Information","Thread-8","10/23/09","09:05:54",,"*** [Application.cfc]  - 09:05:54 - onApplicationEnd() - Error - Shutdown in progress"

"Information","Thread-8","10/23/09","09:05:55",,"*** [Application.cfc]  - 09:05:55 - onApplicationEnd() ended "

Есть ли ограничения на то, в чем я могу выполнить onApplicationEnd() и раз так есть ли вокруг какая-либо работа?

Я использую CF 8 (8,0,1,195765) Developer Edition на машине Windows XP.

Кроме того, если я выполняю CF в консоли и нажимаю CTRL-C, я вижу это, но я также вижу это поведение, если я работаю cfstop.

Заранее большое спасибо!

Править: Некоторые другие имели, это выходит здесь, но никакие решения.

Править: Удаленный пример потока, поскольку это могло бы вуалировать проблему. Отправленный код и журналы.

5
задан Ciaran Archer 23 October 2009 в 08:32
поделиться

3 ответа

It sounds like this may be caused by the fact that the server is shutting down, rather than just the CF application. I am guessing that if the JVM is already in the process of shutting down, the resources your java class uses might not be available at that point. So onApplicationEnd might not be the correct place for that code.

You might want to look into adding a ShutdownHook. I am not 100% positive, but I think placing the cleanup code there, instead of in onApplicationEnd might allow the java object to do its cleanup before the JVM enters its death throes stage.

But having said all that, would not the "connection to another device on the network" be closed automatically once the server shuts down?

3
ответ дан 14 December 2019 в 13:40
поделиться

according to the docs "You cannot use this method to display data on a user page, because it is not associated with a request."

I think the "is not associated with a request." is the key. It could be that your java objects only exist within the request thread and not in the app instance.

Perhaps instead you shound try using onRequestEnd

http://livedocs.adobe.com/coldfusion/8/AppEvents_09.html

2
ответ дан 14 December 2019 в 13:40
поделиться

Ну, моя первая мысль заключается в том, что сервер на самом деле не останавливается, когда приложение останавливается ... Приложение остановится, но сервер может продолжать работать . Если у вас есть каталог с более старым Application.cfm и только несколько плоских файлов .cfm в этом каталоге, люди могут запрашивать эти cf-страницы, и они не могут быть связаны с каким-либо контекстом приложения. Таким образом, вы можете фактически не иметь запущенных приложений и по-прежнему обслуживать множество CF-страниц. Конечно, люди обычно не так настраивают свои CF-серверы, но так они и работают. Были некоторые разговоры о создании Server.cfc, например Application. cfc в будущей версии, хотя я не знаю, реализовали ли они это в CF9.

Моя вторая мысль заключается в том, что единственный способ для метода onApplicatinEnd вызвать конкретную ошибку «java.lang.IllegalStateException: Shutdown in progress» - это если java-объекты, на которые вы ссылаетесь, являются объектами java, которые каким-то образом внутренне связаны с контекст приложения, например объекты, к которым можно получить доступ через недокументированный ColdFusion.server.ServiceFactory. Но опубликованный вами код не выглядит так, как будто это происходит.

Это маловероятно, но вы можете попробовать поместить объект testCrypto в локальную / временную переменную в методе onApplicationEnd и запустить его оттуда.

Извините, я не мог больше помочь.

Я реализовал это в CF9.

Моя вторая мысль заключается в том, что единственный способ для метода onApplicatinEnd вызвать конкретную ошибку «java.lang.IllegalStateException: Shutdown in progress» - это если java-объекты, на которые вы ссылаетесь, являются объектами java, которые каким-то образом внутренне связаны с контекст приложения, например объекты, к которым можно получить доступ через недокументированный ColdFusion.server.ServiceFactory. Но опубликованный вами код не выглядит так, как будто это происходит.

Это маловероятно, но вы можете попробовать поместить объект testCrypto в локальную / временную переменную в методе onApplicationEnd и запустить его оттуда.

Извини, я не мог больше помочь.

Я реализовал это в CF9.

Моя вторая мысль заключается в том, что единственный способ для метода onApplicatinEnd вызвать конкретную ошибку "java.lang.IllegalStateException: Shutdown in progress" - это если java-объекты, на которые вы ссылаетесь, являются объектами java, которые каким-то образом внутренне связаны с контекст приложения, например объекты, к которым можно получить доступ через недокументированный ColdFusion.server.ServiceFactory. Но опубликованный вами код не выглядит так, как будто это происходит.

Это маловероятно, но вы можете попробовать поместить объект testCrypto в локальную / временную переменную в методе onApplicationEnd и запустить его оттуда.

Извините, я не мог больше помочь.

Но опубликованный вами код не выглядит так, как будто это происходит.

Это маловероятно, но вы можете попробовать поместить объект testCrypto в локальную / временную переменную в методе onApplicationEnd и запустить его оттуда.

Извини, я не мог больше помочь.

Но опубликованный вами код не выглядит так, как будто это происходит.

Это маловероятно, но вы можете попробовать поместить объект testCrypto в локальную / временную переменную в методе onApplicationEnd и запустить его оттуда.

Извини, я не мог больше помочь.

1
ответ дан 14 December 2019 в 13:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: