You certainly need to tell your customers to use BundleContext.getDataFile() instead of creating file objects directly.

Replace File via the boot class path, as Karl mentions, is do-able, but I am not sure if it is a good idea.

-> richard

On 10/2/09 11:23, Karl Pauls wrote:
Well, in this case I guess you will have to have your customers
special case for OSGi I guess as their is no way (that I know) to
replace java.io.File (unless you override it with our own version
using the -Xbootclasspath/p option of the jvm).

regards,

Karl

On Fri, Oct 2, 2009 at 11:14 AM, Baptiste Gaillard
<[email protected]>  wrote:
The main problem is that we do not have control on the OSGI components deployed 
on our application because they are developped by our customers.

We can write a guide and explain what to do and not to do with OSGI, but we 
hoped to solve the majority of problems otherwise.

What I wanted to do with:
  new File("relative_path")

is to change the way relative paths are built by replacing java.io.File() with 
our version of java.io.File().

Something like :

/**
  * Our version of java.io.File
  */
class File {

    public File(String relativePath)
    {
          this.path = 
fs.normalize(StaticBundleAccessor.getBundle().getBundleLocation().getAbsolutePath()
 + '/' + relativePath);
          this.prefixLength = fs.prefixLength(this.path);
    }

}

/**
  * SUN version of java.io.File
  */
class File {



    public File(String pathname)

    {

          this.path = fs.normalize(pathname);

          this.prefixLength = fs.prefixLength(this.path);

    }



}

Do you think something like that is feasible ?




Date: Fri, 2 Oct 2009 10:51:21 +0200
Subject: Re: OSGI bootdelegation and java.io.File ?
From: [email protected]
To: [email protected]

On Fri, Oct 2, 2009 at 10:48 AM, Baptiste Gaillard
<[email protected]>  wrote:
Hi, we are building a platform which allow to deploy and execute OSGI 
components.

Those OSGI components are developed by our customers and we do not have control 
one those components.
The application is a JEE one and is deployed inside JBoss AS, we also use an 
embedded Felix container.

We have encounter problems when OSGI components do things like that in their 
code:

  File file = new File("relative_path/myfile.txt");

This return a file which point to %JBOSS_HOME%/relative_path/myfile.txt.
This seems perfectly normal because OSGI delegate Class Loading for 'java.*' 
classes used to the parent Class Loader.

So, how is it possible to have a path to the Bundle location (we use unzipped bundles) 
instead of %JBOSS_HOME% by calling new File("relative_path") ?
Is it possible to force OSGI to load delegate the Class Loading for 
java.io.File classes ?
No. That is not possible. However, I'm not sure I really understand
what it is you are trying to do. Can you tell us more about that -
maybe there is a different solution to your problem...

regards,

Karl

Thanks,


Baptiste




_________________________________________________________________
Découvrez toutes les possibilités de communication avec vos proches
http://www.microsoft.com/windows/windowslive/default.aspx


--
Karl Pauls
[email protected]

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

_________________________________________________________________
Découvrez toutes les possibilités de communication avec vos proches
http://www.microsoft.com/windows/windowslive/default.aspx



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to