From: <shi...@us...> - 2008-03-26 10:06:25
|
Revision: 2563 http://unicore.svn.sourceforge.net/unicore/?rev=2563&view=rev Author: shiraz_79 Date: 2008-03-26 03:06:09 -0700 (Wed, 26 Mar 2008) Log Message: ----------- Modified Paths: -------------- CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/CIS.java CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/CISConstants.java CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/aggregator/DBSynchronizer.java CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/aggregator/IPInvoker.java CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/client/CISClient.java CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/dao/DBManager.java CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/dao/ExistDBManager.java CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/impl/registry/RegistryServiceImpl.java CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/jetty/WebServer.java CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/publisher/FeedPublisher.java CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/ucc/QueryCIS.java CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/util/RegistryOnStartup.java Modified: CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/CIS.java =================================================================== --- CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/CIS.java 2008-03-26 10:04:54 UTC (rev 2562) +++ CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/CIS.java 2008-03-26 10:06:09 UTC (rev 2563) @@ -32,41 +32,44 @@ * author: shiraz memon, email: a....@fz... */ - - package de.fzj.unicore.cis; import java.io.ByteArrayInputStream; -import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.lang.management.ManagementFactory; +import java.util.List; import java.util.Properties; -import java.util.logging.Level; -import javax.management.InstanceAlreadyExistsException; -import javax.management.MBeanRegistrationException; import javax.management.MBeanServer; -import javax.management.MalformedObjectNameException; -import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; import org.apache.log4j.Logger; +import org.codehaus.xfire.XFire; +import org.codehaus.xfire.XFireFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; -import de.fzj.unicore.cis.aggregator.IPInvoker; import de.fzj.unicore.cis.impl.registry.RegistryServiceImpl; import de.fzj.unicore.cis.jetty.WebServer; -import de.fzj.unicore.cis.jmx.CISInfo; +import de.fzj.unicore.cis.jmx.CISAdmin; import de.fzj.unicore.cis.publisher.FeedPublisher; import de.fzj.unicore.cis.publisher.InformationPublishing; import de.fzj.unicore.cis.util.CISUtils; +import de.fzj.unicore.uas.UAS; +import de.fzj.unicore.uas.security.AccessControl; +import de.fzj.unicore.uas.security.DSigOutHandler; +import de.fzj.unicore.uas.security.DSigParseInHandler; +import de.fzj.unicore.uas.security.DSigSecurityInHandler; +import de.fzj.unicore.uas.security.DSignAuthNCheck; +import de.fzj.unicore.uas.security.ETDTrustDelegationInHandler; +import de.fzj.unicore.uas.security.SAMLSecurityInHandler; import de.fzj.unicore.uas.security.SecurityManager; -import de.fzj.unicore.wsrflite.jetty.JettyServer; +import de.fzj.unicore.uas.util.Constants; import de.fzj.unicore.wsrflite.utils.ServiceConfigReader; +import de.fzj.unicore.wsrflite.xfire.XFireKernel; public class CIS { public static final String EXIST_DB_CONFIG_FILE = "exist.db.config.path"; @@ -96,9 +99,10 @@ public static final String CIS_REGISTRY_INSTANCE_ID = "cis_registry"; public static final String CIS_LONGITUDE = "cis.longitude"; + + public static final String CIS_LATITUDE = "cis.latitude"; - public static final String CIS_LATITUDE = "cis.latitude"; - + private WebServer server = null; /** * To override the default UAS startup code, set this to a list of names * (space-separated) of classes implementing java.lang.Runnable @@ -128,12 +132,11 @@ public CIS() { buildProperty(""); - - + } public CIS(String propertiesFile) { - + buildProperty(propertiesFile); } @@ -168,7 +171,7 @@ } public static String getProperty(Object key) { -// buildProperty(DEFAULT_CIS_CONFIG_PROPERTIES_PATH); + // buildProperty(DEFAULT_CIS_CONFIG_PROPERTIES_PATH); logger.debug("the object is: " + key.toString()); String ou = (String) properties.get(key); logger.debug("in getProperty and the value of property is: " + ou); @@ -176,7 +179,7 @@ } public static void setProperty(Object key, Object value) { -// buildProperty(DEFAULT_CIS_CONFIG_PROPERTIES_PATH); + // buildProperty(DEFAULT_CIS_CONFIG_PROPERTIES_PATH); logger.info("in setProperty"); properties.put(key, value); @@ -213,8 +216,24 @@ System.out.println("Deploying default services to WSRFlite."); deployDefault(); } + //add understood header QNames + XFireKernel.addUnderstoodHeaders(Constants.supported); + if(!UAS.DISABLE_SECURITY_AND_ACCESS_CONTROL){ + addDefaultSecurityHandlers(); + //add access control checker + XFireKernel.getInvoker().setAccessControlChecker(new AccessControl()); + } + //configure the default authentication check policy + registerDefaultAuthNStrategies(); + //print some config info + StringBuffer sb=new StringBuffer(); + for(String x: SecurityManager.getSOAPActionsRequiringSignatures())sb.append(x+"\n"); + logger.info("Actions requiring signatures: "+sb.toString()); } + private void registerDefaultAuthNStrategies(){ + SecurityManager.registerAuthNCheckingStrategies(new DSignAuthNCheck()); + } /** * Starting the server @@ -222,10 +241,8 @@ * @param conf * path of cis.config file */ + public void startSynchronous() { - - // building properties - System.out.println(writeHeader()); Thread t = new Thread(new Runnable() { @@ -239,14 +256,14 @@ ctx = new FileSystemXmlApplicationContext(CIS .getProperty(CIS.CIS_SPRINGBEANS_PATH)); addPublishers(ctx); - WebServer server = (WebServer) getApplicationCtx().getBean( + server = (WebServer) getApplicationCtx().getBean( "webserver"); - + server.addWebApplication(); server.start(); Thread.sleep(500); - // startJMX(); runStartupCode(); logger.info("***** Server started. *****"); + } catch (Exception e) { e.printStackTrace(); } @@ -268,11 +285,10 @@ CIS cis = null; if (args.length == 0) { cis = new CIS(); - logger.info("Loading default CIS configuration"); - System.out.println("--------"); + logger.info("Loading default CIS configuration"); } else { - System.out.println("+++++++++"+args[0]); cis = new CIS(args[0]); + logger.info("Loading default CIS configuration "+args[0]); } cis.startSynchronous(); @@ -312,6 +328,13 @@ } } + /** initializing JMX + * only used when not using with spring + * */ + private void initJMX() { + addMBean(new CISAdmin(), "CISAdmin"); + } + /** * add a JMX MBean under the given name * @@ -326,39 +349,28 @@ ObjectName adminName = null; // Uniquely identify the MBeans and register them with the platform // MBeanServer - adminName = new ObjectName("UAS:name=" + name); + adminName = new ObjectName("CIS:name=" + name); mbs.registerMBean(mbean, adminName); } catch (Exception ex) { logger.error("Error registering mbean.", ex); } } - public void startJMX() { - MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); - ObjectName name = null; - try { - name = new ObjectName("de.fzj.unicore.cis:type=CISInfo"); - CISInfo info = new CISInfo(); - mbs.registerMBean(info, name); - - } catch (MalformedObjectNameException e) { - logger.error(e.getMessage()); - logger.trace(CISUtils.convertStackTraceAsString(e)); - } catch (NullPointerException e) { - logger.error(e.getMessage()); - logger.trace(CISUtils.convertStackTraceAsString(e)); - } catch (InstanceAlreadyExistsException e) { - logger.error(e.getMessage()); - logger.trace(CISUtils.convertStackTraceAsString(e)); - } catch (MBeanRegistrationException e) { - logger.error(e.getMessage()); - logger.trace(CISUtils.convertStackTraceAsString(e)); - } catch (NotCompliantMBeanException e) { - logger.error(e.getMessage()); - logger.trace(CISUtils.convertStackTraceAsString(e)); - } + + //add standard security handlers + //these are OK for both WSRF and plain web services + @SuppressWarnings("unchecked") + private void addDefaultSecurityHandlers(){ + XFire xfire=XFireFactory.newInstance().getXFire(); + List s=xfire.getInHandlers(); + logger.info("Configuring default security handler chain."); + s.add(new DSigParseInHandler()); + s.add(new DSigSecurityInHandler()); + s.add(new SAMLSecurityInHandler()); + s.add(new ETDTrustDelegationInHandler()); + List out=xfire.getOutHandlers(); + DSigOutHandler o1=new DSigOutHandler(); + o1.doInit(UAS.getSecurityProperties()); + out.add(o1); } - - - } Modified: CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/CISConstants.java =================================================================== --- CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/CISConstants.java 2008-03-26 10:04:54 UTC (rev 2562) +++ CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/CISConstants.java 2008-03-26 10:06:09 UTC (rev 2563) @@ -44,4 +44,8 @@ public static final String CIP_URL = "cipurl"; public static final String SITE_NAME = "sitename"; public static final String CIS_URL_PATTERN = "http(s)://<server>:<port>/services/CISRegistry?res=cis_registry"; + public static final String SITE_STATUS_RED = "Red"; + public static final String SITE_STATUS_YELLOW = "Yellow"; + public static final String SITE_STATUS_GREEN = "Green"; + } Modified: CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/aggregator/DBSynchronizer.java =================================================================== --- CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/aggregator/DBSynchronizer.java 2008-03-26 10:04:54 UTC (rev 2562) +++ CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/aggregator/DBSynchronizer.java 2008-03-26 10:06:09 UTC (rev 2563) @@ -35,26 +35,17 @@ package de.fzj.unicore.cis.aggregator; import java.io.File; -import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.Map.Entry; -import org.apache.log4j.Category; import org.apache.log4j.Logger; -import org.apache.log4j.Priority; -import org.apache.log4j.spi.LoggerFactory; -import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlString; -import de.fzj.unicore.cis.CIS; import de.fzj.unicore.cis.CISConstants; import de.fzj.unicore.cis.dao.DBManager; import de.fzj.unicore.cis.util.CISUtils; import de.fzj.unicore.cis.util.FileListener; import de.fzj.unicore.cis.util.FileMonitor; -import eu.unicore.unicore6.cis.aggregator.CIPRegistrantDocument; /** * Synchronize db entries against cip entries (which resides inside registration @@ -79,12 +70,11 @@ String url = entry.get(CISConstants.CIP_URL); XmlString string = XmlString.Factory.parse(url); String id = entry.get(CISConstants.DOC_ID); - System.out.println(string.getStringValue()); if (CISUtils.isExists(string.getStringValue()) == null) { -// dbMgr.delete(id); - logger.info("deleting doc: "+id); + dbMgr.delete(id); + logger.trace("deleting doc: "+id+"\nURL: "+url); }else{ - logger.info("not deleting doc: "+id); + logger.trace("escaping doc: "+id+"\nURL: "+url); } } } catch (Exception e) { Modified: CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/aggregator/IPInvoker.java =================================================================== --- CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/aggregator/IPInvoker.java 2008-03-26 10:04:54 UTC (rev 2562) +++ CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/aggregator/IPInvoker.java 2008-03-26 10:06:09 UTC (rev 2563) @@ -40,19 +40,19 @@ import java.util.Calendar; import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Timer; -import java.util.TimerTask; +import java.util.Set; import org.apache.log4j.Logger; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlString; -import org.codehaus.xfire.XFireRuntimeException; import org.w3.x2005.atom.FeedDocument; import de.fzj.unicore.cis.CIS; +import de.fzj.unicore.cis.CISConstants; import de.fzj.unicore.cis.dao.DBManager; import de.fzj.unicore.cis.util.CISUtils; import de.fzj.unicore.cis.util.FileListener; @@ -152,7 +152,7 @@ } } - public void register(CIPRegistrantDocument regDoc, File file) { + protected void register(CIPRegistrantDocument regDoc, File file) { try { Calendar cal = regDoc.getCIPRegistrant().getTerminationTime(); String url = regDoc.getCIPRegistrant().getEndpointReference() @@ -160,31 +160,40 @@ // calling cip String docId = null; FeedDocument fDoc = getInfo(url); - if (fDoc != null) { + if (fDoc.getFeed() != null) { + String vSiteURL = extractVSiteURL(fDoc); logger.debug("CIP URL: " + url); logger.debug("VSite URL: " + vSiteURL); Map<String, String> map = isDBEntryExists(vSiteURL); - if (map == null) { - // create new - mgr.insert(fDoc.toString()); - } else { - // update current - docId = map.keySet().iterator().next(); - } + // if (map == null) { + // // create new + // mgr.insert(fDoc.toString()); + // } else { + // // update current + // docId = map.keySet().iterator().next(); + // } if (!CISUtils.isExpired(cal)) { + if (map == null) { + // create new + mgr.insert(fDoc.toString()); + } else { + // update current + docId = map.keySet().iterator().next(); + logger.debug("update perform on document: " + docId + + " with vSite url: " + vSiteURL + + " and provider url: " + url); + mgr.update(docId, fDoc.toString()); + } - logger.info("update perform on document: " + docId); - mgr.update(docId, fDoc.toString()); - } else { // remove the entry from dir, db and map fileMonitor.removeFile(file); file.delete(); mapReg.remove(file.getAbsolutePath()); -// mgr.delete(docId); + mgr.delete(docId); } } else { logger.error("CIP at URL: " + url + " cannot be contacted."); @@ -204,61 +213,56 @@ * @return return data as doAtom 1.0 feed entries */ private FeedDocument getInfo(String url) { - this.url = url; - + // this.url = url; FeedDocument fDoc = FeedDocument.Factory.newInstance(); // System.out.println(info.getInfo(req)); try { - Timer timer = new Timer(); - connected = false; -// TimerTask t = new TimerTask() { - CISInfoProvider info = CISUtils.getProxy(IPInvoker.url); + // Timer timer = new Timer(); + // connected = false; + // TimerTask t = new TimerTask() { + CISInfoProvider info = CISUtils.getProxy(url); -// @Override -// public void run() { -// if (!connected) { - GetInfoRequestDocument req = GetInfoRequestDocument.Factory - .newInstance(); - req.addNewGetInfoRequest().setTopic("/Site"); -// try { - setRes(info.getInfo(req)); - logger - .debug("CIP Service successfully contacted at: " - + IPInvoker.url - + " and registration data of that CIP is updated"); - logger.trace("Registration data: " + getRes()); -// } catch (Exception e) { -// logger.error("CIP Service cannot be contacted at: " -// + IPInvoker.url); -// logger.trace("Detailed error is ", e); + // @Override + // public void run() { + // if (!connected) { + GetInfoRequestDocument req = GetInfoRequestDocument.Factory + .newInstance(); + req.addNewGetInfoRequest().setTopic("/Site"); + // try { + GetInfoResponseDocument res = info.getInfo(req); + setRes(res); + logger.debug("CIP Service successfully contacted at: " + + IPInvoker.url + + " and registration data of that CIP is updated"); + logger.trace("Registration data: " + getRes()); +// updateStatus(url, CISConstants.SITE_STATUS_GREEN); + // } catch (Exception e) { + // logger.error("CIP Service cannot be contacted at: " + // + IPInvoker.url); + // logger.trace("Detailed error is ", e); -// } catch (Throwable e) { -// logger.error("CIP Service cannot be contacted at: " -// + IPInvoker.url); -// logger.trace("Detailed error is ", e); -// } + // } catch (Throwable e) { + // logger.error("CIP Service cannot be contacted at: " + // + IPInvoker.url); + // logger.trace("Detailed error is ", e); + // } -// connected = true; -// } + // connected = true; + // } -// } + // } -// }; + // }; -// timer.scheduleAtFixedRate(t, 1, 2000); -// Thread.sleep(4000); -// t.cancel(); -// timer.cancel(); - - if (getRes() == null) { - return null; - } else { - fDoc.setFeed(getRes().getGetInfoResponse().getFeed()); - - } + // timer.scheduleAtFixedRate(t, 1, 2000); + // Thread.sleep(4000); + // t.cancel(); + // timer.cancel(); + + fDoc.setFeed(res.getGetInfoResponse().getFeed()); } catch (Exception e) { - logger.trace(CISUtils.convertStackTraceAsString(e)); - logger.error("VSite at " + url + "cannot be contacted."); + updateStatus(url, CISConstants.SITE_STATUS_RED); + logger.error("VSite at " + url + "cannot be contacted.", e); } return fDoc; @@ -273,26 +277,29 @@ */ private String extractVSiteURL(FeedDocument fDoc) { // check if url already exists in xml document - XmlObject[] obj = fDoc.selectPath("//*:Site/*:URL"); - XmlString s = null; - try { - s = XmlString.Factory.parse(obj[0].toString()); - } catch (XmlException e) { - logger.error("Error extracting VSiteURL from XML Bean Object: " - + e.getMessage()); - logger.trace(CISUtils.convertStackTraceAsString(e)); - e.printStackTrace(); + if (fDoc.getFeed() != null) { + XmlObject[] obj = fDoc.selectPath("//*:Site/*:URL"); + XmlString s = null; + try { + s = XmlString.Factory.parse(obj[0].toString()); + } catch (XmlException e) { + logger.error("Error extracting VSiteURL from XML Bean Object: " + + e.getMessage()); + e.printStackTrace(); + } + return s.getStringValue(); } - return s.getStringValue(); + return null; + } private Map<String, String> isDBEntryExists(String url) { - List<String> lst = new ArrayList<String>(); Map<String, String> map = mgr .queryWithId("for $x in collection('/db/cis') where contains($x//*:Site/*:URL,'" + url + "') return $x//*:Site/*:URL"); - // add check if map is greater than there are duplicate and one has to + // add check if map size is greater than 0 there are duplicate and that + // has to // be deleted if (map.size() > 0) return map; @@ -307,7 +314,7 @@ loadRegistrations(); } catch (Exception e) { - logger.trace(CISUtils.convertStackTraceAsString(e)); + logger.error(e); } } @@ -318,5 +325,23 @@ public void setRes(GetInfoResponseDocument res) { this.res = res; } + + /** updates the particular site status */ + public void updateStatus(String vSiteUrl, String status){ + Map<String, String> map = isDBEntryExists(vSiteUrl); + if (map != null) { + Set<String> str = map.keySet(); + for (Iterator iterator = str.iterator(); iterator.hasNext();) { + String resId = (String) iterator.next(); + if (mgr.getDocById(resId) != null) { + mgr + .query(resId, + "update value //*:Site/*:Status with '"+status+"'"); +// s[.=''] + } + } + } + } + } Modified: CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/client/CISClient.java =================================================================== --- CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/client/CISClient.java 2008-03-26 10:04:54 UTC (rev 2562) +++ CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/client/CISClient.java 2008-03-26 10:06:09 UTC (rev 2563) @@ -116,7 +116,7 @@ QueryRequestDocument req = QueryRequestDocument.Factory.newInstance(); if (expression == null || expression == "") { expression = "for $x in collection('/db/cis') where $x/* return $x"; - } + } req.setQueryRequest(expression); List<String> lstStr = new ArrayList<String>(); try { @@ -155,6 +155,22 @@ } } + public List<String> fullTextSearch(String expression){ + QueryRequestDocument req = QueryRequestDocument.Factory.newInstance(); + req.setQueryRequest("/match-all(., '" + expression + "')"); + List<String> lstStr = new ArrayList<String>(); + try { + + QueryResponseDocument res = registry.Query(req); + lstStr = Arrays.asList(res.getQueryResponse().getResultArray()); + + } catch (BaseFault e) { + e.printStackTrace(); + } + return lstStr; + + } + public static void main(String[] args) throws Exception { String url = "http://localhost:7776/services/"+CIS.CIS_REGISTRY_SERVICE_NAME+"?res="+CIS.CIS_REGISTRY_INSTANCE_ID; EndpointReferenceType epr = EndpointReferenceType.Factory.newInstance(); @@ -163,7 +179,9 @@ System.out.println(c.listAll().size()); System.out.println(c.query("for $x in collection('/db/cis') return $x").size()); //should through exception of invalid url - c.removeCIP("https://zam461.zam.kfa-juelich.de:9115/JUGGLE/services/CISInfoProvider"); +// c.removeCIP("https://zam461.zam.kfa-juelich.de:9115/JUGGLE/services/CISInfoProvider"); + c.fullTextSearch("localhost"); + } } Modified: CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/dao/DBManager.java =================================================================== --- CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/dao/DBManager.java 2008-03-26 10:04:54 UTC (rev 2562) +++ CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/dao/DBManager.java 2008-03-26 10:06:09 UTC (rev 2563) @@ -116,7 +116,7 @@ public String insert(String id, File content); - public String read(String name); + public String getDocById(String name); /** * Removing entry from db @@ -162,5 +162,8 @@ /** Add listener */ public void removeListener(DBListener listener); + /** querying on particular doc */ + public List<String> query(String resourceId, String xQuery); + } Modified: CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/dao/ExistDBManager.java =================================================================== --- CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/dao/ExistDBManager.java 2008-03-26 10:04:54 UTC (rev 2562) +++ CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/dao/ExistDBManager.java 2008-03-26 10:06:09 UTC (rev 2563) @@ -130,6 +130,7 @@ import org.xmldb.api.base.XMLDBException; import org.xmldb.api.modules.CollectionManagementService; import org.xmldb.api.modules.XMLResource; +import org.xmldb.api.modules.XUpdateQueryService; import de.fzj.unicore.cis.CIS; import de.fzj.unicore.cis.CISConstants; @@ -195,9 +196,12 @@ // System.out.println("Document content: " + docContent); // get all doc's - String id = hw.insert("<a><b></b></a>"); - hw.delete(id); - +// String id = hw.insert("<a><b></b></a>"); +// hw.delete(id); +// hw.xUpdateValue("abc.xml", "update value //*:Site/*:Status/*:StatusDescription[.='DOWN'] with 'UP'"); +// hw.query("abc.xml","update value //*:Site/*:Status/*:StatusDescription[.='UP'] with 'DOWN'"); +// hw.query("for $x in collection('/db/cis') return $x"); + hw.fullTextQuery("https"); hw.cleanup(); } @@ -449,6 +453,34 @@ } return lstStr; + } + + public List<String> query(String resourceId, String xQuery){ + List<String> lstStr = new ArrayList<String>(); + try { + XQueryService service = (XQueryService) col.getService( + "XQueryService", "1.0"); + + // fillNamespaces(service); + + CompiledExpression compiled = service.compile(xQuery); + XMLResource res = (XMLResource) col.getResource(resourceId); +// System.out.println(res.getContent().toString()); + ResourceSet result = service.execute(res, compiled); + logger.debug("Found " + result.getSize() + " results."); + for (ResourceIterator i = result.getIterator(); i + .hasMoreResources();) { + lstStr.add(i.nextResource().getContent().toString()); +// System.out.println(i.nextResource().getContent().toString()); + } + res = (XMLResource) col.getResource(resourceId); +// System.out.println(res.getContent().toString()); + } catch (Exception e) { + logger.error("Error in performing xquery: " + e.getMessage()); + e.printStackTrace(); + + } + return lstStr; } public Map<String, String> queryWithId(String expression) { @@ -549,8 +581,19 @@ // this.col = col; // } - public String read(String name) { - throw new RuntimeException("read(): Method not supported."); + public String getDocById(String name) { + String resContent = null; + try { + XMLResource res = (XMLResource) col.getResource(name); + resContent = res.getContent().toString(); + if (resContent != null) { + return resContent; + } + } catch (XMLDBException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; } /** Filling up the namespaces */ @@ -723,15 +766,17 @@ XQueryService service = (XQueryService) col.getService( "XQueryService", "1.0"); // ResourceSet result = service.query("//SPEECH[match-all(LINE, - // 'love')]"); - ResourceSet result = service.query("/match-all(., '" + term + "')"); + // 'love')]"); + CompiledExpression compiled = service.compile("/text:match-all(*, '" + term + "')"); + ResourceSet result = service.execute(compiled); for (ResourceIterator i = result.getIterator(); i - .hasMoreResources();) { + .hasMoreResources();) { + System.out.println(i.nextResource().getContent().toString()); lstResult.add(i.nextResource().getContent().toString()); } } catch (Exception e) { - // TODO: handle exception + e.printStackTrace(); } return lstResult; } @@ -811,7 +856,9 @@ return lstMap; } - + + + public void addListener(DBListener listener) { lstListener.add(listener); @@ -838,5 +885,7 @@ for (DBListener listener : lstListener) { listener.notifyEntryAdded(event); } - } + } + + } Modified: CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/impl/registry/RegistryServiceImpl.java =================================================================== --- CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/impl/registry/RegistryServiceImpl.java 2008-03-26 10:04:54 UTC (rev 2562) +++ CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/impl/registry/RegistryServiceImpl.java 2008-03-26 10:06:09 UTC (rev 2563) @@ -45,16 +45,11 @@ import javax.xml.namespace.QName; import org.apache.log4j.Logger; -import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlOptions; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.FileSystemXmlApplicationContext; -import org.w3.x2005.atom.FeedType; + import de.fzj.unicore.cis.CIS; import de.fzj.unicore.cis.RegistryService; -import de.fzj.unicore.cis.aggregator.IPInvoker; import de.fzj.unicore.cis.dao.DBManager; -import de.fzj.unicore.cis.dao.ExistDBManager; import de.fzj.unicore.cis.rp.GeoInfoRP; import de.fzj.unicore.cis.util.CISUtils; import de.fzj.unicore.uas.impl.UASWSResourceImpl; Modified: CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/jetty/WebServer.java =================================================================== --- CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/jetty/WebServer.java 2008-03-26 10:04:54 UTC (rev 2562) +++ CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/jetty/WebServer.java 2008-03-26 10:06:09 UTC (rev 2563) @@ -32,19 +32,17 @@ * author: shiraz memon, email: a....@fz... */ - package de.fzj.unicore.cis.jetty; +import java.util.HashMap; import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import java.util.logging.Level; import java.util.logging.Logger; - -import org.mortbay.jetty.Connector; +import org.mortbay.jetty.AbstractConnector; import org.mortbay.jetty.Server; import org.mortbay.jetty.bio.SocketConnector; import org.mortbay.jetty.security.SslSocketConnector; @@ -58,12 +56,53 @@ protected static Logger logger = Logger.getLogger(JettyServer.class .getName()); + /** + * minimum nuber of threads to have in the Jetty thread pool (default: 1) + */ + public static final String MIN_THREADS = "unicore.wsrflite.jetty.minThreads"; + + /** + * maximum nuber of threads to have in the Jetty thread pool (default: 255) + */ + public static final String MAX_THREADS = "unicore.wsrflite.jetty.maxThreads"; + + /** + * lowThreads is a threshold indicator. If the available number + * of threads in the pool dips under this value (especially when max + * threads is reached), per connection max idle time will be cut + * from normal to low-resource + * (default: 50) + */ + public static final String LOW_THREADS = "unicore.wsrflite.jetty.lowThreads"; + + /** + * time (in ms.) before an idle connection will time out (default: 1000) + */ + public static final String MAX_IDLE_TIME = "unicore.wsrflite.jetty.maxIdleTime"; + private Server theServer; private String url; - //Map of servlet as a key and path as a value, injected via spring bean + // Map of servlet as a key and path as a value, injected via spring bean private Map<String, String> map; private static WebServer singleton = null; - public static WebServer createInstance(Map<String, String> map){ + /** + * in low resource conditions, time (in ms.) before an idle connection will + * time out (default: 100) + * + * @see #LOW_THREADS + */ + public static final String LOW_RESOURCE_MAX_IDLE_TIME = "unicore.wsrflite.jetty.lowResourceMaxIdleTime"; + protected static HashMap<String, Integer> defaults = new HashMap<String, Integer>(); + + static { + defaults.put(MAX_THREADS, 255); + defaults.put(MIN_THREADS, 1); + defaults.put(LOW_THREADS, 50); + defaults.put(MAX_IDLE_TIME, 3000); + defaults.put(LOW_RESOURCE_MAX_IDLE_TIME, 100); + } + + public static WebServer createInstance(Map<String, String> map) { if (singleton == null) { try { singleton = new WebServer(map); @@ -73,7 +112,7 @@ } return singleton; } - + public WebServer(Map<String, String> map) throws Exception { logger.info("Webserver: Constructor"); this.map = map; @@ -88,48 +127,57 @@ theServer.stop(); } + /** enable jetty to host jsp's */ + public void addWebApplication() { + // WebAppContext ctx = new WebAppContext(); + // ctx.setContextPath("/"); + // ctx.setWar("web"); + // getServer().setHandler(ctx); + // WebAppDeployer deployer = new WebAppDeployer(); + // deployer.setWebAppDir("web"); + // getServer().addLifeCycle(deployer); + } + private void initServer() throws Exception { - String host=""; - int port=7777; - try{ - host=Kernel.getKernel().getProperty(Kernel.WSRF_HOST); - String pString=Kernel.getKernel().getProperty(Kernel.WSRF_PORT); - if(pString!=null) port=Integer.parseInt(pString); - - } - catch(Exception e){ + String host = ""; + int port = 7777; + try { + host = Kernel.getKernel().getProperty(Kernel.WSRF_HOST); + String pString = Kernel.getKernel().getProperty(Kernel.WSRF_PORT); + if (pString != null) + port = Integer.parseInt(pString); + + } catch (Exception e) { logger.config("Port specified, but invalid, using default."); } - url=host+":"+port; - logger.log(Level.INFO,"Starting Jetty on "+host+":"+port); - theServer=new Server(); - - //print security properties - logger.log(Level.INFO,Kernel.getKernel().getSecurityProperties().toString()); - - Connector connector= - - Kernel.getKernel().getSecurityProperties().isSslEnabled()? - createSecureConnector(port): - createConnector(port); - - - + url = host + ":" + port; + logger.log(Level.INFO, "Starting Jetty on " + host + ":" + port); + theServer = new Server(); + + // print security properties + logger.log(Level.INFO, Kernel.getKernel().getSecurityProperties() + .toString()); + + AbstractConnector connector = + + Kernel.getKernel().getSecurityProperties().isSslEnabled() ? createSecureConnector(port) + : createConnector(port); + theServer.addConnector(connector); configureConnector(connector); addServlets(); } - private Connector createConnector(int port) { + protected AbstractConnector createConnector(int port) { logger.info("Creating plain HTTP connector."); // TODO use NIO SelectChannelConnector here? - Connector connector = new SocketConnector(); + AbstractConnector connector = new SocketConnector(); connector.setPort(port); configureConnector(connector); return connector; } - private Connector createSecureConnector(int port) { + protected AbstractConnector createSecureConnector(int port) { logger.info("Creating SSL connector."); SslSocketConnector ssl = new SslSocketConnector(); ssl.setPort(port); @@ -151,21 +199,22 @@ return ssl; } - // TODO: could do some more config here (max threads and the like) - private void configureConnector(Connector http) { - http.setMaxIdleTime(1000); - http.setLowResourceMaxIdleTime(100); + protected void configureConnector(AbstractConnector http) { + http.setLowResourceMaxIdleTime(getProperty(LOW_RESOURCE_MAX_IDLE_TIME)); } - + private void addServlets() throws Exception { logger.log(Level.INFO, "Adding All XFire servlets."); - + Context root = new Context(theServer, "/", Context.SESSIONS); Set set = getMap().entrySet(); for (Iterator iterator2 = set.iterator(); iterator2.hasNext();) { Entry entry = (Entry) iterator2.next(); - root.addServlet(Class.forName(entry.getKey().toString()), entry.getValue().toString()); - logger.info(entry.getKey().getClass().getName()+" == servlet added having path == "+(String)entry.getValue()); + root.addServlet(Class.forName(entry.getKey().toString()), entry + .getValue().toString()); + logger.info(entry.getKey().getClass().getName() + + " == servlet added having path == " + + (String) entry.getValue()); } } @@ -185,11 +234,15 @@ return theServer; } - private Map<String, String> getMap( ) { + private Map<String, String> getMap() { return this.map; } - - + private int getProperty(String pName){ + String p=Kernel.getKernel().getProperty(pName); + if(p!=null){ + return Integer.parseInt(p); + } + else return defaults.get(pName); + } - } Modified: CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/publisher/FeedPublisher.java =================================================================== --- CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/publisher/FeedPublisher.java 2008-03-26 10:04:54 UTC (rev 2562) +++ CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/publisher/FeedPublisher.java 2008-03-26 10:06:09 UTC (rev 2563) @@ -97,18 +97,17 @@ } List<EntryType> lstEntryType = new ArrayList<EntryType>(); - for (String s : obj) { // Aggregate all info to one feed try { - if (FeedDocument.Factory.parse(s).validate()) { + FeedDocument feedDoc = FeedDocument.Factory.parse(s); EntryType[] arrEntryType = feedDoc.getFeed() .getEntryArray(); for (EntryType e : arrEntryType) { lstEntryType.add(e); } - } + } catch (Exception e) { logger.debug("XML Document is not a feed"); Modified: CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/ucc/QueryCIS.java =================================================================== --- CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/ucc/QueryCIS.java 2008-03-26 10:04:54 UTC (rev 2562) +++ CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/ucc/QueryCIS.java 2008-03-26 10:06:09 UTC (rev 2563) @@ -85,7 +85,7 @@ .withDescription( "Query expression e.g. '/*' or 'for $x in collection(/db/cis) return $x' for returning all the records") .hasArgs().isRequired(false) - .withValueSeparator(OPT_BACKSPACE_SEPERATOR) +// .withValueSeparator(OPT_BACKSPACE_SEPERATOR) .create("q")); } @@ -142,12 +142,12 @@ @Override public String getSynopsis() { return "Command for querying CIS for saved entries. " - + "The CIS URL can be specified " + "using the '-u' option."; + + "The CIS URL can be specified " + "using the '-u' option. The query expression can be specified by '-q' option."; } @Override public String getArgumentList() { - return "-u [CIS-URL]"; + return "-u [CIS-URL] -q [QUERY-EXPRESSION]"; } @Override @@ -160,9 +160,12 @@ String[] val = null; if (getCommandLine().hasOption(shortForm)) { val = getCommandLine().getOptionValues(shortForm); - } else { + } else if(properties.getProperty(longForm, defaultValue) != null){ val = stringtoArray(properties.getProperty(longForm, defaultValue), "\b"); + } else { + printUsage(); + endProcessing(1); } return val; @@ -218,4 +221,5 @@ } return result; } + } Modified: CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/util/RegistryOnStartup.java =================================================================== --- CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/util/RegistryOnStartup.java 2008-03-26 10:04:54 UTC (rev 2562) +++ CommonInformationService/cis-core/trunk/src/main/java/de/fzj/unicore/cis/util/RegistryOnStartup.java 2008-03-26 10:06:09 UTC (rev 2563) @@ -59,15 +59,7 @@ } public void run(){ Home regHome = Kernel.getKernel().getServiceHome(CIS.CIS_REGISTRY_SERVICE_NAME); -// if (registryHome != null) { -// // check if instance already exists -// try { -// if (registryHome.getWSRFServiceInstance(INSTANCE_ID) != null) -// return; -// } catch (Exception e) { -// // ok, does not exist -// } -// } + Map<String, Object> map = new HashMap<String, Object>(); map.put(WSResourceImpl.INIT_UNIQUE_ID, CIS.CIS_REGISTRY_INSTANCE_ID); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |