Difference between revisions of "ADempiere/Equinox Integration 2"

From ADempiere
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.
(Further Reading)
(crediting to Joerg Viola)
Line 1: Line 1:
Approach 2: Embedding ADempiere in Equinox
+
Approach 2: Embedding ADempiere in Equinox done by [[User:Viola|Joerg Viola]].
  
 
[[Image:Pluginlist.png|440px|thumb|ADempiere is getting pluggable like the Eclipse framework!]]
 
[[Image:Pluginlist.png|440px|thumb|ADempiere is getting pluggable like the Eclipse framework!]]

Revision as of 21:01, 19 March 2010

Approach 2: Embedding ADempiere in Equinox done by Joerg Viola.

ADempiere is getting pluggable like the Eclipse framework!

Status: Alpha Code - Review required

  • Swing client can be fired up inside equinox.
  • very few tests applied
  • Webstart has been fired up with equinox.
  • zkwebui runs inside OSGi through equinox servlet bridge
  • Development environment setup automated as far as reasonable
  • Currently, deployment is in no way integrated in the standard adempiere setup!

Setup

Eclipse setup

  • As usual: File/Import.../Existing Projects into Workspace
  • You find a new top-level project equinox-target. It serves the following purposes:
    • acting as an equinox-target, defining the eclipse dev environment
    • providing ant-based setup for development environment for standalone swing client, webstart and web ui.
    • Later: installing equinox runtime components in the ADempiere install process
  • Open the file equinox-target/equinox.target and click "Set as target platform" in the upper right corner.
    • Now eclipse knows about the specific equinox bundle configuration we are going to use.

Development Environment

  • cd to equinox target and say "ant"
    • This won't build anything but instead set up three development platforms under the folder "dist":
    • dist/standalone is an (empty) Equinox 3.5.0-Container runtime
    • dist/webstart is a webapp containing the JNLP and jars for the web-started app
    • dist/web is an (empty) servlet-bridge accessible Equinox 3.5.0-Container webapp.
  • After having these successfully set up, you have to deploy the adempiere plugins into these environments

Swing Standalone

  • Open base/META-INF/MANIFEST.MF, press the "export deployable plugins and fragments" icon in the top-right corner
  • select the plugins base, client and tools.
  • choose equinox-target/dist/standalone as the output directory
  • Finish
  • on commandline, cd to copy of equinox-target
  • ant run-standalone

WebStart

  • A new top-level project webstart has been created
  • This is a feature (equinox language).
    • It wraps all plugins.
  • If you do not have one, create a keystore
    • eg. using: keytool -genkey -alias adempiere -keystore equinox-target/dist/keystore
  • open webstart/feature.xml (should open in the eclipse feature editor)
  • Press the "export deployable feature" icon in the top-right corner
    • Choose equinox-target/dist/webstart as output directory
    • Under JAR signed, provide your keystore
    • Under Java Web Start, provide the location the JNLP will be downloaded from (eg. http://localhost:8080/webstart) and the JVM spec (1.5+)
    • Click Finish
  • Run it using one of the following options:
    • on the console, cd to equinox-target/dist/webstart and execute javaws adempiere-equinox.jnlp
    • in a web-container, link a webapp to equinox-target/dist/webstart and download the app from webstart/adempiere-equinox.jnlp

ZK Web UI

  • install a tomcat-5.5.28
  • ln -s equinox-target/dist/web tomcat-5.5.28/webapps/adempiere
  • Open zkwebui/META-INF/MANIFEST.MF
    • "Export deployable plugins and fragments" (top-right corner icon)
    • Select all plugins
    • Choose equinox-target/dist/web/WEB-INF/eclipse as output directory
  • rm -rf tomcat-5.5.28/work/* (ensure using current build)
  • fire up tomcat: catalina.sh jpda run (jpda for remote debugging)
  • http://localhost:8080/adempiere/index.zul
  • Enjoy

Development cycle

Though initial setup seems to be quite expensive, the development turnaround cycle is not.

A fine tool is the OSGi console, a text console currently launched at standalone and web deployment. The terminal window after start simply accepts keyboard input, type "help" for available commands:

* help
* ss - short status of all bundles
* refresh <bundle id>

Now what to do if you want to change a plugin and test it?

  • If you changed code in a plugin, open its MANIFEST.MF
  • deploy it - the deployment dialog remembers the different output directories
  • choose the standalone or the web OSGi container - wherever you want to test
  • attach to the OSGi console running, refresh the bundle and test.

Webstart can only be tested by deploying all features which is quite time consuming. Do it after everything runs in the standalone container.

Core Interfaces/Extension Points

Id Status Description
org.adempiere.base.IResourceFinder Implemented Finds resources in each plugin, use since client code is in base, requiring resource from client
org.adempiere.base.IDictionaryService Implemented Dictionary migration - 2pack being one possible implementation, used by plugin utilities
org.compiere.apps.form.FormPanel Implemented FormPanel - a freely programmable Form for the Swing Client
org.adempiere.base.IColumnCallout Implemented Callout - called whenever a column on a table changes its value
org.adempiere.base.IModelValidator Planned Modelvalidator - called whenever a record is saved

Tutorials

Learning Points Encountered

  • client code in base: this code has no access eg. on resources in client.
    • First core interface defined: IResourceFinder
    • Adempiere.class.getResource() converted to Adempiere.getResource() - which in turn uses IResourceHandler
  • Postgres Driver in tools is java 1.6? - Have to use a 1.6 VM!
  • ZK Servlets do not save ServletConfig - Workaround checked in
  • Standard Equinox bridging webapp incompatible with up-to-date equinox - updated version provided.

See Also

Further Reading