private void deploy() { List startList = new ArrayList(); Iterator iter = dirMap.entrySet().iterator(); try { while (iter.hasNext() && !shutdown) { Map.Entry entry = (Map.Entry) iter.next(); File f = (File) entry.getKey(); QEntry qentry = (QEntry) entry.getValue(); long deployed = qentry.getDeployed(); if (deployed == 0) { if (deploy(f)) { if (qentry.isQBean()) startList.add(qentry.getInstance()); qentry.setDeployed(f.lastModified()); } else { // deploy failed, clean up. iter.remove(); } } else if (deployed != f.lastModified()) { undeploy(f); iter.remove(); loader.forceNewClassLoaderOnNextScan(); } } iter = startList.iterator(); while (iter.hasNext()) { start((ObjectInstance) iter.next()); } } catch (Exception e) { log.error("deploy", e); } }
private void initSystemLogger() { File loggerConfig = new File(deployDir, LOGGER_CONFIG); if (loggerConfig.canRead()) { hasSystemLogger = true; try { register(loggerConfig); deploy(); } catch (Exception e) { getLog().warn("init-system-logger", e); } } getLog().info("Q2 started, deployDir=" + deployDir.getAbsolutePath()); }
private boolean register(File f) { boolean rc = false; if (f.isDirectory()) { File file[] = f.listFiles(this); for (int i = 0; i < file.length; i++) { if (register(file[i])) rc = true; } } else if (dirMap.get(f) == null) { dirMap.put(f, new QEntry()); rc = true; } return rc; }
private void undeploy(File f) { QEntry qentry = (QEntry) dirMap.get(f); try { if (log != null) log.trace("undeploying:" + f.getCanonicalPath()); Object obj = qentry.getObject(); ObjectName name = qentry.getObjectName(); factory.destroyQBean(this, name, obj); if (log != null) log.info("undeployed:" + f.getCanonicalPath()); } catch (Exception e) { getLog().warn("undeploy", e); } }
private boolean deploy(File f) { try { if (log != null) log.info("deploy:" + f.getCanonicalPath()); QEntry qentry = (QEntry) dirMap.get(f); SAXBuilder builder = createSAXBuilder(); Document doc; if (decorator != null && !f.getName().equals(LOGGER_CONFIG)) { doc = decrypt(builder.build(new StringReader(decorator.decorateFile(f)))); } else { doc = decrypt(builder.build(f)); } Element rootElement = doc.getRootElement(); String iuuid = rootElement.getAttributeValue("instance"); if (iuuid != null) { UUID uuid = UUID.fromString(iuuid); if (!uuid.equals(getInstanceId())) { deleteFile(f, iuuid); return false; } } Object obj = factory.instantiate(this, rootElement); qentry.setObject(obj); ObjectInstance instance = factory.createQBean(this, doc.getRootElement(), obj); qentry.setInstance(instance); } catch (InstanceAlreadyExistsException e) { /* * Ok, the file we tried to deploy, holds an object * that already has been deployed. * * Rename it out of the way. * */ tidyFileAway(f, DUPLICATE_EXTENSION); getLog().warn("deploy", e); return false; } catch (Exception e) { getLog().warn("deploy", e); tidyFileAway(f, ERROR_EXTENSION); // This will also save deploy error repeats... return false; } catch (Error e) { getLog().warn("deploy", e); tidyFileAway(f, ENV_EXTENSION); // This will also save deploy error repeats... return false; } return true; }
private boolean scan() { boolean rc = false; File file[] = deployDir.listFiles(this); // Arrays.sort (file); --apr not required - we use TreeMap if (file == null) { // Shutting down might be best, how to trigger from within? throw new Error("Deploy directory \"" + deployDir.getAbsolutePath() + "\" is not available"); } else { for (File f : file) { if (register(f)) rc = true; } } return rc; }
public void deployElement(Element e, String fileName, boolean encrypt, boolean isTransient) throws ISOException, IOException, GeneralSecurityException { e = ((Element) e.clone()); XMLOutputter out = new XMLOutputter(Format.getPrettyFormat()); Document doc = new Document(); doc.setRootElement(e); File qbean = new File(deployDir, fileName); if (isTransient) { e.setAttribute("instance", getInstanceId().toString()); qbean.deleteOnExit(); } FileWriter writer = new FileWriter(qbean); if (encrypt) doc = encrypt(doc); out.output(doc, writer); writer.close(); }
public Q2(String[] args) { super(); this.args = args; startTime = System.currentTimeMillis(); instanceId = UUID.randomUUID(); parseCmdLine(args); libDir = new File(deployDir, "lib"); dirMap = new TreeMap(); deployDir.mkdirs(); mainClassLoader = Thread.currentThread().getContextClassLoader(); }
private void tidyFileAway(File f, String extension) { File rename = new File(f.getAbsolutePath() + "." + extension); while (rename.exists()) { rename = new File(rename.getAbsolutePath() + "." + extension); } getLog() .warn( "Tidying " + f.getAbsolutePath() + " out of the way, by adding ." + extension, "It will be called: " + rename.getAbsolutePath() + " see log above for detail of problem."); f.renameTo(rename); }
private long persist(File f, ObjectName name) { long deployed = f.lastModified(); try { Element e = (Element) server.getAttribute(name, "Persist"); if (e != null) { XMLOutputter out = new XMLOutputter(Format.getPrettyFormat()); Document doc = new Document(); e.detach(); doc.setRootElement(e); File tmp = new File(f.getAbsolutePath() + ".tmp"); FileWriter writer = new FileWriter(tmp); out.output(doc, writer); writer.close(); f.delete(); tmp.renameTo(f); deployed = f.lastModified(); } } catch (Exception ex) { log.warn("persist", ex); } return deployed; }
private void deleteFile(File f, String iuuid) { f.delete(); getLog() .info(String.format("Deleted transient descriptor %s (%s)", f.getAbsolutePath(), iuuid)); }
public boolean accept(File f) { return f.canRead() && (f.getName().endsWith(".xml") || (recursive && f.isDirectory() && !"lib".equalsIgnoreCase(f.getName()))); }