- switched logging ot application where possible
- implemented new _parent spec, including virtual nodes - removed some rarely-used property settings for apps and db directory
This commit is contained in:
parent
9e05814d90
commit
7904cf2bca
10 changed files with 114 additions and 134 deletions
|
@ -25,8 +25,8 @@ public class DbMapping {
|
|||
DbSource source;
|
||||
String table;
|
||||
|
||||
String[] parent; // list of properties to try for parent
|
||||
Boolean[] anonymous; // are parent relations anonymous or not?
|
||||
ParentInfo[] parent; // list of properties to try for parent
|
||||
|
||||
DbMapping subnodes;
|
||||
DbMapping properties;
|
||||
private Relation subnodesRel;
|
||||
|
@ -110,6 +110,16 @@ public class DbMapping {
|
|||
|
||||
nameField = props.getProperty ("_name");
|
||||
|
||||
String parentMapping = props.getProperty ("_parent");
|
||||
if (parentMapping != null) {
|
||||
// comma-separated list of properties to be used as parent
|
||||
StringTokenizer st = new StringTokenizer (parentMapping, ",;");
|
||||
parent = new ParentInfo[st.countTokens()];
|
||||
for (int i=0; i<parent.length; i++)
|
||||
parent[i] = new ParentInfo (st.nextToken().trim());
|
||||
} else
|
||||
parent = null;
|
||||
|
||||
lastTypeChange = lastmod;
|
||||
// set the cached schema & keydef to null so it's rebuilt the next time around
|
||||
schema = null;
|
||||
|
@ -124,7 +134,7 @@ public class DbMapping {
|
|||
public synchronized void rewire () {
|
||||
|
||||
// if (table != null && source != null) {
|
||||
// IServer.getLogger().log ("set data source for "+typename+" to "+source);
|
||||
// app.logEvent ("set data source for "+typename+" to "+source);
|
||||
Hashtable p2d = new Hashtable ();
|
||||
Hashtable d2p = new Hashtable ();
|
||||
|
||||
|
@ -138,36 +148,16 @@ public class DbMapping {
|
|||
p2d.put (propName, rel);
|
||||
if (rel.localField != null)
|
||||
d2p.put (rel.localField, rel);
|
||||
// IServer.getLogger().log ("Mapping "+propName+" -> "+dbField);
|
||||
// app.logEvent ("Mapping "+propName+" -> "+dbField);
|
||||
}
|
||||
} catch (Exception x) {
|
||||
IServer.getLogger ().log ("Error in type.properties: "+x.getMessage ());
|
||||
app.logEvent ("Error in type.properties: "+x.getMessage ());
|
||||
}
|
||||
}
|
||||
|
||||
prop2db = p2d;
|
||||
db2prop = d2p;
|
||||
|
||||
String ano = props.getProperty ("_anonymous");
|
||||
if (ano != null) {
|
||||
// comma-separated list of true/false values
|
||||
StringTokenizer st = new StringTokenizer (ano, ",; ");
|
||||
anonymous = new Boolean[st.countTokens()];
|
||||
for (int i=0; i<anonymous.length; i++)
|
||||
anonymous[i] = "false".equalsIgnoreCase (st.nextToken().trim()) ? Boolean.FALSE : Boolean.TRUE;
|
||||
} else
|
||||
anonymous = null;
|
||||
|
||||
String parentMapping = props.getProperty ("_parent");
|
||||
if (parentMapping != null) {
|
||||
// comma-separated list of properties to be used as parent
|
||||
StringTokenizer st = new StringTokenizer (parentMapping, ",; ");
|
||||
parent = new String[st.countTokens()];
|
||||
for (int i=0; i<parent.length; i++)
|
||||
parent[i] = st.nextToken().trim();
|
||||
} else
|
||||
parent = null;
|
||||
|
||||
String subnodeMapping = props.getProperty ("_subnodes");
|
||||
if (subnodeMapping != null) {
|
||||
try {
|
||||
|
@ -177,7 +167,7 @@ public class DbMapping {
|
|||
else
|
||||
subnodes = (DbMapping) app.getDbMapping (subnodeMapping);
|
||||
} catch (Exception x) {
|
||||
IServer.getLogger ().log ("Error in type.properties: "+x.getMessage ());
|
||||
app.logEvent ("Error in type.properties: "+x.getMessage ());
|
||||
subnodesRel = null;
|
||||
}
|
||||
} else
|
||||
|
@ -195,13 +185,13 @@ public class DbMapping {
|
|||
if (propertiesRel.subnodesAreProperties && subnodesRel != null)
|
||||
propertiesRel.groupby = subnodesRel.groupby;
|
||||
} catch (Exception x) {
|
||||
IServer.getLogger ().log ("Error in type.properties: "+x.getMessage ());
|
||||
app.logEvent ("Error in type.properties: "+x.getMessage ());
|
||||
propertiesRel = null;
|
||||
}
|
||||
} else
|
||||
propertiesRel = null;
|
||||
|
||||
IServer.getLogger().log ("rewiring: "+this);
|
||||
app.logEvent ("rewiring: "+this);
|
||||
}
|
||||
|
||||
|
||||
|
@ -264,13 +254,13 @@ public class DbMapping {
|
|||
return (Relation) prop2db.get (propName);
|
||||
}
|
||||
|
||||
public synchronized String[] getParentPropNames () {
|
||||
public synchronized ParentInfo[] getParentInfo () {
|
||||
return parent;
|
||||
}
|
||||
|
||||
public synchronized Boolean[] getAnonymous () {
|
||||
/* public synchronized Boolean[] getAnonymous () {
|
||||
return anonymous;
|
||||
}
|
||||
}*/
|
||||
|
||||
public DbMapping getSubnodeMapping () {
|
||||
return subnodes;
|
||||
|
@ -383,6 +373,7 @@ public class DbMapping {
|
|||
return lastTypeChange;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ public abstract class IServer {
|
|||
public static SystemProperties sysProps, dbProps;
|
||||
public static Hashtable dbSources;
|
||||
|
||||
protected static String hopHome = null;
|
||||
protected static File hopHome = null;
|
||||
|
||||
private static Logger logger;
|
||||
|
||||
|
@ -65,7 +65,7 @@ public abstract class IServer {
|
|||
return logger;
|
||||
}
|
||||
|
||||
public static String getHopHome () {
|
||||
public static File getHopHome () {
|
||||
return hopHome;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,15 +24,14 @@ public class ApplicationManager {
|
|||
|
||||
private Hashtable applications;
|
||||
private int port;
|
||||
private File appHome, dbHome;
|
||||
private File hopHome;
|
||||
private SystemProperties props;
|
||||
private Server server;
|
||||
private long lastModified;
|
||||
|
||||
public ApplicationManager (int port, File appHome, File dbHome, SystemProperties props, Server server) {
|
||||
public ApplicationManager (int port, File hopHome, SystemProperties props, Server server) {
|
||||
this.port = port;
|
||||
this.appHome = appHome;
|
||||
this.dbHome = dbHome;
|
||||
this.hopHome = hopHome;
|
||||
this.props = props;
|
||||
this.server = server;
|
||||
applications = new Hashtable ();
|
||||
|
@ -70,7 +69,7 @@ public class ApplicationManager {
|
|||
private void start (String appName) {
|
||||
IServer.getLogger().log ("Building application "+appName);
|
||||
try {
|
||||
Application app = new Application (appName, dbHome, appHome);
|
||||
Application app = new Application (appName, Server.sysProps, hopHome);
|
||||
applications.put (appName, app);
|
||||
// if we're running with the embedded web server, set app base uri to /appname
|
||||
if (server.websrv != null)
|
||||
|
|
|
@ -24,13 +24,15 @@ public class DbWrapper {
|
|||
volatile long txncount=0;
|
||||
|
||||
private File dbBaseDir;
|
||||
private NodeManager nmgr;
|
||||
private String dbHome;
|
||||
|
||||
public DbWrapper (String dbHome, String dbFilename, boolean useTx) throws DbException {
|
||||
public DbWrapper (String dbHome, String dbFilename, NodeManager nmgr, boolean useTx) throws DbException {
|
||||
|
||||
this.dbHome = dbHome;
|
||||
this.nmgr = nmgr;
|
||||
|
||||
try {
|
||||
|
||||
this.dbHome = dbHome;
|
||||
dbBaseDir = new File (dbHome);
|
||||
if (!dbBaseDir.exists())
|
||||
dbBaseDir.mkdirs();
|
||||
|
@ -71,12 +73,12 @@ public class DbWrapper {
|
|||
loaded = true;
|
||||
|
||||
} catch (NoClassDefFoundError noclass) {
|
||||
Server.getLogger().log ("Warning: Using internal file based db as fallback.");
|
||||
Server.getLogger().log ("Reason: "+noclass);
|
||||
nmgr.app.logEvent ("Warning: Using internal file based db as fallback.");
|
||||
nmgr.app.logEvent ("Reason: "+noclass);
|
||||
loaded = false;
|
||||
} catch (UnsatisfiedLinkError nolib) {
|
||||
Server.getLogger().log ("Warning: Using internal file based db as fallback.");
|
||||
Server.getLogger().log ("Reason: "+nolib);
|
||||
nmgr.app.logEvent ("Warning: Using internal file based db as fallback.");
|
||||
nmgr.app.logEvent ("Reason: "+nolib);
|
||||
loaded = false;
|
||||
}
|
||||
|
||||
|
@ -89,7 +91,7 @@ public class DbWrapper {
|
|||
// closing the dbenv leads to segfault when app is restarted
|
||||
// dbenv.close (0);
|
||||
// dbenv.remove (dbHome, Db.DB_FORCE);
|
||||
Server.getLogger ().log ("Closed Berkeley DB");
|
||||
nmgr.app.logEvent ("Closed Berkeley DB");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -126,7 +128,7 @@ public class DbWrapper {
|
|||
dbenv.txn_checkpoint (0, 0, 0); // for berkeley 3.0, remove third 0 parameter
|
||||
txncount = 0;
|
||||
lastCheckpoint = now;
|
||||
Server.getLogger().log ("Spent "+(System.currentTimeMillis()-now)+" in checkpoint");
|
||||
nmgr.app.logEvent ("Spent "+(System.currentTimeMillis()-now)+" in checkpoint");
|
||||
}
|
||||
|
||||
public IDGenerator getIDGenerator (DbTxn txn, String kstr) throws Exception {
|
||||
|
@ -220,7 +222,7 @@ public class DbWrapper {
|
|||
value.set_size (vbuf.length);
|
||||
|
||||
db.put (txn, key, value, 0);
|
||||
// IServer.getLogger().log ("saved "+obj+", size = "+vbuf.length);
|
||||
// nmgr.app.logEvent ("saved "+obj+", size = "+vbuf.length);
|
||||
}
|
||||
|
||||
private void deleteFromDB (DbTxn txn, String kstr) throws Exception {
|
||||
|
|
|
@ -325,12 +325,12 @@ public class Node implements INode, Serializable {
|
|||
if (!current.isActive ())
|
||||
throw new helma.framework.TimeoutException ();
|
||||
if (state == INVALID) {
|
||||
IServer.getLogger().log ("Got Invalid Node: "+this);
|
||||
nmgr.logEvent ("Got Invalid Node: "+this);
|
||||
Thread.dumpStack ();
|
||||
throw new ConcurrencyException ("Node "+this+" was invalidated by another thread.");
|
||||
}
|
||||
if (lock != null && lock != current && lock.isAlive () && lock.isActive ()) {
|
||||
IServer.getLogger().log ("Concurrency conflict for "+this+", lock held by "+lock);
|
||||
nmgr.logEvent ("Concurrency conflict for "+this+", lock held by "+lock);
|
||||
throw new ConcurrencyException ("Tried to modify "+this+" from two threads at the same time.");
|
||||
}
|
||||
current.visitNode (this);
|
||||
|
@ -593,20 +593,24 @@ public class Node implements INode, Serializable {
|
|||
public INode getParent () {
|
||||
|
||||
// check what's specified in the type.properties for this node.
|
||||
String[] parentProps = null;
|
||||
ParentInfo[] parentInfo = null;
|
||||
if (dbmap != null && dbmap.isRelational ())
|
||||
parentProps = dbmap.getParentPropNames ();
|
||||
parentInfo = dbmap.getParentInfo ();
|
||||
|
||||
// check if current parent candidate matches presciption, if not, try to get it
|
||||
if (parentProps != null) {
|
||||
for (int i=0; i<parentProps.length; i++) {
|
||||
INode pn = getNode (parentProps[i], false);
|
||||
if (parentInfo != null) {
|
||||
for (int i=0; i<parentInfo.length; i++) {
|
||||
ParentInfo pinfo = parentInfo[i];
|
||||
INode pn = getNode (pinfo.propname, false);
|
||||
if (pinfo.isroot && pn == null)
|
||||
pn = nmgr.getNode ("0", nmgr.getDbMapping ("root"));
|
||||
if (pn != null) {
|
||||
// see if dbmapping specifies anonymity for this node
|
||||
Boolean[] ano = dbmap.getAnonymous ();
|
||||
if (ano != null && ano.length > i)
|
||||
anonymous = ano[i].booleanValue();
|
||||
return pn;
|
||||
anonymous = !pinfo.named;
|
||||
if (pinfo.virtualname != null)
|
||||
pn = pn.getNode (pinfo.virtualname, false);
|
||||
if (pn != null)
|
||||
return pn;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -895,7 +899,7 @@ public class Node implements INode, Serializable {
|
|||
return node;
|
||||
}
|
||||
} catch (Exception noluck) {
|
||||
IServer.getLogger ().log ("Error creating group-by node for "+sid+": "+noluck);
|
||||
nmgr.logEvent ("Error creating group-by node for "+sid+": "+noluck);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -911,7 +915,7 @@ public class Node implements INode, Serializable {
|
|||
|
||||
|
||||
public void removeNode (INode node) {
|
||||
IServer.getLogger().log ("removing: "+ node);
|
||||
nmgr.logEvent ("removing: "+ node);
|
||||
Node n = (Node) node;
|
||||
checkWriteLock ();
|
||||
n.checkWriteLock ();
|
||||
|
@ -969,7 +973,7 @@ public class Node implements INode, Serializable {
|
|||
// Server.throwNodeEvent (new NodeEvent (node, NodeEvent.NODE_REMOVED));
|
||||
// Server.throwNodeEvent (new NodeEvent (this, NodeEvent.SUBNODE_REMOVED, node));
|
||||
lastmodified = System.currentTimeMillis ();
|
||||
// IServer.getLogger().log ("released node "+node +" from "+this+" oldobj = "+what);
|
||||
// nmgr.logEvent ("released node "+node +" from "+this+" oldobj = "+what);
|
||||
if (state == CLEAN) markAs (MODIFIED);
|
||||
}
|
||||
|
||||
|
@ -994,7 +998,7 @@ public class Node implements INode, Serializable {
|
|||
String pid = (String) e1.nextElement ();
|
||||
Node pnode = nmgr.getNode (pid, null);
|
||||
if (pnode != null) {
|
||||
IServer.getLogger().log("Warning: Can't unset node property of "+pnode.getFullName ());
|
||||
nmgr.logEvent("Warning: Can't unset node property of "+pnode.getFullName ());
|
||||
}
|
||||
} catch (Exception ignore) {}
|
||||
}
|
||||
|
@ -1163,7 +1167,7 @@ public class Node implements INode, Serializable {
|
|||
}
|
||||
|
||||
protected Property getProperty (String propname, boolean inherit) {
|
||||
// IServer.getLogger().log ("GETTING PROPERTY: "+propname);
|
||||
// nmgr.logEvent ("GETTING PROPERTY: "+propname);
|
||||
if (propname == null)
|
||||
return null;
|
||||
Property prop = propMap == null ? null : (Property) propMap.get (propname.toLowerCase ());
|
||||
|
@ -1275,7 +1279,7 @@ public class Node implements INode, Serializable {
|
|||
}
|
||||
|
||||
public void setString (String propname, String value) {
|
||||
// IServer.getLogger().log ("setting String prop");
|
||||
// nmgr.logEvent ("setting String prop");
|
||||
checkWriteLock ();
|
||||
|
||||
if (propMap == null)
|
||||
|
@ -1337,7 +1341,7 @@ public class Node implements INode, Serializable {
|
|||
}
|
||||
|
||||
public void setInteger (String propname, long value) {
|
||||
// IServer.getLogger().log ("setting bool prop");
|
||||
// nmgr.logEvent ("setting bool prop");
|
||||
checkWriteLock ();
|
||||
|
||||
if (propMap == null)
|
||||
|
@ -1360,7 +1364,7 @@ public class Node implements INode, Serializable {
|
|||
}
|
||||
|
||||
public void setFloat (String propname, double value) {
|
||||
// IServer.getLogger().log ("setting bool prop");
|
||||
// nmgr.logEvent ("setting bool prop");
|
||||
checkWriteLock ();
|
||||
|
||||
if (propMap == null)
|
||||
|
@ -1383,7 +1387,7 @@ public class Node implements INode, Serializable {
|
|||
}
|
||||
|
||||
public void setBoolean (String propname, boolean value) {
|
||||
// IServer.getLogger().log ("setting bool prop");
|
||||
// nmgr.logEvent ("setting bool prop");
|
||||
checkWriteLock ();
|
||||
|
||||
if (propMap == null)
|
||||
|
@ -1407,7 +1411,7 @@ public class Node implements INode, Serializable {
|
|||
|
||||
|
||||
public void setDate (String propname, Date value) {
|
||||
// IServer.getLogger().log ("setting date prop");
|
||||
// nmgr.logEvent ("setting date prop");
|
||||
checkWriteLock ();
|
||||
|
||||
if (propMap == null)
|
||||
|
@ -1430,7 +1434,7 @@ public class Node implements INode, Serializable {
|
|||
}
|
||||
|
||||
public void setJavaObject (String propname, Object value) {
|
||||
// IServer.getLogger().log ("setting jobject prop");
|
||||
// nmgr.logEvent ("setting jobject prop");
|
||||
checkWriteLock ();
|
||||
|
||||
if (propMap == null)
|
||||
|
@ -1453,7 +1457,7 @@ public class Node implements INode, Serializable {
|
|||
}
|
||||
|
||||
public void setNode (String propname, INode value) {
|
||||
// IServer.getLogger().log ("setting node prop");
|
||||
// nmgr.logEvent ("setting node prop");
|
||||
checkWriteLock ();
|
||||
|
||||
Node n = null;
|
||||
|
@ -1473,8 +1477,8 @@ public class Node implements INode, Serializable {
|
|||
n.setParent (this);
|
||||
n.name = propname;
|
||||
n.anonymous = false;
|
||||
// IServer.getLogger().log ("adopted named node: "+n.getFullName ());
|
||||
} // else IServer.getLogger().log ("not adopted: "+n.getFullName ());
|
||||
// nmgr.logEvent ("adopted named node: "+n.getFullName ());
|
||||
} // else nmgr.logEvent ("not adopted: "+n.getFullName ());
|
||||
|
||||
if (propMap == null)
|
||||
propMap = new Hashtable ();
|
||||
|
@ -1689,7 +1693,7 @@ public class Node implements INode, Serializable {
|
|||
|
||||
byte retval[] = new byte[content.length];
|
||||
System.arraycopy (content, 0, retval, 0, content.length);
|
||||
// IServer.getLogger().log ("copied "+retval.length+ " bytes");
|
||||
// nmgr.logEvent ("copied "+retval.length+ " bytes");
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ public final class NodeManager {
|
|||
// Make actual cache size bigger, since we use it only up to the threshold
|
||||
// cache = new CacheMap ((int) Math.ceil (cacheSize/0.75f), 0.75f);
|
||||
cache = new CacheMap (cacheSize, 0.75f);
|
||||
IServer.getLogger().log ("set up node cache ("+cacheSize+")");
|
||||
app.logEvent ("set up node cache ("+cacheSize+")");
|
||||
|
||||
safe = new WrappedNodeManager (this);
|
||||
|
||||
|
@ -55,7 +55,7 @@ public final class NodeManager {
|
|||
idBaseValue = Math.max (1l, idBaseValue); // 0 and 1 are reserved for root nodes
|
||||
} catch (NumberFormatException ignore) {}
|
||||
|
||||
db = new DbWrapper (dbHome, Server.dbFilename, Server.useTransactions);
|
||||
db = new DbWrapper (dbHome, Server.dbFilename, this, Server.useTransactions);
|
||||
initDb ();
|
||||
|
||||
logSql = "true".equalsIgnoreCase(props.getProperty ("logsql"));
|
||||
|
@ -287,7 +287,7 @@ public final class NodeManager {
|
|||
if (dbm == null || !dbm.isRelational ()) {
|
||||
db.save (txn, node.getID (), node);
|
||||
} else {
|
||||
IServer.getLogger().log ("inserting relational node: "+node.getID ());
|
||||
app.logEvent ("inserting relational node: "+node.getID ());
|
||||
TableDataSet tds = null;
|
||||
try {
|
||||
tds = new TableDataSet (dbm.getConnection (), dbm.getSchema (), dbm.getKeyDef ());
|
||||
|
@ -553,7 +553,7 @@ public final class NodeManager {
|
|||
}
|
||||
|
||||
if (logSql)
|
||||
IServer.getLogger().log ("### getNodeIDs: "+qds.getSelectString());
|
||||
app.logEvent ("### getNodeIDs: "+qds.getSelectString());
|
||||
|
||||
qds.fetchRecords ();
|
||||
for (int i=0; i<qds.size (); i++) {
|
||||
|
@ -610,7 +610,7 @@ public final class NodeManager {
|
|||
}
|
||||
|
||||
if (logSql)
|
||||
IServer.getLogger().log ("### getNodes: "+tds.getSelectString());
|
||||
app.logEvent ("### getNodes: "+tds.getSelectString());
|
||||
|
||||
tds.fetchRecords ();
|
||||
for (int i=0; i<tds.size (); i++) {
|
||||
|
@ -668,7 +668,7 @@ public final class NodeManager {
|
|||
}
|
||||
|
||||
if (logSql)
|
||||
IServer.getLogger().log ("### countNodes: "+qds.getSelectString());
|
||||
app.logEvent ("### countNodes: "+qds.getSelectString());
|
||||
|
||||
qds.fetchRecords ();
|
||||
if (qds.size () == 0)
|
||||
|
@ -712,7 +712,7 @@ public final class NodeManager {
|
|||
qds = new QueryDataSet (con, q);
|
||||
|
||||
if (logSql)
|
||||
IServer.getLogger().log ("### getPropertyNames: "+qds.getSelectString());
|
||||
app.logEvent ("### getPropertyNames: "+qds.getSelectString());
|
||||
|
||||
qds.fetchRecords ();
|
||||
for (int i=0; i<qds.size (); i++) {
|
||||
|
@ -751,7 +751,7 @@ public final class NodeManager {
|
|||
tds.where (dbm.getIDField ()+" = '"+kstr+"'");
|
||||
|
||||
if (logSql)
|
||||
IServer.getLogger().log ("### getNodeByKey: "+tds.getSelectString());
|
||||
app.logEvent ("### getNodeByKey: "+tds.getSelectString());
|
||||
|
||||
tds.fetchRecords ();
|
||||
|
||||
|
@ -858,7 +858,7 @@ public final class NodeManager {
|
|||
tds.where (where.toString ());
|
||||
|
||||
if (logSql)
|
||||
IServer.getLogger().log ("### getNodeByRelation: "+tds.getSelectString());
|
||||
app.logEvent ("### getNodeByRelation: "+tds.getSelectString());
|
||||
|
||||
tds.fetchRecords ();
|
||||
|
||||
|
|
|
@ -152,7 +152,7 @@ public final class Property implements IProperty, Serializable, Cloneable {
|
|||
this.lvalue = date.getTime ();
|
||||
return;
|
||||
} catch (ParseException nodate) {
|
||||
IServer.getLogger().log ("Couldn't parse date: was expecting something like "+dateformat.format (new Date()));
|
||||
node.nmgr.logEvent ("Couldn't parse date: was expecting something like "+dateformat.format (new Date()));
|
||||
// store as plain string
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,7 +35,6 @@ import com.sleepycat.db.*;
|
|||
static String dbPropfile = "db.properties";
|
||||
static String appsPropfile = "apps.properties";
|
||||
static SystemProperties appsProps;
|
||||
static String dbDir = null;
|
||||
static int port = 5055;
|
||||
static int webport = 0;
|
||||
|
||||
|
@ -47,9 +46,11 @@ import com.sleepycat.db.*;
|
|||
|
||||
useTransactions = true;
|
||||
|
||||
String homeDir = null;
|
||||
|
||||
for (int i=0; i<args.length; i++) {
|
||||
if (args[i].equals ("-h") && i+1<args.length)
|
||||
hopHome = args[++i];
|
||||
homeDir = args[++i];
|
||||
else if (args[i].equals ("-f") && i+1<args.length)
|
||||
propfile = args[++i];
|
||||
else if (args[i].equals ("-t"))
|
||||
|
@ -73,17 +74,21 @@ import com.sleepycat.db.*;
|
|||
// get main property file from home dir or vice versa, depending on what we have.
|
||||
// get property file from hopHome
|
||||
if (propfile == null) {
|
||||
if (hopHome != null)
|
||||
propfile = new File (hopHome, "server.properties").getAbsolutePath ();
|
||||
if (homeDir != null)
|
||||
propfile = new File (homeDir, "server.properties").getAbsolutePath ();
|
||||
else
|
||||
propfile = new File ("server.properties").getAbsolutePath ();
|
||||
}
|
||||
|
||||
sysProps = new SystemProperties (propfile);
|
||||
// get hopHome from property file
|
||||
if (hopHome == null)
|
||||
hopHome = sysProps.getProperty ("hophome");
|
||||
if (hopHome == null)
|
||||
hopHome = new File (propfile).getParent ();
|
||||
if (homeDir == null)
|
||||
homeDir = sysProps.getProperty ("hophome");
|
||||
if (homeDir == null)
|
||||
homeDir = new File (propfile).getParent ();
|
||||
|
||||
// create hopHome File object
|
||||
hopHome = new File (homeDir);
|
||||
|
||||
getLogger().log ("propfile = "+propfile);
|
||||
getLogger().log ("hopHome = "+hopHome);
|
||||
|
@ -99,35 +104,14 @@ import com.sleepycat.db.*;
|
|||
System.exit (0);
|
||||
}
|
||||
|
||||
dbDir = sysProps.getProperty ("dbhome", "db");
|
||||
File helper = new File (dbDir);
|
||||
if (hopHome != null && !helper.isAbsolute ())
|
||||
helper = new File (hopHome, dbDir);
|
||||
dbDir = helper.getAbsolutePath ();
|
||||
getLogger().log ("dbHome = "+dbDir);
|
||||
|
||||
dbPropfile = sysProps.getProperty ("dbpropfile", "db.properties");
|
||||
helper = new File (dbPropfile);
|
||||
if (hopHome != null && !helper.isAbsolute ())
|
||||
helper = new File (hopHome, dbPropfile);
|
||||
File helper = new File (hopHome, "db.properties");
|
||||
dbPropfile = helper.getAbsolutePath ();
|
||||
getLogger().log ("dbPropfile = "+dbPropfile);
|
||||
|
||||
appsPropfile = sysProps.getProperty ("appspropfile", "apps.properties");
|
||||
helper = new File (appsPropfile);
|
||||
if (hopHome != null && !helper.isAbsolute ())
|
||||
helper = new File (hopHome, appsPropfile);
|
||||
helper = new File (hopHome, "apps.properties");
|
||||
appsPropfile = helper.getAbsolutePath ();
|
||||
getLogger().log ("appsPropfile = "+appsPropfile);
|
||||
|
||||
File libdir = new File (hopHome, "lib");
|
||||
Properties p = System.getProperties ();
|
||||
String libpath = p.getProperty ("java.library.path");
|
||||
if (libpath != null && libpath.length () > 0)
|
||||
p.put ("java.library.path", libpath+System.getProperty("path.separator")+libdir.getCanonicalPath());
|
||||
else
|
||||
p.put ("java.library.path", libdir.getCanonicalPath());
|
||||
|
||||
paranoid = "true".equalsIgnoreCase (sysProps.getProperty ("paranoid"));
|
||||
|
||||
String language = sysProps.getProperty ("language");
|
||||
|
@ -225,21 +209,13 @@ import com.sleepycat.db.*;
|
|||
|
||||
|
||||
// start application framework
|
||||
String appDir = sysProps.getProperty ("apphome", "apps");
|
||||
File appHome = new File (appDir);
|
||||
if (hopHome != null && !appHome.isAbsolute())
|
||||
appHome = new File (hopHome, appDir);
|
||||
appsProps = new SystemProperties (appsPropfile);
|
||||
File dbHome = new File (dbDir);
|
||||
appManager = new ApplicationManager (port, appHome, dbHome, appsProps, this);
|
||||
appManager = new ApplicationManager (port, hopHome, appsProps, this);
|
||||
|
||||
|
||||
} catch (Exception gx) {
|
||||
getLogger().log ("Error initializing embedded database: "+gx);
|
||||
gx.printStackTrace ();
|
||||
/* try {
|
||||
transactor.abort ();
|
||||
} catch (Exception ignore) {} */
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -137,19 +137,19 @@ public class Transactor extends Thread {
|
|||
nmgr.insertNode (nmgr.db, txn, node);
|
||||
node.setState (Node.CLEAN);
|
||||
ins++;
|
||||
IServer.getLogger().log ("inserted: Node "+node.getName ()+"/"+node.getID ());
|
||||
nmgr.app.logEvent ("inserted: Node "+node.getName ()+"/"+node.getID ());
|
||||
} else if (nstate == Node.MODIFIED) {
|
||||
nmgr.updateNode (nmgr.db, txn, node);
|
||||
node.setState (Node.CLEAN);
|
||||
upd++;
|
||||
IServer.getLogger().log ("updated: Node "+node.getName ()+"/"+node.getID ());
|
||||
nmgr.app.logEvent ("updated: Node "+node.getName ()+"/"+node.getID ());
|
||||
} else if (nstate == Node.DELETED) {
|
||||
// IServer.getLogger().log ("deleted: "+node.getFullName ()+" ("+node.getName ()+")");
|
||||
// nmgr.app.logEvent ("deleted: "+node.getFullName ()+" ("+node.getName ()+")");
|
||||
nmgr.deleteNode (nmgr.db, txn, node);
|
||||
nmgr.evictNode (node);
|
||||
dlt++;
|
||||
} else {
|
||||
// IServer.getLogger().log ("noop: "+node.getFullName ());
|
||||
// nmgr.app.logEvent ("noop: "+node.getFullName ());
|
||||
}
|
||||
node.clearWriteLock ();
|
||||
}
|
||||
|
@ -168,7 +168,7 @@ public class Transactor extends Thread {
|
|||
txn = null;
|
||||
}
|
||||
|
||||
IServer.getLogger().log (tname+" "+l+" marked, "+ins+" inserted, "+upd+" updated, "+dlt+" deleted in "+(System.currentTimeMillis()-tstart)+" millis");
|
||||
nmgr.app.logAccess (tname+" "+l+" marked, "+ins+" inserted, "+upd+" updated, "+dlt+" deleted in "+(System.currentTimeMillis()-tstart)+" millis");
|
||||
}
|
||||
|
||||
public synchronized void abort () throws Exception {
|
||||
|
@ -191,7 +191,7 @@ public class Transactor extends Thread {
|
|||
nmgr.db.abortTransaction (txn);
|
||||
txn = null;
|
||||
}
|
||||
IServer.getLogger().log (tname+" aborted after "+(System.currentTimeMillis()-tstart)+" millis");
|
||||
nmgr.app.logEvent (tname+" aborted after "+(System.currentTimeMillis()-tstart)+" millis");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -214,13 +214,13 @@ public class Transactor extends Thread {
|
|||
}
|
||||
|
||||
public void closeConnections () {
|
||||
// IServer.getLogger().log("Cleaning up Transactor thread");
|
||||
// nmgr.app.logEvent("Cleaning up Transactor thread");
|
||||
if (sqlCon != null) {
|
||||
for (Iterator i=sqlCon.values().iterator(); i.hasNext(); ) {
|
||||
try {
|
||||
Connection con = (Connection) i.next();
|
||||
con.close ();
|
||||
IServer.getLogger ().log ("Closing DB connection: "+con);
|
||||
nmgr.app.logEvent ("Closing DB connection: "+con);
|
||||
} catch (Exception ignore) {}
|
||||
}
|
||||
sqlCon.clear ();
|
||||
|
|
|
@ -27,7 +27,7 @@ import java.util.Vector;
|
|||
} catch (ObjectNotFoundException x) {
|
||||
return null;
|
||||
} catch (Exception x) {
|
||||
Server.getLogger().log ("Error retrieving Node via DbMapping: "+x.getMessage ());
|
||||
nmgr.app.logEvent ("Error retrieving Node via DbMapping: "+x.getMessage ());
|
||||
if ("true".equalsIgnoreCase (Server.sysProps.getProperty("debug")))
|
||||
x.printStackTrace();
|
||||
throw new RuntimeException ("Error retrieving Node: "+x.getMessage ());
|
||||
|
@ -40,7 +40,7 @@ import java.util.Vector;
|
|||
} catch (ObjectNotFoundException x) {
|
||||
return null;
|
||||
} catch (Exception x) {
|
||||
Server.getLogger().log ("Error retrieving Node \""+id+"\" from "+home+": "+x.getMessage ());
|
||||
nmgr.app.logEvent ("Error retrieving Node \""+id+"\" from "+home+": "+x.getMessage ());
|
||||
if ("true".equalsIgnoreCase (Server.sysProps.getProperty("debug")))
|
||||
x.printStackTrace();
|
||||
throw new RuntimeException ("Error retrieving Node: "+x.getMessage ());
|
||||
|
@ -134,6 +134,14 @@ import java.util.Vector;
|
|||
return nmgr.getCacheEntries ();
|
||||
}
|
||||
|
||||
public void logEvent (String msg) {
|
||||
nmgr.app.logEvent (msg);
|
||||
}
|
||||
|
||||
public DbMapping getDbMapping (String name) {
|
||||
return nmgr.app.getDbMapping (name);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue