geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jarek Gawor <jga...@gmail.com>
Subject Re: minimal tomcat server is assembled, but failed on starting module tomcat6
Date Wed, 25 Nov 2009 17:03:43 GMT
The problem was that a class in catalina bundle was using
StringManager class in util bundle to load a resource that was in
catalina bundle. And the utll bundle does not import the catalina
packages.

My solution for now is to make sure that each Tomcat bundle has its
own version of StringManager and that all classes within the given
bundle use the right StringManager to load the resources. That's what
Tomcat seemed to be doing anyway since there is a number of
StringManager copies in different packages/bundles already.

Another thing I realized is that the util bundle is only really used
by the catalina bundle. So we could also merge these together to make
things a bit simpler.

After resolving that problem locally I ran into another problem. In
Geronimo we add some Geronimo specific listeners to each web app (see
addInstanceListener() in GeronimoStandardContext). These classes are
instantiated by Tomcat using Class.forName(String) in
StandardContext.createWrapper(). So the Geronimo-specific class will
be loaded using the catalina bundle classloader and things will fail.

The easy fix is to add DynamicImport-Package * to catalina bundle. Or
we could modify the Tomcat code to use a specific classloader when
loading the listeners, etc. Thoughts or other solutions?

Jarek

On Fri, Nov 20, 2009 at 12:42 AM, David Jencks <david_jencks@yahoo.com> wrote:
> I don't know how resource bundles work but I expect they have assumptions
> about classloaders loading the resource files that are not valid in osgi
> outside a single bundle.  I'm not sure exactly what happens with osgi either
> but I think that you have to use the Bundle object to load classes and
> resources from other bundles, not the classloader that loads the classes in
> a bundle.
>
> For a modular system I'd expect that the resources would need to be in the
> bundle itself or else supplied through some kind of resource service.  If
> the resources aren't in the right bundle lets move them.
>
> BTW I'm starting to try to get the welcome app to deploy, I'm adding a
> couple mini-assemblies to the build.  I'm starting with the jetty server....
> if you'd like to take a look at the tomcat one that might be a standardized
> testbed for this work.  I've just committed the server assemblies under
> plugins/welcome.
>
> thanks
> david jencks
>
> On Nov 19, 2009, at 7:51 PM, Forrest Xia wrote:
>
>> Hi,
>>
>> I managed to locally make an assembly of tomcat-minimal successfully(of
>> cause, disabled some modules, such as hot-deploy, remote-deploy).
>>
>> But when I tried to start the server, I encounter a strange problem that I
>> can not figure out why. The problem is:
>>
>> When boot comes to plugin
>> "org.apache.geronimo.configs/tomcat6/3.0-SNAPSHOT/car", an
>>  java.util.MissingResourceException threw out. Full stack trace is:
>>
>> [*********************************       ]  83%  10s Starting
>> org.apache.ger...2009-11-20 11:13:40,920 ERROR [GBeanInstanceState] Error
>> while starting; GBean is now in the FAILED state:
>> abstractName="org.apache.geronimo.configs/tomcat6/3.0-SNAPSHOT/car?ServiceModule=org.apache.geronimo.configs/tomcat6/3.0-SNAPSHOT/car,j2eeType=GBean,name=TomcatServer"
>> org.apache.xbean.recipe.ConstructionException: Error invoking constructor:
>> public org.apache.catalina.connector.Connector(java.lang.String) throws
>> java.lang.Exception
>>    at
>> org.apache.xbean.recipe.ReflectionUtil$ConstructorFactory.create(ReflectionUtil.java:962)
>>    at
>> org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:276)
>>    at
>> org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
>>    at
>> org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
>>    at
>> org.apache.geronimo.tomcat.model.ConnectorType.getConnector(ConnectorType.java:595)
>>    at
>> org.apache.geronimo.tomcat.model.ServiceType.getService(ServiceType.java:278)
>>    at
>> org.apache.geronimo.tomcat.model.ServerType.build(ServerType.java:294)
>>    at
>> org.apache.geronimo.tomcat.TomcatServerGBean.<init>(TomcatServerGBean.java:132)
>>    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>> Method)
>>    at
>> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
>>    at
>> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>>    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
>>    at
>> org.apache.xbean.recipe.ReflectionUtil$ConstructorFactory.create(ReflectionUtil.java:952)
>>    at
>> org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:276)
>>    at
>> org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
>>    at
>> org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
>>    at
>> org.apache.geronimo.gbean.runtime.GBeanInstance.createInstance(GBeanInstance.java:917)
>>    at
>> org.apache.geronimo.gbean.runtime.GBeanInstanceState.attemptFullStart(GBeanInstanceState.java:269)
>>    at
>> org.apache.geronimo.gbean.runtime.GBeanInstanceState.start(GBeanInstanceState.java:103)
>>    at
>> org.apache.geronimo.gbean.runtime.GBeanInstanceState.startRecursive(GBeanInstanceState.java:125)
>>    at
>> org.apache.geronimo.gbean.runtime.GBeanInstance.startRecursive(GBeanInstance.java:544)
>>    at
>> org.apache.geronimo.kernel.basic.BasicKernel.startRecursiveGBean(BasicKernel.java:385)
>>    at
>> org.apache.geronimo.kernel.config.ConfigurationUtil.startConfigurationGBeans(ConfigurationUtil.java:459)
>>    at
>> org.apache.geronimo.kernel.config.KernelConfigurationManager.start(KernelConfigurationManager.java:223)
>>    at
>> org.apache.geronimo.kernel.config.SimpleConfigurationManager.startConfiguration(SimpleConfigurationManager.java:713)
>>    at
>> org.apache.geronimo.system.main.EmbeddedDaemon.doStartup(EmbeddedDaemon.java:149)
>>    at
>> org.apache.geronimo.system.main.EmbeddedDaemon.execute(EmbeddedDaemon.java:81)
>>    at org.apache.geronimo.main.Bootstrapper.execute(Bootstrapper.java:88)
>>    at org.apache.geronimo.cli.AbstractCLI.executeMain(AbstractCLI.java:65)
>>    at org.apache.geronimo.cli.daemon.DaemonCLI.main(DaemonCLI.java:32)
>> Caused by: java.util.MissingResourceException: Can't find bundle for base
>> name org.apache.catalina.connector.LocalStrings, locale en_US
>>    at
>> java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1521)
>>    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1260)
>>    at java.util.ResourceBundle.getBundle(ResourceBundle.java:787)
>>    at
>> org.apache.tomcat.util.res.StringManager.<init>(StringManager.java:77)
>>    at
>> org.apache.tomcat.util.res.StringManager.<init>(StringManager.java:72)
>>    at
>> org.apache.tomcat.util.res.StringManager.getManager(StringManager.java:161)
>>    at
>> org.apache.catalina.connector.MapperListener.<init>(MapperListener.java:79)
>>    at org.apache.catalina.connector.Connector.<init>(Connector.java:266)
>>    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>> Method)
>>    at
>> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
>>    at
>> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>>    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
>>    at
>> org.apache.xbean.recipe.ReflectionUtil$ConstructorFactory.create(ReflectionUtil.java:952)
>>    ... 29 more
>>
>> So I double check the catalina bundle(whose bundle id is 122 in my
>> assembly) and confirmed there are resource files for LocalStrings in the
>> jar. Its package is exported and imported properly in the bundle's MENIFEST
>> file. Just no LocalStrings_en_US.properties there. But I think, even the
>> local resource is not found, the default resource LocalStrings.properties
>> should be picked up.
>>
>> From the error msg, it does not happen as supposed to. However, I manually
>> add a resource file to the jar, stop osgi runtime, clear bundle cache, and
>> start the server again. The same problem is still there. Why? does the
>> caller bundle not see the resource from another bundle? I am confused.
>>
>> Here I also attached an active bundle list before the error happens for
>> reference.
>>
>> Hope someone can give me a light about it. My ideal goal is to have a
>> minimal tomcat assembly started without problems, so that I can try to
>> deploy a simple sample application to the runtime and see if it works.
>>
>> Thanks for any comments.
>>
>> Forrest
>>
>>
>> <startedbundles.txt>
>
>

Mime
View raw message