geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rex Wang <rwo...@gmail.com>
Subject Re: svn commit: r1060171 - /geronimo/server/trunk/plugins/tomcat/geronimo-tomcat7-builder/src/main/java/org/apache/geronimo/tomcat/deployment/TomcatModuleBuilder.java
Date Thu, 20 Jan 2011 01:54:12 GMT
Thank you David, this give me some clues :-)
Will investigate and have a try.

2011/1/19 David Jencks <david_jencks@yahoo.com>

> Hi Rex,
>
> I don't recall if this kind of pojo web service is just for jax-rpc or also
> jax-ws.  I don't have a complete solution in mind but here are some ideas
> that might be useful... feel free to ignore them or correct me :-)
>
> - we need something at deploy time to take the non-servlet classes out of
> the info tree and record them in some kind of axis or axis2 or cxf
> appropriate data.  For at least axis1 I think we need to associate them with
> all the other info we get out of jaxrpc xml configurations and the wsdl that
> we parse.
>
> - at runtime we need something to take this info and construct the servlet
> instance and add it to the servlet context.  From the point of view of the
> servlet containers using a ServletContainerInitializer would be the cleanest
> approach.  However, normal ServletContainerInitializers are constructed just
> from their class names for each servlet context, so there's no external way
> to configure them.  Using these I think we'd need to store the info from (1)
> as a resource in the deployed war ( or for wabs, in the osgi bundle data
> area).
>
> -- possibly we could extend the ServletContainerInitializer support so
> something such as a gbean can construct and configure one and register it
> with  the StandardContext.addServletContainerInitializer method.  The gbean
> could include the necessary configuration from deploy time.  This gbean
> would be one gbean for all the web services in the web app, not one for each
> web service which was what the old code used.
>
> Hope this is helpful!
> david jencks
>
> On Jan 18, 2011, at 11:29 PM, Rex Wang wrote:
>
> Hi David,
>
> I was planning first make the old functions work and then see if we can
> make any improvements, because it blocks a lot of tck cases.
> I am not very familiar with the codes in tomcatmodulebuilder, however I
> would like to try the approach you pointed out, so I have reverted the
> changes.
>
> thanks and regards,
>
> 2011/1/18 David Jencks <david_jencks@yahoo.com>
>
>> 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, rwonly@apache.org 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);
>> >
>> >
>>
>>
>
>
> --
> Lei Wang (Rex)
> rwonly AT apache.org
>
>
>


-- 
Lei Wang (Rex)
rwonly AT apache.org

Mime
View raw message