Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Rich Client Platform (RCP) » IConfigurationElement not found running exe
IConfigurationElement not found running exe [message #467004] Fri, 27 April 2007 08:08 Go to next message
Eclipse UserFriend
Originally posted by: bsu.bergauer.ch

Hi,

Maybe someone can shed some light for me regarding following problem:

I have defined an extension point in a plugin of my RCP application. When I
run the product inside Eclipse it all works well, however after exporting
the application the extension point contributions are not "seen" by the
application. The call to the extensionRegistry is during the login phase of
the application before the workbench is initialized. I must be missing
something in my deployment export...

Log running from Eclipse:
extensionRegistry.getExtensionPoints():
[Lorg.eclipse.core.internal.registry.ExtensionPointHandle;@7 05d28
Number of configurationElements: 1
{[Lorg.eclipse.core.runtime.IConfigurationElement;@f429d7}

Log running from Rcp-exe:
extensionRegistry.getExtensionPoints():
[Lorg.eclipse.core.internal.registry.ExtensionPointHandle;@f 1fad1
Number of configurationElements: 0
{[Lorg.eclipse.core.internal.registry.ConfigurationElementHa ndle;@89ec59}

Thanks,
Bj
Re: IConfigurationElement not found running exe [message #467055 is a reply to message #467004] Fri, 27 April 2007 16:55 Go to previous messageGo to next message
Alex Blewitt is currently offline Alex BlewittFriend
Messages: 946
Registered: July 2009
Senior Member
Looks like the plugin isn't installed at that time. Is it mentioned in your config.ini? Do you have the update.configurator in the osgi.bundles? Is that being done after your bundle is being started?

Alex.
Re: IConfigurationElement not found running exe [message #467260 is a reply to message #467055] Wed, 02 May 2007 08:32 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: bsu.bergauer.ch

Hi Alex,

Sorry for the late anwer, there has been some holidays in between... :o)

It is probably as you say, that the plugin isn't installed at that time,
however it is not clear to me how I do ensure that it is.

I have a base plugin (ch.bergauer.rcp.amset) in which the rcp product is
defined. When the rcp application is started, but before the workbench is
initiated, a login dialog is invoked from another plugin
(ch.bergauer.rcp.intro). This intro plugin defines an extension point
datastoreInitializer which is used by a third plugin
(ch.bergauer.rcp.datastore.teneo). The login dialog is displayed but the
datastore is not initiated because the datastoreInitializer is not found.
In the base plugin I declared both the intro and the datastore plugins as
required plugins, in the intro plugin I declared the datastrore plugin as
required
and in the datastore plugin I declared the intro plugin as required.
Starting the product from the Eclipse IDE works, but the exported exe
doesn't.

The config.ini looks like follows:
[config.ini start]
#Product Runtime Configuration File

osgi.splashPath=platform:/base/plugins/ch.bergauer.rcp.amset
eclipse.product=ch.bergauer.rcp.amset.product

osgi.bundles=org.eclipse.equinox.common@2:start,org.eclipse.update.configura
tor@3:start,org.eclipse.core.runtime@start
osgi.bundles.defaultStartLevel=4

[config.ini end]

Greetings
Bj
Re: IConfigurationElement not found running exe [message #467292 is a reply to message #467260] Wed, 02 May 2007 13:29 Go to previous messageGo to next message
Alex Blewitt is currently offline Alex BlewittFriend
Messages: 946
Registered: July 2009
Senior Member
OK, if you're launching this as a product, this would be OK.

Does your bundle have Eclipse-AutoStart: true (or Eclipse-LazyStart: true) in the manifest? That will cause the bundle to be started as soon as classes are loaded from it.

You can also try running it by adding -console 1234 -consoleLog -noExit to the command line, then use 'telnet localhost 1234' to get access to the console. You can then do 'ss' to show the status of each bundle, and look out for ones that are INSTALLED but not RESOLVED -- those ones have missing dependencies (type 'diag 123' to find out what's up with bundle 123).

Alex.
Re: IConfigurationElement not found running exe [message #467305 is a reply to message #467292] Wed, 02 May 2007 16:06 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: bsu.bergauer.ch

Hi Alex,

Yes, all bundles have 'Eclipse-LazyStart: true' in the manifest. I also
tried setting 'Eclipse-LazyStart: false' for the datastore plugin with no
success (see attached file osgi_ss_lazy_false.txt).

In the meantime I merged the base plugin (ch.bergauer.rcp.amset) and the
intro plugin (ch.bergauer.rcp.intro) to one (ch.bergauer.rcp.amset) in order
to simplify the plugin structur (at least until I have handled this issue).
I suspect that merging the datastore plugin into the base plugin would
resolve the problem, but I'm not keen of having all features in one single
plugin.

The situation is the same: the base plugin defines an extension point
'datastoreInitializer' and the datastore plugin
(ch.bergauer.rcp.datastore.teneo) implements it. At the time when the base
plugin tries to access the registered extensions of type
'datastoreInitializer' the datastore plugin is 'STARTING' in the osgi
console. I assume that ACTIVE would be the right state, or...?

Most likely is the problem that I do not access any classes from the
datastore plugin before trying to read the extention registry. The base
plugin should be happily unaware of the datastore plugin and just get the
extensions registered. Unfortunately there are none at that point... It's a
kind of the hen and the egg problem as far as I can see.

Greetings
Bj
Re: IConfigurationElement not found running exe [message #467308 is a reply to message #467305] Wed, 02 May 2007 17:23 Go to previous messageGo to next message
Alex Blewitt is currently offline Alex BlewittFriend
Messages: 946
Registered: July 2009
Senior Member
OK, so if I understand, in a Bundle/Plugin start() method, you're looking for this extension, and it's not there?

Eclipse starts these bundles asynchronously. So you're not guaranteed that bundle 1 will start before bundle 2 (or vice versa). Is it possible that it's a race condition? Mind you, as long as it's been RESOLVED (which it has to be, to get into the RESOLVED state) then it should be possible to see the configuration elements.

In the console, wait until everything starts (it's certainly odd to see STARTING listed everywhere; you've not got breakpoints all over the place in debug mode, have you?) and wait until they're all ACTIVE. Once they are, stop and start your datastoreInitializer bundle; when it comes up, your extension point should be started. At least that would give you a clue if there's a problem.

The goal is to set up a listener which listens out for newly installed items so that you can take advantage of them, but for now, just doing that will determine if you have a race condition.

But the STARTING stuff looks weird. Why aren't they all ACTIVE?

Alex.
Re: IConfigurationElement not found running exe [message #467323 is a reply to message #467308] Thu, 03 May 2007 06:35 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: bsu.bergauer.ch

Hi Alex,

I'm really thankful for the time you spend assisting me resolving this issue
and I hope this thread will be helpful for others facing a similar problem!

No, I'm not halting it up with breakpoints, actually I only have this
problem when the application runs as deployed exe. Got the point checking
for when the extension is getting loaded, will get right to this morning. In
the mean time I supply some additional data below:

I have taken use of an example out of an RCP book in order to have the user
login before the workbench starts up. Before the user can login, though, I
need to start up the embedded database in order to know what users are
registered and compare passwords and so. This occurs before the workbench is
initiated, in the run() method of the Application class (see code below). In
the LoginDialog, invoked from authenticate(display) I scan the extension
registry to find the datastore initializer. This worked well running the
application from inside the Eclipse IDE so I actually never reflected that
it might be an approach causing trouble running as rcp exe.

So I start up the application and a login dialog pops up just afer the
splash. The user can select project location (workspace) and the database
located there is getting loaded. Next the user enters username and password
and the authenticate(display) methods returns to load the workbench. So the
point in time where I query the extension registry is when the login dialog
just popped up.

If I set Eclipse-LazyStart: false in the Manifest.MF of the datastore plugin
(as well as in the libraries the plugin uses) the plugin is in the RESOLVED
state. I then queried the extension registry in the OSGI console:

osgi> ns -v ch.bergauer.rcp.amset
Extension point(s):
-------------------
ch.bergauer.rcp.amset.databaseInitializer [from ch.bergauer.rcp.amset] <--
This is the one I want before the workbench starts
ch.bergauer.rcp.amset.initialPerspective [from ch.bergauer.rcp.amset]

Extension(s):
-------------------
Id: ch.bergauer.rcp.amset.application PointId:
org.eclipse.core.runtime.applications [from ch.bergauer.rcp.amset]
Id: null PointId: org.eclipse.help.toc [from ch.bergauer.rcp.amset]
Id: ch.bergauer.rcp.amset.product PointId: org.eclipse.core.runtime.products
[from ch.bergauer.rcp.amset]
Id: null PointId: org.eclipse.ui.intro [from ch.bergauer.rcp.amset]
Id: null PointId: org.eclipse.ui.intro.config [from ch.bergauer.rcp.amset]

osgi> ns -v ch.bergauer.rcp.datastore.teneo
Extension point(s):
-------------------

Extension(s):
-------------------
<-- It is obviously not yet loaded here
osgi>


Application.java
====================
public Object run(Object args) throws Exception {
Display display = PlatformUI.createDisplay();
try {
if (authenticate(display)) {
int returnCode = PlatformUI.createAndRunWorkbench(display,
new ApplicationWorkbenchAdvisor());
if (returnCode == PlatformUI.RETURN_RESTART) {
return IPlatformRunnable.EXIT_RESTART;
}
}
return IPlatformRunnable.EXIT_OK;
} finally {
display.dispose();
}
}

private boolean authenticate(Display display) {
LoginDialog loginDialog = new LoginDialog(display);
loginDialog.open();
return loginDialog.isAuthenticated();
}
====================

Greetings
Bj
Re: IConfigurationElement not found running exe [message #467369 is a reply to message #467323] Thu, 03 May 2007 10:43 Go to previous messageGo to next message
Alex Blewitt is currently offline Alex BlewittFriend
Messages: 946
Registered: July 2009
Senior Member
Can't you just specify your bundle in the config.ini's osgi.bundles property?

...
# Add yours here but on one line
osgi.bundles=org.eclipse.equinox.common@2:start,
 ch.bergauer.rcp.amset@2:start,
 org.eclipse.update.configurator@3:start
 org.eclipse.core.runtime@start


That would make it start, but you'd need to make sure that the dependencies for rcp.amset are also installed/started.

You want it to be Eclipse-LazyStart: true, though; otherwise, it won't get started when you access the class.

By the way, I don't see any extensions for your extension point. Are there any?

Alex.
Re: IConfigurationElement not found running exe [message #467385 is a reply to message #467369] Thu, 03 May 2007 12:44 Go to previous message
Eclipse UserFriend
Originally posted by: bsu.bergauer.ch

Hi Alex,

> Can't you just specify your bundle in the config.ini's osgi.bundles
property?
I tried that before I started this thread, however as the database
initializer makes use of org.eclipse.emf.ecore.EPackages it seemed to me
that the list of bundles in the config.ini file got too long having to
include all dependencies.

> By the way, I don't see any extensions for your extension point. Are there
any?
Well, that is the root of this problem. I do have defined the extensions and
they show up (also in the osgi console) when I run the application through
the Exclipse IDE. If I run the application as deployed exe they are not
registered for that plugin anymore.

In order to go on with my project, I have now merged the datastore plugin
into the base plugin. I do not have the desired plugin design anymore, but
the application is running as deployed exe (outside of Eclipse IDE).

I thank you very much, Alex, for your patiency and good suggestions. Thanks
to your input I learned a lot more about OSGI and the bundle concept! :o)

Cheers!
Bj
Previous Topic:Install Handler
Next Topic:Bundle-NativeCode and Macos
Goto Forum:
  


Current Time: Fri Apr 26 23:08:42 GMT 2024

Powered by FUDForum. Page generated in 0.03952 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top