Merged in changes between helma_1_3_0_M1 and helma_1_3_0_M2.
This commit is contained in:
parent
57db6bd838
commit
6323a70cc8
20 changed files with 170 additions and 184 deletions
|
@ -439,7 +439,7 @@ public final class Application implements IPathElement, Runnable {
|
|||
// give it 3 more tries, waiting 3 seconds each time.
|
||||
for (int i = 0; i < 4; i++) {
|
||||
try {
|
||||
Thread.currentThread().sleep(3000);
|
||||
Thread.sleep(3000);
|
||||
|
||||
return (RequestEvaluator) freeThreads.pop();
|
||||
} catch (EmptyStackException nothreads) {
|
||||
|
@ -1434,12 +1434,15 @@ public final class Application implements IPathElement, Runnable {
|
|||
|
||||
long sleepInterval = CronJob.millisToNextFullMinute();
|
||||
try {
|
||||
sleepInterval = Integer.parseInt(props.getProperty("schedulerInterval"))*1000;
|
||||
String sleepProp = props.getProperty("schedulerInterval");
|
||||
if (sleepProp != null) {
|
||||
sleepInterval = Math.max(1000, Integer.parseInt(sleepProp)*1000);
|
||||
}
|
||||
} catch (Exception ignore) {}
|
||||
|
||||
// sleep until the next full minute
|
||||
try {
|
||||
worker.sleep(sleepInterval);
|
||||
Thread.sleep(sleepInterval);
|
||||
} catch (InterruptedException x) {
|
||||
logEvent("Scheduler for " + name + " interrupted");
|
||||
worker = null;
|
||||
|
|
|
@ -103,8 +103,6 @@ public final class RequestEvaluator implements Runnable {
|
|||
*
|
||||
*/
|
||||
public void run() {
|
||||
int txcount = 0;
|
||||
|
||||
// first, set a local variable to the current transactor thread so we know
|
||||
// when it's time to quit because another thread took over.
|
||||
Transactor localrtx = (Transactor) Thread.currentThread();
|
||||
|
@ -351,8 +349,7 @@ public final class RequestEvaluator implements Runnable {
|
|||
// wait a bit longer with each try
|
||||
int base = 800 * tries;
|
||||
|
||||
Thread.currentThread().sleep((long) (base +
|
||||
(Math.random() * base * 2)));
|
||||
Thread.sleep((long) (base + (Math.random() * base * 2)));
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
|
||||
|
@ -905,4 +902,5 @@ public final class RequestEvaluator implements Runnable {
|
|||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -86,8 +86,6 @@ public final class Skin {
|
|||
private void parse() {
|
||||
ArrayList partBuffer = new ArrayList();
|
||||
|
||||
int start = 0;
|
||||
|
||||
for (int i = 0; i < (sourceLength - 1); i++) {
|
||||
if ((source[i] == '<') && (source[i + 1] == '%')) {
|
||||
// found macro start tag
|
||||
|
@ -101,7 +99,6 @@ public final class Skin {
|
|||
|
||||
if (j > (i + 2)) {
|
||||
partBuffer.add(new Macro(i, j + 2));
|
||||
start = j + 2;
|
||||
}
|
||||
|
||||
i = j + 1;
|
||||
|
@ -375,7 +372,7 @@ public final class Skin {
|
|||
public void render(RequestEvaluator reval, Object thisObject, Map paramObject,
|
||||
Map handlerCache) throws RedirectException {
|
||||
if ((sandbox != null) && !sandbox.contains(fullName)) {
|
||||
String h = (handler == null) ? "global" : handler;
|
||||
//String h = (handler == null) ? "global" : handler;
|
||||
|
||||
reval.res.write("[Macro " + fullName + " not allowed in sandbox]");
|
||||
|
||||
|
|
|
@ -87,16 +87,18 @@ public final class TypeManager {
|
|||
zipfiles = new HashMap();
|
||||
jarfiles = new HashSet();
|
||||
|
||||
URL[] urls = ((URLClassLoader) TypeManager.class.getClassLoader()).getURLs();
|
||||
URL helmajar = null;
|
||||
URL helmajar = TypeManager.class.getResource("/");
|
||||
|
||||
for (int i = 0; i < urls.length; i++) {
|
||||
String url = urls[i].toString().toLowerCase();
|
||||
if (helmajar == null) {
|
||||
// Helma classes are in jar file, get helma.jar URL
|
||||
URL[] urls = ((URLClassLoader) TypeManager.class.getClassLoader()).getURLs();
|
||||
|
||||
if (url.endsWith("helma.jar")) {
|
||||
helmajar = urls[i];
|
||||
|
||||
break;
|
||||
for (int i = 0; i < urls.length; i++) {
|
||||
String url = urls[i].toString().toLowerCase();
|
||||
if (url.endsWith("helma.jar")) {
|
||||
helmajar = urls[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -309,7 +309,6 @@ public abstract class ImageWrapper {
|
|||
StringTokenizer tk = new StringTokenizer(string);
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
int spaceWidth = metrics.stringWidth(" ");
|
||||
int currentLine = 0;
|
||||
int currentWidth = 0;
|
||||
int maxWidth = w - 2;
|
||||
int maxHeight = (h + addedSpace) - 2;
|
||||
|
|
|
@ -50,17 +50,17 @@ public class ApplicationManager implements XmlRpcHandler {
|
|||
/**
|
||||
* Creates a new ApplicationManager object.
|
||||
*
|
||||
* @param port The RMI port we're binding to
|
||||
* @param hopHome The Helma home directory
|
||||
* @param props the properties defining the running apps
|
||||
* @param server the server instance
|
||||
* @param port The RMI port we're binding to
|
||||
*/
|
||||
public ApplicationManager(int port, File hopHome, SystemProperties props,
|
||||
Server server) {
|
||||
this.port = port;
|
||||
public ApplicationManager(File hopHome, SystemProperties props,
|
||||
Server server, int port) {
|
||||
this.hopHome = hopHome;
|
||||
this.props = props;
|
||||
this.server = server;
|
||||
this.port = port;
|
||||
descriptors = new Hashtable();
|
||||
applications = new Hashtable();
|
||||
xmlrpcHandlers = new Hashtable();
|
||||
|
|
|
@ -59,10 +59,10 @@ public class Server implements IPathElement, Runnable {
|
|||
private Thread mainThread;
|
||||
|
||||
// server ports
|
||||
int rmiPort = 0;
|
||||
int xmlrpcPort = 0;
|
||||
int websrvPort = 0;
|
||||
int ajp13Port = 0;
|
||||
InetAddrPort rmiPort = null;
|
||||
InetAddrPort xmlrpcPort = null;
|
||||
InetAddrPort websrvPort = null;
|
||||
InetAddrPort ajp13Port = null;
|
||||
|
||||
// map of server-wide database sources
|
||||
Hashtable dbSources;
|
||||
|
@ -100,25 +100,25 @@ public class Server implements IPathElement, Runnable {
|
|||
propfile = args[++i];
|
||||
} else if (args[i].equals("-p") && ((i + 1) < args.length)) {
|
||||
try {
|
||||
rmiPort = Integer.parseInt(args[++i]);
|
||||
rmiPort = new InetAddrPort(args[++i]);
|
||||
} catch (Exception portx) {
|
||||
usageError = true;
|
||||
}
|
||||
} else if (args[i].equals("-x") && ((i + 1) < args.length)) {
|
||||
try {
|
||||
xmlrpcPort = Integer.parseInt(args[++i]);
|
||||
xmlrpcPort = new InetAddrPort(args[++i]);
|
||||
} catch (Exception portx) {
|
||||
usageError = true;
|
||||
}
|
||||
} else if (args[i].equals("-w") && ((i + 1) < args.length)) {
|
||||
try {
|
||||
websrvPort = Integer.parseInt(args[++i]);
|
||||
websrvPort = new InetAddrPort(args[++i]);
|
||||
} catch (Exception portx) {
|
||||
usageError = true;
|
||||
}
|
||||
} else if (args[i].equals("-jk") && ((i + 1) < args.length)) {
|
||||
try {
|
||||
ajp13Port = Integer.parseInt(args[++i]);
|
||||
ajp13Port = new InetAddrPort(args[++i]);
|
||||
} catch (Exception portx) {
|
||||
usageError = true;
|
||||
}
|
||||
|
@ -145,72 +145,82 @@ public class Server implements IPathElement, Runnable {
|
|||
sysProps = new SystemProperties(propfile);
|
||||
|
||||
// check if there's a property setting for those ports not specified via command line
|
||||
if ((websrvPort == 0) && (sysProps.getProperty("webPort") != null)) {
|
||||
if ((websrvPort == null) && (sysProps.getProperty("webPort") != null)) {
|
||||
try {
|
||||
websrvPort = Integer.parseInt(sysProps.getProperty("webPort"));
|
||||
} catch (NumberFormatException fmt) {
|
||||
websrvPort = new InetAddrPort(sysProps.getProperty("webPort"));
|
||||
} catch (Exception fmt) {
|
||||
System.err.println("Error parsing web server port property: " + fmt);
|
||||
}
|
||||
}
|
||||
|
||||
if ((ajp13Port == 0) && (sysProps.getProperty("ajp13Port") != null)) {
|
||||
if ((ajp13Port == null) && (sysProps.getProperty("ajp13Port") != null)) {
|
||||
try {
|
||||
ajp13Port = Integer.parseInt(sysProps.getProperty("ajp13Port"));
|
||||
} catch (NumberFormatException fmt) {
|
||||
ajp13Port = new InetAddrPort(sysProps.getProperty("ajp13Port"));
|
||||
} catch (Exception fmt) {
|
||||
System.err.println("Error parsing AJP1.3 server port property: " + fmt);
|
||||
}
|
||||
}
|
||||
|
||||
if ((rmiPort == 0) && (sysProps.getProperty("rmiPort") != null)) {
|
||||
if ((rmiPort == null) && (sysProps.getProperty("rmiPort") != null)) {
|
||||
try {
|
||||
rmiPort = Integer.parseInt(sysProps.getProperty("rmiPort"));
|
||||
} catch (NumberFormatException fmt) {
|
||||
rmiPort = new InetAddrPort(sysProps.getProperty("rmiPort"));
|
||||
} catch (Exception fmt) {
|
||||
System.err.println("Error parsing RMI server port property: " + fmt);
|
||||
}
|
||||
}
|
||||
|
||||
if ((xmlrpcPort == 0) && (sysProps.getProperty("xmlrpcPort") != null)) {
|
||||
if ((xmlrpcPort == null) && (sysProps.getProperty("xmlrpcPort") != null)) {
|
||||
try {
|
||||
xmlrpcPort = Integer.parseInt(sysProps.getProperty("xmlrpcPort"));
|
||||
} catch (NumberFormatException fmt) {
|
||||
xmlrpcPort = new InetAddrPort(sysProps.getProperty("xmlrpcPort"));
|
||||
} catch (Exception fmt) {
|
||||
System.err.println("Error parsing XML-RPC server port property: " + fmt);
|
||||
}
|
||||
}
|
||||
|
||||
// check server ports. If no port is set, issue a warning and exit.
|
||||
if (!usageError && ((websrvPort | ajp13Port | rmiPort | xmlrpcPort) == 0)) {
|
||||
if (!usageError && websrvPort == null && ajp13Port == null &&
|
||||
rmiPort == null && xmlrpcPort == null) {
|
||||
System.out.println(" Error: No server port specified.");
|
||||
usageError = true;
|
||||
}
|
||||
|
||||
// if there's a usage error, output message and exit
|
||||
if (usageError) {
|
||||
System.out.println("usage: java helma.main.Server [-h dir] [-f file] [-p port] [-w port] [-x port]");
|
||||
System.out.println(" -h dir Specify hop home directory");
|
||||
System.out.println(" -f file Specify server.properties file");
|
||||
System.out.println(" -p port Specify RMI port number");
|
||||
System.out.println(" -w port Specify port number for embedded Web server");
|
||||
System.out.println(" -x port Specify XML-RPC port number");
|
||||
System.out.println(" -jk port Specify AJP13 port number");
|
||||
System.out.println("");
|
||||
System.out.println("Usage: java helma.main.Server [options]");
|
||||
System.out.println("Possible options:");
|
||||
System.out.println(" -h dir Specify hop home directory");
|
||||
System.out.println(" -f file Specify server.properties file");
|
||||
System.out.println(" -w [ip:]port Specify embedded web server address/port");
|
||||
System.out.println(" -x [ip:]port Specify XML-RPC address/port");
|
||||
System.out.println(" -jk [ip:]port Specify AJP13 address/port");
|
||||
System.out.println(" -p [ip:]port Specify RMI address/port");
|
||||
System.out.println("");
|
||||
System.out.println("Supported formats for server ports:");
|
||||
System.out.println(" <port-number>");
|
||||
System.out.println(" <ip-address>:<port-number>");
|
||||
System.out.println(" <hostname>:<port-number>");
|
||||
System.out.println("");
|
||||
System.err.println("Usage Error - exiting");
|
||||
System.out.println("");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
// check if any of the specified server ports is in use already
|
||||
try {
|
||||
if (websrvPort > 0) {
|
||||
if (websrvPort != null) {
|
||||
checkRunning(websrvPort);
|
||||
}
|
||||
|
||||
if (rmiPort > 0) {
|
||||
if (rmiPort != null) {
|
||||
checkRunning(rmiPort);
|
||||
}
|
||||
|
||||
if (xmlrpcPort > 0) {
|
||||
if (xmlrpcPort != null) {
|
||||
checkRunning(xmlrpcPort);
|
||||
}
|
||||
|
||||
if (ajp13Port > 0) {
|
||||
if (ajp13Port != null) {
|
||||
checkRunning(ajp13Port);
|
||||
}
|
||||
} catch (Exception running) {
|
||||
|
@ -366,7 +376,7 @@ public class Server implements IPathElement, Runnable {
|
|||
*/
|
||||
public void run() {
|
||||
try {
|
||||
if ((websrvPort > 0) || (ajp13Port > 0)) {
|
||||
if ((websrvPort != null) || (ajp13Port != null)) {
|
||||
http = new HttpServer();
|
||||
|
||||
// disable Jetty logging FIXME: seems to be a jetty bug; as soon
|
||||
|
@ -399,14 +409,14 @@ public class Server implements IPathElement, Runnable {
|
|||
}
|
||||
|
||||
// start embedded web server if port is specified
|
||||
if (websrvPort > 0) {
|
||||
http.addListener(new InetAddrPort(websrvPort));
|
||||
if (websrvPort != null) {
|
||||
http.addListener(websrvPort);
|
||||
}
|
||||
|
||||
// activate the ajp13-listener
|
||||
if (ajp13Port > 0) {
|
||||
if (ajp13Port != null) {
|
||||
// create AJP13Listener
|
||||
ajp13 = new AJP13Listener(new InetAddrPort(ajp13Port));
|
||||
ajp13 = new AJP13Listener(ajp13Port);
|
||||
ajp13.setHttpServer(http);
|
||||
|
||||
String jkallow = sysProps.getProperty("allowAJP13");
|
||||
|
@ -429,14 +439,18 @@ public class Server implements IPathElement, Runnable {
|
|||
getLogger().log("Starting AJP13-Listener on port " + (ajp13Port));
|
||||
}
|
||||
|
||||
if (xmlrpcPort > 0) {
|
||||
if (xmlrpcPort != null) {
|
||||
String xmlparser = sysProps.getProperty("xmlparser");
|
||||
|
||||
if (xmlparser != null) {
|
||||
XmlRpc.setDriver(xmlparser);
|
||||
}
|
||||
|
||||
xmlrpc = new WebServer(xmlrpcPort);
|
||||
if (xmlrpcPort.getInetAddress() != null) {
|
||||
xmlrpc = new WebServer(xmlrpcPort.getPort(), xmlrpcPort.getInetAddress());
|
||||
} else {
|
||||
xmlrpc = new WebServer(xmlrpcPort.getPort());
|
||||
}
|
||||
|
||||
if (paranoid) {
|
||||
xmlrpc.setParanoid(true);
|
||||
|
@ -454,10 +468,13 @@ public class Server implements IPathElement, Runnable {
|
|||
getLogger().log("Starting XML-RPC server on port " + (xmlrpcPort));
|
||||
}
|
||||
|
||||
if (rmiPort > 0) {
|
||||
if (rmiPort != null) {
|
||||
if (paranoid) {
|
||||
HelmaSocketFactory factory = new HelmaSocketFactory();
|
||||
String rallow = sysProps.getProperty("allowWeb");
|
||||
if (rallow == null) {
|
||||
rallow = sysProps.getProperty("allowRMI");
|
||||
}
|
||||
|
||||
if (rallow != null) {
|
||||
StringTokenizer st = new StringTokenizer(rallow, " ,;");
|
||||
|
@ -470,11 +487,14 @@ public class Server implements IPathElement, Runnable {
|
|||
}
|
||||
|
||||
getLogger().log("Starting RMI server on port " + rmiPort);
|
||||
LocateRegistry.createRegistry(rmiPort);
|
||||
}
|
||||
LocateRegistry.createRegistry(rmiPort.getPort());
|
||||
|
||||
// create application manager
|
||||
appManager = new ApplicationManager(rmiPort, hopHome, appsProps, this);
|
||||
// create application manager which binds to the given RMI port
|
||||
appManager = new ApplicationManager(hopHome, appsProps, this, rmiPort.getPort());
|
||||
} else {
|
||||
// create application manager with RMI port 0
|
||||
appManager = new ApplicationManager(hopHome, appsProps, this, 0);
|
||||
}
|
||||
|
||||
if (xmlrpc != null) {
|
||||
xmlrpc.addHandler("$default", appManager);
|
||||
|
@ -525,11 +545,9 @@ public class Server implements IPathElement, Runnable {
|
|||
}
|
||||
}
|
||||
|
||||
int count = 0;
|
||||
|
||||
while (Thread.currentThread() == mainThread) {
|
||||
try {
|
||||
mainThread.sleep(3000L);
|
||||
Thread.sleep(3000L);
|
||||
} catch (InterruptedException ie) {
|
||||
}
|
||||
|
||||
|
@ -603,15 +621,21 @@ public class Server implements IPathElement, Runnable {
|
|||
/**
|
||||
* A primitive method to check whether a server is already running on our port.
|
||||
*/
|
||||
private void checkRunning(int portNumber) throws Exception {
|
||||
private void checkRunning(InetAddrPort addrPort) throws Exception {
|
||||
InetAddress addr = addrPort.getInetAddress();
|
||||
if (addr == null) {
|
||||
addr = InetAddress.getLocalHost();
|
||||
}
|
||||
try {
|
||||
java.net.Socket socket = new java.net.Socket("localhost", portNumber);
|
||||
} catch (Exception x) {
|
||||
new Socket(addr, addrPort.getPort());
|
||||
} catch (IOException x) {
|
||||
// we couldn't connect to the socket because no server
|
||||
// is running on it yet. Everything's ok.
|
||||
return;
|
||||
}
|
||||
|
||||
// if we got so far, another server is already running on this port and db
|
||||
throw new Exception("Error: Server already running on this port: " + portNumber);
|
||||
throw new Exception("Error: Server already running on this port: " + addrPort);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -35,7 +35,7 @@ public class FilteredClassLoader extends URLClassLoader {
|
|||
* so that they can load classes from jar files in the app directories.
|
||||
*/
|
||||
public FilteredClassLoader(URL[] urls) {
|
||||
super(urls);
|
||||
super(urls, null);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -27,7 +27,7 @@ import java.util.ArrayList;
|
|||
|
||||
/**
|
||||
* Helma bootstrap class. Figures out Helma home directory, sets up class path and
|
||||
* lauchnes main class.
|
||||
* lauchnes main class. This class must be invoked from a jar file in order to work.
|
||||
*/
|
||||
public class Main {
|
||||
public static final String[] jars = {
|
||||
|
@ -69,21 +69,28 @@ public class Main {
|
|||
// jar:<url>!/{entry}
|
||||
// we strip away the jar: prefix and the !/{entry} suffix
|
||||
// to get the original jar file URL
|
||||
installDir = launcherUrl.toString().substring(4);
|
||||
|
||||
int excl = installDir.indexOf("!");
|
||||
String jarUrl = launcherUrl.toString();
|
||||
|
||||
if (excl > -1) {
|
||||
installDir = installDir.substring(0, excl);
|
||||
launcherUrl = new URL(installDir);
|
||||
|
||||
File f = new File(launcherUrl.getPath());
|
||||
|
||||
installDir = f.getParentFile().getCanonicalPath();
|
||||
if (!jarUrl.startsWith("jar:") || jarUrl.indexOf("!") < 0) {
|
||||
throw new RuntimeException(" Unable to get JAR URL from "+jarUrl);
|
||||
}
|
||||
|
||||
jarUrl = jarUrl.substring(4);
|
||||
|
||||
int excl = jarUrl.indexOf("!");
|
||||
|
||||
jarUrl = jarUrl.substring(0, excl);
|
||||
launcherUrl = new URL(jarUrl);
|
||||
|
||||
File f = new File(launcherUrl.getPath());
|
||||
|
||||
installDir = f.getParentFile().getCanonicalPath();
|
||||
|
||||
} catch (Exception x) {
|
||||
// unable to get Helma installation dir from launcher jar
|
||||
System.err.println("Unable to get Helma installation directory: " + x);
|
||||
System.err.println("Unable to get Helma installation directory: ");
|
||||
System.err.println(x.getMessage());
|
||||
System.exit(2);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -167,7 +167,6 @@ public class TransientNode implements INode, Serializable {
|
|||
* @return ...
|
||||
*/
|
||||
public String getFullName(INode root) {
|
||||
String fullname = "";
|
||||
String divider = null;
|
||||
StringBuffer b = new StringBuffer();
|
||||
TransientNode p = this;
|
||||
|
@ -548,7 +547,7 @@ public class TransientNode implements INode, Serializable {
|
|||
}
|
||||
|
||||
// nodes.remove (node);
|
||||
Object what = nodeMap.remove(node.getName().toLowerCase());
|
||||
nodeMap.remove(node.getName().toLowerCase());
|
||||
|
||||
// Server.throwNodeEvent (new NodeEvent (node, NodeEvent.NODE_REMOVED));
|
||||
// Server.throwNodeEvent (new NodeEvent (this, NodeEvent.SUBNODE_REMOVED, node));
|
||||
|
@ -923,7 +922,7 @@ public class TransientNode implements INode, Serializable {
|
|||
}
|
||||
|
||||
try {
|
||||
Property p = (Property) propMap.remove(propname.toLowerCase());
|
||||
propMap.remove(propname.toLowerCase());
|
||||
|
||||
lastmodified = System.currentTimeMillis();
|
||||
} catch (Exception ignore) {
|
||||
|
|
|
@ -184,63 +184,23 @@ public final class Node implements INode, Serializable {
|
|||
|
||||
String rawParentID = null;
|
||||
|
||||
id = in.readUTF();
|
||||
name = in.readUTF();
|
||||
|
||||
if (version < 5) {
|
||||
rawParentID = (String) in.readObject();
|
||||
} else {
|
||||
parentHandle = (NodeHandle) in.readObject();
|
||||
if (version < 9) {
|
||||
throw new IOException("Can't read pre 1.3.0 HopObject");
|
||||
}
|
||||
|
||||
id = (String) in.readObject();
|
||||
name = (String) in.readObject();
|
||||
state = in.readInt();
|
||||
parentHandle = (NodeHandle) in.readObject();
|
||||
created = in.readLong();
|
||||
lastmodified = in.readLong();
|
||||
|
||||
if (version < 4) {
|
||||
// read away content and contentType, which were dropped
|
||||
in.readObject();
|
||||
in.readObject();
|
||||
}
|
||||
|
||||
subnodes = (ExternalizableVector) in.readObject();
|
||||
links = (ExternalizableVector) in.readObject();
|
||||
|
||||
if (version < 6) {
|
||||
// read away obsolete proplinks list
|
||||
in.readObject();
|
||||
}
|
||||
|
||||
propMap = (Hashtable) in.readObject();
|
||||
anonymous = in.readBoolean();
|
||||
prototype = (String) in.readObject();
|
||||
|
||||
if (version == 2) {
|
||||
prototype = in.readUTF();
|
||||
} else if (version >= 3) {
|
||||
prototype = (String) in.readObject();
|
||||
}
|
||||
|
||||
// if the input version is < 5, we have to do some conversion to make this object work
|
||||
if (version < 5) {
|
||||
if (rawParentID != null) {
|
||||
parentHandle = new NodeHandle(new DbKey(null, rawParentID));
|
||||
}
|
||||
|
||||
if (subnodes != null) {
|
||||
for (int i = 0; i < subnodes.size(); i++) {
|
||||
String s = (String) subnodes.get(i);
|
||||
|
||||
subnodes.set(i, new NodeHandle(new DbKey(null, s)));
|
||||
}
|
||||
}
|
||||
|
||||
if (links != null) {
|
||||
for (int i = 0; i < links.size(); i++) {
|
||||
String s = (String) links.get(i);
|
||||
|
||||
links.set(i, new NodeHandle(new DbKey(null, s)));
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (ClassNotFoundException x) {
|
||||
throw new IOException(x.toString());
|
||||
}
|
||||
|
@ -250,9 +210,10 @@ public final class Node implements INode, Serializable {
|
|||
* Write out this instance to a stream
|
||||
*/
|
||||
private void writeObject(ObjectOutputStream out) throws IOException {
|
||||
out.writeShort(7); // serialization version
|
||||
out.writeUTF(id);
|
||||
out.writeUTF(name);
|
||||
out.writeShort(9); // serialization version
|
||||
out.writeObject(id);
|
||||
out.writeObject(name);
|
||||
out.writeInt(state);
|
||||
out.writeObject(parentHandle);
|
||||
out.writeLong(created);
|
||||
out.writeLong(lastmodified);
|
||||
|
@ -479,7 +440,6 @@ public final class Node implements INode, Serializable {
|
|||
* @return ...
|
||||
*/
|
||||
public String getFullName(INode root) {
|
||||
String fullname = "";
|
||||
String divider = null;
|
||||
StringBuffer b = new StringBuffer();
|
||||
INode p = this;
|
||||
|
@ -834,8 +794,6 @@ public final class Node implements INode, Serializable {
|
|||
node.makePersistentCapable();
|
||||
}
|
||||
|
||||
String n = node.getName();
|
||||
|
||||
// if (n.indexOf('/') > -1)
|
||||
// throw new RuntimeException ("\"/\" found in Node name.");
|
||||
// only mark this node as modified if subnodes are not in relational db
|
||||
|
@ -1148,11 +1106,13 @@ public final class Node implements INode, Serializable {
|
|||
return null;
|
||||
}
|
||||
|
||||
/*
|
||||
DbMapping smap = null;
|
||||
|
||||
if (dbmap != null) {
|
||||
smap = dbmap.getSubnodeMapping();
|
||||
}
|
||||
*/
|
||||
|
||||
Node retval = null;
|
||||
|
||||
|
@ -1286,9 +1246,11 @@ public final class Node implements INode, Serializable {
|
|||
|
||||
// check if the subnode is in relational db and has a link back to this
|
||||
// which needs to be unset
|
||||
/*
|
||||
if (dbmap != null) {
|
||||
Relation srel = dbmap.getSubnodeRelation();
|
||||
}
|
||||
*/
|
||||
|
||||
// check if subnodes are also accessed as properties. If so, also unset the property
|
||||
if ((dbmap != null) && (node.dbmap != null)) {
|
||||
|
@ -1696,9 +1658,13 @@ public final class Node implements INode, Serializable {
|
|||
} else if (propRel != null && propRel.isVirtual()) {
|
||||
// prop was found and explicit property relation is collection -
|
||||
// this is a collection node containing objects stored in the embedded db
|
||||
INode pn = prop.getNodeValue();
|
||||
Node pn = (Node) prop.getNodeValue();
|
||||
if (pn != null) {
|
||||
// do set DbMapping for embedded db collection nodes
|
||||
pn.setDbMapping(propRel.getVirtualMapping());
|
||||
// also set node manager in case this is a mountpoint node
|
||||
// that came in through replication
|
||||
pn.nmgr = nmgr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -183,8 +183,6 @@ public final class NodeManager {
|
|||
*/
|
||||
public void deleteNode(Node node) throws Exception {
|
||||
if (node != null) {
|
||||
String id = node.getID();
|
||||
|
||||
synchronized (this) {
|
||||
Transactor tx = (Transactor) Thread.currentThread();
|
||||
|
||||
|
@ -362,7 +360,7 @@ public final class NodeManager {
|
|||
} else {
|
||||
// node fetched from db is null, cache result using nullNode
|
||||
synchronized (cache) {
|
||||
Node oldnode = (Node) cache.put(key, new Node());
|
||||
cache.put(key, new Node());
|
||||
|
||||
// we ignore the case that onother thread has created the node in the meantime
|
||||
return null;
|
||||
|
|
|
@ -79,13 +79,7 @@ public final class Property implements IProperty, Serializable, Cloneable {
|
|||
|
||||
switch (type) {
|
||||
case STRING:
|
||||
|
||||
// try to convert from old format
|
||||
if (node.version < 7) {
|
||||
value = in.readUTF();
|
||||
} else {
|
||||
value = in.readObject();
|
||||
}
|
||||
value = in.readObject();
|
||||
|
||||
break;
|
||||
|
||||
|
@ -110,13 +104,7 @@ public final class Property implements IProperty, Serializable, Cloneable {
|
|||
break;
|
||||
|
||||
case NODE:
|
||||
|
||||
// try to convert from old format
|
||||
if (node.version > 4) {
|
||||
value = (NodeHandle) in.readObject();
|
||||
} else {
|
||||
value = new NodeHandle(new DbKey(null, in.readUTF()));
|
||||
}
|
||||
value = (NodeHandle) in.readObject();
|
||||
|
||||
break;
|
||||
|
||||
|
|
|
@ -109,7 +109,6 @@ public final class Relation {
|
|||
////////////////////////////////////////////////////////////////////////////////////////////
|
||||
public void update(String desc, Properties props) {
|
||||
Application app = ownType.getApplication();
|
||||
boolean notPrimitive = false;
|
||||
|
||||
if ((desc == null) || "".equals(desc.trim())) {
|
||||
if (propName != null) {
|
||||
|
|
|
@ -91,7 +91,7 @@ public class Replicator implements Runnable {
|
|||
|
||||
try {
|
||||
if (runner != null) {
|
||||
runner.sleep(1000L);
|
||||
Thread.sleep(1000L);
|
||||
}
|
||||
} catch (InterruptedException ir) {
|
||||
runner = null;
|
||||
|
|
|
@ -18,10 +18,7 @@ package helma.objectmodel.db;
|
|||
|
||||
import helma.objectmodel.*;
|
||||
import helma.objectmodel.dom.*;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import java.io.*;
|
||||
import java.util.Date;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
|
@ -200,7 +197,7 @@ public final class XmlDatabase implements IDatabase {
|
|||
|
||||
writer.setMaxLevels(1);
|
||||
|
||||
boolean result = writer.write((Node) node);
|
||||
writer.write((Node) node);
|
||||
|
||||
writer.close();
|
||||
}
|
||||
|
@ -225,7 +222,7 @@ public final class XmlDatabase implements IDatabase {
|
|||
*
|
||||
* @param enc ...
|
||||
*/
|
||||
public void setEncoding(String enc) {
|
||||
public void setEncoding(String encoding) {
|
||||
this.encoding = encoding;
|
||||
}
|
||||
|
||||
|
|
|
@ -162,7 +162,7 @@ public abstract class AbstractServletClient extends HttpServlet {
|
|||
}
|
||||
}
|
||||
} catch (Exception upx) {
|
||||
sendError(response, response.SC_REQUEST_ENTITY_TOO_LARGE,
|
||||
sendError(response, HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE,
|
||||
"Sorry, upload size exceeds limit of " + uploadLimit +
|
||||
"kB.");
|
||||
|
||||
|
@ -256,8 +256,6 @@ public abstract class AbstractServletClient extends HttpServlet {
|
|||
ResponseTrans restrans = execute(reqtrans);
|
||||
|
||||
// set cookies
|
||||
int ncookies = restrans.countCookies();
|
||||
|
||||
if (restrans.countCookies() > 0) {
|
||||
CookieTrans[] resCookies = restrans.getCookies();
|
||||
|
||||
|
@ -275,11 +273,11 @@ public abstract class AbstractServletClient extends HttpServlet {
|
|||
} catch (Exception x) {
|
||||
try {
|
||||
if (debug) {
|
||||
sendError(response, response.SC_INTERNAL_SERVER_ERROR,
|
||||
sendError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
|
||||
"Error in request handler:" + x);
|
||||
x.printStackTrace();
|
||||
} else {
|
||||
sendError(response, response.SC_INTERNAL_SERVER_ERROR,
|
||||
sendError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
|
||||
"The server encountered an error while processing your request. " +
|
||||
"Please check back later.");
|
||||
}
|
||||
|
@ -403,9 +401,9 @@ public abstract class AbstractServletClient extends HttpServlet {
|
|||
|
||||
// send status code 303 for HTTP 1.1, 302 otherwise
|
||||
if (isOneDotOne(req.getProtocol())) {
|
||||
res.setStatus(res.SC_SEE_OTHER);
|
||||
res.setStatus(HttpServletResponse.SC_SEE_OTHER);
|
||||
} else {
|
||||
res.setStatus(res.SC_MOVED_TEMPORARILY);
|
||||
res.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
|
||||
}
|
||||
|
||||
res.setContentType("text/html");
|
||||
|
@ -517,9 +515,13 @@ public abstract class AbstractServletClient extends HttpServlet {
|
|||
HashMap parameters = new HashMap();
|
||||
|
||||
// Parse any query string parameters from the request
|
||||
try {
|
||||
parseParameters(parameters, request.getQueryString().getBytes(), encoding);
|
||||
} catch (Exception e) {
|
||||
String queryString = request.getQueryString();
|
||||
if (queryString != null) {
|
||||
try {
|
||||
parseParameters(parameters, queryString.getBytes(), encoding);
|
||||
} catch (Exception e) {
|
||||
System.err.println("Error parsing query string: "+e);
|
||||
}
|
||||
}
|
||||
|
||||
// Parse any posted parameters in the input stream
|
||||
|
@ -573,7 +575,6 @@ public abstract class AbstractServletClient extends HttpServlet {
|
|||
public static void parseParameters(Map map, byte[] data, String encoding)
|
||||
throws UnsupportedEncodingException {
|
||||
if ((data != null) && (data.length > 0)) {
|
||||
int pos = 0;
|
||||
int ix = 0;
|
||||
int ox = 0;
|
||||
String key = null;
|
||||
|
|
|
@ -1,4 +1,14 @@
|
|||
/* $Log$
|
||||
/*
|
||||
* $Log$
|
||||
* Revision 1.2 2003/07/08 13:52:35 hannes
|
||||
* Checked in patch from Stefan Matthias Aust:
|
||||
* * Don't call static methods as instance methods
|
||||
* * Remove unused imports
|
||||
* * Remove variables that are never read
|
||||
*
|
||||
* Revision 1.1 2002/10/31 08:39:34 hannes
|
||||
* Added GNU Diff class from http://www.bmsi.com/java/#diff
|
||||
*
|
||||
* Revision 1.3 2000/03/03 21:58:03 stuart
|
||||
* move discard_confusing_lines and shift_boundaries to class file_data
|
||||
*
|
||||
|
@ -312,7 +322,7 @@ public class Diff {
|
|||
|
||||
int d = diag (xoff, xlim, yoff, ylim);
|
||||
int c = cost;
|
||||
int f = fdiag[fdiagoff + d];
|
||||
//int f = fdiag[fdiagoff + d];
|
||||
int b = bdiag[bdiagoff + d];
|
||||
|
||||
if (c == 1)
|
||||
|
|
|
@ -473,8 +473,6 @@ public final class Logger {
|
|||
}
|
||||
|
||||
public void run() {
|
||||
long start = System.currentTimeMillis();
|
||||
|
||||
try {
|
||||
GZIPOutputStream zip = new GZIPOutputStream(new FileOutputStream(temp));
|
||||
BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
|
||||
|
|
|
@ -64,7 +64,7 @@ public class XmlUtils {
|
|||
if (obj instanceof String) {
|
||||
try {
|
||||
// first try to interpret string as URL
|
||||
URL url = new URL(obj.toString());
|
||||
new URL(obj.toString());
|
||||
|
||||
doc = parser.parse(obj.toString());
|
||||
} catch (MalformedURLException nourl) {
|
||||
|
|
Loading…
Add table
Reference in a new issue