Skip to content
Permalink
Browse files

[WFLY-11915] Test case for passing a remote EJB Exception by referenc…

…e (WFLY-11866)
  • Loading branch information
tmiyargi authored and wfink committed Mar 28, 2019
1 parent da74e8d commit 0c5a31446798c93e12a041cb4e2a31c8a84bafda
@@ -0,0 +1,88 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2019, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.as.test.integration.ejb.remote.byreference;


import java.util.logging.Logger;

import javax.ejb.Stateless;

@Stateless
public class HelloBean implements HelloRemote {

private Logger log = Logger.getLogger(this.getClass().getSimpleName().toString());

public TransferReturnValue hello ( TransferParameter param ) throws RemoteByReferenceException {
log.info("hello("+ param +") = Hello " + param );

if(param == null)
throw new RemoteByReferenceException("Param was null");

return new TransferReturnValue ( "Hello " + param );
}

@Override
public SerializableObject helloSerializable(SerializableObject param) throws RemoteByReferenceException {
log.info("helloserializable("+ param +") = Hello " + param );

if(param == null)
throw new RemoteByReferenceException("Param was null");
param.setValue("Bye");

return param;
}

@Override
public NonSerializableObject helloNonSerializable(NonSerializableObject param) throws RemoteByReferenceException {
log.info("helloserializable("+ param +") = Hello " + param );

if(param == null)
throw new RemoteByReferenceException("Param was null");
param.setValue("Bye");

return param;
}

@Override
public SerializableObject helloNonSerializableToSerializable(NonSerializableObject param)
throws RemoteByReferenceException {
log.info("helloserializable("+ param +") = Hello " + param );

if(param == null)
throw new RemoteByReferenceException("Param was null");
param.setValue("Bye");

return new SerializableObject(param.getValue());
}

@Override
public NonSerializableObject helloSerializableToNonSerializable(SerializableObject param)
throws RemoteByReferenceException {
log.info("helloserializable("+ param +") = Hello " + param );

if(param == null)
throw new RemoteByReferenceException("Param was null");
param.setValue("Bye");

return new NonSerializableObject(param.getValue());
}
}
@@ -0,0 +1,39 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2019, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/

package org.jboss.as.test.integration.ejb.remote.byreference;

import javax.ejb.Remote;

@Remote
public interface HelloRemote {
public TransferReturnValue hello ( TransferParameter param ) throws RemoteByReferenceException;

public SerializableObject helloSerializable ( SerializableObject param ) throws RemoteByReferenceException;

public NonSerializableObject helloNonSerializable(NonSerializableObject param) throws RemoteByReferenceException;

public SerializableObject helloNonSerializableToSerializable(NonSerializableObject param) throws RemoteByReferenceException;

public NonSerializableObject helloSerializableToNonSerializable(SerializableObject param) throws RemoteByReferenceException;
}

@@ -0,0 +1,47 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2019, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/

package org.jboss.as.test.integration.ejb.remote.byreference;

public class NonSerializableObject {

private String value;

public NonSerializableObject() {
}

public NonSerializableObject(String value) {
this.value = value;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

public String toString() {
return value;
}
}
@@ -0,0 +1,39 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2019, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/

package org.jboss.as.test.integration.ejb.remote.byreference;

public class RemoteByReferenceException extends Exception {

private NonSerializableObject nonSerializableObject;

public RemoteByReferenceException() {
super();
nonSerializableObject = new NonSerializableObject("null");
}

public RemoteByReferenceException(String msg) {
super(msg);
nonSerializableObject = new NonSerializableObject(msg);
}
}

@@ -1,6 +1,6 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2012, Red Hat, Inc., and individual contributors
* Copyright 2019, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
@@ -1,6 +1,6 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2012, Red Hat, Inc., and individual contributors
* Copyright 2019, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
@@ -74,7 +74,8 @@ public void tearDown(final ManagementClient managementClient, final String conta
@Deployment
public static Archive<?> createDeployment() {
JavaArchive jar = ShrinkWrap.create(JavaArchive.class, ARCHIVE_NAME + ".jar");
jar.addClasses(StatelessRemoteBean.class, RemoteInterface.class, RemoteInvocationByReferenceTestCaseSetup.class);
jar.addClasses(StatelessRemoteBean.class, RemoteInterface.class, RemoteInvocationByReferenceTestCaseSetup.class, RemoteByReferenceException.class, NonSerializableObject.class,
HelloBean.class, HelloRemote.class, TransferParameter.class, TransferReturnValue.class, SerializableObject.class);
return jar;
}

@@ -96,4 +97,78 @@ public void testPassByReferenceSemanticsOnRemoteInterface() throws Exception {
remote.modifyFirstElementOfArray(array, newValue);
Assert.assertEquals("Invocation on remote interface of an EJB did *not* use pass-by-reference semantics", newValue, array[0]);
}

/**
* Test that invocation on a remote interface of an EJB uses pass-by-reference semantics and the Exception also is pass-by-reference
* @throws Exception
*/
@Test
public void testPassByReferenceObjectAndException() throws Exception {
final HelloRemote remote = lookup(HelloBean.class.getSimpleName(), HelloRemote.class);
// invoke on the remote interface
TransferReturnValue ret = remote.hello(new TransferParameter(this.getClass().getSimpleName()));
Assert.assertEquals("Invocation on remote interface of Hello did *not* use pass-by-reference semantics", ret.getValue(), "Hello " + this.getClass().getSimpleName());

try {
remote.hello(null);
} catch(RemoteByReferenceException he) {
Assert.assertEquals("Invocation on remote interface of an EJB did *not* use pass-by-reference in exception", he.getMessage(), "Param was null");
}
}

@Test
public void testPassByReferenceNonSerializableAndException() throws Exception {
final HelloRemote remote = lookup(HelloBean.class.getSimpleName(), HelloRemote.class);
// invoke on the remote interface
NonSerializableObject ret = remote.helloNonSerializable(new NonSerializableObject("Hello"));
Assert.assertEquals("Invocation on remote interface of Hello did *not* use pass-by-reference semantics", ret.getValue(), "Bye");

try {
remote.helloNonSerializable(null);
} catch(RemoteByReferenceException he) {
Assert.assertEquals("Invocation on remote interface of an EJB did *not* use pass-by-reference in exception", he.getMessage(), "Param was null");
}
}

@Test
public void testPassByReferenceSerializable() throws Exception {
final HelloRemote remote = lookup(HelloBean.class.getSimpleName(), HelloRemote.class);
// invoke on the remote interface
SerializableObject ret = remote.helloSerializable(new SerializableObject("Hello"));
Assert.assertEquals("Invocation on remote interface of Hello did *not* use pass-by-reference semantics", ret.getValue(), "Bye");

try {
remote.helloSerializable(null);
} catch(RemoteByReferenceException he) {
Assert.assertEquals("Invocation on remote interface of an EJB did *not* use pass-by-reference in exception", he.getMessage(), "Param was null");
}
}

@Test
public void testPassByReferenceSerializableToNonSerializable() throws Exception {
final HelloRemote remote = lookup(HelloBean.class.getSimpleName(), HelloRemote.class);
// invoke on the remote interface
NonSerializableObject ret = remote.helloSerializableToNonSerializable(new SerializableObject("Hello"));
Assert.assertEquals("Invocation on remote interface of Hello did *not* use pass-by-reference semantics", ret.getValue(), "Bye");

try {
remote.helloSerializableToNonSerializable(null);
} catch(RemoteByReferenceException he) {
Assert.assertEquals("Invocation on remote interface of an EJB did *not* use pass-by-reference in exception", he.getMessage(), "Param was null");
}
}

@Test
public void testPassByReferenceNonSerializableToSerializable() throws Exception {
final HelloRemote remote = lookup(HelloBean.class.getSimpleName(), HelloRemote.class);
// invoke on the remote interface
SerializableObject ret = remote.helloNonSerializableToSerializable(new NonSerializableObject("Hello"));
Assert.assertEquals("Invocation on remote interface of Hello did *not* use pass-by-reference semantics", ret.getValue(), "Bye");

try {
remote.helloNonSerializableToSerializable(null);
} catch(RemoteByReferenceException he) {
Assert.assertEquals("Invocation on remote interface of an EJB did *not* use pass-by-reference in exception", he.getMessage(), "Param was null");
}
}
}
@@ -0,0 +1,49 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2019, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/

package org.jboss.as.test.integration.ejb.remote.byreference;

import java.io.Serializable;

public class SerializableObject implements Serializable {

private String value;

public SerializableObject() {
}

public SerializableObject(String value) {
this.value = value;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

public String toString() {
return value;
}
}
@@ -1,6 +1,6 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2012, Red Hat, Inc., and individual contributors
* Copyright 2019, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*

0 comments on commit 0c5a314

Please sign in to comment.
You can’t perform that action at this time.