summaryrefslogtreecommitdiffstats
path: root/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangNode.java')
-rw-r--r--sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangNode.java87
1 files changed, 26 insertions, 61 deletions
diff --git a/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangNode.java b/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangNode.java
index beeec9fffb..94bac31809 100644
--- a/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangNode.java
+++ b/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangNode.java
@@ -46,16 +46,15 @@ public class ErlangNode implements Runnable {
private static final Logger logger = Logger.getLogger(ErlangNode.class
.getName());
- private Map<String, ErlangNodeElement> erlangModules = new HashMap<String, ErlangNodeElement>();
- private ErlangNodeElement erlangMbox;
- private boolean mboxNode;
+ private ErlangNodeElement nodeElement;
private String name;
private OtpSelf self;
private ExecutorService executors;
private boolean stopRequested;
private Map<String, List<Operation>> groupedOperations;
- public ErlangNode(String name) throws Exception {
+ public ErlangNode(String name, ErlangBinding binding,
+ RuntimeComponentService service) throws Exception {
this.name = name;
self = new OtpSelf(name);
boolean registered = self.publishPort();
@@ -64,9 +63,13 @@ public class ErlangNode implements Runnable {
throw new ErlangException(
"Problem with publishing service under epmd server.");
}
+ if (binding.hasCookie()) {
+ self.setCookie(binding.getCookie());
+ }
+ registerBinding(binding, service);
}
- private void stop() {
+ public void stop() {
stopRequested = true;
executors.shutdownNow();
}
@@ -78,76 +81,38 @@ public class ErlangNode implements Runnable {
try {
OtpConnection connection = self.accept();
executors.execute(new ServiceExecutor(connection,
- groupedOperations, erlangModules, erlangMbox, name));
+ groupedOperations, nodeElement, name));
} catch (IOException e) {
// TODO: externalzie message?
logger.log(Level.WARNING,
"Error occured while accepting connection on '" + name
- + "' node");
+ + "' node", e);
} catch (OtpAuthException e) {
- // TODO: log bad authentication attempt
+ // TODO: externalize message?
+ logger.log(Level.WARNING, "Error while authenticating client", e);
}
}
}
- public void registerBinding(ErlangBinding binding,
+ private void registerBinding(ErlangBinding binding,
RuntimeComponentService service) throws ErlangException {
if (binding.isMbox()) {
- if (mboxNode) {
- // TODO: externalize message?
- // NOTE: if mbox registered more than once for node then
- // exception will be thrown
- throw new ErlangException("Node " + binding.getNode()
- + " already defined as mbox node");
- } else {
- List<Operation> operations = service.getInterfaceContract()
- .getInterface().getOperations();
- groupedOperations = new HashMap<String, List<Operation>>();
- for (Operation operation : operations) {
- List<Operation> operationsGroup = groupedOperations
- .get(operation.getName());
- if (operationsGroup == null) {
- operationsGroup = new ArrayList<Operation>();
- groupedOperations.put(operation.getName(),
- operationsGroup);
- }
- operationsGroup.add(operation);
- }
- mboxNode = true;
- erlangMbox = new ErlangNodeElement();
- erlangMbox.setService(service);
- erlangMbox.setBinding(binding);
- }
- } else {
- if (erlangModules.containsKey(binding.getModule())) {
- // TODO: externalize message?
- // NOTE: if the same module was registered more than once than
- // exception will be thrown
- throw new ErlangException("Module " + binding.getModule()
- + " already defined under " + name
- + " node. Duplicate module won't be started");
- } else {
- if (erlangModules.size() == 0) {
- // NOTE: Erlang node is managing it's thread by itself. Just noticing.
- Thread selfThread = new Thread(this);
- selfThread.start();
+ List<Operation> operations = service.getInterfaceContract()
+ .getInterface().getOperations();
+ groupedOperations = new HashMap<String, List<Operation>>();
+ for (Operation operation : operations) {
+ List<Operation> operationsGroup = groupedOperations
+ .get(operation.getName());
+ if (operationsGroup == null) {
+ operationsGroup = new ArrayList<Operation>();
+ groupedOperations.put(operation.getName(), operationsGroup);
}
- ErlangNodeElement module = new ErlangNodeElement();
- module.setService(service);
- module.setBinding(binding);
- erlangModules.put(binding.getModule(), module);
- }
- }
- }
-
- public void unregisterBinding(ErlangBinding binding) throws ErlangException {
- if (erlangModules.containsKey(binding.getModule())) {
- erlangModules.remove(binding.getModule());
- erlangModules.remove(binding.getModule());
- if (erlangModules.size() == 0) {
- stop();
+ operationsGroup.add(operation);
}
}
+ nodeElement = new ErlangNodeElement();
+ nodeElement.setService(service);
+ nodeElement.setBinding(binding);
}
}