You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2004/11/23 09:24:47 UTC
svn commit: r106289 - /geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/mejb /geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/mejb/MEJB.java
Author: djencks
Date: Tue Nov 23 00:24:44 2004
New Revision: 106289
Added:
geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/mejb/
geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/mejb/MEJB.java
Log:
preliminary implementation of mejb as a gbean.
Added: geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/mejb/MEJB.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/mejb/MEJB.java?view=auto&rev=106289
==============================================================================
--- (empty file)
+++ geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/mejb/MEJB.java Tue Nov 23 00:24:44 2004
@@ -0,0 +1,298 @@
+/**
+ *
+ * Copyright 2003-2004 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.
+ */
+package org.apache.geronimo.j2ee.mejb;
+
+import java.rmi.RemoteException;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.List;
+import javax.ejb.EJBHome;
+import javax.ejb.EJBObject;
+import javax.ejb.Handle;
+import javax.ejb.RemoveException;
+import javax.management.Attribute;
+import javax.management.AttributeList;
+import javax.management.AttributeNotFoundException;
+import javax.management.InstanceNotFoundException;
+import javax.management.IntrospectionException;
+import javax.management.InvalidAttributeValueException;
+import javax.management.MBeanException;
+import javax.management.MBeanInfo;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import javax.management.QueryExp;
+import javax.management.ReflectionException;
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanConstructorInfo;
+import javax.management.MBeanOperationInfo;
+import javax.management.MBeanParameterInfo;
+import javax.management.MBeanNotificationInfo;
+import javax.management.NotificationListener;
+import javax.management.NotificationFilter;
+import javax.management.ListenerNotFoundException;
+import javax.management.j2ee.ListenerRegistration;
+import javax.management.j2ee.Management;
+
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GAttributeInfo;
+import org.apache.geronimo.gbean.GOperationInfo;
+import org.apache.geronimo.gbean.GNotificationInfo;
+import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.KernelMBean;
+
+/**
+ * GBean implementing Management interface and supplying proxies to act as the MEJB container.
+ *
+ * @version $Rev: $ $Date: $
+ */
+public class MEJB implements Management, ListenerRegistration {
+
+ private final Kernel kernel;
+ private static final ObjectName ALL_GBEANS_QUERY;
+
+ static {
+ try {
+ ALL_GBEANS_QUERY = ObjectName.getInstance("*.*");
+ } catch (MalformedObjectNameException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public MEJB(Kernel kernel) {
+ this.kernel = kernel;
+ }
+
+ public Object getAttribute(ObjectName name, String attribute) throws MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException, RemoteException {
+ try {
+ return kernel.getAttribute(name, attribute);
+ } catch (MBeanException e) {
+ throw e;
+ } catch (AttributeNotFoundException e) {
+ throw e;
+ } catch (InstanceNotFoundException e) {
+ throw e;
+ } catch (ReflectionException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new MBeanException(e);
+ }
+ }
+
+ public AttributeList getAttributes(ObjectName name, String[] attributes) throws InstanceNotFoundException, ReflectionException, RemoteException {
+ AttributeList attributeList = new AttributeList(attributes.length);
+ for (int i = 0; i < attributes.length; i++) {
+ String attribute = attributes[i];
+ try {
+ attributeList.add(i, new Attribute(attribute, kernel.getAttribute(name, attribute)));
+ } catch (InstanceNotFoundException e) {
+ throw e;
+ } catch (ReflectionException e) {
+ throw e;
+ } catch (Exception e) {
+ //ignore ?
+ }
+ }
+ return attributeList;
+ }
+
+ public String getDefaultDomain() throws RemoteException {
+ return kernel.getKernelName();
+ }
+
+ public Integer getMBeanCount() throws RemoteException {
+ return new Integer(kernel.listGBeans(ALL_GBEANS_QUERY).size());
+ }
+
+ public MBeanInfo getMBeanInfo(ObjectName name) throws IntrospectionException, InstanceNotFoundException, ReflectionException, RemoteException {
+ return mapToMBeanInfo(kernel.getGBeanInfo(name));
+ }
+
+ public Object invoke(ObjectName name, String operationName, Object[] params, String[] signature) throws InstanceNotFoundException, MBeanException, ReflectionException, RemoteException {
+ try {
+ return kernel.invoke(name, operationName, params, signature);
+ } catch (MBeanException e) {
+ throw e;
+ } catch (InstanceNotFoundException e) {
+ throw e;
+ } catch (ReflectionException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new MBeanException(e);
+ }
+ }
+
+ public boolean isRegistered(ObjectName name) throws RemoteException {
+ return kernel.isLoaded(name);
+ }
+
+ public Set queryNames(ObjectName name, QueryExp query) throws RemoteException {
+ if (query != null) {
+ throw new IllegalArgumentException("NYI");
+ }
+ return kernel.listGBeans(name);
+ }
+
+ public void setAttribute(ObjectName name, Attribute attribute) throws InstanceNotFoundException, AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException, RemoteException {
+ try {
+ kernel.setAttribute(name, attribute.getName(), attribute.getValue());
+ } catch (MBeanException e) {
+ throw e;
+ } catch (AttributeNotFoundException e) {
+ throw e;
+ } catch (InstanceNotFoundException e) {
+ throw e;
+ } catch (InvalidAttributeValueException e) {
+ throw e;
+ } catch (ReflectionException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new MBeanException(e);
+ }
+ }
+
+ public AttributeList setAttributes(ObjectName name, AttributeList attributes) throws InstanceNotFoundException, ReflectionException, RemoteException {
+ AttributeList set = new AttributeList(attributes.size());
+ for (Iterator iterator = attributes.iterator(); iterator.hasNext();) {
+ Attribute attribute = (Attribute) iterator.next();
+ try {
+ kernel.setAttribute(name, attribute.getName(), attribute.getValue());
+ set.add(attribute);
+ } catch (InstanceNotFoundException e) {
+ throw e;
+ } catch (ReflectionException e) {
+ throw e;
+ } catch (Exception e) {
+ //ignore ?
+ }
+ }
+ return set;
+ }
+
+ public ListenerRegistration getListenerRegistry() throws RemoteException {
+ throw new RuntimeException("NYI");
+ }
+
+
+ //ListenerRegistration implementation
+ public void addNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException, RemoteException {
+ try {
+ kernel.invoke(name, "addNotificationListener", new Object[]{listener, filter, handback}, new String[]{NotificationListener.class.getName(), NotificationFilter.class.getName(), Object.class.getName()});
+ } catch (InstanceNotFoundException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void removeNotificationListener(ObjectName name, NotificationListener listener) throws InstanceNotFoundException, ListenerNotFoundException, RemoteException {
+ try {
+ kernel.invoke(name, "removeNotificationListener", new Object[]{listener}, new String[]{NotificationListener.class.getName()});
+ } catch (InstanceNotFoundException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ //EJBObject implementation
+
+ public EJBHome getEJBHome() throws RemoteException {
+ return null;
+ }
+
+ public Handle getHandle() throws RemoteException {
+ return null;
+ }
+
+ public Object getPrimaryKey() throws RemoteException {
+ return null;
+ }
+
+ public boolean isIdentical(EJBObject obj) throws RemoteException {
+ return false;
+ }
+
+ public void remove() throws RemoteException, RemoveException {
+
+ }
+
+
+ private MBeanInfo mapToMBeanInfo(GBeanInfo gBeanInfo) {
+ String className = gBeanInfo.getClassName();
+ String description = "No description available";
+ Set gbeanAttributes = gBeanInfo.getAttributes();
+ MBeanAttributeInfo[] attributes = new MBeanAttributeInfo[gbeanAttributes.size()];
+ int a = 0;
+ for (Iterator iterator = gbeanAttributes.iterator(); iterator.hasNext();) {
+ GAttributeInfo gAttributeInfo = (GAttributeInfo) iterator.next();
+ attributes[a] = new MBeanAttributeInfo(gAttributeInfo.getName(), "no description available", gAttributeInfo.getType(), gAttributeInfo.isReadable().booleanValue(), gAttributeInfo.isWritable().booleanValue(), gAttributeInfo.getGetterName().startsWith("is"));
+ a++;
+ }
+
+ //we don't expose managed constructors
+ MBeanConstructorInfo[] constructors = new MBeanConstructorInfo[0];
+
+ Set gbeanOperations = gBeanInfo.getOperations();
+ MBeanOperationInfo[] operations = new MBeanOperationInfo[gbeanOperations.size()];
+ int o = 0;
+ for (Iterator iterator = gbeanOperations.iterator(); iterator.hasNext();) {
+ GOperationInfo gOperationInfo = (GOperationInfo) iterator.next();
+ //list of class names
+ List gparameters = gOperationInfo.getParameterList();
+ MBeanParameterInfo[] parameters = new MBeanParameterInfo[gparameters.size()];
+ int p = 0;
+ for (Iterator piterator = gparameters.iterator(); piterator.hasNext();) {
+ String type = (String) piterator.next();
+ parameters[p] = new MBeanParameterInfo("parameter" + p, type, "no description available");
+ p++;
+ }
+ operations[o] = new MBeanOperationInfo(gOperationInfo.getName(), "no description available", parameters, "java.lang.Object", MBeanOperationInfo.UNKNOWN);
+ o++;
+ }
+
+ Set gnotifications = gBeanInfo.getNotifications();
+ MBeanNotificationInfo[] notifications = new MBeanNotificationInfo[gnotifications.size()];
+ int n = 0;
+ for (Iterator iterator = gnotifications.iterator(); iterator.hasNext();) {
+ GNotificationInfo gNotificationInfo = (GNotificationInfo) iterator.next();
+ notifications[n] = new MBeanNotificationInfo((String[]) gNotificationInfo.getNotificationTypes().toArray(new String[gnotifications.size()]), gNotificationInfo.getName(), "no description available");
+ n++;
+ }
+
+ MBeanInfo mbeanInfo = new MBeanInfo(className, description, attributes, constructors, operations, notifications);
+ return mbeanInfo;
+ }
+
+ public static final GBeanInfo GBEAN_INFO;
+
+ static {
+ GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder(MEJB.class.getName());
+ infoBuilder.addAttribute("kernel", KernelMBean.class, false);
+ infoBuilder.addInterface(Management.class);
+ infoBuilder.addInterface(ListenerRegistration.class);
+
+ infoBuilder.setConstructor(new String[]{"kernel"});
+
+ GBEAN_INFO = infoBuilder.getBeanInfo();
+ }
+
+ public static GBeanInfo getGBeanInfo() {
+ return GBEAN_INFO;
+ }
+
+}