EditEjbAction.java

00001 
00026 package org.objectweb.jonas.webapp.jonasadmin.service.ejb;
00027 
00028 import java.util.ArrayList;
00029 import java.util.Collection;
00030 import java.util.HashMap;
00031 import java.util.Map;
00032 
00033 import javax.management.MalformedObjectNameException;
00034 import javax.management.ObjectName;
00035 import javax.servlet.http.HttpServletRequest;
00036 import javax.servlet.http.HttpServletResponse;
00037 
00038 import org.apache.struts.action.ActionForm;
00039 import org.apache.struts.action.ActionForward;
00040 import org.apache.struts.action.ActionMapping;
00041 
00042 import org.objectweb.jonas.jmx.JonasManagementRepr;
00043 import org.objectweb.jonas.jmx.JonasObjectName;
00044 import org.objectweb.jonas.webapp.jonasadmin.JonasAdminJmx;
00045 import org.objectweb.jonas.webapp.jonasadmin.JonasBaseAction;
00046 import org.objectweb.jonas.webapp.jonasadmin.WhereAreYou;
00047 import org.objectweb.jonas.webapp.jonasadmin.service.container.ContainerForm;
00048 
00053 public abstract class EditEjbAction extends JonasBaseAction {
00054 
00058     private String ejbObjectName = null;
00059 
00060     // --------------------------------------------------------- Public Methods
00070     public ActionForward executeAction(ActionMapping pMapping,
00071             ActionForm pForm,
00072             HttpServletRequest pRequest,
00073             HttpServletResponse pResponse) {
00074         // setForm is used specifically when this action is invoked as a result of invalid input in editEjbSession*.jsp.
00075         EjbForm setForm = (EjbForm) m_Session.getAttribute("ejbForm");
00076         // Determine the EJB's ObjectName
00077         String sObjectName = pRequest.getParameter("select");
00078         if (sObjectName == null) {
00079             // Accept request attribute forced by a EditEjbAction
00080             sObjectName = (String) pRequest.getAttribute("select");
00081         }
00082 
00083         if (sObjectName == null) {
00084             // Use the objectname specified in the cached input form before invalid data was submitted by user.
00085             sObjectName = (setForm != null && setForm.getObjectName() != null) ? setForm.getObjectName() : null;
00086         }
00087 
00088         ObjectName oObjectName = null;
00089         if (sObjectName != null) {
00090             try {
00091                 oObjectName = ObjectName.getInstance(sObjectName);
00092             } catch (Throwable t) {
00093                 addGlobalError(t);
00094                 saveErrors(pRequest, m_Errors);
00095                 return (pMapping.findForward("Global Error"));
00096             }
00097         }
00098 
00099         // Form used
00100         EjbForm oForm = getEjbForm();
00101         ejbObjectName = sObjectName;
00102         String msParamType = oObjectName.getKeyProperty("j2eeType");
00103         String msParamName = oObjectName.getKeyProperty("name");
00104         String msParamFile = getStringAttribute(oObjectName, "fileName");
00105 
00106         // Put global properties
00107         oForm.setType(msParamType);
00108         oForm.setName(msParamName);
00109         oForm.setObjectName(ejbObjectName);
00110         oForm.setFile(msParamFile);
00111         if (msParamType != null) {
00112             String sFullType = m_Resources.getMessage("ejb.fulltype." + msParamType);
00113             oForm.setFullType(sFullType);
00114         }
00115 
00116         // Force the node selected in tree
00117         //m_WhereAreYou.selectNameNode(getTreeBranchName(DEPTH_SERVER)
00118         // DEPTH_SERVER is not good in case the currently selected node do no belongs to the Server JOnAS node
00119         // this situation can be found when the selected node is a JMS destination managed by Joram and
00120         // when trying to navigate through the EJBs used by a JMS destination
00121         String serverNodeName = m_WhereAreYou.getCurrentDomainName()
00122         + WhereAreYou.NODE_SEPARATOR + m_WhereAreYou.getCurrentJonasServerName();
00123         m_WhereAreYou.selectNameNode(serverNodeName
00124                 + WhereAreYou.NODE_SEPARATOR + "services"
00125                 + WhereAreYou.NODE_SEPARATOR + "ejbContainers"
00126                 + WhereAreYou.NODE_SEPARATOR + JonasAdminJmx.extractFilename(oForm.getFile())
00127                 + WhereAreYou.NODE_SEPARATOR + oForm.getName(), true);
00128 
00129         try {
00130             // Fill Ejb infos
00131             fillEjbInfo(oForm, oObjectName);
00132             // Fill Ejb dependencies (Datasource, JMS, ...)
00133             fillEjbDependencies(oForm, oObjectName);
00134         } catch (Throwable t) {
00135             addGlobalError(t);
00136             saveErrors(pRequest, m_Errors);
00137             return (pMapping.findForward("Global Error"));
00138         }
00139 
00140         if (setForm != null && oForm.getObjectName() == null) {
00141             sObjectName = setForm.getObjectName();
00142             oForm = setForm;
00143         }
00144         pRequest.setAttribute("select", sObjectName);
00145 
00146         m_Session.setAttribute("ejbForm", oForm);
00147 
00148 
00149         // Ejb Forward
00150         String sForward = getEjbForward();
00151 
00152 
00153 
00154         // Control if the Container in session is the parent of the current Ejb
00155         ContainerForm oContForm = (ContainerForm) m_Session.getAttribute("containerForm");
00156         boolean bChangeForward = false;
00157         if (oContForm == null) {
00158             bChangeForward = true;
00159         } else {
00160             if (!oContForm.getPath().equals(oForm.getFile())) {
00161                 bChangeForward = true;
00162             }
00163         }
00164         // Change enabled
00165         if (bChangeForward) {
00166             // Next forward in EditContainerAction
00167             pRequest.setAttribute("NextForward", sForward);
00168             //p_Request.setAttribute("selectedEjb", sObjectName);
00169             // Change the forward to Edit the container
00170             sForward = "ActionEditContainer";
00171         }
00172 
00173         // Forward to the jsp or the action
00174         return (pMapping.findForward(sForward));
00175     }
00176 
00177 // --------------------------------------------------------- Protected Methods
00178 
00184     protected abstract String getEjbForward();
00185 
00191     protected abstract EjbForm getEjbForm();
00192 
00200     protected abstract void fillEjbInfo(EjbForm pForm, ObjectName pObjectName)
00201         throws Exception;
00202 
00209     protected ObjectName getEjbObjectName()
00210         throws Exception {
00211         return ObjectName.getInstance(ejbObjectName);
00212     }
00213 
00220     protected void fillEjbGlobalInfo(EjbForm pForm, ObjectName pObjectName) {
00221         pForm.setCurrentInstancePoolSize(getIntegerAttribute(pObjectName
00222             , "currentInstancePoolSize"));
00223         pForm.setDisplayName(getStringAttribute(pObjectName, "displayName"));
00224         pForm.setEjbClass(getStringAttribute(pObjectName, "ejbClass"));
00225         pForm.setEjbFileName(getStringAttribute(pObjectName, "fileName"));
00226         pForm.setEjbName(pObjectName.getKeyProperty("name"));
00227         pForm.setHomeClass(getStringAttribute(pObjectName, "homeClass"));
00228         pForm.setJndiName(getStringAttribute(pObjectName, "jndiName"));
00229         pForm.setLocalClass(getStringAttribute(pObjectName, "localClass"));
00230         pForm.setLocalHomeClass(getStringAttribute(pObjectName, "localHomeClass"));
00231         pForm.setRemoteClass(getStringAttribute(pObjectName, "remoteClass"));
00232     }
00233 
00240     protected void fillEjbDependencies(EjbForm pForm, ObjectName pObjectName) {
00241         // Dependency with Datasource service
00242         pForm.setDatabaseServiceActivated(JonasManagementRepr.isRegistered(JonasObjectName.
00243             databaseService()));
00244         HashMap hDataSources = new HashMap((Map) JonasManagementRepr.getAttribute(pObjectName
00245             , "allDataSourceName"));
00246         if (hDataSources.size() > 0) {
00247             pForm.setDataSource(true);
00248             pForm.setDataSources(hDataSources);
00249         }
00250         // Dependency with JMS service or Joram resource
00251         pForm.setJmsServiceActivated(JonasManagementRepr.isRegistered(JonasObjectName.jmsService()));
00252         ObjectName jormamServerObjectName = null;
00253         try {
00254             jormamServerObjectName = ObjectName.getInstance("joram:type=JMSlocalServer");
00255             pForm.setJoramResourceLoaded(JonasManagementRepr.isRegistered(jormamServerObjectName));
00256         } catch (MalformedObjectNameException e) {
00257             pForm.setJoramResourceLoaded(false);
00258         }
00259         ArrayList alJmsConnections = new ArrayList((Collection) JonasManagementRepr.getAttribute(
00260             pObjectName, "allJMSConnectionFactoryName"));
00261         if (alJmsConnections.size() > 0) {
00262             pForm.setJmsConnection(true);
00263             pForm.setJmsConnections(alJmsConnections);
00264         }
00265         ArrayList alJmsDestinations = new ArrayList((Collection) JonasManagementRepr.getAttribute(
00266             pObjectName, "allJMSDestinationName"));
00267         if (alJmsDestinations.size() > 0) {
00268             pForm.setJmsDestination(true);
00269             pForm.setJmsDestinations(alJmsDestinations);
00270         }
00271         // Dependency with Mail service
00272         pForm.setMailServiceActivated(JonasManagementRepr.isRegistered(JonasObjectName.mailService()));
00273         HashMap hMailSessions = new HashMap((Map) JonasManagementRepr.getAttribute(pObjectName
00274             , "allMailFactorySName"));
00275         if (hMailSessions.size() > 0) {
00276             pForm.setMailSession(true);
00277             pForm.setMailSessions(hMailSessions);
00278         }
00279         HashMap hMailMimes = new HashMap((Map) JonasManagementRepr.getAttribute(pObjectName
00280             , "allMailFactoryMName"));
00281         if (hMailMimes.size() > 0) {
00282             pForm.setMailMime(true);
00283             pForm.setMailMimes(hMailMimes);
00284         }
00285         // Detect one dependency
00286         pForm.setDependency(pForm.isDataSource() || pForm.isJmsConnection()
00287             || pForm.isJmsDestination() || pForm.isMailSession() || pForm.isMailMime());
00288     }
00289 }

Generated on Tue Feb 15 15:05:32 2005 for JOnAS by  doxygen 1.3.9.1