Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [platform-core-dev] Can I use Eclipse Platform Core functionalityoutside Eclipse?


This is where it is a bit tricky.  Sitting outside the Eclipse infrastructure is not a happy place.  When you start up Eclipse you have to give it an "application" to run.  Think of this like the traditional Java main().  EclipseStarter sets up all the classloaders etc and then runs your application (see IPlatformRunnable). >From then on Eclipse is control.  If the application exits then Eclipse exits.  So in this scenario Eclipse wants to be in control.  This is one of the reasons I suggested you might want to strip out the Extension registry.

Beyond that, you can get the various classloaders by grovelling around in the OSGi implementation using reflection but that's not alot of fun.

Jeff



"Kai Shen" <kshen@xxxxxxxxxxx>
Sent by: platform-core-dev-bounces@xxxxxxxxxxx

04/12/2005 09:06 PM

Please respond to
"Eclipse Platform Core component developers list."

To
"Eclipse Platform Core component developers list." <platform-core-dev@xxxxxxxxxxx>
cc
Subject
RE: [platform-core-dev] Can I use Eclipse Platform Core        functionalityoutside Eclipse?





Jeff,
 
Thank you very much for the comment. I appreciate it a lot! I'll follow the track and try it out.
 
Right now, I have a specific question regarding this approach. I guess EclipseStarter will use a separate classloader to load the platform. If so, how can I get the classloader in my Java application? I think the main Java application can only access the Eclipse platform and runtime functions through that classloader. Is it the only way to do it?
 
Thanks,
Kai
 


From: platform-core-dev-bounces@xxxxxxxxxxx [mailto:platform-core-dev-bounces@xxxxxxxxxxx] On Behalf Of Jeff McAffer
Sent:
Tuesday, April 12, 2005 5:24 PM
To:
Eclipse Platform Core component developers list.
Subject:
Re: [platform-core-dev] Can I use Eclipse Platform Core functionalityoutside Eclipse?



Kai,


Sure, I know of several people who are doing this already.  Keep in mind that OSGi was originally designed for embedded applications to it is eminently suited to this task.  The runtime is not particularly special.  The entry points on EclipseStarter are there precisely so you can start Eclipse from another Java program so you are on the right track.


Note that you can also consider using the extension registry by itself.  The registry has very little dependency on OSGi.  If you look carefully through the code you will see only a half handful of references to OSGi API (primarliy in ConfigurationElement).  you could strip the extension registry code out of the runtime plugin and tweak to suit your needs.  We actually wanted to do this in 3.1 but ran out of time.  Perhaps you could contribute some ideas?


Someone mentioned issues with allowing other plugins to be installed as being a problem for the use of Eclipse on the server.  This would be a problem anywhere then I guess.  Eclipse (OSGi and the Runtime) to not enable people to just install plugins as they choose.  Some agent always has to install plugins.  There is one call in particular (BundleContext.installBundle) that does the work.  If no one calls that, nothing will be installed.  So, you can setup any system (server, desktop, ...) to be locked down simply by not making that function available.


Jeff



"Kai Shen" <kshen@xxxxxxxxxxx>
Sent by: platform-core-dev-bounces@xxxxxxxxxxx

04/12/2005 07:16 PM

Please respond to
"Eclipse Platform Core component developers list."


To
"Eclipse Platform Core component developers list." <platform-core-dev@xxxxxxxxxxx>
cc
Kai Shen <kshen@xxxxxxxxxxx>
Subject
[platform-core-dev] Can I use Eclipse Platform Core functionality        outside Eclipse?







Hi,

 

We're working on a server side project. In this project, we'd like to provide user an extension framework so that user can use Eclipse's extension mechanism in server side. Our goal is to allow user to develop their plug-ins in Eclipse environment and use those plug-ins directly in server side without any modification.

 

I understand Eclipse use org.eclipse.osgi and org.eclipse.core.runtime to manage the bundles, classloaders and extension registry, etc. So, ideally, we can use org.eclipse.osgi and org.eclipse.core.runtime in our java application.

 

However, I found the following in the Eclipse on-line help:

The Eclipse Platform makes heavy use of Java class loaders for loading plug-ins. Even the Eclipse Runtime itself and the OSGi framework need to be loaded by special class loaders. Client programs, such as a Java main program or a servlet, cannot directly reference any part of Eclipse directly. Instead, a client must use the EclipseStarter class in org.eclipse.core.runtime.adaptor to start the platform, invoking functionality defined in plug-ins, and shutting down the platform when done.
Clients that do not need to access any particular function, but just need to start the platform, can use Main.run() in startup.jar. However, clients that need to invoke specific function should use EclipseStarter. See the javadoc inside this class for details.

 

It looks like we can NOT use org.eclipse.osgi and org.eclipse.core.runtime directly. We need to start the platform by calling EclipseStarter. The EclipseStarter will use another classloader to load the Eclipse Platform.

 

So, I think our solution could be as follow:
1. In the java application, use EclipseStarter to start Eclipse Platform.

2. Configure the Eclipse Platform so that workbench and other UI related plug-ins won't be loaded. (Actually, only org.eclipse.osgi and org.eclipse.core.runtime are needed).

3. If the Java application needs to use the Eclipse core functionality (e.g. Platform.getBundle(symbolicName), platform.getExtensionRegistry(), etc.), we need to use the classloader's functions to find the class instance and then call the function in the class instance.

 

Is this solution feasible? Did anyone do it before? I think the extension framework is a very nice feature of Eclipse. If we can use it in server applications, it will make Eclipse core even greater! Since I'm new to Eclipse Platform Core, this idea might be unrealistic. But anyway, I just want to start the discussion, because I think the goal is great, it will make Eclipse Platform more popular and benefit other developers. Your thoughts and comments are highly welcome!

 

Thanks,

Kai

 

 
_______________________________________________
platform-core-dev mailing list
platform-core-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/platform-core-dev

_______________________________________________
platform-core-dev mailing list
platform-core-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/platform-core-dev


Back to the top