You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomee.apache.org by Ivan <xh...@gmail.com> on 2010/12/09 09:19:43 UTC

private and protected static methods in the DepoymentLoader

Hi,
    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.
    Thanks.

-- 
Ivan

Re: private and protected static methods in the DepoymentLoader

Posted by Ivan <xh...@gmail.com>.
I opened a JIRA https://issues.apache.org/jira/browse/OPENEJB-1413, will
attach a draft patch later.
thanks.

2010/12/10 David Blevins <da...@visi.com>

> On Thu, Dec 9, 2010 at 5:49 PM, Ivan <xh...@gmail.com> wrote:
> > Another possible solution is to pass the interesting module types to the
> > DeploymentLoader. WDYT ?
>
> That could work.
>
> On the note about ReadDescriptors, it should only read what was given.
>  Are we passing in web stuff now in the EjbModule we build and give to
> OpenEJB?  In the past we've always taken the route of only giving
> OpenEJB what we want it to act on and the rest was simple.
>
> -David
>



-- 
Ivan

Re: private and protected static methods in the DepoymentLoader

Posted by David Blevins <da...@visi.com>.
On Thu, Dec 9, 2010 at 5:49 PM, Ivan <xh...@gmail.com> wrote:
> Another possible solution is to pass the interesting module types to the
> DeploymentLoader. WDYT ?

That could work.

On the note about ReadDescriptors, it should only read what was given.
 Are we passing in web stuff now in the EjbModule we build and give to
OpenEJB?  In the past we've always taken the route of only giving
OpenEJB what we want it to act on and the rest was simple.

-David

Re: private and protected static methods in the DepoymentLoader

Posted by Ivan <xh...@gmail.com>.
Another possible solution is to pass the interesting module types to the
DeploymentLoader. WDYT ?
thanks.

2010/12/10 Ivan <xh...@gmail.com>

> 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 <da...@visi.com>
>
> On Thu, Dec 9, 2010 at 12:19 AM, Ivan <xh...@gmail.com> 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

Re: private and protected static methods in the DepoymentLoader

Posted by Ivan <xh...@gmail.com>.
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 <da...@visi.com>

> On Thu, Dec 9, 2010 at 12:19 AM, Ivan <xh...@gmail.com> 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

Re: private and protected static methods in the DepoymentLoader

Posted by David Blevins <da...@visi.com>.
On Thu, Dec 9, 2010 at 12:19 AM, Ivan <xh...@gmail.com> 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