⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dfdbkb.java

📁 java实现的P2P多agent中间件
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
		
		ResultSet rs = null;
		ResultSet rsS = null;
		String descrId = null;
		
		try{
			PreparedStatements pss = getPreparedStatements();
			// Check if there is a DFD corresponding to aidN and get lease time
			pss.stm_selLease.setString(1, aidN);
			rs = pss.stm_selLease.executeQuery();
			if (rs.next()) {
				dfd = new DFAgentDescription();
				id = getAID(aidN);
				dfd.setName(id);
				String sLease = rs.getString("lease");
				descrId = rs.getString("id");
				long lease = Long.parseLong(sLease);
				if (lease != -1) {
					dfd.setLeaseTime(new Date(lease));
				}
			}
			else {
				return null;
			}
			closeResultSet(rs);
			
			// Protocols
			loadProtocols(descrId, dfd, allProtocols);		
			
			// Languages
			loadLanguages(descrId, dfd, allLanguages);
			
			// Ontologies
			loadOntologies(descrId, dfd, allOntologies);
			
			// Services
			pss.stm_selServices.setString(1, descrId);
			rs = pss.stm_selServices.executeQuery();
			while(rs.next()) {
				ServiceDescription sd = new ServiceDescription();
				String serviceId = rs.getString("id");
				sd.setName(rs.getString("sname"));
				sd.setType(rs.getString("stype"));
				sd.setOwnership(rs.getString("sownership"));
				
				// Service protocols
				pss.stm_selServiceProtocols.setString(1, serviceId);
				rsS = pss.stm_selServiceProtocols.executeQuery();
				while(rsS.next()){
					sd.addProtocols(rsS.getString(PROTOCOL));
				}	
				closeResultSet(rsS);
				
				// Service languages
				pss.stm_selServiceLanguages.setString(1, serviceId);
				rsS = pss.stm_selServiceLanguages.executeQuery();
				while(rsS.next()){
					sd.addOntologies(rsS.getString(ONTOLOGY));
				}	
				closeResultSet(rsS);
				
				// Service ontologies
				pss.stm_selServiceOntologies.setString(1, serviceId);
				rsS = pss.stm_selServiceOntologies.executeQuery();
				while(rsS.next()){
					sd.addLanguages(rsS.getString(LANGUAGE));
				}
				closeResultSet(rsS);
				
				// Service properties
				pss.stm_selServiceProperties.setString(1, serviceId);
				rsS = pss.stm_selServiceProperties.executeQuery();
				while(rsS.next()){
					Property prop = new Property();
					prop.setName(rsS.getString("propkey"));
					String objStrVal = rsS.getString("propval_obj");
					String strStrVal = rsS.getString("propval_str");
					Object value = ( objStrVal == null )? strStrVal : deserializeObj(objStrVal);
					prop.setValue(value);
					sd.addProperties(prop);
				}
				
				dfd.addServices(sd);
			}
		}
		catch (SQLException sqle) {
			// Let it through
			throw sqle;
		}
		catch (Exception e) {
			logger.log(Logger.SEVERE, "Unexpected error retrieving DFD for agent "+aidN, e);
			throw new SQLException("Unexpected error retrieving DFD for agent "+aidN+". "+e.getMessage());
		}
		finally {
			closeResultSet(rs);
			closeResultSet(rsS);
		}
		return dfd;
	}
	
	
	private final void loadOntologies(String descrId, DFAgentDescription dfd, Map allOntologies) throws SQLException {
		if (allOntologies != null) {
			List ontos = (List) allOntologies.get(descrId);
			if (ontos != null) {
				Iterator it = ontos.iterator();
				while (it.hasNext()) {
					dfd.addOntologies((String) it.next());
				}
			}
		}
		else {
			PreparedStatements pss = getPreparedStatements();
			pss.stm_selOntologies.setString(1, descrId);
			ResultSet rs = pss.stm_selOntologies.executeQuery();
			while(rs.next()){
				dfd.addOntologies(rs.getString(ONTOLOGY));
			}
			closeResultSet(rs);
		}
	}

	private final void loadLanguages(String descrId, DFAgentDescription dfd, Map allLanguages) throws SQLException {
		if (allLanguages != null) {
			List langs = (List) allLanguages.get(descrId);
			if (langs != null) {
				Iterator it = langs.iterator();
				while (it.hasNext()) {
					dfd.addLanguages((String) it.next());
				}
			}
		}
		else {
			PreparedStatements pss = getPreparedStatements();
			pss.stm_selLanguages.setString(1, descrId);
			ResultSet rs = pss.stm_selLanguages.executeQuery();
			while(rs.next()){
				dfd.addLanguages(rs.getString(LANGUAGE));
			}
			closeResultSet(rs);
		}
	}

	private final void loadProtocols(String descrId, DFAgentDescription dfd, Map allProtocols) throws SQLException {
		if (allProtocols != null) {
			List protos = (List) allProtocols.get(descrId);
			if (protos != null) {
				Iterator it = protos.iterator();
				while (it.hasNext()) {
					dfd.addProtocols((String) it.next());
				}
			}
		}
		else {
			PreparedStatements pss = getPreparedStatements();
			pss.stm_selProtocols.setString(1, descrId);
			ResultSet rs = pss.stm_selProtocols.executeQuery();
			while(rs.next()){
				dfd.addProtocols(rs.getString(PROTOCOL));
			}
			closeResultSet(rs);
		}
	}

	/**
	 * Deletes the AID corresponding to the indicated agent name
	 * including all its resolver AIDs (if there are no df descriptions left for them)
	 */
	private void removeAID(String aid) throws SQLException {
		PreparedStatements pss = getPreparedStatements();
		// check whether there exists a DF description for the agent
		pss.stm_selNrOfDescrForAID.setString(1, aid);
		ResultSet rs = pss.stm_selNrOfDescrForAID.executeQuery();
		int found = 0;
		if (rs.next())
			found = Integer.parseInt(rs.getString(1));
		
		// no description found --> delete
		if (found == 0) {
			// user definded slots
			pss.stm_delAgentUserDefSlot.setString(1, aid);
			pss.stm_delAgentUserDefSlot.execute();
			
			// resolvers
			Collection resolverAIDs = getResolverAIDs(aid);
			Iterator iter = resolverAIDs.iterator();
			while (iter.hasNext()) {
				removeAID((String)iter.next());
			}
			
			pss.stm_delAgentResolver.setString(1, aid);
			pss.stm_delAgentResolver.execute();
			
			// address
			pss.stm_delAgentAddress.setString(1, aid);
			pss.stm_delAgentAddress.execute();
		}
		
		
	}
	
	/**
	 * Deletes all services corresponding to the indicated description ID
	 * @throws SQLException
	 */
	private void removeServices(String descrId) throws SQLException {
		ResultSet rs = null;
		PreparedStatements pss = getPreparedStatements();
		pss.stm_selServiceId.setString(1, descrId);
		rs = pss.stm_selServiceId.executeQuery();
		
		boolean executeBatch = false;
		while (rs.next()) {
			String serviceId = rs.getString("id");
			
			pss.stm_delServiceLanguage.setString(1, serviceId);
			pss.stm_delServiceLanguage.addBatch();
			
			pss.stm_delServiceOntology.setString(1, serviceId);
			pss.stm_delServiceOntology.addBatch();
			
			pss.stm_delServiceProtocol.setString(1, serviceId);
			pss.stm_delServiceProtocol.addBatch();
			
			pss.stm_delServiceProperty.setString(1, serviceId);
			pss.stm_delServiceProperty.addBatch();
			
			pss.stm_delService.setString(1, descrId);
			pss.stm_delService.addBatch();
			
			executeBatch = true;
		}
		rs.close();
		
		if (executeBatch) {
			pss.stm_delServiceLanguage.executeBatch();
			pss.stm_delServiceOntology.executeBatch();
			pss.stm_delServiceProtocol.executeBatch();
			pss.stm_delServiceProperty.executeBatch();
			pss.stm_delService.executeBatch();
		}
	}


	/**
	 *  Delete the DFD object corresponding to the indicated agent name.
	 */
	private void remove(String aid) throws SQLException {  		
		ResultSet rs = null;
		Connection conn = getConnectionWrapper().getConnection();
		
		try {   
			PreparedStatements pss = getPreparedStatements();
			// get description ID
			pss.stm_selDescrId.setString(1, aid);
			rs = pss.stm_selDescrId.executeQuery();
			
			if (rs.next()) {
				String descrId = rs.getString("id");
				closeResultSet(rs);
				
				// ontologies
				pss.stm_delOntology.setString(1, descrId);
				pss.stm_delOntology.execute();
				
				// protocols
				pss.stm_delProtocol.setString(1, descrId);
				pss.stm_delProtocol.execute();
				
				// languages
				pss.stm_delLanguage.setString(1, descrId);
				pss.stm_delLanguage.execute();
				
				// services
				removeServices(descrId);
				
				// agent description
				pss.stm_delAgentDescr.setString(1, descrId);
				pss.stm_delAgentDescr.execute();
				
				// AID
				removeAID(aid);
				conn.commit();
				
			} else {
				if(logger.isLoggable(Logger.FINE))
					logger.log(Logger.FINE,"No DF description found to remove for agent '"+aid+"'");
			}
		}
		catch(SQLException sqle){
			try {
				conn.rollback();
			} catch (SQLException se) {
				logger.log(Logger.SEVERE,"Rollback for incomplete remotion of DFD for agent "+aid + " failed.", se);
			}
			throw sqle;
		} finally {
			closeResultSet(rs);
		}
	}
	
	
	/**
	 * Convert a template DFAgentDescription into the SQL SELECT
	 * operation that returns the AID names whose DFAgentDescriptions
	 * match the given template.
	 */
	private String createSelect(DFAgentDescription dfdTemplate) throws Exception {
		
		StringBuffer select = new StringBuffer("SELECT dfagentdescr.aid FROM dfagentdescr");
		
		List lAs = new ArrayList();
		List lWhere = new ArrayList();
		
		// Name
		AID agentAID = dfdTemplate.getName();
		if(agentAID != null){
			lWhere.add(" dfagentdescr.aid = '"+agentAID.getName()+"'");
		}
		// Lease time
		Date lease = dfdTemplate.getLeaseTime();
		long currTime = System.currentTimeMillis();
		lWhere.add(" (dfagentdescr.lease = '-1' OR dfagentdescr.lease > '"+currTime+"')");
		
		// Languages
		Iterator iter = dfdTemplate.getAllLanguages();
		int i=0;
		while(iter.hasNext()){
			String tmp = LANGUAGE+i;
			lAs.add(", language "+tmp);
			lWhere.add(tmp+".language='"+(String)iter.next()+"'");
			lWhere.add(tmp+".descrid=dfagentdescr.id");
			i++;
		}
		// Ontologies
		iter = dfdTemplate.getAllOntologies();
		i = 0;
		while(iter.hasNext()){
			String tmp = ONTOLOGY+i;
			lAs.add(", ontology "+tmp);
			lWhere.add(tmp+".ontology='"+(String)iter.next()+"'");
			lWhere.add(tmp+".descrid=dfagentdescr.id");
			i++;
		}
		// Protocols
		iter = dfdTemplate.getAllProtocols();
		i = 0;
		while(iter.hasNext()){
			String tmp = PROTOCOL+i;
			lAs.add(", protocol "+tmp);
			lWhere.add(tmp+".protocol='"+(String)iter.next()+"'");
			lWhere.add(tmp+".descrid=dfagentdescr.id");
			i++;
		}
		// Services
		iter = dfdTemplate.getAllServices();
		i = 0;
		while(iter.hasNext()){
			ServiceDescription service = (ServiceDescription)iter.next();
			String serviceName = service.getName();
			String serviceType = service.getType();
			String serviceOwner = service.getOwnership();
			// Service name, type and ownership
			String tmp = SERVICE+i;
			lAs.add(", service "+tmp);
			if(serviceName != null){
				lWhere.add(tmp+".sname='"+serviceName+"'");
			}
			if(serviceType != null){
				lWhere.add(tmp+".stype='"+serviceType+"'");
			}
			if(serviceOwner != null){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -