owenb 2003/06/11 06:51:26
Modified: java/src/org/apache/wsif/providers/ejb WSIFPort_EJB.java
Log:
Performance improvement - work out the remote interface class locally rather than
using EJBMetaData
Revision Changes Path
1.14 +22 -9
xml-axis-wsif/java/src/org/apache/wsif/providers/ejb/WSIFPort_EJB.java
Index: WSIFPort_EJB.java
===================================================================
RCS file:
/home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/ejb/WSIFPort_EJB.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- WSIFPort_EJB.java 6 Jun 2003 13:58:54 -0000 1.13
+++ WSIFPort_EJB.java 11 Jun 2003 13:51:26 -0000 1.14
@@ -60,9 +60,7 @@
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import java.io.Serializable;
import java.lang.reflect.Method;
-import java.rmi.RemoteException;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
@@ -276,16 +274,31 @@
throw new WSIFException("Unable to get EJBObject class,
fieldEjbHome is null");
}
+ // Get the Class of the remote interface by looking for the return
type of the
+ // create method. In general only stateless session beans are
supported as
+ // web services so look for a no args create method.
try {
- ejbObjectClass =
- fieldEjbHome.getEJBMetaData().getRemoteInterfaceClass();
- } catch (RemoteException re) {
- Trc.ignoredException(re);
+ Method createMethod =
fieldEjbHome.getClass().getDeclaredMethod("create", null);
+ ejbObjectClass = createMethod.getReturnType();
+ } catch (NoSuchMethodException nsme) {
+ Trc.ignoredException(nsme);
+ } catch (SecurityException se) {
+ Trc.ignoredException(se);
}
- // As a last resort, attempt to create the EJBObject and get its
class
+
+ // If it's a stateful session bean it may not have a no args create
method.
+ // Since WSIF allows you to call a create method on the home
interface for
+ // such a bean, look for any create method - they should all return
the same
+ // object
if (ejbObjectClass == null) {
- getEjbObject();
- ejbObjectClass = fieldEjbObject.getClass();
+ Method[] methods =
fieldEjbHome.getClass().getDeclaredMethods();
+ for (int m = 0; m < methods.length; m++) {
+ Method temp = methods[m];
+ if (temp.getName().equals("create")) {
+ ejbObjectClass = temp.getReturnType();
+ break;
+ }
+ }
}
}
}