[
https://issues.apache.org/jira/browse/WICKET-1371?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12572367#action_12572367
]
Johan Compagner commented on WICKET-1371:
-----------------------------------------
this is kind of touching the samething that we discussed a few days ago. We
really should use the ClassResolver of the application i guess because thats
our hook into osgi
> wicket.properties cannot be found in OSGi
> -----------------------------------------
>
> Key: WICKET-1371
> URL: https://issues.apache.org/jira/browse/WICKET-1371
> Project: Wicket
> Issue Type: Bug
> Components: wicket
> Affects Versions: 1.3.1
> Environment: Windows XP, Java 5, Wicket 1.3.1, Equinox OSGi 3.3.1
> Reporter: Adam Harris
>
> The wicket.properties file is not being loaded by the Application class due
> to exclusive use of the thread context classloader in Wicket 1.3.1 when used
> in an OSGi environment.
> From looking at Wicket's Application code, it appears that multiple
> wicket.properties files can exist, and it will load them all. So, the
> wicket.properties in wicket.jar should always be loaded as well as any other
> wicket.properties that are application specific. This will work in a
> traditional WAR file.
> However, in OSGi, each bundle has its own classloader. So, if Wicket is in
> its own bundle and my web application is in its own bundle, the current
> implementation of Application will not work. Using only the thread context
> classloader will not accomodate loading multiple wicket.properties. Multiple
> classloaders must be checked.
> Here's a reference to an mail list thread:
> http://www.nabble.com/NPE-in-PropertyResolver.getGetAndSetter%28%29-td11194510.html#a15647641
> I've put together and tested a modified Application.java which works in OSGi.
> Would something like this be acceptable?
> public final void initializeComponents()
> {
> // Load any wicket properties files we can find
> try
> {
> Set loadedFiles = new HashSet();
> // Load properties files used by all libraries
>
> // Try the classloader for the wicket jar/bundle
> Enumeration resources = Application.class.getClassLoader()
> .getResources("wicket.properties");
> loadResources(resources, loadedFiles);
> // Try the classloader for the user's application jar/bundle
> resources = getClass().getClassLoader()
> .getResources("wicket.properties");
> loadResources(resources, loadedFiles);
> // Try the context class loader
> resources = Thread.currentThread()
> .getContextClassLoader()
> .getResources("wicket.properties");
> loadResources(resources, loadedFiles);
> }
> catch (IOException e)
> {
> throw new WicketRuntimeException("Unable to load
> initializers file", e);
> }
> // now call any initializers we read
> callInitializers();
> }
> private void loadResources(Enumeration resources, Set loadedFiles) throws
> IOException
> {
> if (resources != null)
> {
> while (resources.hasMoreElements())
> {
> InputStream in = null;
> try
> {
> final URL url = (URL)resources.nextElement();
> if (!loadedFiles.contains(url))
> {
> log.info("resource url: {} ", url);
> final Properties properties = new
> Properties();
> in = url.openStream();
> properties.load(in);
> load(properties);
> loadedFiles.add(url);
> }
> }
> finally
> {
> if (in != null)
> {
> in.close();
> }
> }
> }
> }
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.