001// 002// $RCSfile: Execute.java,v $ 003// $Revision: 1.3 $ 004// $Date: 2014/03/21 21:18:22 $ 005// 006// Copyright 2014 Cloud Software Group, Inc. ALL RIGHTS RESERVED. 007// Cloud Software Group, Inc. Confidential Information 008// 009package com.tibco.xp.runtime; 010 011import com.tibco.cep.util.ResourceManager; 012import com.tibco.cep.container.standalone.BEMain; 013import com.tibco.cep.container.standalone.ClassPathReporter.ClassPathReportHandler; 014import com.tibco.cep.kernel.service.logging.Level; 015import com.tibco.cep.kernel.service.logging.LogManager; 016import com.tibco.cep.kernel.service.logging.LogManagerFactory; 017import com.tibco.cep.kernel.service.logging.Logger; 018import com.tibco.cep.repo.DeployedProject; 019import com.tibco.cep.runtime.service.ServiceRegistry; 020import com.tibco.cep.runtime.service.basic.ShutdownWatcher; 021import com.tibco.cep.runtime.service.debug.DebuggerService; 022import com.tibco.cep.runtime.session.RuleServiceProviderManager; 023import com.tibco.cep.runtime.util.SystemProperty; 024 025/** 026 * Execute the rules engine 027 */ 028public class Execute extends BEMain 029{ 030 private Execute(String [ ] args) 031 { 032 super(args); 033 } 034 035 /** 036 * Main entry point 037 * 038 * @param args 039 * User provided arguments 040 */ 041 public static void main(final String[] args) 042 { 043 // 044 // Register shutdown watcher 045 // 046 ServiceRegistry registry = ServiceRegistry.getSingletonServiceRegistry(); 047 assert registry != null; 048 registry.initBasic(); 049 registry.initShutdownWatcher(); 050 ShutdownWatcher shutdownWatcher = registry.getShutdownWatcher(); 051 052 // 053 // Start the rules engine 054 // 055 try 056 { 057 new Execute(args).startRulesEngine(args); 058 } 059 catch (Throwable e) 060 { 061 LogManager logManager = LogManagerFactory.getLogManager(); 062 if (logManager != null) 063 { 064 logManager.getLogger(ServiceProvider.LOGGING_MODULE_NAME).log( 065 Level.FATAL, e, e.getMessage()); 066 } 067 else 068 { 069 e.printStackTrace(); 070 } 071 shutdownWatcher.exitSystem(-1); 072 } 073 } 074 075 // 076 // Start the rules engine 077 // 078 private void startRulesEngine(final String [ ] args) throws Exception 079 { 080 // 081 // Add shutdown hook for rules engine 082 // 083 RuleServiceProviderManager.addShutdownHook(); 084 085 // 086 // Create rule service provider 087 // 088 BexRuleServiceProvider rsp = BexRuleServiceProvider.getInstance(env); 089 090 // 091 // Load resource bundle 092 // 093 ResourceManager manager = ResourceManager.getInstance(); 094 manager.addResourceBundle("com.tibco.cep.container.messages", rsp.getLocale()); 095 096 // 097 // Log start-up message 098 // 099 Logger logger = rsp.getLogger(ServiceProvider.LOGGING_MODULE_NAME); 100 assert logger != null; 101 logger.log(Level.INFO, printPrologue(args)); 102 103 // 104 // Initialize and validate the project 105 // 106 rsp.initProject(); 107 108 DeployedProject project = rsp.getProject(); 109 assert project != null : rsp; 110 111 if (project.isCacheEnabled() == false) 112 { 113 String message = "Cache not enabled in project " 114 + project.getName() + "."; 115 logger.log(Level.FATAL, message); 116 throw new RuntimeError(message); 117 } 118 119 if (RuleServiceProviderManager.isConfigAsCacheServer(rsp.getProperties()) == true) 120 { 121 String message = "Project " + rsp.getProject().getName() 122 + " cannot be configured as a cache server."; 123 logger.log(Level.FATAL, message); 124 throw new RuntimeError(message); 125 } 126 127 // 128 // Start the rule service provider 129 // 130 rsp.start(); 131 132 // 133 // Set up class path reporter MBean 134 // 135 try 136 { 137 new ClassPathReportHandler().registerSelf(); 138 } 139 catch (Exception e) 140 { 141 logger.log(Level.WARN, e, "Class path reporter MBean failed. Initialization continuing. MBean will be unavailable."); 142 } 143 144 // 145 // Start debugger if enabled 146 // 147 if (System.getProperty( 148 SystemProperty.DEBUGGER_SERVICE_ENABLED.getPropertyName(), 149 Boolean.FALSE.toString()).trim() 150 .equalsIgnoreCase(Boolean.TRUE.toString())) 151 { 152 logger.log(Level.INFO, "Starting debugger service..."); 153 154 DebuggerService debuggerService = DebuggerService.getInstance(); 155 debuggerService.init(null, rsp); 156 debuggerService.start(); 157 158 logger.log(Level.INFO, "Debugger service started."); 159 } 160 161 // 162 // Wait for JVM termination 163 // 164 awaitUntilJVMTerminates(); 165 } 166}