Service Wrapper Crash
Status: Beta
Brought to you by:
reyes
On Windows2003 SP2:
I've installed an application with service wrapper (of course, as automatic startup service).
I's seems works well.
But, after reboot, the application doesn't start.
Another bug: if I start the application from service management and log out from system, after re-login the application service crash.Window's events log tells me that the service "deads without information".
Service wrapper's log don't log anything about that.
The only thing to do is to tell windows "what operation to do if the service crash" (in service properties): Restart the service after one minute. Now works.
Any idea????
Logged In: NO
Ah! My e-mail!! agharta AT interfree DOT it
Bye,
Agharta
Logged In: NO
About crash on log off, -Xrs should be added to JVM arguments on service startup.
Logged In: YES
user_id=1905597
Originator: NO
Here is a patch for service crash on user logoff (excuse me for the big comment. I could not find any way to attach the patch as an attached file.):
diff -aburN -x '*.number' -x '.cvs*' -x '*.win' -x '*.xml' -x '*.o' -x '*.PNG' -x '*.png' -x '*.gif' -x '*.xml' -x '*~' jsmooth-0.9.9-7-src/skeletons/commonjava/JVMBase.cpp jsmooth-0.9.9-7-src-svc/skeletons/commonjava/JVMBase.cpp
--- jsmooth-0.9.9-7-src/skeletons/commonjava/JVMBase.cpp 2007-04-28 10:43:44.000000000 +0200
+++ jsmooth-0.9.9-7-src-svc/skeletons/commonjava/JVMBase.cpp 2007-10-04 17:17:48.993192600 +0200
@@ -24,6 +24,7 @@
{
m_maxHeap = -1;
m_initialHeap = -1;
+ m_ignoreInterrupts = 0;
}
void JVMBase::addPathElement(const std::string& element)
@@ -52,6 +53,11 @@
m_arguments.push_back(arg);
}
+void JVMBase::setIgnoreInterrupts(int ignore)
+{
+ DEBUG("m_ignoreInterrupts:<1>");
+ m_ignoreInterrupts = ignore;
+}
void JVMBase::setArguments(const std::string& args)
{
diff -aburN -x '*.number' -x '.cvs*' -x '*.win' -x '*.xml' -x '*.o' -x '*.PNG' -x '*.png' -x '*.gif' -x '*.xml' -x '*~' jsmooth-0.9.9-7-src/skeletons/commonjava/JVMBase.h jsmooth-0.9.9-7-src-svc/skeletons/commonjava/JVMBase.h
--- jsmooth-0.9.9-7-src/skeletons/commonjava/JVMBase.h 2007-04-28 10:43:44.000000000 +0200
+++ jsmooth-0.9.9-7-src-svc/skeletons/commonjava/JVMBase.h 2007-10-04 15:53:12.269481800 +0200
@@ -42,6 +42,7 @@
std::vector<JavaProperty> m_properties;
int m_maxHeap;
int m_initialHeap;
+ int m_ignoreInterrupts;
std::vector<std::string> m_arguments;
public:
@@ -51,6 +52,7 @@
void addProperty(const JavaProperty& prop);
void setMaxHeap(long size);
void setInitialHeap(long size);
+ void setIgnoreInterrupts(int ignore);
void addArgument(const std::string& arg);
void setArguments(const std::string& args);
};
diff -aburN -x '*.number' -x '.cvs*' -x '*.win' -x '*.xml' -x '*.o' -x '*.PNG' -x '*.png' -x '*.gif' -x '*.xml' -x '*~' jsmooth-0.9.9-7-src/skeletons/commonjava/SunJVMDLL.cpp jsmooth-0.9.9-7-src-svc/skeletons/commonjava/SunJVMDLL.cpp
--- jsmooth-0.9.9-7-src/skeletons/commonjava/SunJVMDLL.cpp 2007-05-18 23:34:00.000000000 +0200
+++ jsmooth-0.9.9-7-src-svc/skeletons/commonjava/SunJVMDLL.cpp 2007-10-04 17:37:25.117050600 +0200
@@ -24,6 +24,7 @@
#include "JClassProxy.h"
#include "JniSmooth.h"
+
SunJVMDLL::SunJVMDLL(const std::string& jvmdll, const Version& v)
{
m_dllpath = jvmdll;
@@ -135,6 +136,11 @@
jpropstrv.push_back("-Xms" + StringUtils::toString(m_initialHeap));
}
+ if (m_ignoreInterrupts > 0)
+ {
+ jpropstrv.push_back("-Xrs");
+ }
+
JavaVMInitArgs vm_args;
GetDefaultJavaVMInitArgs(&vm_args);
diff -aburN -x '*.number' -x '.cvs*' -x '*.win' -x '*.xml' -x '*.o' -x '*.PNG' -x '*.png' -x '*.gif' -x '*.xml' -x '*~' jsmooth-0.9.9-7-src/skeletons/commonjava/SunJVMExe.cpp jsmooth-0.9.9-7-src-svc/skeletons/commonjava/SunJVMExe.cpp
--- jsmooth-0.9.9-7-src/skeletons/commonjava/SunJVMExe.cpp 2007-05-01 21:40:16.000000000 +0200
+++ jsmooth-0.9.9-7-src-svc/skeletons/commonjava/SunJVMExe.cpp 2007-10-04 15:51:38.423329400 +0200
@@ -65,6 +65,10 @@
else
execv.push_back("-Xms" + StringUtils::toString(m_initialHeap));
}
+ if (m_ignoreInterrupts > 0)
+ {
+ execv.push_back("-Xrs");
+ }
for (int i=0; i<m_properties.size(); i++)
execv.push_back( StringUtils::requoteForCommandLine("-D" + m_properties[i].getName()) + "=" + StringUtils::requoteForCommandLine(m_properties[i].getValue()));
diff -aburN -x '*.number' -x '.cvs*' -x '*.win' -x '*.xml' -x '*.o' -x '*.PNG' -x '*.png' -x '*.gif' -x '*.xml' -x '*~' jsmooth-0.9.9-7-src/skeletons/commonjava/SunJVMLauncher.cpp jsmooth-0.9.9-7-src-svc/skeletons/commonjava/SunJVMLauncher.cpp
--- jsmooth-0.9.9-7-src/skeletons/commonjava/SunJVMLauncher.cpp 2007-05-18 23:34:00.000000000 +0200
+++ jsmooth-0.9.9-7-src-svc/skeletons/commonjava/SunJVMLauncher.cpp 2007-10-04 17:38:47.337905400 +0200
@@ -181,6 +181,9 @@
if (resource.getProperty("maxheap") != "")
vm->setMaxHeap( StringUtils::parseInt(resource.getProperty("maxheap") ));
+ if (resource.getProperty("ignoreInterrupts") != "")
+ vm->setIgnoreInterrupts( StringUtils::parseInt(resource.getProperty("ignoreInterrupts") ));
+
if (resource.getProperty("initialheap") != "")
vm->setInitialHeap( StringUtils::parseInt(resource.getProperty("initialheap") ));
diff -aburN -x '*.number' -x '.cvs*' -x '*.win' -x '*.xml' -x '*.o' -x '*.PNG' -x '*.png' -x '*.gif' -x '*.xml' -x '*~' jsmooth-0.9.9-7-src/skeletons/winservice/WinService.cpp jsmooth-0.9.9-7-src-svc/skeletons/winservice/WinService.cpp
--- jsmooth-0.9.9-7-src/skeletons/winservice/WinService.cpp 2007-05-20 00:55:50.000000000 +0200
+++ jsmooth-0.9.9-7-src-svc/skeletons/winservice/WinService.cpp 2007-10-04 17:43:39.486009200 +0200
@@ -276,6 +276,7 @@
ResourceManager* globalResMan = new ResourceManager("JAVA", PROPID, JARID, JNISMOOTHID);
+ globalResMan->setProperty("ignoreInterrupts", "1");
//
// sets up the debug mode, if requested
std::string dodebug = globalResMan->getProperty("skel_Debug");