[jboss-svn-commits] JBL Code SVN: r31745 - labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Feb 19 13:01:50 EST 2010


Author: baunax
Date: 2010-02-19 13:01:49 -0500 (Fri, 19 Feb 2010)
New Revision: 31745

Modified:
   labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeService.java
Log:
- changed map to use ConcurrentHashMap impls


Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeService.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeService.java	2010-02-19 15:54:39 UTC (rev 31744)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeService.java	2010-02-19 18:01:49 UTC (rev 31745)
@@ -5,9 +5,9 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.xml.bind.JAXBContext;
 
@@ -48,8 +48,8 @@
 
 	private static KnowledgeService instance;
 	
-	private Map<String, KnowledgeAgent> cachedAgents = new HashMap<String, KnowledgeAgent>();
-	private Map<String, JAXBContext> cachedJaxbContexts = new HashMap<String, JAXBContext>();
+	private Map<String, KnowledgeAgent> cachedAgents = new ConcurrentHashMap<String, KnowledgeAgent>();
+	private Map<String, JAXBContext> cachedJaxbContexts = new ConcurrentHashMap<String, JAXBContext>();
 
 	private CamelContext camelContext;
 	private KnowledgeServerProfile profiles;
@@ -77,93 +77,87 @@
 	}
 	
 	public void checkContextStatus(KnowledgeContextProfile contextProfile) throws Exception  {
-		synchronized (cachedAgents) {
-			if (!cachedAgents.containsKey(contextProfile.getId())) {
-				KnowledgeAgentProvider knowledgeAgentFactory = serviceManager.getKnowledgeAgentFactory();
-				KnowledgeBase kbase = serviceManager.getKnowledgeBaseFactoryService().newKnowledgeBase();
-				
-				List<String> allClassNames = new ArrayList<String>();
-				
-				if (contextProfile.hasJaxbModels()) {
-					for (ProfileFile modelFile : contextProfile.getJaxbModels()) {
-						// Create model from xsd definition and add to kbase classloader
-						KnowledgeBuilder kbuilder = serviceManager.getKnowledgeBuilderFactoryService().newKnowledgeBuilder();
-						
-						Options xjcOpts = new Options();
-						xjcOpts.setSchemaLanguage( Language.XMLSCHEMA );
-						
-						try {
-							String classNames[] = KnowledgeBuilderHelper.addXsdModel( ResourceFactory.newClassPathResource(modelFile.getFileName(), getClass()),
-									kbuilder,
-									xjcOpts,
-							"xsd" );
-							for (int i = 0; i < classNames.length; i++) {
-								allClassNames.add(classNames[i]);
-							}
-						} catch (IOException e) {
-							throw new Exception("Error creating XSD model", e);
+		if (!cachedAgents.containsKey(contextProfile.getId())) {
+			KnowledgeAgentProvider knowledgeAgentFactory = serviceManager.getKnowledgeAgentFactory();
+			KnowledgeBase kbase = serviceManager.getKnowledgeBaseFactoryService().newKnowledgeBase();
+
+			List<String> allClassNames = new ArrayList<String>();
+
+			if (contextProfile.hasJaxbModels()) {
+				for (ProfileFile modelFile : contextProfile.getJaxbModels()) {
+					// Create model from xsd definition and add to kbase classloader
+					KnowledgeBuilder kbuilder = serviceManager.getKnowledgeBuilderFactoryService().newKnowledgeBuilder();
+
+					Options xjcOpts = new Options();
+					xjcOpts.setSchemaLanguage( Language.XMLSCHEMA );
+
+					try {
+						String classNames[] = KnowledgeBuilderHelper.addXsdModel( ResourceFactory.newClassPathResource(modelFile.getFileName(), getClass()),
+								kbuilder,
+								xjcOpts,
+								"xsd" );
+						for (int i = 0; i < classNames.length; i++) {
+							allClassNames.add(classNames[i]);
 						}
+					} catch (IOException e) {
+						throw new Exception("Error creating XSD model", e);
 					}
-					
-					if (allClassNames.size() > 0) {
-						JAXBContext jaxbContext = KnowledgeBuilderHelper.newJAXBContext( allClassNames.toArray(new String[allClassNames.size()]), kbase );
-						cachedJaxbContexts.put(contextProfile.getId(), jaxbContext);
-					}
 				}
-				
-				KnowledgeAgent kagent = knowledgeAgentFactory.newKnowledgeAgent(contextProfile.getId(), kbase);
-				for (ProfileFile changeSet : contextProfile.getChangeSetFiles()) {
-					kagent.applyChangeSet(ResourceFactory.newClassPathResource(changeSet.getFileName()));
+
+				if (allClassNames.size() > 0) {
+					JAXBContext jaxbContext = KnowledgeBuilderHelper.newJAXBContext( allClassNames.toArray(new String[allClassNames.size()]), kbase );
+					cachedJaxbContexts.put(contextProfile.getId(), jaxbContext);
 				}
-				StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
-				serviceManager.register(contextProfile.getId(), session);
-				cachedAgents.put(contextProfile.getId(), kagent);
-				
-				// Execute the startups commands
-				for (StartupCommand command : contextProfile.getStartupCommands()) {
-					executeCommand(contextProfile, command.getContent());
-				}
-				
 			}
+
+			KnowledgeAgent kagent = knowledgeAgentFactory.newKnowledgeAgent(contextProfile.getId(), kbase);
+			for (ProfileFile changeSet : contextProfile.getChangeSetFiles()) {
+				kagent.applyChangeSet(ResourceFactory.newClassPathResource(changeSet.getFileName()));
+			}
+			StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+			serviceManager.register(contextProfile.getId(), session);
+			cachedAgents.put(contextProfile.getId(), kagent);
+
+			// Execute the startups commands
+			for (StartupCommand command : contextProfile.getStartupCommands()) {
+				executeCommand(contextProfile, command.getContent());
+			}
+
 		}
 	}
 	
 	public String executeService(InputStream inputStream, KnowledgeContextProfile contextProfile) throws Exception {
 		BufferedInputStream bis = new BufferedInputStream(inputStream);
-		ByteArrayOutputStream buf = new ByteArrayOutputStream();
-		int result;
-		String cmd = null;
+		ByteArrayOutputStream cmd = new ByteArrayOutputStream();
+		byte[] buffer = new byte[2048];
+		int count;
 		try {
-			result = bis.read();
-			while (result != -1) {
-				byte b = (byte)result;
-				buf.write(b);
-				result = bis.read();
+			while ((count = bis.read()) != -1) {
+				cmd.write(buffer, 0, count);
 			}        
-			cmd = buf.toString();
+			return executeCommand(contextProfile, cmd.toString());
 		} catch (IOException e) {
 			throw new Exception("Unable to read the xml command", e);
 		}
-		return executeCommand(contextProfile, cmd);
 	}
 	
 	private String executeCommand(KnowledgeContextProfile contextProfile, String cmd) throws Exception {
 		if (contextProfile.hasJaxbModels()) {
 			JAXBContext jaxbContext = getJaxbContext(contextProfile.getId());
-			if (contextProfile.getSessionType().equalsIgnoreCase("stateless")) {
+			if ("stateless".equalsIgnoreCase(contextProfile.getSessionType())) {
 				return new String((byte[])template.requestBodyAndHeader("direct:no-session-jaxb", cmd, "jaxb-context", jaxbContext));
 			}
-			else if (contextProfile.getSessionType().equalsIgnoreCase("stateful")) {
+			else if ("stateful".equalsIgnoreCase(contextProfile.getSessionType())) {
 				return new String((byte[])template.requestBodyAndHeader("direct:with-session-jaxb", cmd, "jaxb-context", jaxbContext));
 			}
 			else
 				throw new Exception("Bad session type. Expected stateless or stateful");
 		}
 		else {
-			if (contextProfile.getSessionType().equalsIgnoreCase("stateless")) {
+			if ("stateless".equalsIgnoreCase(contextProfile.getSessionType())) {
 				return new String((byte[])template.requestBody("direct:no-session-xstream", cmd));
 			}
-			else if (contextProfile.getSessionType().equalsIgnoreCase("stateful")) {
+			else if ("stateful".equalsIgnoreCase(contextProfile.getSessionType())) {
 				return new String((byte[])template.requestBody("direct:with-session-xstream", cmd));
 			}
 			else



More information about the jboss-svn-commits mailing list