I have read some posts about planning to integrate a modular framework with ADempiere. Sorry I can't find them now so I can not link them. Though I have done some work on the issue.
My approach was integrating OSGI into ADempiere.
The features are:
- Start an embedded OSGI container both on client and server
- Allow installing, starting and stopping modules without restarting the server
- Offer classes to be "loaded" as a service by registering them as an osgi service.
The only changes made to the software are:
- replace class.forName(name) constructions throughout the code with ClassLoaderUtil.loadClass(name). It is imperative as the few lines of class loading n-plicates code all around the project. This util handles OSGI extension mechanisms _and_ class.forName mechanism. OSGI class loading and later extension mechanisms can then be integrated at a single point.
- Hook OSGI startup to server and client startup.
- Include apache felix Osgi framework jar into the project.
- Add a plugin autoloader funcionality to OSGI that scans a directory for new plugins, so installing a plugin does not require hacking with configuration files.
This way new improvements could be programmed as modules without the need to change a single line of the build.xml files. It would be much easier to maintain the whole project. Maybe currently integrated parts of the project could be moved to separate OSGI bundles.
In my testing environment OSGI integration already works except for web start. Is the community interested in this solution?
András Schmidt
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
If you could pull of this, I think you would triple the number of contributions into AD. We have previously debated this subject and it has always come down to "..we don't have a plugin architecture..."
Regards
Ngigi Waithaka
Adempiere A1
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I have tested your and it works great! hopefully everybody will support it and improve it and indeed adempiere. will become more modular and will grow more fast. thanks joergviola for your greate contribution.
dellph
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Andras,
I will put u as one of our contributing member for that in our site and project. U may send your work as patches if they are small enough in the trackers. If u need commit rights, please ask. Probably u can send it to contributions folder then for a start.
Have a nice day.
red1
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
U re most welcome! I already put your name into our dev list. As for country in our www.adempiere.org i check your biodata in SF and seems that u are in Hungary, so shuld i put u for that?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
i would like to congratulate you for the nice work and for the willingness to share it with Adempiere community.
I have reviewed your patch and if understand correctly it will not break existing Adempiere strucutre.
It just add another packaging/shipment option for Adempiere. So if patch is intergated it will allow Adempiere to be shipped as OSGi application. Is my understanding correct?
Kind regards,
Trifon
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
> So if patch is intergated it will allow Adempiere to be shipped as OSGi application.
Not exactly. ADempiere will not be an OSGi application but it will embed one such a way that extensions can be written as an OSGi plugin.
The benefit would be that at every point where classes are loaded ClassByNameUtil (all occurences of Class.forName() should be changed to this) the classes can be implemented in OSGi plugin.
On the long run some modules of ADempiere could be moved to separate OSGi bundles and at the end the whole project can be modularized and can become an OSGi application. In my experience I have found that service oriented modular design has benefit on code maintainability and quality too. To support the idea you should see the success of Eclipse which is built on OSGi now (and was built on an OSGi like framework for long before).
András Schmidt
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I stumbled over this thread while looking for a way to enable plugins in Adempiere.
Nice work, András!
I adopted the sources to the current trunk and repackaged it as a patches.jar (so that
one is not required to patch the sources themself).
However I am not convinced by the ClassLoading approach (overwrite classes by plugins),
but would like some kind of event listener mechanism. Therefore, I created an
OSGi-service acting as a registry for event listeners.
Lets take a plugin reacting to user-logins as an example:
For the registry approach, eclipse osgi framework ( equinox ) already have a very good extension registry bunlde that can be reuse.
The other things to look at is how to integrate the current Adempiere extension approach with OSGi, for e.g, the modelValidator, we can either implement a extension registry approach, dynamic lookup of services or enter the osgi service name as the model validator classname.
Regards,
Low
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
>However I am not convinced by the ClassLoading approach (overwrite classes by plugins),
>but would like some kind of event listener mechanism. Therefore, I created an
>OSGi-service acting as a registry for event listeners.
I agree that Plug-in(Listener) approach is better.
Can you please attach sources to contribution request?
Kind regards,
Trifon
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I hope you have rekindle the OSGi thread, it is a fav with the developers and silent supporters like me. You approach is superior, I like your service approach of event listeners. Are you using topics ?
-Ahmad, Rajan
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
As hengsin suggested, I took a look at Equinox and it seems superior to felix
since it provides extension points as plugin hooks.
Certainly plugin developers will be more or less tied to eclipse, then.
Unfortunately, I ran into classloading problems: How to expose Adempiere
internal classes to plugins under Equinox? - I'm working on that.
Nevertheless, there is a design decision to be done:
- Do we want to expose internal Adempiere Interfaces (eg. ModelValidator, PO and such)
to plugins? - This would reduce effort, but tie plugins to the core.
- Or do we want an "Adempiere facade", separating plugins from the core? -
Then changes to the core would not immediately affect plugins.
Me advise would be: Lets go the first way for some alpha stage and gain
experience.
Phew,
this was harder work than expected for an OSGi/Equinox dummy like me.
But eventually I got it working.
Thanks to hengsin for the links. Finally I favored an extension fragment over buddy loading.
The patch is here: https://sourceforge.net/tracker2/?func=detail&aid=2700937&group_id=176962&atid=879334
Since a patch is limited in size, you must add the following jars from an eclipse distribution
to the directory Adempiere-patch/lib after unpacking:
org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar
org.eclipse.core.jobs_3.4.0.v20080512.jar
org.eclipse.core.runtime.compatibility.auth_3.2.100.v20070502.jar
org.eclipse.core.runtime_3.4.0.v20080512.jar
org.eclipse.equinox.app_1.1.0.v20080421-2006.jar
org.eclipse.equinox.common_3.4.0.v20080421-2006.jar
org.eclipse.equinox.preferences_3.2.201.R34x_v20080709.jar
org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar
org.eclipse.osgi.services_3.1.200.v20071203.jar
org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar
org.eclipse.update.configurator_3.2.201.R34x_v20080819.jar
BEWARE: This is pre-alpha.
Do not expect to have it installed without any trouble.
It is only tested in the appserver setup with the ZK UI, not in the swing client
(though it shoud work there - I will test that, too).
This release should simply demonstrate the feasibility and the basic concept.
Feedback welcome as usual!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Phew,
this was harder work than expected for an OSGi/Equinox dummy like me.
But eventually I got it working.
Thanks to hengsin for the links. Finally I favored an extension fragment over buddy loading.
The patch is here: https://sourceforge.net/tracker2/?func=detail&aid=2700937&group_id=176962&atid=879334
Since a patch is limited in size, you must add the following jars from an eclipse distribution
to the directory Adempiere-patch/lib after unpacking:
org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar
org.eclipse.core.jobs_3.4.0.v20080512.jar
org.eclipse.core.runtime.compatibility.auth_3.2.100.v20070502.jar
org.eclipse.core.runtime_3.4.0.v20080512.jar
org.eclipse.equinox.app_1.1.0.v20080421-2006.jar
org.eclipse.equinox.common_3.4.0.v20080421-2006.jar
org.eclipse.equinox.preferences_3.2.201.R34x_v20080709.jar
org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar
org.eclipse.osgi.services_3.1.200.v20071203.jar
org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar
org.eclipse.update.configurator_3.2.201.R34x_v20080819.jar
BEWARE: This is pre-alpha.
Do not expect to have it installed without any trouble.
It is only tested in the appserver setup with the ZK UI, not in the swing client
(though it shoud work there - I will test that, too).
This release should simply demonstrate the feasibility and the basic concept.
Feedback welcome as usual!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Thanx for testing.
Could yould you please:
> telnet localhost 1234
> ss
What is the output? You see the bundle named AdempiereEquinox_1.0.0? - Note its <id> and:
> stop <id>
> start <id>
What do you see on the JBoss console?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
e-Evolution:~ e-Evolution$ telnet localhost 1234
Trying ::1...
Connected to localhost.
Escape character is '^]'.
osgi> ss
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.3.R34x_v20081215-1030
Fragments=10
1 ACTIVE org.eclipse.equinox.common_3.4.0.v20080421-2006
2 ACTIVE org.eclipse.update.configurator_3.2.201.R34x_v20080819
3 ACTIVE org.eclipse.core.runtime_3.4.0.v20080512
4 ACTIVE org.eclipse.core.jobs_3.4.1.R34x_v20081128
5 ACTIVE org.eclipse.equinox.registry_3.4.0.v20080516-0950
6 ACTIVE org.eclipse.equinox.preferences_3.2.201.R34x_v20080709
7 ACTIVE org.eclipse.core.contenttype_3.3.0.v20080604-1400
8 ACTIVE org.eclipse.equinox.app_1.1.0.v20080421-2006
9 <<LAZY>> AdempiereEquinox_1.0.0
10 RESOLVED AdempiereExtension_1.0.0
Master=0
11 <<LAZY>> TestPlugin_1.0.0
osgi> stop 9
osgi> start 9
14:11:09,967 ERROR [STDERR] -----------> MClient.sendEmailNow: Could NOT Send Email: Inactivity Alert: Request 10000002 to admin @ gardenworld.com: Invalid Data (GardenWorld) [11]
14:11:50,266 INFO [STDOUT] Adempiere Host Bundle started
14:11:50,266 INFO [STDOUT] Got Val Engine: ModelValidationEngine[Validators=#1, ModelChange=#1, DocValidate=#1]
14:11:50,269 INFO [STDOUT] ModelValidator on: AD_User
14:11:50,270 INFO [STDOUT] Hello World!!
So I saw that my issue is that the AdempiereEquinox is with status LAZY
What is the reason some top?
I want implement you OSGi to Libero in special to replication functionality and account engine.
Can I get your help for get this goal?
Thank a lot
Victor Perez
www.e-evolution.com
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
uuh - I just discovered that there is some persistent state in equinox.
After having deleted all files from lib/configuration (besides config.ini), I had exactly the same behaviour as you. This in fact is the correct behaviour since the eclipse configurator does install all bundles found but not start them.
There are some discussions on how to auto-start plugins, but there seem to be some problems related to this. Thus I solved it by starting the AdempiereEquinox host bundle explicitely, the other plugins are then started automatically (since their extensions are resolved, I guess).
Applying OSGi to libero in fact was one of the most advanced goals I had when starting the OSGi thing...
I would love to support you but please keep in mind:
1. I am not (yet) an OSGi/Equinox wizard, so please do not always expect immediate answers
2. The challenge is not OSGi, but cleanly seperating libero code from ADempiere core - but you are the one who can do this, I guess ;-)
We should start be enumerating what has to be done to a running Adempiere instance to get libero running (new Windows, tabs, fields, tables, columns, processes, callouts - and what else?). And maybe we should start a new thread for this.
Regards, joerg
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I'm glad that you have make good progress, very good work indeed.
Another interesting component provided by Equinox is the p2 installer ( http://wiki.eclipse.org/Equinox_p2_Installer ), probably can be a way to build a new online installer & updater for Adempiere.
Regards,
Low
P.S Do you mind to explain what's the advantage of using framework extension over the buddy class loading approach ?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi!
I have read some posts about planning to integrate a modular framework with ADempiere. Sorry I can't find them now so I can not link them. Though I have done some work on the issue.
My approach was integrating OSGI into ADempiere.
The features are:
- Start an embedded OSGI container both on client and server
- Allow installing, starting and stopping modules without restarting the server
- Offer classes to be "loaded" as a service by registering them as an osgi service.
The only changes made to the software are:
- replace class.forName(name) constructions throughout the code with ClassLoaderUtil.loadClass(name). It is imperative as the few lines of class loading n-plicates code all around the project. This util handles OSGI extension mechanisms _and_ class.forName mechanism. OSGI class loading and later extension mechanisms can then be integrated at a single point.
- Hook OSGI startup to server and client startup.
- Include apache felix Osgi framework jar into the project.
- Add a plugin autoloader funcionality to OSGI that scans a directory for new plugins, so installing a plugin does not require hacking with configuration files.
This way new improvements could be programmed as modules without the need to change a single line of the build.xml files. It would be much easier to maintain the whole project. Maybe currently integrated parts of the project could be moved to separate OSGI bundles.
In my testing environment OSGI integration already works except for web start. Is the community interested in this solution?
András Schmidt
András,
Wow this would be great :) maybe could easily create vertical solutions just making sets of plugins. :) how can we test this?
dellph
Andras,
If you could pull of this, I think you would triple the number of contributions into AD. We have previously debated this subject and it has always come down to "..we don't have a plugin architecture..."
Regards
Ngigi Waithaka
Adempiere A1
joergviola,
I have tested your and it works great! hopefully everybody will support it and improve it and indeed adempiere. will become more modular and will grow more fast. thanks joergviola for your greate contribution.
dellph
Hi,
Yes, this have been discuss before and OSGi is one of the prefer module framework. I believe this is a great
enhancement if you can pull this off.
Regards,
Low
Hi!
I am happy to hear that you are interested in the feature.
I have created a wiki entry on adempiere web page, a blog entry on my companies page and sent the patch on sourceforge. The links are:
http://www.adempiere.com/wiki/index.php/ADempiere/OSGi_Integration
http://i-erp.i-logic.hu/?q=content/osgi-embedder-adempiere-and-other-projects
https://sourceforge.net/tracker/index.php?func=detail&aid=2032859&group_id=176962&atid=879334
You can try it by patching your ADempiere. If you like the implementation someone with commit rights should commit it to trunk.
I aimed the wiki and the blog entry to be enough documentation. If you have questions don't hesitate to ask me!
regards,
András Schmidt
Andras,
I will put u as one of our contributing member for that in our site and project. U may send your work as patches if they are small enough in the trackers. If u need commit rights, please ask. Probably u can send it to contributions folder then for a start.
Have a nice day.
red1
> I will put u as one of our contributing member for that in our site and project.
Thank you, that's real pleasure!
András Schmidt
U re most welcome! I already put your name into our dev list. As for country in our www.adempiere.org i check your biodata in SF and seems that u are in Hungary, so shuld i put u for that?
Hello András Schmidt,
i would like to congratulate you for the nice work and for the willingness to share it with Adempiere community.
I have reviewed your patch and if understand correctly it will not break existing Adempiere strucutre.
It just add another packaging/shipment option for Adempiere. So if patch is intergated it will allow Adempiere to be shipped as OSGi application. Is my understanding correct?
Kind regards,
Trifon
Hello Trifon,
> So if patch is intergated it will allow Adempiere to be shipped as OSGi application.
Not exactly. ADempiere will not be an OSGi application but it will embed one such a way that extensions can be written as an OSGi plugin.
The benefit would be that at every point where classes are loaded ClassByNameUtil (all occurences of Class.forName() should be changed to this) the classes can be implemented in OSGi plugin.
On the long run some modules of ADempiere could be moved to separate OSGi bundles and at the end the whole project can be modularized and can become an OSGi application. In my experience I have found that service oriented modular design has benefit on code maintainability and quality too. To support the idea you should see the success of Eclipse which is built on OSGi now (and was built on an OSGi like framework for long before).
András Schmidt
András,
Great work.
This could be the start of breakthrough for ADempiere.
Ramiro
Hi,
I stumbled over this thread while looking for a way to enable plugins in Adempiere.
Nice work, András!
I adopted the sources to the current trunk and repackaged it as a patches.jar (so that
one is not required to patch the sources themself).
However I am not convinced by the ClassLoading approach (overwrite classes by plugins),
but would like some kind of event listener mechanism. Therefore, I created an
OSGi-service acting as a registry for event listeners.
Lets take a plugin reacting to user-logins as an example:
It simply has a method like that:
public void start(BundleContext context) throws Exception {
ServiceReference reference = context.getServiceReference(IAdempiereRegistry.class.getName());
registry = (IAdempiereRegistry) context.getService(reference);
listener = registry.addLoginListener(new LoginListener());
}
where the LoginListener qould consist for example of:
public void login(LoginEvent event) {
System.out.println("Login performed: "+event.getUsername());
}
It is also quite simple to hook the entry points in Adempiere, in this example in
org.compiere.util.Login.validateLogin:
AdempiereOsgiIntegration.getRegistry().fireLogin(new LoginEvent(AD_User_ID));
That way, the Registry-Service would act as a facade seperating plugins from Adempiere
core, making them more stable.
If you are interested, I certainly would provide patches.jar and the example plugin
or the full sources.
Cheers - Joerg
Hi,
Not sure you have read this before, this is pretty good article on the approach on building extension and services using osgi - http://www.eclipsezone.com/articles/extensions-vs-services/ , a bit old now but still pretty relevant.
For the registry approach, eclipse osgi framework ( equinox ) already have a very good extension registry bunlde that can be reuse.
The other things to look at is how to integrate the current Adempiere extension approach with OSGi, for e.g, the modelValidator, we can either implement a extension registry approach, dynamic lookup of services or enter the osgi service name as the model validator classname.
Regards,
Low
hi Joerg,
>However I am not convinced by the ClassLoading approach (overwrite classes by plugins),
>but would like some kind of event listener mechanism. Therefore, I created an
>OSGi-service acting as a registry for event listeners.
I agree that Plug-in(Listener) approach is better.
Can you please attach sources to contribution request?
Kind regards,
Trifon
Joerg,
I hope you have rekindle the OSGi thread, it is a fav with the developers and silent supporters like me. You approach is superior, I like your service approach of event listeners. Are you using topics ?
-Ahmad, Rajan
Thanks for your feedback.
As hengsin suggested, I took a look at Equinox and it seems superior to felix
since it provides extension points as plugin hooks.
Certainly plugin developers will be more or less tied to eclipse, then.
Unfortunately, I ran into classloading problems: How to expose Adempiere
internal classes to plugins under Equinox? - I'm working on that.
Nevertheless, there is a design decision to be done:
- Do we want to expose internal Adempiere Interfaces (eg. ModelValidator, PO and such)
to plugins? - This would reduce effort, but tie plugins to the core.
- Or do we want an "Adempiere facade", separating plugins from the core? -
Then changes to the core would not immediately affect plugins.
Me advise would be: Lets go the first way for some alpha stage and gain
experience.
Last point: Could you please review the section "Plugins?" here:
http://www.adempiere.com/wiki/index.php/ADempiere/OSGi_Integration
and comment on what plugins you expect to be built and what they must be able to do?
Hi,
For the classloading issue, the following might help:
http://www.eclipsezone.com/articles/eclipse-vms/
http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/misc/buddy_loading.html
http://wiki.eclipse.org/index.php/Context_Class_Loader_Enhancements
For plugin, the usual significant considerations are:
1) Configuration & life cycle
* Installation & uninstallation
* Activation & deactivation
* Depedency & conflict
2) UI extension
* Menu & Toolbar
* Field editor
* Callout
* Form
* etc
3) Model extension
* Process
* Workflow
* PO event ( current ModelValidator event )
* Business rules
* etc
For adempiere, we would also have to give special attention to how should this integrate with AD ( for e.g, metadata storage)
Regards,
Low
Phew,
this was harder work than expected for an OSGi/Equinox dummy like me.
But eventually I got it working.
Thanks to hengsin for the links. Finally I favored an extension fragment over buddy loading.
The patch is here:
https://sourceforge.net/tracker2/?func=detail&aid=2700937&group_id=176962&atid=879334
Since a patch is limited in size, you must add the following jars from an eclipse distribution
to the directory Adempiere-patch/lib after unpacking:
org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar
org.eclipse.core.jobs_3.4.0.v20080512.jar
org.eclipse.core.runtime.compatibility.auth_3.2.100.v20070502.jar
org.eclipse.core.runtime_3.4.0.v20080512.jar
org.eclipse.equinox.app_1.1.0.v20080421-2006.jar
org.eclipse.equinox.common_3.4.0.v20080421-2006.jar
org.eclipse.equinox.preferences_3.2.201.R34x_v20080709.jar
org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar
org.eclipse.osgi.services_3.1.200.v20071203.jar
org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar
org.eclipse.update.configurator_3.2.201.R34x_v20080819.jar
A little documentation can be found here:
http://www.adempiere.com/wiki/index.php/Equinox_Integration
BEWARE: This is pre-alpha.
Do not expect to have it installed without any trouble.
It is only tested in the appserver setup with the ZK UI, not in the swing client
(though it shoud work there - I will test that, too).
This release should simply demonstrate the feasibility and the basic concept.
Feedback welcome as usual!
Phew,
this was harder work than expected for an OSGi/Equinox dummy like me.
But eventually I got it working.
Thanks to hengsin for the links. Finally I favored an extension fragment over buddy loading.
The patch is here:
https://sourceforge.net/tracker2/?func=detail&aid=2700937&group_id=176962&atid=879334
Since a patch is limited in size, you must add the following jars from an eclipse distribution
to the directory Adempiere-patch/lib after unpacking:
org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar
org.eclipse.core.jobs_3.4.0.v20080512.jar
org.eclipse.core.runtime.compatibility.auth_3.2.100.v20070502.jar
org.eclipse.core.runtime_3.4.0.v20080512.jar
org.eclipse.equinox.app_1.1.0.v20080421-2006.jar
org.eclipse.equinox.common_3.4.0.v20080421-2006.jar
org.eclipse.equinox.preferences_3.2.201.R34x_v20080709.jar
org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar
org.eclipse.osgi.services_3.1.200.v20071203.jar
org.eclipse.osgi_3.4.2.R34x_v20080826-1230.jar
org.eclipse.update.configurator_3.2.201.R34x_v20080819.jar
A little documentation can be found here:
http://www.adempiere.com/wiki/index.php/Equinox_Integration
BEWARE: This is pre-alpha.
Do not expect to have it installed without any trouble.
It is only tested in the appserver setup with the ZK UI, not in the swing client
(though it shoud work there - I will test that, too).
This release should simply demonstrate the feasibility and the basic concept.
Feedback welcome as usual!
Hi Joerg
Great work with the OSGi, I tried to followed you instruction, but I cant not get that work
this my Startup jboss:
20:53:29,311 INFO [STDOUT] CLogFile[/Users/e-Evolution/Documents/workspace/adempiereTrunk/adempiere/Adempiere/log/2009-03-21_7.log,Level=ALL]
20:53:29,315 ERROR [STDERR] *** 2009-03-21 20:53:29.315 Adempiere Log (ConsoleHandler) ***
20:53:29.314 Adempiere.startup: Adempiere(r) Release 3.5.3a_2008-12-21 -Smart Suite ERP,CRM and SCM- (c) 1999-2009 Adempiere (r); Implementation: ADempiere - Supported by ADempiere community
20:53:29,315 INFO [STDOUT] *** 2009-03-21 20:53:29.315 Adempiere Log (CLogConsole) ***
20:53:29.314 Adempiere.startup: Adempiere(r) Release 3.5.3a_2008-12-21 -Smart Suite ERP,CRM and SCM- (c) 1999-2009 Adempiere (r); Implementation: ADempiere - Supported by ADempiere community
20:53:29,316 ERROR [STDERR] 20:53:29.316 Ini.loadProperties: /Users/e-Evolution/Documents/workspace/adempiereTrunk/adempiere/Adempiere/Adempiere.properties #33
20:53:29,316 INFO [STDOUT] 20:53:29.316 Ini.loadProperties: /Users/e-Evolution/Documents/workspace/adempiereTrunk/adempiere/Adempiere/Adempiere.properties #33
20:53:29,567 ERROR [STDERR] [INFO] MLog clients using com.mchange.v2.log.FallbackMLog logging.
20:53:29,794 ERROR [STDERR] [INFO] Initializing c3p0-0.9.1.2 [built 21-May-2007 15:04:56; debug? true; trace: 10]
20:53:30,090 ERROR [STDERR] [INFO] Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 2, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> AdempiereDS, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> org.postgresql.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge16l80c8h3b3tgrh40|4aaeba54, idleConnectionTestPeriod -> 1200, initialPoolSize -> 10, jdbcUrl -> jdbc:postgresql://localhost:5432/adempiere?encoding=UNICODE, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 1200, maxIdleTimeExcessConnections -> 1200, maxPoolSize -> 150, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 5, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> SELECT Version FROM AD_System, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]
20:53:30,857 INFO [STDOUT] Starting Equinox...
20:53:30,967 ERROR [STDERR] -----------> EMail.setFrom: you @ company.org: javax.mail.internet.AddressException: Illegal whitespace in address in string ``you @ company.org''
20:53:31,003 ERROR [STDERR] -----------> EMail.setFrom: you @ company.org: javax.mail.internet.AddressException: Illegal whitespace in address in string ``you @ company.org''
20:53:31,005 ERROR [STDERR] -----------> EMail.addTo: you @ company.org: javax.mail.internet.AddressException: Illegal whitespace in address in string ``you @ company.org''
20:53:31,005 ERROR [STDERR] -----------> EMail.addTo: you @ company.org: javax.mail.internet.AddressException: Illegal whitespace in address in string ``you @ company.org''
20:53:31,006 ERROR [STDERR] -----------> EMail.isValid: From is invalid=null
20:53:31,006 ERROR [STDERR] -----------> EMail.isValid: From is invalid=null
20:53:31,007 ERROR [STDERR] -----------> EMail.isValid: From is invalid=null
20:53:31,007 ERROR [STDERR] -----------> EMail.isValid: From is invalid=null
20:53:31,007 ERROR [STDERR] -----------> MClient.sendEMail: Could NOT Send Email: Server started: ? to you @ company.org: Invalid Data (System)
20:53:31,008 ERROR [STDERR] -----------> MClient.sendEMail: Could NOT Send Email: Server started: ? to you @ company.org: Invalid Data (System)
20:53:31,101 INFO [TomcatDeployer] deploy, ctxPath=/admin, warUrl=.../tmp/deploy/tmp21039adempiereRoot-exp.war/
20:53:31,266 ERROR [STDERR] ===========> Env.getContextAsDate: No value for: #Date
20:53:31,364 INFO [STDOUT] Listening on port 1234 ...
20:53:32,233 ERROR [STDERR] ===========> Env.getContextAsDate: No value for: #Date
20:53:32,655 INFO [TomcatDeployer] deploy, ctxPath=/, warUrl=.../tmp/deploy/tmp21042adempiereWebCM-exp.war/
So I get
20:53:30,857 INFO [STDOUT] Starting Equinox
20:53:31,364 INFO [STDOUT] Listening on port 1234 ...
But I can not see the plugins , so my files configuration
adempiere/Adempiere/jboss/server/adempiere/deploy/adempiere.ear/lib
drwxr-xr-x 16 e-Evolution staff 544 Mar 21 20:53 .
drwxr-xr-x 16 e-Evolution staff 544 Mar 21 20:27 ..
-rw-r--r--@ 1 e-Evolution staff 6148 Mar 21 20:28 .DS_Store
drwxr-xr-x 7 e-Evolution staff 238 Mar 21 20:53 configuration
-rw-r--r-- 1 e-Evolution staff 86977 Mar 21 19:03 org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar
-rw-r--r-- 1 e-Evolution staff 82559 Mar 21 19:03 org.eclipse.core.jobs_3.4.1.R34x_v20081128.jar
-rw-r--r-- 1 e-Evolution staff 21219 Mar 21 19:03 org.eclipse.core.runtime.compatibility.auth_3.2.100.v20070502.jar
-rw-r--r-- 1 e-Evolution staff 69026 Mar 21 19:03 org.eclipse.core.runtime_3.4.0.v20080512.jar
-rw-r--r-- 1 e-Evolution staff 79869 Mar 21 19:03 org.eclipse.equinox.app_1.1.0.v20080421-2006.jar
-rw-r--r-- 1 e-Evolution staff 94652 Mar 21 19:03 org.eclipse.equinox.common_3.4.0.v20080421-2006.jar
-rw-r--r-- 1 e-Evolution staff 104285 Mar 21 19:03 org.eclipse.equinox.preferences_3.2.201.R34x_v20080709.jar
-rw-r--r-- 1 e-Evolution staff 172943 Mar 21 19:03 org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar
-rw-r--r-- 1 e-Evolution staff 63666 Mar 21 19:03 org.eclipse.osgi.services_3.1.200.v20071203.jar
-rw-r--r-- 1 e-Evolution staff 997240 Mar 21 19:03 org.eclipse.osgi_3.4.3.R34x_v20081215-1030.jar
-rw-r--r-- 1 e-Evolution staff 98001 Mar 21 19:03 org.eclipse.update.configurator_3.2.201.R34x_v20080819.jar
drwxr-xr-x 6 e-Evolution staff 204 Mar 21 20:49 plugins
adempiere/Adempiere/jboss/server/adempiere/deploy/adempiere.ear/lib/configuration
drwxr-xr-x 7 e-Evolution staff 238 Mar 21 20:53 .
drwxr-xr-x 16 e-Evolution staff 544 Mar 21 20:53 ..
-rw-r--r-- 1 e-Evolution staff 285 Mar 21 19:03 config.ini
drwxr-xr-x 3 e-Evolution staff 102 Mar 21 20:10 org.eclipse.core.runtime
drwxr-xr-x 3 e-Evolution staff 102 Mar 21 20:10 org.eclipse.equinox.app
drwxr-xr-x 6 e-Evolution staff 204 Mar 21 20:10 org.eclipse.osgi
drwxr-xr-x 5 e-Evolution staff 170 Mar 21 20:53 org.eclipse.update
adempiere/Adempiere/jboss/server/adempiere/deploy/adempiere.ear/lib/plugins
drwxr-xr-x 6 e-Evolution staff 204 Mar 21 20:49 .
drwxr-xr-x 16 e-Evolution staff 544 Mar 21 20:53 ..
-rw-r--r--@ 1 e-Evolution staff 6148 Mar 21 20:14 .DS_Store
-rw-r--r-- 1 e-Evolution staff 3268 Mar 21 20:30 AdempiereEquinox_1.0.0.jar
-rw-r--r-- 1 e-Evolution staff 849 Mar 21 20:30 AdempiereExtension_1.0.0.jar
-rw-r--r-- 1 e-Evolution staff 2354 Mar 21 20:49 TestPlugin_1.0.0.jar
Some idea the what is issue?
kind regards
Victor Perez
www.e-evolution.com
Thanx for testing.
Could yould you please:
> telnet localhost 1234
> ss
What is the output? You see the bundle named AdempiereEquinox_1.0.0? - Note its <id> and:
> stop <id>
> start <id>
What do you see on the JBoss console?
Hi Joerg!
I execute the telnet and this are the result
e-Evolution:~ e-Evolution$ telnet localhost 1234
Trying ::1...
Connected to localhost.
Escape character is '^]'.
osgi> ss
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.3.R34x_v20081215-1030
Fragments=10
1 ACTIVE org.eclipse.equinox.common_3.4.0.v20080421-2006
2 ACTIVE org.eclipse.update.configurator_3.2.201.R34x_v20080819
3 ACTIVE org.eclipse.core.runtime_3.4.0.v20080512
4 ACTIVE org.eclipse.core.jobs_3.4.1.R34x_v20081128
5 ACTIVE org.eclipse.equinox.registry_3.4.0.v20080516-0950
6 ACTIVE org.eclipse.equinox.preferences_3.2.201.R34x_v20080709
7 ACTIVE org.eclipse.core.contenttype_3.3.0.v20080604-1400
8 ACTIVE org.eclipse.equinox.app_1.1.0.v20080421-2006
9 <<LAZY>> AdempiereEquinox_1.0.0
10 RESOLVED AdempiereExtension_1.0.0
Master=0
11 <<LAZY>> TestPlugin_1.0.0
osgi> stop 9
osgi> start 9
14:11:09,967 ERROR [STDERR] -----------> MClient.sendEmailNow: Could NOT Send Email: Inactivity Alert: Request 10000002 to admin @ gardenworld.com: Invalid Data (GardenWorld) [11]
14:11:50,266 INFO [STDOUT] Adempiere Host Bundle started
14:11:50,266 INFO [STDOUT] Got Val Engine: ModelValidationEngine[Validators=#1, ModelChange=#1, DocValidate=#1]
14:11:50,269 INFO [STDOUT] ModelValidator on: AD_User
14:11:50,270 INFO [STDOUT] Hello World!!
So I saw that my issue is that the AdempiereEquinox is with status LAZY
What is the reason some top?
I want implement you OSGi to Libero in special to replication functionality and account engine.
Can I get your help for get this goal?
Thank a lot
Victor Perez
www.e-evolution.com
Hi Victor,
uuh - I just discovered that there is some persistent state in equinox.
After having deleted all files from lib/configuration (besides config.ini), I had exactly the same behaviour as you. This in fact is the correct behaviour since the eclipse configurator does install all bundles found but not start them.
There are some discussions on how to auto-start plugins, but there seem to be some problems related to this. Thus I solved it by starting the AdempiereEquinox host bundle explicitely, the other plugins are then started automatically (since their extensions are resolved, I guess).
I have uploaded a fixed version (only of the patch project) to the tracker:
https://sourceforge.net/tracker2/?func=detail&aid=2700937&group_id=176962&atid=879334
Applying OSGi to libero in fact was one of the most advanced goals I had when starting the OSGi thing...
I would love to support you but please keep in mind:
1. I am not (yet) an OSGi/Equinox wizard, so please do not always expect immediate answers
2. The challenge is not OSGi, but cleanly seperating libero code from ADempiere core - but you are the one who can do this, I guess ;-)
We should start be enumerating what has to be done to a running Adempiere instance to get libero running (new Windows, tabs, fields, tables, columns, processes, callouts - and what else?). And maybe we should start a new thread for this.
Regards, joerg
Hi,
I'm glad that you have make good progress, very good work indeed.
Another interesting component provided by Equinox is the p2 installer ( http://wiki.eclipse.org/Equinox_p2_Installer ), probably can be a way to build a new online installer & updater for Adempiere.
Regards,
Low
P.S Do you mind to explain what's the advantage of using framework extension over the buddy class loading approach ?