Os serviços Java param de funcionar quando o usuário efetua logout

1

Alguns antecedentes:

Eu tenho quatro aplicativos que são executados como serviços em um conjunto de máquinas com Windows XP, dois dos quais são aplicativos java. Todos os quatro aplicativos foram originalmente projetados para serem executados em um servidor Linux e têm três máquinas com o Windows XP conectados, mas os requisitos do cliente significam transferir esses aplicativos para o Windows para que tudo possa ser executado em uma única máquina.

O problema:

Como não queríamos alterar drasticamente nada em nosso código para executar os aplicativos como serviços, usamos instsrv.exe e srvany.exe para instalar e executar os aplicativos. Isso funciona bem para os dois aplicativos c ++ e, na maior parte, os aplicativos java funcionam bem. No entanto, quando um usuário efetua logout, os aplicativos java param. Os serviços reais ainda estão em execução, porque java.exe (ou javaw.exe , não importa qual) ainda está em execução, mas não está mais executando o aplicativo. No que diz respeito ao gerente de serviços, tudo está funcionando bem e, portanto, não reinicia o serviço como deveria. Observe que o usuário principal está usando uma conta limitada e, portanto, não pode reiniciar os serviços manualmente.

Coisas que consideramos / tentamos:

srvany.exe. foi escolhido principalmente porque é grátis (como na cerveja) e é relativamente fácil de configurar. Também consideramos srvstart.exe , mas acredito que exibiu o mesmo problema. Existem dois invólucros de serviço java dedicados que analisamos, mas foram eliminados da consideração devido a termos de licenciamento e / ou dificuldade de configuração. Observe que o YAJSW não foi considerado inicialmente e, se o tempo permitir, pode ser testado.

O problema parece não existir no Windows 7, mas como nosso cliente exige o Windows XP, isso não é uma opção.

Eu também tentei permitir a interação na área de trabalho para os dois aplicativos java, mas isso não resolve o problema ao usar javaw.exe e mostra uma janela de linha de comando ao usar java.exe , o que é extremamente indesejável. isso resolve o problema. Nossa medida temporária até agora tem sido dizer ao cliente para não sair de uma conta, mas apenas usar o usuário switch.

Há mais alguma coisa que eu estou perdendo ou deveria tentar? Isso também é sensível ao tempo, pois uma vez que essas unidades saem pela porta, pode ser extremamente difícil implementar uma correção no site.

    
por MBraedley 03.01.2012 / 16:52

1 resposta

3

Você precisa adicionar a sinalização -Xrs à sua linha de comando java.exe para evitar que a JVM saia ao efetuar logoff de uma máquina XP. O problema não surge no Windows 7 (ou no Vista / Server 2008) porque o "Isolamento da Sessão 0" impede que os usuários efetuem login (e, portanto, efetuam logoff). Sessão 0, o local onde os serviços são executados.

Esteja avisado - se o seu aplicativo java detectar eventos de desligamento, eles podem não ser disparados como esperado quando você usar o sinalizador -Xrs. Isso é um problema para você?

    
por 10.01.2012 / 06:21