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.java34
1 files changed, 24 insertions, 10 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 78ffdfaa49..beeec9fffb 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
@@ -19,18 +19,22 @@
package org.apache.tuscany.sca.binding.erlang.impl;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.apache.tuscany.sca.binding.erlang.ErlangBinding;
import org.apache.tuscany.sca.binding.erlang.impl.exceptions.ErlangException;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+import com.ericsson.otp.erlang.OtpAuthException;
import com.ericsson.otp.erlang.OtpConnection;
import com.ericsson.otp.erlang.OtpSelf;
@@ -39,6 +43,9 @@ import com.ericsson.otp.erlang.OtpSelf;
*/
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;
@@ -53,7 +60,7 @@ public class ErlangNode implements Runnable {
self = new OtpSelf(name);
boolean registered = self.publishPort();
if (!registered) {
- // TODO: externalize messages?
+ // TODO: externalize message?
throw new ErlangException(
"Problem with publishing service under epmd server.");
}
@@ -65,15 +72,20 @@ public class ErlangNode implements Runnable {
}
public void run() {
+ // FIXME: add configurable thread pools
executors = Executors.newFixedThreadPool(10);
while (!stopRequested) {
try {
OtpConnection connection = self.accept();
executors.execute(new ServiceExecutor(connection,
- groupedOperations, erlangModules, erlangMbox));
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
+ groupedOperations, erlangModules, erlangMbox, name));
+ } catch (IOException e) {
+ // TODO: externalzie message?
+ logger.log(Level.WARNING,
+ "Error occured while accepting connection on '" + name
+ + "' node");
+ } catch (OtpAuthException e) {
+ // TODO: log bad authentication attempt
}
}
}
@@ -82,8 +94,9 @@ public class ErlangNode implements Runnable {
RuntimeComponentService service) throws ErlangException {
if (binding.isMbox()) {
if (mboxNode) {
- // TODO: externalize message
- // TODO: really want to throw exception? Log only?
+ // 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 {
@@ -107,14 +120,15 @@ public class ErlangNode implements Runnable {
}
} else {
if (erlangModules.containsKey(binding.getModule())) {
- // TODO: externalize message
- // TODO: really want to throw exception? Log only?
+ // 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) {
- // TODO: should ErlangNode manage its thread?
+ // NOTE: Erlang node is managing it's thread by itself. Just noticing.
Thread selfThread = new Thread(this);
selfThread.start();
}