1 15 package org.apache.tapestry.portlet; 16 17 import java.io.IOException ; 18 import java.util.Locale ; 19 20 import javax.portlet.ActionRequest; 21 import javax.portlet.ActionResponse; 22 import javax.portlet.Portlet; 23 import javax.portlet.PortletConfig; 24 import javax.portlet.PortletException; 25 import javax.portlet.RenderRequest; 26 import javax.portlet.RenderResponse; 27 28 import org.apache.hivemind.ClassResolver; 29 import org.apache.hivemind.Registry; 30 import org.apache.hivemind.Resource; 31 import org.apache.hivemind.impl.DefaultClassResolver; 32 import org.apache.hivemind.impl.RegistryBuilder; 33 import org.apache.hivemind.impl.XmlModuleDescriptorProvider; 34 import org.apache.tapestry.web.WebContext; 35 import org.apache.tapestry.web.WebContextResource; 36 37 47 public class ApplicationPortlet implements Portlet 48 { 49 Registry _registry; 50 51 ActionRequestServicer _actionRequestServicer; 52 53 RenderRequestServicer _renderRequestServicer; 54 55 public void destroy() 56 { 57 try 58 { 59 _registry.shutdown(); 60 } 61 finally 62 { 63 _registry = null; 64 _actionRequestServicer = null; 65 _renderRequestServicer = null; 66 } 67 } 68 69 public void init(PortletConfig config) throws PortletException 70 { 71 _registry = constructRegistry(config); 72 73 PortletApplicationInitializer initializer = (PortletApplicationInitializer) _registry 74 .getService( 75 "tapestry.portlet.PortletApplicationInitializer", 76 PortletApplicationInitializer.class); 77 78 initializer.initialize(config); 79 80 _actionRequestServicer = (ActionRequestServicer) _registry.getService( 81 "tapestry.portlet.ActionRequestServicer", 82 ActionRequestServicer.class); 83 84 _renderRequestServicer = (RenderRequestServicer) _registry.getService( 85 "tapestry.portlet.RenderRequestServicer", 86 RenderRequestServicer.class); 87 } 88 89 99 100 protected Registry constructRegistry(PortletConfig config) 101 { 102 RegistryBuilder builder = new RegistryBuilder(); 103 104 ClassResolver resolver = new DefaultClassResolver(); 105 106 builder.addModuleDescriptorProvider(new XmlModuleDescriptorProvider(resolver)); 107 108 String name = config.getPortletName(); 109 WebContext context = new PortletWebContext(config.getPortletContext()); 110 111 addModuleIfExists(builder, resolver, context, "/WEB-INF/" + name + "/hivemodule.xml"); 112 addModuleIfExists(builder, resolver, context, "/WEB-INF/hivemodule.xml"); 113 114 return builder.constructRegistry(Locale.getDefault()); 115 } 116 117 123 124 protected void addModuleIfExists(RegistryBuilder builder, ClassResolver resolver, 125 WebContext context, String path) 126 { 127 Resource r = new WebContextResource(context, path); 128 129 if (r.getResourceURL() == null) 130 return; 131 132 builder.addModuleDescriptorProvider(new XmlModuleDescriptorProvider(resolver, r)); 133 } 134 135 public void processAction(ActionRequest request, ActionResponse response) 136 throws PortletException, IOException 137 { 138 try 139 { 140 _registry.setupThread(); 141 142 _actionRequestServicer.service(request, response); 143 } 144 catch (RuntimeException ex) 145 { 146 throw new PortletException(PortletMessages.errorProcessingAction(ex), ex); 147 } 148 finally 149 { 150 _registry.cleanupThread(); 151 } 152 } 153 154 public void render(RenderRequest request, RenderResponse response) throws PortletException, 155 IOException 156 { 157 try 158 { 159 _registry.setupThread(); 160 161 _renderRequestServicer.service(request, response); 162 } 163 catch (RuntimeException ex) 164 { 165 throw new PortletException(PortletMessages.errorProcessingRender(ex), ex); 166 } 167 finally 168 { 169 _registry.cleanupThread(); 170 } 171 } 172 } | Popular Tags |