summaryrefslogtreecommitdiffstats
path: root/java/sca
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2008-07-02 02:51:44 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2008-07-02 02:51:44 +0000
commit58a3413067277196f2aa5bb298b59b87f9f7481b (patch)
treef2fad6fa62ff9f7746c229aa6a3241b84bafa564 /java/sca
parent19e73be43d7e2ff9d75c6f6aff56abba57ff5c55 (diff)
Apply the patch from Wojtek and work around the SUN JDK ORB shutdown issue
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@673263 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca')
-rw-r--r--java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java23
-rw-r--r--java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaServantTestCase.java38
-rw-r--r--java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaTypesTestCase.java95
-rw-r--r--java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/TestConstants.java7
-rw-r--r--java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/naming/TransientNameServer.java2
-rw-r--r--java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/naming/TransientNameService.java19
-rw-r--r--java/sca/modules/host-corba-jdk/src/test/java/org/apache/tuscany/sca/host/corba/testing/DefaultCorbaHostTestCase.java25
7 files changed, 107 insertions, 102 deletions
diff --git a/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java b/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java
index 2036b95c9b..fd310a85a8 100644
--- a/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java
+++ b/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/reference/DynaCorbaRequest.java
@@ -45,16 +45,15 @@ public class DynaCorbaRequest {
private TypeTree returnTree;
private Map<String, TypeTree> exceptions = new HashMap<String, TypeTree>();
private OutputStream outputStream;
+ private InputStream inputStream;
private ObjectImpl remoteObject;
private String operation;
/**
* Creates request.
*
- * @param ObjectremoteObject
- * remote object reference
- * @param operation
- * operation to invoke
+ * @param ObjectremoteObject remote object reference
+ * @param operation operation to invoke
*/
public DynaCorbaRequest(Object remoteObject, String operation) {
outputStream = ((ObjectImpl)remoteObject)._request(operation, true);
@@ -96,8 +95,7 @@ public class DynaCorbaRequest {
/**
* Handles application excpeition.
*
- * @param ae
- * occured exception
+ * @param ae occured exception
* @throws Exception
*/
private void handleApplicationException(ApplicationException ae) throws Exception {
@@ -150,11 +148,10 @@ public class DynaCorbaRequest {
*/
public DynaCorbaResponse invoke() throws Exception {
DynaCorbaResponse response = new DynaCorbaResponse();
- InputStream is = null;
try {
- is = remoteObject._invoke(outputStream);
- if (is != null && returnTree != null) {
- response.setContent(TypeHelpersProxy.read(returnTree.getRootNode(), is));
+ inputStream = remoteObject._invoke(outputStream);
+ if (inputStream != null && returnTree != null) {
+ response.setContent(TypeHelpersProxy.read(returnTree.getRootNode(), inputStream));
}
} catch (ApplicationException ae) {
handleApplicationException(ae);
@@ -162,8 +159,14 @@ public class DynaCorbaRequest {
handleSystemException(se);
} catch (Exception e) {
throw e;
+ } finally {
+ release();
}
return response;
}
+
+ public void release() {
+ remoteObject._releaseReply(inputStream);
+ }
}
diff --git a/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaServantTestCase.java b/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaServantTestCase.java
index 796047a8b4..74642f1984 100644
--- a/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaServantTestCase.java
+++ b/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaServantTestCase.java
@@ -22,7 +22,6 @@ package org.apache.tuscany.sca.binding.corba.testing;
import static junit.framework.Assert.fail;
import static org.junit.Assert.assertTrue;
-import java.io.IOException;
import java.lang.reflect.Array;
import junit.framework.Assert;
@@ -71,48 +70,14 @@ import org.omg.CosNaming.NamingContextHelper;
public class CorbaServantTestCase {
- private static Process process;
private static ORB orb;
-
- /**
- * Spawns tnamserv an initiates ORB
- */
- // @BeforeClass
- public static void setUp() throws IOException {
- String[] args = {"-ORBInitialPort", "" + TestConstants.DEFAULT_PORT};
- process = Runtime.getRuntime().exec("tnameserv " + args[0] + " " + args[1]);
- try {
- // let the tnameserv have time to start
- Thread.sleep(TestConstants.TNAMESERV_SPAWN_WAIT);
- orb = ORB.init(args, null);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- /**
- * Kills tnameserv
- */
- // @BeforeClass
- public static void tearDown() {
- try {
- if (process != null) {
- process.destroy();
- }
- // let the tnameserv have time to die
- Thread.sleep(TestConstants.TNAMESERV_SPAWN_WAIT);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
private static TransientNameServer server;
@BeforeClass
public static void start() {
try {
server =
- new TransientNameServer(TestConstants.DEFAULT_HOST, TestConstants.DEFAULT_PORT,
+ new TransientNameServer(TestConstants.TEST2_HOST, TestConstants.TEST2_PORT,
TransientNameService.DEFAULT_SERVICE_NAME);
Thread t = server.start();
if (t == null) {
@@ -321,6 +286,7 @@ public class CorbaServantTestCase {
DynaCorbaRequest request =
new DynaCorbaRequest(bindReference("TestObject"), "methodThatSurelyDoesNotExist");
request.invoke();
+ fail();
} catch (Exception e) {
if (e instanceof CorbaException) {
assertTrue(true);
diff --git a/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaTypesTestCase.java b/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaTypesTestCase.java
index 0aa9f858d3..4419dce132 100644
--- a/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaTypesTestCase.java
+++ b/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/CorbaTypesTestCase.java
@@ -24,7 +24,6 @@ import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import java.io.IOException;
import java.lang.reflect.Array;
import junit.framework.Assert;
@@ -55,6 +54,7 @@ import org.apache.tuscany.sca.host.corba.naming.TransientNameServer;
import org.apache.tuscany.sca.host.corba.naming.TransientNameService;
import org.junit.AfterClass;
import org.junit.BeforeClass;
+import org.junit.Ignore;
import org.junit.Test;
import org.omg.CORBA.ORB;
import org.omg.CORBA.Object;
@@ -71,7 +71,6 @@ public class CorbaTypesTestCase {
private static TransientNameServer server;
private static ORB orb;
- private static Process tnameservProcess;
private static Object refPrimitivesSetter;
private static Object refArraysSetter;
private static Object refTestObject;
@@ -88,7 +87,7 @@ public class CorbaTypesTestCase {
try {
try {
server =
- new TransientNameServer(TestConstants.DEFAULT_HOST, TestConstants.DEFAULT_PORT,
+ new TransientNameServer(TestConstants.TEST1_HOST, TestConstants.TEST1_PORT,
TransientNameService.DEFAULT_SERVICE_NAME);
Thread t = server.start();
if (t == null) {
@@ -154,36 +153,6 @@ public class CorbaTypesTestCase {
}
}
- private static ORB createORB() throws IOException {
- String[] args = {"-ORBInitialPort", "11100"};
-
- tnameservProcess = Runtime.getRuntime().exec("tnameserv " + args[0] + " " + args[1]);
-
- try {
- // let the tnameserv have time to start
- Thread.sleep(TestConstants.TNAMESERV_SPAWN_WAIT);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- ORB orb = ORB.init(args, null);
- return orb;
- }
-
- /**
- * Kills previously spawned tnameserv process.
- */
- // @AfterClass
- public static void tearDown() {
- tnameservProcess.destroy();
- try {
- // let the tnameserv have time to die
- Thread.sleep(TestConstants.TNAMESERV_SPAWN_WAIT);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
@AfterClass
public static void stop() {
server.stop();
@@ -193,16 +162,11 @@ public class CorbaTypesTestCase {
* Tests remote operation, basing on given reference, operation name,
* arguments, expected return type and content
*
- * @param ref
- * remote object
- * @param operationName
- * operation to invoke
- * @param clazz
- * expected return type
- * @param arguments
- * array of operation arguments
- * @param equalTo
- * expected return content
+ * @param ref remote object
+ * @param operationName operation to invoke
+ * @param clazz expected return type
+ * @param arguments array of operation arguments
+ * @param equalTo expected return content
*/
private void dynaTestInvoker(Object ref,
String operationName,
@@ -546,13 +510,16 @@ public class CorbaTypesTestCase {
* user interface
*/
@Test
+ @Ignore("Cause of tnameservice hang on stop")
public void test_enchancedReferences() {
+ DynaCorbaRequest request = null;
try {
- DynaCorbaRequest request = new DynaCorbaRequest(refObjectManager, "getDummyObject");
+ request = new DynaCorbaRequest(refObjectManager, "getDummyObject");
request.setOutputType(DummyObject.class);
DynaCorbaResponse response = request.invoke();
DummyObject dummy = (DummyObject)response.getContent();
DummyObject dummy2 = dummy.cloneObject();
+ dummy2.cloneObject();
assertNotSame(dummy.getLong(), dummy2.getLong());
} catch (Exception e) {
e.printStackTrace();
@@ -584,32 +551,44 @@ public class CorbaTypesTestCase {
*/
@Test
public void test_structValidation() {
+ DynaCorbaRequest request = null;
try {
- DynaCorbaRequest request = new DynaCorbaRequest(refArraysSetter, "whatever");
+ request = new DynaCorbaRequest(refArraysSetter, "whatever");
request.setOutputType(InvalidStruct1.class);
fail();
} catch (Exception e) {
assertTrue(e instanceof RequestConfigurationException);
+ } finally {
+ request.release();
}
+
try {
- DynaCorbaRequest request = new DynaCorbaRequest(refArraysSetter, "whatever");
+ request = new DynaCorbaRequest(refArraysSetter, "whatever");
request.setOutputType(InvalidStruct2.class);
fail();
} catch (Exception e) {
assertTrue(e instanceof RequestConfigurationException);
+ } finally {
+ request.release();
}
+
try {
- DynaCorbaRequest request = new DynaCorbaRequest(refArraysSetter, "whatever");
+ request = new DynaCorbaRequest(refArraysSetter, "whatever");
request.setOutputType(InvalidStruct3.class);
fail();
} catch (Exception e) {
assertTrue(e instanceof RequestConfigurationException);
+ } finally {
+ request.release();
}
+
try {
- DynaCorbaRequest request = new DynaCorbaRequest(refArraysSetter, "whatever");
+ request = new DynaCorbaRequest(refArraysSetter, "whatever");
request.setOutputType(SomeStruct.class);
} catch (Exception e) {
fail();
+ } finally {
+ request.release();
}
}
@@ -618,32 +597,44 @@ public class CorbaTypesTestCase {
*/
@Test
public void test_enumValidation() {
+ DynaCorbaRequest request = null;
try {
- DynaCorbaRequest request = new DynaCorbaRequest(refArraysSetter, "whatever");
+ request = new DynaCorbaRequest(refArraysSetter, "whatever");
request.setOutputType(InvalidEnum1.class);
fail();
} catch (Exception e) {
assertTrue(e instanceof RequestConfigurationException);
+ } finally {
+ request.release();
}
+
try {
- DynaCorbaRequest request = new DynaCorbaRequest(refArraysSetter, "whatever");
+ request = new DynaCorbaRequest(refArraysSetter, "whatever");
request.setOutputType(InvalidEnum2.class);
fail();
} catch (Exception e) {
assertTrue(e instanceof RequestConfigurationException);
+ } finally {
+ request.release();
}
+
try {
- DynaCorbaRequest request = new DynaCorbaRequest(refArraysSetter, "whatever");
+ request = new DynaCorbaRequest(refArraysSetter, "whatever");
request.setOutputType(InvalidEnum3.class);
fail();
} catch (Exception e) {
assertTrue(e instanceof RequestConfigurationException);
+ } finally {
+ request.release();
}
+
try {
- DynaCorbaRequest request = new DynaCorbaRequest(refArraysSetter, "whatever");
+ request = new DynaCorbaRequest(refArraysSetter, "whatever");
request.setOutputType(Color.class);
} catch (Exception e) {
fail();
+ } finally {
+ request.release();
}
}
diff --git a/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/TestConstants.java b/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/TestConstants.java
index 65abc081a4..962a00d002 100644
--- a/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/TestConstants.java
+++ b/java/sca/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/TestConstants.java
@@ -32,9 +32,12 @@ public class TestConstants {
public static final String[] STR_ARR_2 = {"Another", "string", "array"};
public static final int INT_1 = 0;
- public static final int DEFAULT_PORT = 11100;
- public static final String DEFAULT_HOST = "localhost";
+ public static final int TEST1_PORT = 11100;
+ public static final String TEST1_HOST = "localhost";
+ public static final int TEST2_PORT = 11101;
+ public static final String TEST2_HOST = "localhost";
+
public static final int[][] INT_ARRAY_2_DIM = { {1, 2}, {3, 4}};
public static final int[][][] INT_ARRAY_3_DIM = { { {1, 2}, {3, 4}}, { {5, 6}, {7, 8}}};
diff --git a/java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/naming/TransientNameServer.java b/java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/naming/TransientNameServer.java
index 03a243fd48..599f5bca54 100644
--- a/java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/naming/TransientNameServer.java
+++ b/java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/naming/TransientNameServer.java
@@ -60,7 +60,7 @@ public class TransientNameServer {
orb.run();
}
};
- // t.setDaemon(true);
+ t.setDaemon(true);
t.start();
checkState();
return t.isAlive() ? t : null;
diff --git a/java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/naming/TransientNameService.java b/java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/naming/TransientNameService.java
index 39ba6b784e..77617a6c5c 100644
--- a/java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/naming/TransientNameService.java
+++ b/java/sca/modules/host-corba-jdk/src/main/java/org/apache/tuscany/sca/host/corba/naming/TransientNameService.java
@@ -23,6 +23,7 @@
package org.apache.tuscany.sca.host.corba.naming;
import java.lang.reflect.Method;
+import java.util.Collection;
import java.util.Properties;
import org.omg.CORBA.ORB;
@@ -170,8 +171,24 @@ public class TransientNameService {
public void destroy() {
// only destroy this if we created the orb instance.
if (createdOrb != null) {
- createdOrb.shutdown(true);
+ createdOrb.shutdown(false);
createdOrb.destroy();
+
+ try {
+ // This is a workaround to close the sockets for SUN ORB
+ Method m = createdOrb.getClass().getMethod("getTransportManager");
+ Object tm = m.invoke(createdOrb);
+ m = tm.getClass().getMethod("close");
+ m.invoke(tm);
+ m = tm.getClass().getMethod("getAcceptors");
+ Collection acceptors = (Collection) m.invoke(tm);
+ for(Object a: acceptors) {
+ m = a.getClass().getMethod("close");
+ m.invoke(a);
+ }
+ } catch (Throwable e) {
+ // Ignore
+ }
createdOrb = null;
}
}
diff --git a/java/sca/modules/host-corba-jdk/src/test/java/org/apache/tuscany/sca/host/corba/testing/DefaultCorbaHostTestCase.java b/java/sca/modules/host-corba-jdk/src/test/java/org/apache/tuscany/sca/host/corba/testing/DefaultCorbaHostTestCase.java
index e0dd464ade..c78c81ba70 100644
--- a/java/sca/modules/host-corba-jdk/src/test/java/org/apache/tuscany/sca/host/corba/testing/DefaultCorbaHostTestCase.java
+++ b/java/sca/modules/host-corba-jdk/src/test/java/org/apache/tuscany/sca/host/corba/testing/DefaultCorbaHostTestCase.java
@@ -23,6 +23,9 @@ import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
+import java.net.ConnectException;
+import java.net.Socket;
+
import org.apache.tuscany.sca.host.corba.CorbaHost;
import org.apache.tuscany.sca.host.corba.CorbaHostException;
import org.apache.tuscany.sca.host.corba.jdk.DefaultCorbaHost;
@@ -83,6 +86,9 @@ public class DefaultCorbaHostTestCase {
assertEquals(2, ref.getInt(2));
host.unregisterServant(orb, "Test");
+
+ //register servant once again to check if previous name was released
+ host.registerServant(orb, "Test", servant);
} catch (Exception e) {
e.printStackTrace();
fail();
@@ -196,4 +202,23 @@ public class DefaultCorbaHostTestCase {
fail();
}
}
+
+ @Test
+ // @Ignore("Fix stopping ORB")
+ public void test_ensureORBStopped() {
+ try {
+ int innerORBPort = 11102;
+ TransientNameServer innerServer = new TransientNameServer(LOCALHOST, innerORBPort, TransientNameService.DEFAULT_SERVICE_NAME);
+ innerServer.start();
+ innerServer.stop();
+ new Socket(LOCALHOST, innerORBPort);
+ fail();
+ } catch (Exception e) {
+ if (e instanceof ConnectException) {
+ assertTrue(true);
+ } else {
+ e.printStackTrace();
+ }
+ }
+ }
}