Skip to content
Snippets Groups Projects
Commit bbe2beb5 authored by Constantin Jucovschi's avatar Constantin Jucovschi
Browse files

SallyCore is more stable.

parent 13fe0626
No related branches found
No related tags found
No related merge requests found
Showing
with 117 additions and 113 deletions
package info.kwarc.sally4.docmanager; package info.kwarc.sally4.docmanager;
import info.kwarc.sally.comm.core.Registerdocument; import info.kwarc.sally.comm.core.Registerdocument;
import info.kwarc.sally4.docmanager.component.AlexComponent; import info.kwarc.sally4.core.ProducerConsumerSplitterComponent;
import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.camel.component.ActiveMQComponent; import org.apache.activemq.camel.component.ActiveMQComponent;
...@@ -30,24 +30,7 @@ public class TT extends RouteBuilder { ...@@ -30,24 +30,7 @@ public class TT extends RouteBuilder {
ActiveMQComponent comp = new ActiveMQComponent(config); ActiveMQComponent comp = new ActiveMQComponent(config);
context.addComponent("activemq", comp); context.addComponent("activemq", comp);
context.addComponent("alex", new AlexComponent(new AlexRoute() { context.addComponent("alex", new ProducerConsumerSplitterComponent("direct:consumer", "direct:producer"));
public String getAlexStateQueue() {
return "sally_alex";
}
public String getAlexQueue() {
return "alex";
}
public void addOnStopHandler(Runnable r) {
}
public void stop() {
}
}));
context.addRoutes(new TT()); context.addRoutes(new TT());
context.start(); context.start();
......
package info.kwarc.sally4.docmanager.impl; package info.kwarc.sally4.docmanager.impl;
import info.kwarc.sally4.core.ProducerConsumerSplitterComponent;
import info.kwarc.sally4.docmanager.AlexRoute; import info.kwarc.sally4.docmanager.AlexRoute;
import info.kwarc.sally4.docmanager.IDocWorkflow; import info.kwarc.sally4.docmanager.IDocWorkflow;
...@@ -10,6 +11,7 @@ import java.util.HashSet; ...@@ -10,6 +11,7 @@ import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Queue; import java.util.Queue;
import java.util.UUID;
import org.apache.camel.Exchange; import org.apache.camel.Exchange;
import org.slf4j.Logger; import org.slf4j.Logger;
...@@ -92,4 +94,14 @@ public class AlexRouteImpl implements AlexRoute { ...@@ -92,4 +94,14 @@ public class AlexRouteImpl implements AlexRoute {
} }
} }
} }
@Override
public String getID() {
return UUID.randomUUID().toString();
}
@Override
public ProducerConsumerSplitterComponent getAlexComponent() {
return new ProducerConsumerSplitterComponent("activemq:queue:"+alexStateQueue, "activemq:queue:"+alexQueue);
}
} }
...@@ -61,15 +61,17 @@ public class DocumentManagerImpl implements DocumentManager { ...@@ -61,15 +61,17 @@ public class DocumentManagerImpl implements DocumentManager {
AlexRouteImpl route = new AlexRouteImpl(doc.getDocumentqueue(), doc.getTheoqueue(), doc.getInterfaces()); AlexRouteImpl route = new AlexRouteImpl(doc.getDocumentqueue(), doc.getTheoqueue(), doc.getInterfaces());
docs.put(doc.getDocumentqueue(), route); docs.put(doc.getDocumentqueue(), route);
return route;
}
public void addRouteToWorkflows(AlexRouteImpl route) {
for (IDocWorkflow workflow : workflows) { for (IDocWorkflow workflow : workflows) {
HashSet<String> required = new HashSet<String>(Arrays.asList(workflow.getInterfaceRequirements())); HashSet<String> required = new HashSet<String>(Arrays.asList(workflow.getInterfaceRequirements()));
if (route.getInterfaces().containsAll(required)) { if (route.getInterfaces().containsAll(required)) {
route.addDocumentWorkflow(workflow); route.addDocumentWorkflow(workflow);
} }
} }
return route;
} }
......
package info.kwarc.sally4.docmanager.impl;
import info.kwarc.sally4.docmanager.AlexRoute;
import info.kwarc.sally4.docmanager.IDocWorkflow;
import org.apache.camel.Exchange;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Instantiate;
import org.apache.felix.ipojo.annotations.Provides;
@Component
@Instantiate
@Provides
public class DummyWorkflow implements IDocWorkflow {
@Override
public String[] getInterfaceRequirements() {
return new String[]{"SomeNearlyImpossibleInterfaceRequirement"};
}
@Override
public String[] getHandlingNamespaces() {
return new String[]{};
}
@Override
public boolean handleMessage(String namespace, String type,
Exchange exchange) {
return false;
}
@Override
public void onNewDocument(AlexRoute route) {
}
}
...@@ -4,6 +4,7 @@ import info.kwarc.sally.comm.CommUtils; ...@@ -4,6 +4,7 @@ import info.kwarc.sally.comm.CommUtils;
import info.kwarc.sally.comm.core.Heartbeatrequest; import info.kwarc.sally.comm.core.Heartbeatrequest;
import info.kwarc.sally4.docmanager.impl.AlexRouteImpl; import info.kwarc.sally4.docmanager.impl.AlexRouteImpl;
import info.kwarc.sally4.docmanager.impl.AlexRouteMessageProcessor; import info.kwarc.sally4.docmanager.impl.AlexRouteMessageProcessor;
import info.kwarc.sally4.docmanager.impl.DocumentManagerImpl;
import org.apache.camel.ExchangeTimedOutException; import org.apache.camel.ExchangeTimedOutException;
import org.apache.camel.builder.RouteBuilder; import org.apache.camel.builder.RouteBuilder;
...@@ -15,6 +16,7 @@ public class SallyAlexRoute extends RouteBuilder { ...@@ -15,6 +16,7 @@ public class SallyAlexRoute extends RouteBuilder {
Logger log; Logger log;
AlexRouteImpl route; AlexRouteImpl route;
DocumentManagerImpl docManager;
public Heartbeatrequest generateHeartbeat() { public Heartbeatrequest generateHeartbeat() {
return new Heartbeatrequest(); return new Heartbeatrequest();
...@@ -43,14 +45,16 @@ public class SallyAlexRoute extends RouteBuilder { ...@@ -43,14 +45,16 @@ public class SallyAlexRoute extends RouteBuilder {
.inOut("alex:default") .inOut("alex:default")
.doCatch(ExchangeTimedOutException.class) .doCatch(ExchangeTimedOutException.class)
.bean(method(this, "stopSallyRoute")); .bean(method(this, "stopSallyRoute"));
/** /**
* *
*/ */
from("alex:defaultin") from("alex:defaultin")
.convertBodyTo(String.class) .convertBodyTo(String.class)
.process(new AlexRouteMessageProcessor(route)) .process(new AlexRouteMessageProcessor(route))
.to("alex:defaultout"); .to("alex:defaultout");
} }
} }
...@@ -2,12 +2,13 @@ package info.kwarc.sally4.docmanager.routes; ...@@ -2,12 +2,13 @@ package info.kwarc.sally4.docmanager.routes;
import info.kwarc.sally.comm.CommUtils; import info.kwarc.sally.comm.CommUtils;
import info.kwarc.sally.comm.core.Registerdocumentresponse; import info.kwarc.sally.comm.core.Registerdocumentresponse;
import info.kwarc.sally4.docmanager.component.AlexComponent;
import info.kwarc.sally4.docmanager.impl.AlexRouteImpl; import info.kwarc.sally4.docmanager.impl.AlexRouteImpl;
import info.kwarc.sally4.docmanager.impl.DocumentManagerImpl; import info.kwarc.sally4.docmanager.impl.DocumentManagerImpl;
import org.apache.camel.CamelContext; import org.apache.camel.CamelContext;
import org.apache.camel.ExchangePattern;
import org.apache.camel.builder.RouteBuilder; import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.JmsConstants;
import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.spi.DataFormat; import org.apache.camel.spi.DataFormat;
...@@ -18,7 +19,7 @@ public class SallyRegisterRoute extends RouteBuilder { ...@@ -18,7 +19,7 @@ public class SallyRegisterRoute extends RouteBuilder {
public static final String mockSallyRegisterQueueOutput = "mock:/queue/sally_register_out"; public static final String mockSallyRegisterQueueOutput = "mock:/queue/sally_register_out";
DocumentManagerImpl docManager; DocumentManagerImpl docManager;
public SallyRegisterRoute(DocumentManagerImpl docManager) { public SallyRegisterRoute(DocumentManagerImpl docManager) {
this.docManager = docManager; this.docManager = docManager;
} }
...@@ -26,13 +27,14 @@ public class SallyRegisterRoute extends RouteBuilder { ...@@ -26,13 +27,14 @@ public class SallyRegisterRoute extends RouteBuilder {
public Registerdocumentresponse createRouteContext(AlexRouteImpl route) throws Exception { public Registerdocumentresponse createRouteContext(AlexRouteImpl route) throws Exception {
final CamelContext alexRouteContext = new DefaultCamelContext(); final CamelContext alexRouteContext = new DefaultCamelContext();
alexRouteContext.addComponent("activemq", getContext().getComponent("activemq")); alexRouteContext.addComponent("activemq", getContext().getComponent("activemq"));
alexRouteContext.addComponent("alex", new AlexComponent(route)); alexRouteContext.addComponent("alex", route.getAlexComponent());
alexRouteContext.addRoutes(new SallyAlexRoute(route)); alexRouteContext.addRoutes(new SallyAlexRoute(route));
alexRouteContext.getShutdownStrategy().setTimeout(10); alexRouteContext.getShutdownStrategy().setTimeout(10);
alexRouteContext.start(); alexRouteContext.start();
route.addOnStopHandler(new Runnable() { route.addOnStopHandler(new Runnable() {
public void run() { public void run() {
try { try {
alexRouteContext.stop(); alexRouteContext.stop();
...@@ -41,21 +43,33 @@ public class SallyRegisterRoute extends RouteBuilder { ...@@ -41,21 +43,33 @@ public class SallyRegisterRoute extends RouteBuilder {
} }
} }
}); });
Registerdocumentresponse response = new Registerdocumentresponse(); Registerdocumentresponse response = new Registerdocumentresponse();
response.setSallyqueue(route.getAlexStateQueue()); response.setSallyqueue(route.getAlexStateQueue());
return response; return response;
} }
@Override @Override
public void configure() throws Exception { public void configure() throws Exception {
DataFormat core = CommUtils.getDataFormat("core"); DataFormat core = CommUtils.getDataFormat("core");
from("activemq:queue:"+sallyRegisterQueue) from("activemq:queue:"+sallyRegisterQueue)
.unmarshal(core) .unmarshal(core)
.bean(docManager, "registerDocument") .bean(docManager, "registerDocument")
.bean(method(this, "createRouteContext")) .setProperty("route", body())
.marshal(core); .bean(method(this, "createRouteContext"))
.setExchangePattern(ExchangePattern.InOnly)
.multicast().parallelProcessing()
.to("direct:sendResponse", "direct:alexRoute");
from("direct:alexRoute")
.setBody(property("route"))
.bean(docManager, "addRouteToWorkflows")
.end();
from("direct:sendResponse")
.marshal(core)
.setHeader(JmsConstants.JMS_DESTINATION, header("JMSReplyTo"))
.to("activemq:mock");
} }
} }
package info.kwarc.sally4.docmanager.routes;
import info.kwarc.sally4.docmanager.impl.AlexRouteImpl;
import java.util.Arrays;
import org.apache.camel.EndpointInject;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.direct.DirectComponent;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
public class SallyAlexRouteTest extends CamelTestSupport {
SallyAlexRoute route;
@EndpointInject(uri="mock:result")
MockEndpoint result;
@Test
public void ValidMessage() throws InterruptedException {
ProducerTemplate temp = context.createProducerTemplate();
temp.sendBody("alex:defaultin", " <GetServices xmlns=\"http://kwarc.info/sally/comm/planetaryclient\"/> ");
result.expectedMessageCount(1);
result.assertIsSatisfied();
}
@Test
public void InvalidMessage() throws InterruptedException {
ProducerTemplate temp = context.createProducerTemplate();
try {
temp.sendBody("alex:defaultin", " <GetServices/> ");
fail();
} catch (Exception e) {
}
result.expectedMessageCount(0);
result.assertIsSatisfied();
}
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
route = new SallyAlexRoute(new AlexRouteImpl("a", "b", Arrays.asList(new String[]{"asd"})));
route.from("alex:defaultout").to("mock:result");
context.addComponent("alex", new DirectComponent());
return route;
}
}
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes> <attributes>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
......
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.7 org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=1.7 org.eclipse.jdt.core.compiler.source=1.6
...@@ -54,14 +54,12 @@ ...@@ -54,14 +54,12 @@
<version>${sally4.version}</version> <version>${sally4.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version> <version>5.1.30</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.camel</groupId> <groupId>org.apache.camel</groupId>
<artifactId>camel-sql</artifactId> <artifactId>camel-sql</artifactId>
......
...@@ -4,21 +4,20 @@ import org.apache.camel.CamelContext; ...@@ -4,21 +4,20 @@ import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder; import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.sql.SqlComponent; import org.apache.camel.component.sql.SqlComponent;
import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.DefaultCamelContext;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
public class TestMain { public class TestMain {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
CamelContext context = new DefaultCamelContext(); CamelContext context = new DefaultCamelContext();
SqlComponent sqlComponent = new SqlComponent();
MysqlDataSource mysqlDataSource = new MysqlDataSource();
mysqlDataSource.setUser("root");
mysqlDataSource.setPassword("rootul");
mysqlDataSource.setServerName("localhost");
mysqlDataSource.setDatabaseName("planetmmt1");
sqlComponent.setDataSource(mysqlDataSource); DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/planetmmt1");
dataSource.setUsername("root");
dataSource.setPassword("rootul");
SqlComponent sqlComponent = new SqlComponent();
sqlComponent.setDataSource(dataSource);
context.addComponent("planetary", sqlComponent); context.addComponent("planetary", sqlComponent);
context.addRoutes(new RouteBuilder() { context.addRoutes(new RouteBuilder() {
......
...@@ -3,7 +3,6 @@ package info.kwarc.sally4.planetary.impl; ...@@ -3,7 +3,6 @@ package info.kwarc.sally4.planetary.impl;
import info.kwarc.sally4.core.CamelContextProvider; import info.kwarc.sally4.core.CamelContextProvider;
import info.kwarc.sally4.planetary.PlanetaryConnection; import info.kwarc.sally4.planetary.PlanetaryConnection;
import org.apache.camel.CamelContext;
import org.apache.camel.component.sql.SqlComponent; import org.apache.camel.component.sql.SqlComponent;
import org.apache.felix.ipojo.annotations.Component; import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Instantiate; import org.apache.felix.ipojo.annotations.Instantiate;
...@@ -20,12 +19,20 @@ import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; ...@@ -20,12 +19,20 @@ import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
public class PlanetaryConnectionImpl implements PlanetaryConnection { public class PlanetaryConnectionImpl implements PlanetaryConnection {
@Requires @Requires
CamelContextProvider camelContextProvider; CamelContextProvider camelContextProvider;
MysqlDataSource mysqlDataSource;
@Validate @Validate
public void start() { public void start() {
// DriverManagerDataSource dataSource = new DriverManagerDataSource();
// dataSource.setDriverClassName("com.mysql.jdbc.Driver");
// dataSource.setUrl("jdbc:mysql://localhost:3306/planetmmt1");
// dataSource.setUsername("root");
// dataSource.setPassword("rootul");
//
// SqlComponent sqlComponent = new SqlComponent();
// sqlComponent.setDataSource(dataSource);
SqlComponent sqlComponent = new SqlComponent(); SqlComponent sqlComponent = new SqlComponent();
mysqlDataSource = new MysqlDataSource(); MysqlDataSource mysqlDataSource = new MysqlDataSource();
mysqlDataSource.setUser("root"); mysqlDataSource.setUser("root");
mysqlDataSource.setPassword("rootul"); mysqlDataSource.setPassword("rootul");
mysqlDataSource.setServerName("localhost"); mysqlDataSource.setServerName("localhost");
......
...@@ -29,8 +29,8 @@ ...@@ -29,8 +29,8 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<configuration> <configuration>
<source>1.7</source> <source>1.6</source>
<target>1.7</target> <target>1.6</target>
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes> <attributes>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
</attributes> </attributes>
......
eclipse.preferences.version=1 eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.7 org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=1.7 org.eclipse.jdt.core.compiler.source=1.6
/home/costea/workspace_sally4/Felix/start.sh /home/costea/workspace_sally4/sally4.git/Felix/start.sh
\ No newline at end of file \ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment