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
