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
00070 public ActionForward executeAction(ActionMapping pMapping,
00071 ActionForm pForm,
00072 HttpServletRequest pRequest,
00073 HttpServletResponse pResponse) {
00074
00075 EjbForm setForm = (EjbForm) m_Session.getAttribute("ejbForm");
00076
00077 String sObjectName = pRequest.getParameter("select");
00078 if (sObjectName == null) {
00079
00080 sObjectName = (String) pRequest.getAttribute("select");
00081 }
00082
00083 if (sObjectName == null) {
00084
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
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
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
00117
00118
00119
00120
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
00131 fillEjbInfo(oForm, oObjectName);
00132
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
00150 String sForward = getEjbForward();
00151
00152
00153
00154
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
00165 if (bChangeForward) {
00166
00167 pRequest.setAttribute("NextForward", sForward);
00168
00169
00170 sForward = "ActionEditContainer";
00171 }
00172
00173
00174 return (pMapping.findForward(sForward));
00175 }
00176
00177
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
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
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
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
00286 pForm.setDependency(pForm.isDataSource() || pForm.isJmsConnection()
00287 || pForm.isJmsDestination() || pForm.isMailSession() || pForm.isMailMime());
00288 }
00289 }