Hi,

Could you explain how you are planning to make this work?  It's not obvious to 
me.  From this it looks like you are reintroducing a gbean for each pojo web 
service which is a very different approach than what is used for the actual 
servlets in the web app.  

If I remember correctly there was some very peculiar code related to these 
servlets for pojo web services since the servlet instance needed to be 
configured with  the actual objects that deal with the web service processing,  
and formerly there was no plausible way to do this.  With the servlet 3 
capabilities I was hoping that we can directly construct and configure the 
servlet object and add it to the servlet context.

thanks
david jencks

On Jan 17, 2011, at 6:58 PM, [email protected] wrote:

> Author: rwonly
> Date: Tue Jan 18 02:58:42 2011
> New Revision: 1060171
> 
> URL: http://svn.apache.org/viewvc?rev=1060171&view=rev
> Log:
> re-enable the codes that deal with the web service fake servlet
> 
> Modified:
>    
> geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
> 
> Modified: 
> geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
> URL: 
> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java?rev=1060171&r1=1060170&r2=1060171&view=diff
> ==============================================================================
> --- 
> geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
>  (original)
> +++ 
> geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
>  Tue Jan 18 02:58:42 2011
> @@ -52,6 +52,7 @@ import org.apache.geronimo.gbean.Abstrac
> import org.apache.geronimo.gbean.GBeanData;
> import org.apache.geronimo.gbean.GBeanInfoBuilder;
> import org.apache.geronimo.gbean.GBeanLifecycle;
> +import org.apache.geronimo.gbean.ReferencePatterns;
> import org.apache.geronimo.gbean.annotation.GBean;
> import org.apache.geronimo.gbean.annotation.ParamAttribute;
> import org.apache.geronimo.gbean.annotation.ParamReference;
> @@ -581,7 +582,7 @@ public class TomcatModuleBuilder extends
> 
>             webModuleData.setAttribute("contextAttributes", 
> contextAttributes);
> 
> -            //Handle the role permissions and webservices on the servlets.
> +            //Handle webservices and the role permissions on the servlets.
>             List<org.apache.openejb.jee.Servlet> servletTypes = 
> webApp.getServlet();
>             Map<String, AbstractName> webServices = new HashMap<String, 
> AbstractName>();
>             Class<?> baseServletClass;
> @@ -590,43 +591,46 @@ public class TomcatModuleBuilder extends
>             } catch (ClassNotFoundException e) {
>                 throw new DeploymentException("Could not load 
> javax.servlet.Servlet in bundle " + bundle, e);
>             }
> -//            for (org.apache.openejb.jee.Servlet servletType : 
> servletTypes) {
> -//
> -//                if (servletType.getServletClass() != null) {
> -//                    String servletName = 
> servletType.getServletName().trim();
> -//                    String servletClassName = 
> servletType.getServletClass().trim();
> -//                    Class servletClass;
> -//                    try {
> -//                        servletClass = 
> webBundle.loadClass(servletClassName);
> -//                    } catch (ClassNotFoundException e) {
> -//                        throw new DeploymentException("Could not load 
> servlet class " + servletClassName + " from bundle " + bundle, e);
> -//                    }
> -//                    if (!baseServletClass.isAssignableFrom(servletClass)) {
> -//                        //fake servletData
> -//                        AbstractName servletAbstractName = 
> moduleContext.getNaming().createChildName(moduleName, servletName, 
> NameFactory.SERVLET);
> -//                        GBeanData servletData = new GBeanData();
> -//                        servletData.setAbstractName(servletAbstractName);
> -//                        //let the web service builder deal with 
> configuring the gbean with the web service stack
> -//                        //Here we just extract the factory reference
> -//                        boolean configured = false;
> -//                        for (WebServiceBuilder serviceBuilder : 
> webServiceBuilder) {
> -//                            if (serviceBuilder.configurePOJO(servletData, 
> servletName, module, servletClassName, moduleContext)) {
> -//                                configured = true;
> -//                                break;
> -//                            }
> -//                        }
> -//                        if (!configured) {
> -//                            throw new DeploymentException("POJO web 
> service: " + servletName + " not configured by any web service builder");
> -//                        }
> -//                        ReferencePatterns patterns = 
> servletData.getReferencePatterns("WebServiceContainerFactory");
> -//                        AbstractName wsContainerFactoryName = 
> patterns.getAbstractName();
> -//                        webServices.put(servletName, 
> wsContainerFactoryName);
> -//                        //force all the factories to start before the web 
> app that needs them.
> -//                        
> webModuleData.addDependency(wsContainerFactoryName);
> -//                    }
> -//
> -//                }
> -//            }
> +            
> +            
> +            // web services fake servlet 
> +            for (org.apache.openejb.jee.Servlet servletType : servletTypes) {
> +
> +                if (servletType.getServletClass() != null) {
> +                    String servletName = servletType.getServletName().trim();
> +                    String servletClassName = 
> servletType.getServletClass().trim();
> +                    Class servletClass;
> +                    try {
> +                        servletClass = webBundle.loadClass(servletClassName);
> +                    } catch (ClassNotFoundException e) {
> +                        throw new DeploymentException("Could not load 
> servlet class " + servletClassName + " from bundle " + bundle, e);
> +                    }
> +                    if (!baseServletClass.isAssignableFrom(servletClass)) {
> +                        //fake servletData
> +                        AbstractName servletAbstractName = 
> moduleContext.getNaming().createChildName(moduleName, servletName, 
> NameFactory.SERVLET);
> +                        GBeanData servletData = new GBeanData();
> +                        servletData.setAbstractName(servletAbstractName);
> +                        //let the web service builder deal with configuring 
> the gbean with the web service stack
> +                        //Here we just extract the factory reference
> +                        boolean configured = false;
> +                        for (WebServiceBuilder serviceBuilder : 
> webServiceBuilder) {
> +                            if (serviceBuilder.configurePOJO(servletData, 
> servletName, module, servletClassName, moduleContext)) {
> +                                configured = true;
> +                                break;
> +                            }
> +                        }
> +                        if (!configured) {
> +                            throw new DeploymentException("POJO web service: 
> " + servletName + " not configured by any web service builder");
> +                        }
> +                        ReferencePatterns patterns = 
> servletData.getReferencePatterns("WebServiceContainerFactory");
> +                        AbstractName wsContainerFactoryName = 
> patterns.getAbstractName();
> +                        webServices.put(servletName, wsContainerFactoryName);
> +                        //force all the factories to start before the web 
> app that needs them.
> +                        webModuleData.addDependency(wsContainerFactoryName);
> +                    }
> +
> +                }
> +            }
> 
> 
>             webModuleData.setAttribute("webServices", webServices);
> 
> 

Reply via email to