1 16 17 package org.apache.webapp.admin.realm; 18 19 20 import java.net.URLEncoder ; 21 import java.util.Iterator ; 22 import java.util.Locale ; 23 import java.io.IOException ; 24 import javax.management.Attribute ; 25 import javax.management.MBeanServer ; 26 import javax.management.MBeanServerFactory ; 27 import javax.management.QueryExp ; 28 import javax.management.Query ; 29 import javax.management.ObjectInstance ; 30 import javax.management.ObjectName ; 31 import javax.management.JMException ; 32 import javax.servlet.ServletException ; 33 import javax.servlet.http.HttpServletRequest ; 34 import javax.servlet.http.HttpServletResponse ; 35 import javax.servlet.http.HttpSession ; 36 import org.apache.struts.action.Action; 37 import org.apache.struts.action.ActionError; 38 import org.apache.struts.action.ActionErrors; 39 import org.apache.struts.action.ActionForm; 40 import org.apache.struts.action.ActionForward; 41 import org.apache.struts.action.ActionMapping; 42 import org.apache.struts.util.MessageResources; 43 import org.apache.webapp.admin.ApplicationServlet; 44 import org.apache.webapp.admin.TomcatTreeBuilder; 45 import org.apache.webapp.admin.TreeControl; 46 import org.apache.webapp.admin.TreeControlNode; 47 import org.apache.webapp.admin.valve.ValveUtil; 48 49 56 57 public final class SaveMemoryRealmAction extends Action { 58 59 60 62 65 private String createStandardRealmTypes[] = 66 { "java.lang.String", }; 68 69 70 73 private MBeanServer mBServer = null; 74 75 76 78 79 94 public ActionForward execute(ActionMapping mapping, 95 ActionForm form, 96 HttpServletRequest request, 97 HttpServletResponse response) 98 throws IOException , ServletException { 99 100 HttpSession session = request.getSession(); 102 Locale locale = getLocale(request); 103 MessageResources resources = getResources(request); 104 105 try { 107 mBServer = ((ApplicationServlet) getServlet()).getServer(); 108 } catch (Throwable t) { 109 throw new ServletException 110 ("Cannot acquire MBeanServer reference", t); 111 } 112 113 MemoryRealmForm rform = (MemoryRealmForm) form; 115 String adminAction = rform.getAdminAction(); 116 String rObjectName = rform.getObjectName(); 117 118 if ("Create".equals(adminAction)) { 120 121 String operation = null; 122 String values[] = null; 123 124 try { 125 126 String parent = rform.getParentObjectName(); 127 String objectName = ValveUtil.getObjectName(parent, 128 TomcatTreeBuilder.REALM_TYPE); 129 130 ObjectName pname = new ObjectName (parent); 131 StringBuffer sb = new StringBuffer (pname.getDomain()); 132 133 try { 136 if ("Service".equalsIgnoreCase(pname.getKeyProperty("type"))) { 137 sb.append(":type=Engine"); 138 parent = sb.toString(); 139 } 140 } catch (Exception e) { 141 String message = 142 resources.getMessage(locale, "error.engineName.bad", 143 sb.toString()); 144 getServlet().log(message); 145 response.sendError(HttpServletResponse.SC_BAD_REQUEST, message); 146 return (null); 147 } 148 149 ObjectName oname = 151 new ObjectName (objectName); 152 if (mBServer.isRegistered(oname)) { 153 ActionErrors errors = new ActionErrors(); 154 errors.add("realmName", 155 new ActionError("error.realmName.exists")); 156 saveErrors(request, errors); 157 return (new ActionForward(mapping.getInput())); 158 } 159 160 String domain = oname.getDomain(); 161 ObjectName fname = TomcatTreeBuilder.getMBeanFactory(); 163 164 values = new String [1]; 166 values[0] = parent; 167 operation = "createMemoryRealm"; 168 rObjectName = (String ) 169 mBServer.invoke(fname, operation, 170 values, createStandardRealmTypes); 171 172 TreeControl control = (TreeControl) 174 session.getAttribute("treeControlTest"); 175 if (control != null) { 176 TreeControlNode parentNode = control.findNode(rform.getParentObjectName()); 177 if (parentNode != null) { 178 String nodeLabel = rform.getNodeLabel(); 179 String encodedName = 180 URLEncoder.encode(rObjectName,TomcatTreeBuilder.URL_ENCODING); 181 TreeControlNode childNode = 182 new TreeControlNode(rObjectName, 183 "Realm.gif", 184 nodeLabel, 185 "EditRealm.do?select=" + 186 encodedName, 187 "content", 188 true, domain); 189 parentNode.addChild(childNode); 190 } else { 192 getServlet().log 193 ("Cannot find parent node '" + parent + "'"); 194 } 195 } else { 196 getServlet().log 197 ("Cannot find TreeControlNode!"); 198 } 199 200 } catch (Exception e) { 201 202 getServlet().log 203 (resources.getMessage(locale, "users.error.invoke", 204 operation), e); 205 response.sendError 206 (HttpServletResponse.SC_INTERNAL_SERVER_ERROR, 207 resources.getMessage(locale, "users.error.invoke", 208 operation)); 209 return (null); 210 211 } 212 213 } 214 215 String attribute = null; 217 try { 218 219 ObjectName roname = new ObjectName (rObjectName); 220 221 attribute = "pathname"; 222 mBServer.setAttribute(roname, 223 new Attribute ("pathname", rform.getPathName())); 224 225 } catch (Exception e) { 226 227 getServlet().log 228 (resources.getMessage(locale, "users.error.attribute.set", 229 attribute), e); 230 response.sendError 231 (HttpServletResponse.SC_INTERNAL_SERVER_ERROR, 232 resources.getMessage(locale, "users.error.attribute.set", 233 attribute)); 234 return (null); 235 } 236 237 session.removeAttribute(mapping.getAttribute()); 239 return (mapping.findForward("Save Successful")); 240 241 } 242 243 } 244 | Popular Tags |