001: /*
002: * $Id: BeanShellContainer.java,v 1.1 2004/03/13 17:49:46 ajzeneski Exp $
003: *
004: * Copyright (c) 2004 The Open For Business Project - www.ofbiz.org
005: *
006: * Permission is hereby granted, free of charge, to any person obtaining a
007: * copy of this software and associated documentation files (the "Software"),
008: * to deal in the Software without restriction, including without limitation
009: * the rights to use, copy, modify, merge, publish, distribute, sublicense,
010: * and/or sell copies of the Software, and to permit persons to whom the
011: * Software is furnished to do so, subject to the following conditions:
012: *
013: * The above copyright notice and this permission notice shall be included
014: * in all copies or substantial portions of the Software.
015: *
016: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
017: * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
018: * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
019: * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
020: * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
021: * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
022: * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
023: *
024: */
025: package org.ofbiz.base.container;
026:
027: import bsh.Interpreter;
028: import bsh.EvalError;
029:
030: import org.ofbiz.base.util.Debug;
031:
032: /**
033: * BeanShellContainer - Container implementation for BeanShell
034: *
035: * @author <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a>
036: *@version $Revision: 1.1 $
037: * @since 3.0
038: */
039: public class BeanShellContainer implements Container {
040:
041: public static final String module = JettyContainer.class.getName();
042:
043: protected Interpreter bsh = null;
044: protected String name;
045: protected int port;
046:
047: /**
048: * Start the container
049: *
050: * @param configFileLocation Location of master OFBiz configuration file
051: * @return true if server started
052: * @throws ContainerException
053: *
054: */
055: public boolean start(String configFileLocation)
056: throws ContainerException {
057: // get the container config
058: ContainerConfig.Container cfg = ContainerConfig.getContainer(
059: "beanshell-container", configFileLocation);
060:
061: // get the app-name
062: ContainerConfig.Container.Property appName = cfg
063: .getProperty("app-name");
064: if (appName == null || appName.value == null
065: || appName.value.length() == 0) {
066: throw new ContainerException(
067: "Invalid app-name defined in container configuration");
068: } else {
069: this .name = appName.value;
070: }
071:
072: // get the telnet-port
073: ContainerConfig.Container.Property telnetPort = cfg
074: .getProperty("telnet-port");
075: if (telnetPort == null || telnetPort.value == null
076: || telnetPort.value.length() == 0) {
077: throw new ContainerException(
078: "Invalid telnet-port defined in container configuration");
079: } else {
080: try {
081: this .port = Integer.parseInt(telnetPort.value);
082: } catch (Exception e) {
083: throw new ContainerException(
084: "Invalid telnet-port defined in container configuration; not a valid int");
085: }
086: }
087:
088: // create the interpreter
089: bsh = new Interpreter();
090:
091: // configure the interpreter
092: if (bsh != null) {
093: try {
094: bsh.set(name, this );
095: } catch (EvalError evalError) {
096: throw new ContainerException(evalError);
097: }
098: try {
099: bsh.set("portnum", (port - 1));
100: } catch (EvalError evalError) {
101: throw new ContainerException(evalError);
102: }
103: try {
104: bsh.eval("setAccessibility(true)");
105: } catch (EvalError evalError) {
106: throw new ContainerException(evalError);
107: }
108:
109: try {
110: bsh.eval("server(portnum)");
111: } catch (EvalError evalError) {
112: throw new ContainerException(evalError);
113: }
114:
115: Debug.logInfo("Started BeanShell telnet service on "
116: + (port - 1) + ", " + port, module);
117: Debug
118: .logInfo(
119: "NOTICE: BeanShell service ports are not secure. Please protect the ports",
120: module);
121: return true;
122: } else {
123: return false;
124: }
125: }
126:
127: /**
128: * Stop the container
129: *
130: * @throws ContainerException
131: *
132: */
133: public void stop() throws ContainerException {
134: bsh = null;
135: }
136: }
|