You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by cs...@apache.org on 2006/05/16 23:13:45 UTC
svn commit: r407080 - in /beehive/trunk/system-controls:
src/ejb/org/apache/beehive/controls/system/ejb/
test/ejb/src/controls/org/apache/beehive/test/controls/system/controls/
test/ejb/src/tests/org/apache/beehive/test/controls/system/test/
Author: cschoett
Date: Tue May 16 14:13:15 2006
New Revision: 407080
URL: http://svn.apache.org/viewcvs?rev=407080&view=rev
Log:
Updated ejb system control to allow a user to specify an ejb control method override in the control interface.
Necessary to allow a user to set a method interceptor on an ejb control method.
Also updated ejb system control test suite to include a new test case for this usage.
Added:
beehive/trunk/system-controls/test/ejb/src/controls/org/apache/beehive/test/controls/system/controls/MethodOverrideSessionEJBControl.java (with props)
beehive/trunk/system-controls/test/ejb/src/tests/org/apache/beehive/test/controls/system/test/TestMethodOverrideSessionEjbControl.java (with props)
Modified:
beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EJBControlImpl.java
beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EntityEJBControlImpl.java
Modified: beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EJBControlImpl.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EJBControlImpl.java?rev=407080&r1=407079&r2=407080&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EJBControlImpl.java (original)
+++ beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EJBControlImpl.java Tue May 16 14:13:15 2006
@@ -84,7 +84,7 @@
_jndiName = JNDI_APPSCOPED_PREFIX + EJBInfo.getEJBRefName(context.getControlInterface());
// todo: works this way in geronimo, determine which is correct!
- // _jndiName = EJBInfo.getEJBRefName(context.getControlInterface());
+// _jndiName = EJBInfo.getEJBRefName(context.getControlInterface());
}
// Obtain the JCX interface and identify the home/remote
@@ -107,6 +107,32 @@
return m.getDeclaringClass().isAssignableFrom(_homeInterface);
}
+ /**
+ * Return true if the method is from the ControlBean.
+ * @param m Method to check.
+ */
+ protected boolean isControlBeanMethod(Method m) {
+ return m.getDeclaringClass().isAssignableFrom(context.getControlBean().getClass());
+ }
+
+ // todo: finish this method
+ protected Method mapControlBeanMethodToEJB(Method m) throws NoSuchMethodException {
+ try {
+ return _homeInterface.getMethod(m.getName(), m.getParameterTypes());
+ }
+ catch (NoSuchMethodException e) {
+ // not an error, check remote and bean interface
+ }
+
+ if (_beanInstance == null) {
+ _beanInstance = resolveBeanInstance();
+ if (_beanInstance == null) {
+ throw new ControlException("Unable to resolve bean instance");
+ }
+ }
+ return _beanInstance.getClass().getMethod(m.getName(), m.getParameterTypes());
+ }
+
protected static boolean isCreateMethod(Method m) {
return methodThrows(m, CreateException.class);
}
@@ -293,6 +319,10 @@
*/
public Object invoke(Method m, Object[] args) throws Throwable {
Object retval = null;
+
+ if (isControlBeanMethod(m)) {
+ m = mapControlBeanMethodToEJB(m);
+ }
if (isHomeMethod(m)) {
try {
Modified: beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EntityEJBControlImpl.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EntityEJBControlImpl.java?rev=407080&r1=407079&r2=407080&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EntityEJBControlImpl.java (original)
+++ beehive/trunk/system-controls/src/ejb/org/apache/beehive/controls/system/ejb/EntityEJBControlImpl.java Tue May 16 14:13:15 2006
@@ -128,6 +128,10 @@
invokeException = t;
}
+ if (isControlBeanMethod(m)) {
+ m = mapControlBeanMethodToEJB(m);
+ }
+
if (isMultiSelectorMethod(m)) {
releaseBeanInstance(false);
Added: beehive/trunk/system-controls/test/ejb/src/controls/org/apache/beehive/test/controls/system/controls/MethodOverrideSessionEJBControl.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/ejb/src/controls/org/apache/beehive/test/controls/system/controls/MethodOverrideSessionEJBControl.java?rev=407080&view=auto
==============================================================================
--- beehive/trunk/system-controls/test/ejb/src/controls/org/apache/beehive/test/controls/system/controls/MethodOverrideSessionEJBControl.java (added)
+++ beehive/trunk/system-controls/test/ejb/src/controls/org/apache/beehive/test/controls/system/controls/MethodOverrideSessionEJBControl.java Tue May 16 14:13:15 2006
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.test.controls.system.controls;
+
+import org.apache.beehive.controls.api.bean.ControlExtension;
+import org.apache.beehive.controls.system.ejb.EJBControl;
+import org.apache.beehive.controls.system.ejb.SessionEJBControl;
+import org.apache.beehive.test.controls.system.ejb.session.SimpleSessionHome;
+import org.apache.beehive.test.controls.system.ejb.session.SimpleSessionRemote;
+
+/**
+ * This test EJB-Control uses a EJBHome jndi value and specifies the jndi context with the
+ * JNDIContextEnv annotation.
+ */
+@ControlExtension
+@EJBControl.EJBHome(jndiName="SimpleSessionRemote")
+@EJBControl.JNDIContextEnv(contextFactory="org.openejb.client.RemoteInitialContextFactory",
+ providerURL="localhost:4201", principal="system", credentials="manager")
+public interface MethodOverrideSessionEJBControl extends SessionEJBControl, SimpleSessionHome, SimpleSessionRemote
+{
+ // override of EJB method
+ public String sayHello();
+
+ // override of EJB method
+ public String echo(String echoString);
+}
Propchange: beehive/trunk/system-controls/test/ejb/src/controls/org/apache/beehive/test/controls/system/controls/MethodOverrideSessionEJBControl.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: beehive/trunk/system-controls/test/ejb/src/tests/org/apache/beehive/test/controls/system/test/TestMethodOverrideSessionEjbControl.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/ejb/src/tests/org/apache/beehive/test/controls/system/test/TestMethodOverrideSessionEjbControl.java?rev=407080&view=auto
==============================================================================
--- beehive/trunk/system-controls/test/ejb/src/tests/org/apache/beehive/test/controls/system/test/TestMethodOverrideSessionEjbControl.java (added)
+++ beehive/trunk/system-controls/test/ejb/src/tests/org/apache/beehive/test/controls/system/test/TestMethodOverrideSessionEjbControl.java Tue May 16 14:13:15 2006
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+
+package org.apache.beehive.test.controls.system.test;
+
+import org.apache.cactus.ServletTestCase;
+import org.apache.beehive.controls.api.bean.Control;
+import org.apache.beehive.controls.api.context.ControlContainerContext;
+import org.apache.beehive.controls.api.context.ControlThreadContext;
+import org.apache.beehive.test.controls.system.controls.MethodOverrideSessionEJBControl;
+import org.apache.beehive.test.controls.system.ejb.session.SimpleSessionHome;
+
+/**
+ * Test the ability to override a EJB method in the EJB control interface. Sometimes
+ * necessary when method level annotations need to be added at the method level. Expected
+ * behavior is that the EJB method is still invoked after any necessary annotation processing
+ * has been completed.
+ */
+public class TestMethodOverrideSessionEjbControl extends ServletTestCase
+{
+ @Control
+ private MethodOverrideSessionEJBControl _ejbControl;
+
+ private ControlContainerContext _controlContext = null;
+
+ /**
+ * Setup the test.
+ * @throws Exception
+ */
+ public void setUp() throws Exception {
+ _controlContext = ControlThreadContext.getContext();
+ if (_controlContext == null) {
+ _controlContext = TestContextInitializer.initContext(this);
+ } else {
+ TestMethodOverrideSessionEjbControlClientInitializer.initialize(_controlContext, this);
+ }
+ }
+
+ /**
+ * Tear down the test.
+ * @throws Exception
+ */
+ public void tearDown() throws Exception {
+ _controlContext.endContext();
+ super.tearDown();
+ }
+
+ /**
+ * Test overridden method which has no parameters.
+ * @throws Exception
+ */
+ public void testEjbControlHello() throws Exception {
+ String result = _ejbControl.sayHello();
+ assertEquals("Hello!", result);
+ }
+
+ /**
+ * Test overridden method with parameters.
+ * @throws Exception
+ */
+ public void testEjbControlEcho() throws Exception {
+ String result = _ejbControl.echo("Hi there");
+ assertEquals("Hi there", result);
+ }
+
+ /**
+ * Test the getEJBHomeInstance EJB control api.
+ * @throws Exception
+ */
+ public void testGetHome() throws Exception {
+ SimpleSessionHome home = (SimpleSessionHome)_ejbControl.getEJBHomeInstance();
+ assertNotNull(home);
+ }
+
+ /**
+ * Test the hasEJBBeanInstance EJB control api.
+ * @throws Exception
+ */
+ public void testHasBeanInstance() throws Exception {
+ _ejbControl.sayHello();
+ assertTrue(_ejbControl.hasEJBBeanInstance());
+ }
+
+ /**
+ * Test the getEJBBeanInstance EJB control api.
+ * @throws Exception
+ */
+ public void testGetBeanInstance() throws Exception {
+ _ejbControl.sayHello();
+ Object bean = _ejbControl.getEJBBeanInstance();
+ assertNotNull(bean);
+ }
+
+ /**
+ * Test the getEJBException EJB control api.
+ * @throws Exception
+ */
+ public void testGetEjbException() throws Exception {
+ Throwable t = _ejbControl.getEJBException();
+ assertNull(t);
+ }
+}
Propchange: beehive/trunk/system-controls/test/ejb/src/tests/org/apache/beehive/test/controls/system/test/TestMethodOverrideSessionEjbControl.java
------------------------------------------------------------------------------
svn:eol-style = native