Author: dblevins
Date: Thu Jul 9 08:15:06 2009
New Revision: 792441
URL: http://svn.apache.org/viewvc?rev=792441&view=rev
Log:
A not quite yet complete/working test case for OPENEJB-1039
A few other business interface issues have been discovered by both Ivan and I,
this testcase will cover them all and more.
Added:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/BusinessInterfacesTest.java
(contents, props changed)
- copied, changed from r785410,
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/UberInterfaceTest.java
Copied:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/BusinessInterfacesTest.java
(from r785410,
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/UberInterfaceTest.java)
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/BusinessInterfacesTest.java?p2=openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/BusinessInterfacesTest.java&p1=openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/UberInterfaceTest.java&r1=785410&r2=792441&rev=792441&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/UberInterfaceTest.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/BusinessInterfacesTest.java
Thu Jul 9 08:15:06 2009
@@ -18,107 +18,332 @@
import junit.framework.TestCase;
import org.apache.openejb.assembler.classic.Assembler;
-import org.apache.openejb.assembler.classic.SecurityServiceInfo;
-import org.apache.openejb.assembler.classic.TransactionServiceInfo;
import org.apache.openejb.assembler.classic.EjbJarInfo;
import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
+import org.apache.openejb.assembler.classic.SecurityServiceInfo;
+import org.apache.openejb.assembler.classic.TransactionServiceInfo;
+import org.apache.openejb.client.LocalInitialContextFactory;
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.StatelessBean;
import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.spi.ContainerSystem;
-import org.apache.openejb.DeploymentInfo;
-import org.apache.openejb.client.LocalInitialContextFactory;
import javax.ejb.Local;
import javax.ejb.Remote;
-import javax.ejb.Stateless;
-import javax.jws.WebService;
-import javax.naming.InitialContext;
-import static java.util.Arrays.asList;
-import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
-public class UberInterfaceTest extends TestCase {
+public class BusinessInterfacesTest extends TestCase {
public void test() throws Exception {
+ }
+
+ public void _testDefault() throws Exception {
+ System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
LocalInitialContextFactory.class.getName());
+
+ ConfigurationFactory config = new ConfigurationFactory();
+ Assembler assembler = new Assembler();
+
+
SystemInstance.get().setProperty("openejb.strict.interface.declaration",
"false");
+
+
assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
+
assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
+
+ EjbJar ejbJar = new EjbJar();
+ ejbJar.addEnterpriseBean(new StatelessBean(OrangeBean.class));
+ ejbJar.addEnterpriseBean(new StatelessBean(RedBean.class));
+ ejbJar.addEnterpriseBean(new StatelessBean(YellowBean.class));
+ ejbJar.addEnterpriseBean(new StatelessBean(GreenBean.class));
+
+ StatelessBean white = ejbJar.addEnterpriseBean(new
StatelessBean(WhiteBean.class));
+ white.addBusinessLocal(WhiteOne.class);
+ white.addBusinessLocal(WhiteThree.class);
+
+ StatelessBean black = ejbJar.addEnterpriseBean(new
StatelessBean(BlackBean.class));
+ black.addBusinessRemote(BlackTwo.class);
+ black.addBusinessRemote(BlackThree.class);
+
+ ejbJar.addEnterpriseBean(new StatelessBean(MagentaBean.class));
+ ejbJar.addEnterpriseBean(new StatelessBean(CyanBean.class));
+ ejbJar.addEnterpriseBean(new StatelessBean(PurpleBean.class));
+
+ EjbJarInfo ejbJarInfo = config.configureApplication(ejbJar);
+
+ Map<String, EnterpriseBeanInfo> beans =
asMap(ejbJarInfo.enterpriseBeans);
+
+ EnterpriseBeanInfo beanInfo = beans.get("OrangeBean");
+
+ assertEquals(list(OrangeOne.class, OrangeThree.class,
OrangeFour.class), sort(beanInfo.businessLocal));
+ assertEquals(list(OrangeTwo.class, OrangeThree.class),
sort(beanInfo.businessRemote));
+
+ beanInfo = beans.get("RedBean");
+
+ assertEquals(list(RedOne.class, RedThree.class, RedFour.class),
sort(beanInfo.businessLocal));
+ assertEquals(list(RedTwo.class, RedThree.class),
sort(beanInfo.businessRemote));
+
+ beanInfo = beans.get("YellowBean");
+
+ assertEquals(list(YellowOne.class, YellowThree.class,
YellowFour.class), sort(beanInfo.businessLocal));
+ assertEquals(list(YellowTwo.class, YellowThree.class),
sort(beanInfo.businessRemote));
+
+ beanInfo = beans.get("GreenBean");
+
+ assertEquals(list(GreenOne.class, GreenThree.class, GreenFour.class),
sort(beanInfo.businessLocal));
+ assertEquals(list(GreenTwo.class, GreenThree.class),
sort(beanInfo.businessRemote));
+
+ beanInfo = beans.get("WhiteBean");
+
+ assertEquals(list(WhiteOne.class, WhiteThree.class, WhiteFour.class),
sort(beanInfo.businessLocal));
+ assertEquals(list(WhiteTwo.class, WhiteThree.class),
sort(beanInfo.businessRemote));
+
+ beanInfo = beans.get("BlackBean");
+
+ assertEquals(list(BlackOne.class, BlackThree.class, BlackFour.class),
sort(beanInfo.businessLocal));
+ assertEquals(list(BlackTwo.class, BlackThree.class),
sort(beanInfo.businessRemote));
+
+ }
+
+ public void _testStrict() throws Exception {
System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
LocalInitialContextFactory.class.getName());
ConfigurationFactory config = new ConfigurationFactory();
Assembler assembler = new Assembler();
+
SystemInstance.get().setProperty("openejb.strict.interface.declaration",
"true");
+
assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
EjbJar ejbJar = new EjbJar();
- StatelessBean bean = ejbJar.addEnterpriseBean(new
StatelessBean(SuperBean.class));
+ ejbJar.addEnterpriseBean(new StatelessBean(OrangeBean.class));
+ ejbJar.addEnterpriseBean(new StatelessBean(RedBean.class));
+ ejbJar.addEnterpriseBean(new StatelessBean(YellowBean.class));
+ ejbJar.addEnterpriseBean(new StatelessBean(GreenBean.class));
+
+ StatelessBean white = ejbJar.addEnterpriseBean(new
StatelessBean(WhiteBean.class));
+ white.addBusinessLocal(WhiteOne.class);
+ white.addBusinessLocal(WhiteThree.class);
+
+ StatelessBean black = ejbJar.addEnterpriseBean(new
StatelessBean(BlackBean.class));
+ black.addBusinessRemote(BlackTwo.class);
+ black.addBusinessRemote(BlackThree.class);
EjbJarInfo ejbJarInfo = config.configureApplication(ejbJar);
- EnterpriseBeanInfo beanInfo = ejbJarInfo.enterpriseBeans.get(0);
+ Map<String, EnterpriseBeanInfo> beans =
asMap(ejbJarInfo.enterpriseBeans);
+
+ EnterpriseBeanInfo beanInfo = beans.get("OrangeBean");
+
+ assertEquals(list(OrangeOne.class, OrangeThree.class,
OrangeFour.class), sort(beanInfo.businessLocal));
+ assertEquals(list(OrangeTwo.class, OrangeThree.class),
sort(beanInfo.businessRemote));
+
+ beanInfo = beans.get("RedBean");
+
+ assertEquals(list(RedOne.class, RedThree.class, RedFour.class),
sort(beanInfo.businessLocal));
+ assertEquals(list(RedTwo.class, RedThree.class),
sort(beanInfo.businessRemote));
+
+ beanInfo = beans.get("YellowBean");
+
+ assertEquals(list(YellowOne.class, YellowThree.class,
YellowFour.class), sort(beanInfo.businessLocal));
+ assertEquals(list(YellowTwo.class, YellowThree.class),
sort(beanInfo.businessRemote));
+
+ beanInfo = beans.get("GreenBean");
- assertEquals(asList(Everything.class.getName()),
beanInfo.businessLocal);
- assertEquals(asList(Everything.class.getName()),
beanInfo.businessRemote);
- assertEquals(Everything.class.getName(), beanInfo.serviceEndpoint);
+ assertEquals(list(GreenOne.class, GreenThree.class, GreenFour.class),
sort(beanInfo.businessLocal));
+ assertEquals(list(GreenTwo.class, GreenThree.class),
sort(beanInfo.businessRemote));
- assembler.createApplication(ejbJarInfo);
+ beanInfo = beans.get("WhiteBean");
- ContainerSystem containerSystem =
SystemInstance.get().getComponent(ContainerSystem.class);
- DeploymentInfo deployment =
containerSystem.getDeploymentInfo(beanInfo.ejbDeploymentId);
+ assertEquals(list(WhiteOne.class, WhiteThree.class, WhiteFour.class),
sort(beanInfo.businessLocal));
+ assertEquals(list(WhiteTwo.class, WhiteThree.class),
sort(beanInfo.businessRemote));
- assertEquals(asList(Everything.class),
deployment.getBusinessLocalInterfaces());
- assertEquals(asList(Everything.class),
deployment.getBusinessRemoteInterfaces());
- assertEquals(Everything.class,
deployment.getServiceEndpointInterface());
+ beanInfo = beans.get("BlackBean");
- InitialContext context = new InitialContext();
+ assertEquals(list(BlackOne.class, BlackThree.class, BlackFour.class),
sort(beanInfo.businessLocal));
+ assertEquals(list(BlackTwo.class, BlackThree.class),
sort(beanInfo.businessRemote));
- Everything local = (Everything) context.lookup("SuperBeanLocal");
- Everything remote = (Everything) context.lookup("SuperBeanRemote");
+ }
- Reference reference = new Reference("test");
+ private <T extends Comparable<? super T>> List<T> sort(List<T> list) {
+ Collections.sort(list);
+ return list;
+ }
- assertEquals(reference, local.echo(reference));
- assertSame(reference, local.echo(reference)); // pass by reference
+ private Map<String, EnterpriseBeanInfo> asMap(List<EnterpriseBeanInfo>
enterpriseBeans) {
+ Map<String, EnterpriseBeanInfo> map = new HashMap<String,
EnterpriseBeanInfo>();
+ for (EnterpriseBeanInfo bean : enterpriseBeans) {
+ map.put(bean.ejbName, bean);
+ }
- assertEquals(reference, remote.echo(reference));
- assertNotSame(reference, remote.echo(reference)); // pass by value
+ return map;
}
+ private List<String> list(Class... classes) {
+ ArrayList<String> list = new ArrayList<String>();
+ for (Class clazz : classes) {
+ list.add(clazz.getName());
+ }
+ return sort(list);
+ }
+
+
+ // OrangeBean
----------------------------------------------------------------
@Local
+ public static interface OrangeOne {
+ }
+
@Remote
- @WebService
- public static interface Everything {
- public Object echo(Object o);
+ public static interface OrangeTwo {
}
- public static class SuperBean implements Everything {
- public Object echo(Object o) {
- return o;
- }
+ @Local
+ @Remote
+ public static interface OrangeThree {
}
- public static class Reference implements Serializable {
- private final String value;
+ public static interface OrangeFour {
+ }
- public Reference(String value) {
- this.value = value;
- }
+ public static class OrangeBean implements OrangeOne, OrangeTwo,
OrangeThree, OrangeFour {
+ }
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
+ // RedBean ----------------------------------------------------------------
- Reference value1 = (Reference) o;
+ @Local
+ public static interface RedOne {
+ }
- if (!value.equals(value1.value)) return false;
+ @Remote
+ public static interface RedTwo {
+ }
- return true;
- }
+ @Local
+ @Remote
+ public static interface RedThree {
+ }
- @Override
- public int hashCode() {
- return value.hashCode();
- }
+ public static interface RedFour {
+ }
+
+ @Local({RedOne.class, RedThree.class})
+ @Remote({RedTwo.class, RedThree.class})
+ public static class RedBean implements RedOne, RedTwo, RedThree, RedFour {
+ }
+
+ // YellowBean
----------------------------------------------------------------
+
+ @Local
+ public static interface YellowOne {
+ }
+
+ public static interface YellowTwo {
+ }
+
+ @Local
+ public static interface YellowThree {
+ }
+
+ public static interface YellowFour {
+ }
+
+ @Remote({YellowTwo.class, YellowThree.class})
+ public static class YellowBean implements YellowOne, YellowTwo,
YellowThree, YellowFour {
+ }
+
+ // GreenBean
----------------------------------------------------------------
+
+ public static interface GreenOne {
+ }
+
+ @Remote
+ public static interface GreenTwo {
+ }
+
+ @Remote
+ public static interface GreenThree {
+ }
+
+ public static interface GreenFour {
+ }
+
+ @Local({GreenOne.class, GreenThree.class})
+ public static class GreenBean implements GreenOne, GreenTwo, GreenThree,
GreenFour {
+ }
+
+ // WhiteBean
----------------------------------------------------------------
+
+ public static interface WhiteOne {
+ }
+
+ @Remote
+ public static interface WhiteTwo {
+ }
+
+ @Remote
+ public static interface WhiteThree {
+ }
+
+ public static interface WhiteFour {
+ }
+
+ // local interfaces declared in deployment descriptor
+ //@Local({WhiteOne.class, WhiteThree.class})
+ public static class WhiteBean implements WhiteOne, WhiteTwo, WhiteThree,
WhiteFour {
+ }
+
+ // BlackBean
----------------------------------------------------------------
+
+ @Local
+ public static interface BlackOne {
+ }
+
+ public static interface BlackTwo {
+ }
+
+ @Local
+ public static interface BlackThree {
+ }
+
+ public static interface BlackFour {
+ }
+
+ // remote interfaces declared in deployment descriptor
+ //@Remote({BlackTwo.class, BlackThree.class})
+ public static class BlackBean implements BlackOne, BlackTwo, BlackThree,
BlackFour {
+ }
+
+
+ // MagentaBean
----------------------------------------------------------------
+
+
+ public static interface MagentaOne { }
+ public static interface MagentaTwo { }
+
+ @Local
+ @Remote(MagentaTwo.class)
+ public static class MagentaBean implements MagentaOne {
+ }
+
+ // CyanBean
----------------------------------------------------------------
+
+ public static interface CyanOne { }
+ public static interface CyanTwo { }
+
+ @Local(CyanOne.class)
+ @Remote
+ public static class CyanBean implements CyanTwo {
+ }
+
+ // PurpleBean
----------------------------------------------------------------
+
+ public static interface Purple { }
+
+ @Local
+ @Remote
+ public static class PurpleBean implements Purple {
}
-}
+}
\ No newline at end of file
Propchange:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/BusinessInterfacesTest.java
------------------------------------------------------------------------------
svn:keywords = Date Rev Author Id Revision HeadURL
Propchange:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/BusinessInterfacesTest.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Thu Jul 9 08:15:06 2009
@@ -0,0 +1 @@
+/openejb/branches/openejb-3.1.1/container/openejb-core/src/test/java/org/apache/openejb/config/UberInterfaceTest.java:779593