Another possible solution is to pass the interesting module types to the
DeploymentLoader. WDYT ?
thanks.

2010/12/10 Ivan <[email protected]>

> Hmm, if we just do not wish the DeploymentLoader to be extended, I think
> private method or final class are enough, just feel curious why those
> private and protected methods are marked as static.
> The reason I hope to extend DeploymentLoader and ReadDescriptor is that, I
> found they do "too much" in the Geronimo integration :-) They would also
> analysis other module types except for ejb module, that is not required, I
> even could find DeploymentLoader would check tld files. Those behaviors are
> reasonable in OpenEJB server as it also need to support other module types,
> but in Geornimo ...
>
> I pasted some of my draft codes below, and look forward to your comments,
> thanks.
> /**
>  *  Licensed to the Apache Software Foundation (ASF) under one or more
>  *  contributor license agreements.  See the NOTICE file distributed with
>  *  this work for additional information regarding copyright ownership.
>  *  The ASF licenses this file to You under the Apache License, Version 2.0
>  *  (the "License"); you may not use this file except in compliance with
>  *  the License.  You may obtain a copy of the License at
>  *
>  *     http://www.apache.org/licenses/LICENSE-2.0
>  *
>  *  Unless required by applicable law or agreed to in writing, software
>  *  distributed under the License is distributed on an "AS IS" BASIS,
>  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
>  *  See the License for the specific language governing permissions and
>  *  limitations under the License.
>  */
>
> package org.apache.geronimo.openejb.deployment;
>
> import java.io.File;
> import java.io.IOException;
> import java.net.URL;
> import java.util.Map;
>
> import org.apache.openejb.ClassLoaderUtil;
> import org.apache.openejb.OpenEJBException;
> import org.apache.openejb.config.DeploymentLoader;
> import org.apache.openejb.config.ReadDescriptors;
> import org.apache.openejb.config.WebModule;
> import org.apache.openejb.jee.WebApp;
>
> /**
>  * @version $Rev$ $Date$
>  * GeronimoDeploymentLoader will prevent DeploymentLoader collecting
> non-EJB related information.
>  */
> public class GeronimoDeploymentLoader extends DeploymentLoader {
>
>     public GeronimoDeploymentLoader() {
>         super();
>     }
>
>     public GeronimoDeploymentLoader(String ddDir) {
>         super(ddDir);
>     }
>
>     @Override
>     protected WebModule createWebModule(String appId, String warPath,
> ClassLoader parentClassLoader,
>             String contextRoot, String moduleName) throws OpenEJBException
> {
>         File warFile = new File(warPath);
>         warFile = unpack(warFile);
>
>         // read web.xml file
>         Map<String, URL> descriptors;
>         try {
>             descriptors = getWebDescriptors(warFile);
>         } catch (IOException e) {
>             throw new OpenEJBException("Unable to determine descriptors in
> jar.", e);
>         }
>
>         WebApp webApp = null;
>         URL webXmlUrl = descriptors.get("web.xml");
>         if (webXmlUrl != null) {
>             webApp = ReadDescriptors.readWebApp(webXmlUrl);
>         }
>
>         // determine war class path
>         URL[] webUrls = getWebappUrls(warFile);
>         ClassLoader warClassLoader =
> ClassLoaderUtil.createTempClassLoader(appId, webUrls, parentClassLoader);
>
>         // create web module
>         WebModule webModule = new WebModule(webApp, contextRoot,
> warClassLoader, warFile.getAbsolutePath(), moduleName);
>         //webModule.getAltDDs().putAll(descriptors);
>         //webModule.getWatchedResources().add(warPath);
>         //webModule.getWatchedResources().add(warFile.getAbsolutePath());
>         //if (webXmlUrl != null && "file".equals(webXmlUrl.getProtocol()))
> {
>         //
> webModule.getWatchedResources().add(URLs.toFilePath(webXmlUrl));
>         //}
>         return webModule;
>     }
>
> }
>
> /**
>  *  Licensed to the Apache Software Foundation (ASF) under one or more
>  *  contributor license agreements.  See the NOTICE file distributed with
>  *  this work for additional information regarding copyright ownership.
>  *  The ASF licenses this file to You under the Apache License, Version 2.0
>  *  (the "License"); you may not use this file except in compliance with
>  *  the License.  You may obtain a copy of the License at
>  *
>  *     http://www.apache.org/licenses/LICENSE-2.0
>  *
>  *  Unless required by applicable law or agreed to in writing, software
>  *  distributed under the License is distributed on an "AS IS" BASIS,
>  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
>  *  See the License for the specific language governing permissions and
>  *  limitations under the License.
>  */
>
> package org.apache.geronimo.openejb.deployment;
>
> import org.apache.openejb.OpenEJBException;
> import org.apache.openejb.config.AppModule;
> import org.apache.openejb.config.EjbModule;
> import org.apache.openejb.config.ReadDescriptors;
>
> /**
>  * @version $Rev$ $Date$
>  */
> public class GeronimoReadDescriptors extends ReadDescriptors {
>
>     @Override
>     public AppModule deploy(AppModule appModule) throws OpenEJBException {
>         for (EjbModule ejbModule : appModule.getEjbModules()) {
>
>             if (ejbModule.getEjbJar() == null) {
>                 readEjbJar(ejbModule, appModule);
>             }
>
>             if (ejbModule.getOpenejbJar() == null) {
>                 readOpenejbJar(ejbModule);
>             }
>
>             if (ejbModule.getBeans() == null) {
>                 readBeans(ejbModule, appModule);
>             }
>
>             readCmpOrm(ejbModule);
>         }
>         return appModule;
>     }
>
> }
>
>
> 2010/12/10 David Blevins <[email protected]>
>
> On Thu, Dec 9, 2010 at 12:19 AM, Ivan <[email protected]> wrote:
>> >    I found that there are many private and proected static methods in
>> the
>> > o.a.o.config.DeploymentLoader, it prevents to overrides those protected
>> > methods in the subclass.. So is there any special reason for this ? If
>> not,
>> > I would like to remove those static key words.
>>
>> I'm sure we can figure out a way to do what you need, but let's
>> definitely not do more subclassing.  The stateful container is
>> subclassed in the geronimo-openejb-clustering-wadi module and it's
>> always quite painful to make changes that don't break it.
>>
>> If you have any details on the overall goal, I'm sure we can find
>> something clever.
>>
>>
>> -David
>>
>
>
>
> --
> Ivan
>



-- 
Ivan

Reply via email to