我编写的Java代码只有在成功关闭weblogic服务器后才能运行。
代码关闭weblogic服务器并执行所需的操作,然后重新启动服务器。
现在我的问题是..有没有办法让1可以在weblogic控制台上保留一个标签,以查看关闭过程是否结束,或者在启动或关闭期间服务器是否抛出了一些异常(不是手动但是以编程方式)??
在我的本地机器中,我让线程一直睡眠,直到服务器完全关闭,保持平均关闭时间(手动)。
代码如下:
static final String DOMAIN_NAMES = "domainNames";
static final String DOMAIN_HOME="domainHome";
public static void main(String[] argss)
{
AbstractApplicationContext context=new FileSystemXmlApplicationContext(new String[]{"src/main/resources/redeployconfig.xml"});
StepOneRedeploy stepOne=(StepOneRedeploy) context.getBean("stepOneRedeploy");
stepOne.setProperties();
Properties prop=stepOne.getProperties();
String domainNames = prop.getProperty(DOMAIN_NAMES);
System.out.println(domainNames);
String domainHome = prop.getProperty(DOMAIN_HOME);
StringTokenizer domainNamesTokens= new StringTokenizer(domainNames,",");
StringTokenizer domainNamesTokens2=domainNamesTokens;
ArrayList<String> serverIPListArray = new ArrayList<String>();
while (domainNamesTokens.hasMoreElements())
{
String domainName=domainNamesTokens.nextToken();
System.out.println(domainName);
serverIPListArray.add(domainName);
}
while(domainNamesTokens2.hasMoreElements())
{
String domainName=domainNamesTokens2.nextToken();
/** Stopping weblogicserver **/
String domainPathToShutServer = domainHome + domainName+"/stopWebLogic.cmd";
String commandToShutServer="cmd /C start "+domainPathToShutServer;
try
{
Process p = Runtime.getRuntime().exec(commandToShutServer,null);
}
catch (Exception e)
{
e.printStackTrace();
}
/**Putting thread to sleep for 1 minute**/
try {
Thread.sleep(20000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
/** Deleting temp folder **/
try
{
File delTmpFile=new File("");
boolean isTmpDelete=delTmpFile.delete();
System.out.println(isTmpDelete);
if(!isTmpDelete)
{
throw new TempDeleteFailedException("Could not delete Tmp folder for "+domainName);
}
}
catch(TempDeleteFailedException tdfe)
{
tdfe.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
/** Deleting stage folder **/
try
{
File delStgFile=new File("");
boolean isStgDelete=delStgFile.delete();
System.out.println(isStgDelete);
if(isStgDelete)
{
throw new StageDeleteFailedException();
}
}
catch (StageDeleteFailedException stgDelEileException)
{
stgDelEileException.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
/** Starting weblogicserver **/
String domainPath = domainHome + domainName+"/startWebLogic.cmd";
String command="cmd /C start "+domainPath;
try
{
Process p = Runtime.getRuntime().exec(command,null);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
我已经尝试过ProcessBuilder来启动weblogic服务器。 但它说的是
java.io.IOException: Cannot run program "startWebLogic.cmd" (in directory "D:\Oracle\Middleware\user_projects\domains\ass1"): CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:470)
at TestMain.main(TestMain.java:35)
引起:java.io.IOException:CreateProcess error = 2,系统找不到指定的文件 at java.lang.ProcessImpl.create(Native Method) 在java.lang.ProcessImpl。(ProcessImpl.java:177) 在java.lang.ProcessImpl.start(ProcessImpl.java:28) 在java.lang.ProcessBuilder.start(ProcessBuilder.java:452) ......还有1个 所以,如果我要重构问题......
如何使用Java代码捕获可执行文件运行抛出的异常?
答案 0 :(得分:1)
“等待足够”是一个坏主意,因为它会在情况发生变化时轻易破解,并且使用流程构建器非常有限(更不用说,这些启动脚本通常会将主流程作为一个单独的流程生成,所以你不要不要看他们开始)。
我会研究WebLogic服务器提供的钩子。 WebLogic有很多钩子,所以我不知道哪一个适合你,但是例如,如果它是一个servlet,你可以从ServletContextListener
执行关机过程。
答案 1 :(得分:1)
有没有办法让1可以在weblogic控制台上保留一个标签,以查看关闭过程是否结束,或者在启动或关闭期间服务器是否抛出了一些异常(不是手动但是以编程方式)? ?
Weblogic日志写入磁盘。默认情况下,它们位于DOMAIN_NAME\servers\SERVER_NAME\logs\SERVER_NAME.log
中(参见:Understanding WebLogic logging files)。
只需监视服务器日志中的异常。看看Commons IO - Tailer。
顺便说一句,您可以使用WLST和JMX来停止,启动,重新启动和监控Weblogic的运行状况(请参阅ServerRuntimeMBean和ServerLifeCycleRuntimeMBean),无需启动独立进程
你可以:
MBeanServerConnection
(请参阅:This Example)