--- /dev/null
+/*\r
+\r
+ Derby - Class org.apache.derby.iapi.services.monitor.ModuleControl\r
+\r
+ Licensed to the Apache Software Foundation (ASF) under one or more\r
+ contributor license agreements. See the NOTICE file distributed with\r
+ this work for additional information regarding copyright ownership.\r
+ The ASF licenses this file to you under the Apache License, Version 2.0\r
+ (the "License"); you may not use this file except in compliance with\r
+ the License. You may obtain a copy of the License at\r
+\r
+ http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+ Unless required by applicable law or agreed to in writing, software\r
+ distributed under the License is distributed on an "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ See the License for the specific language governing permissions and\r
+ limitations under the License.\r
+\r
+ */\r
+\r
+package org.apache.derby.iapi.services.monitor;\r
+\r
+import java.util.Properties;\r
+import org.apache.derby.iapi.error.StandardException;\r
+\r
+/**\r
+ ModuleControl is <B>optionally</B> implemented by a module's factory class.\r
+*/\r
+\r
+public interface ModuleControl {\r
+\r
+ /**\r
+ Boot this module with the given properties. Creates a module instance\r
+ that can be found using the findModule() methods of Monitor.\r
+ The module can only be found using one of these findModule() methods\r
+ once this method has returned.\r
+ <P>\r
+ An implementation's boot method can throw StandardException. If it\r
+ is thrown the module is not registered by the monitor and therefore cannot\r
+ be found through a findModule(). In this case the module's stop() method\r
+ is not called, thus throwing this exception must free up any\r
+ resources.\r
+ <P>\r
+ When create is true the contents of the properties object\r
+ will be written to the service.properties of the persistent\r
+ service. Thus any code that requires an entry in service.properties\r
+ must <B>explicitly</B> place the value in this properties set\r
+ using the put method.\r
+ <BR>\r
+ Typically the properties object contains one or more default\r
+ properties sets, which are not written out to service.properties.\r
+ These default sets are how callers modify the create process. In a\r
+ JDBC connection database create the first set of defaults is a properties\r
+ object that contains the attributes that were set on the jdbc:derby: URL.\r
+ This attributes properties set has the second default properties set as\r
+ its default. This set (which could be null) contains the properties\r
+ that the user set on their DriverManager.getConnection() call, and are thus\r
+ not owned by Derby code, and thus must not be modified by Derby \r
+ code.\r
+ <P>\r
+ When create is false the properties object contains all the properties\r
+ set in the service.properties file plus a <B>limited</B> number of\r
+ attributes from the JDBC URL attributes or connection properties set.\r
+ This avoids properties set by the user compromising the boot process.\r
+ An example of a property passed in from the JDBC world is the bootPassword\r
+ for encrypted databases.\r
+\r
+ <P>\r
+ Code should not hold onto the passed in properties reference after boot time\r
+ as its contents may change underneath it. At least after the complete boot\r
+ is completed, the links to all the default sets will be removed.\r
+\r
+ @exception StandardException Module cannot be started.\r
+\r
+ @see Monitor\r
+ @see ModuleFactory\r
+ \r
+ */\r
+\r
+ public void boot(boolean create, Properties properties)\r
+ throws StandardException;\r
+\r
+ /**\r
+ Stop the module.\r
+\r
+ The module may be found via a findModule() method until some time after\r
+ this method returns. Therefore the factory must be prepared to reject requests\r
+ to it once it has been stopped. In addition other modules may cache a reference\r
+ to the module and make requests of it after it has been stopped, these requests\r
+ should be rejected as well.\r
+\r
+ @see Monitor\r
+ @see ModuleFactory\r
+ */\r
+\r
+ public void stop();\r
+\r
+\r
+}\r