Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "JFace Data Binding/PojoBindable/PojoBindableSVN"

(Import as binary project org.eclipse.osgi)
(Import as binary project org.eclipse.osgi)
Line 163: Line 163:
 
Pojo Bindable use [http://wiki.eclipse.org/index.php/Adaptor_Hooks Equinox Adaptor Hooks] but more precisly [http://wiki.eclipse.org/index.php/Adaptor_Hooks#Class_Loading_Hook ClassLoadingHook] (see class [http://dynaresume.googlecode.com/svn/trunk/JFace-Pojo-Bindable/osgi-equinox/org.eclipse.core.databinding.pojo.bindable.equinox.weaving/src/org/eclipse/core/databinding/pojo/bindable/equinox/weaving/BindableWeaverRegistry.java BindableWeaverRegistry].  
 
Pojo Bindable use [http://wiki.eclipse.org/index.php/Adaptor_Hooks Equinox Adaptor Hooks] but more precisly [http://wiki.eclipse.org/index.php/Adaptor_Hooks#Class_Loading_Hook ClassLoadingHook] (see class [http://dynaresume.googlecode.com/svn/trunk/JFace-Pojo-Bindable/osgi-equinox/org.eclipse.core.databinding.pojo.bindable.equinox.weaving/src/org/eclipse/core/databinding/pojo/bindable/equinox/weaving/BindableWeaverRegistry.java BindableWeaverRegistry].  
  
The bundle [http://dynaresume.googlecode.com/svn/trunk/JFace-Pojo-Bindable/osgi-equinox/org.eclipse.core.databinding.pojo.bindable.equinox.weaving org.eclipse.core.databinding.pojo.bindable.equinox.weaving] is OSGi Fragment attached to '''org.eclipse.osgi''' bundle. To work with PDE, import the bundle org.eclipse.osgi as binary project into your workspace. To do that, open the Plug-ins view (Window->Show View -> Other... => PDE/Plug-ins). Select the '''org.eclipse.osgi''' bundle into teh Plug-ins view and import the project as binary project :  
+
The bundle [http://dynaresume.googlecode.com/svn/trunk/JFace-Pojo-Bindable/osgi-equinox/org.eclipse.core.databinding.pojo.bindable.equinox.weaving org.eclipse.core.databinding.pojo.bindable.equinox.weaving] is OSGi Fragment attached to '''org.eclipse.osgi''' bundle. To work with PDE, import the bundle org.eclipse.osgi as binary project into your workspace. To do that, open the Plug-ins view (Window->Show View -> Other... => PDE/Plug-ins). Select the '''org.eclipse.osgi''' bundle into the Plug-ins view and choose menu "Import As->Binary Project" :  
  
 
[[Image:PojoBindableSVN_OSGiContext_ImportOrgEclipseOsiBundle.png]]
 
[[Image:PojoBindableSVN_OSGiContext_ImportOrgEclipseOsiBundle.png]]

Revision as of 01:29, 13 April 2010

Pojo Bindable SVN

For the last version of Pojo Bindable you can (for the moment) get it from the SVN on Dynaresume project. You can find the whole Pojo bindable project at http://dynaresume.googlecode.com/svn/trunk/JFace-Pojo-Bindable/ :

Pojo Bindable into OSGi context

You can find a basic sample with Pojo bindable into org.eclipse.core.examples.databinding.pojo.bindable.equinox bundle. This bundle has an Activator which create a basic PojoPerson coming from another bundle org.eclipse.core.examples.databinding.pojo.bindable.model:

package org.eclipse.core.examples.databinding.pojo.bindable.model;
 
public class PojoPerson {
 
	String name = "HelloWorld";
 
	public String getName() {
		return name;
	}
 
	public void setName(String name) {
		this.name = name;
	}
}

and add it a PropertyChangeListener listener :

public class Activator implements BundleActivator {
 
	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext
	 * )
	 */
	public void start(BundleContext context) throws Exception {
 
		// Create Pojo instance
		PojoPerson person = new PojoPerson();
 
		PropertyChangeListener listener = new PropertyChangeListener() {
			public void propertyChange(PropertyChangeEvent event) {
				System.out.println("---------- Property User changed --------");
				System.out.println("  PropertyName=" + event.getPropertyName());
				System.out.println("  OldValue=" + event.getOldValue());
				System.out.println("  NewValue=" + event.getNewValue());
				System.out
						.println("------------------------------------------");
			}
		};
 
		// Add Listener
		try {
			Method m = person.getClass().getMethod("addPropertyChangeListener",
					String.class, PropertyChangeListener.class);
			m.invoke(person, "name", listener);
		} catch (Exception e) {
			e.printStackTrace();
		}
 
		// Change name property.
		person.setName("New name");
 
	}
...
}

When bundle is started, you will see on console :

---------- Property User changed --------
  PropertyName=name
  OldValue=HelloWorld
  NewValue=New name
------------------------------------------

You can notice that there is no dependencies to Pojo Bindable in this code. If Pojo Bindable is well configured into OSGi context, when PojoPersonn Class is used, the bytecode is updated when Class is loaded to add PropertyChangeSupport.

Pojo Bindable works into OSGi context only with Equinox. Indead Pojo bindable provides an OSGi fragment org.eclipse.core.databinding.pojo.bindable.equinox.weaving which is linked to org.eclipse.osgi and use Adaptor Hooks.

How test Pojo Bindable into OSGi context?

To test the bundle org.eclipse.core.examples.databinding.pojo.bindable.equinox, you must :

Import the projects from SVN

Import from SVN the projects :

  1. the 3 ASM projects stored into dependencies :
  2. Bundle org.eclipse.core.databinding.pojo.bindable: Pojo Bindable bundle.
  3. Bundle org.eclipse.core.databinding.pojo.bindable.equinox: bundle which publish a BindableWeaver service to transform Class to Pojo bindable (implements BindableAware interface).
  4. Fragment org.eclipse.core.databinding.pojo.bindable.equinox.weaving: bundle which consume a BindableWeaver service to transform Class to Pojo bindable (implements BindableAware interface).
  5. Bundle org.eclipse.core.examples.databinding.pojo.bindable.equinox: Pojo Bindable bundle example which use Pojo Bindable into OSgi context.
  6. Bundle org.eclipse.core.examples.databinding.pojo.bindable.model: bundle model wich contains PojoPerson.
  7. Bundle org.eclipse.core.examples.databinding.pojo.bindable.equinox.fragment: fragment linked to org.eclipse.core.databinding.pojo.bindable.equinox wich configure Pojo Bindable.

PojoBindableSVN OSGiContext Projects.png

Pojo Bindable Bundles

If you wish use Pojo Bindable into OSGi context, you must use Bundles/Fragments :

Pojo Bindable Configuration (bindable.properties)

To configure Pojo bindable like Bindable Java Agent, you must create an OSGi Fragment linked to org.eclipse.core.databinding.pojo.bindable.equinox bundle and create a file bindable.properties into the fragment project. Into our example Pojo bindable is configured with the org.eclipse.core.examples.databinding.pojo.bindable.equinox.fragment OSGi Fragment. This fragment contains bindable.properties with this content :

bindable.packages=org.eclipse.core.examples.databinding.pojo.bindable.model
bindable.debug=true

This configuration will transform the classes coming from org.eclipse.core.examples.databinding.pojo.bindable.model packages like our PojoPerson. Pojo bindable debug mode is set to true, so you will see each teh whole classes wich must be loaded and check your Class is transformed as explained here.

Pojo Bindable Examples

Import as binary project org.eclipse.osgi

Pojo Bindable use Equinox Adaptor Hooks but more precisly ClassLoadingHook (see class BindableWeaverRegistry.

The bundle org.eclipse.core.databinding.pojo.bindable.equinox.weaving is OSGi Fragment attached to org.eclipse.osgi bundle. To work with PDE, import the bundle org.eclipse.osgi as binary project into your workspace. To do that, open the Plug-ins view (Window->Show View -> Other... => PDE/Plug-ins). Select the org.eclipse.osgi bundle into the Plug-ins view and choose menu "Import As->Binary Project" :

PojoBindableSVN OSGiContext ImportOrgEclipseOsiBundle.png

Your workspace look like this :

PojoBindableSVN OSGiContext workspace.png

Launch configuration

Start the bundle with Pojo Bindable OSGi.launch.

Bundle org.eclipse.core.databinding.pojo.bindable.equinox (Level=3)

If you edit the launch Pojo Bindable OSGi.launch, you can notice that into Bundle tab  :

  • bundle org.eclipse.osgi is selected into Workspace (node). The bundle org.eclipse.osgi from target Platform must not selected.
  • bundle org.eclipse.core.databinding.pojo.bindable.equinox must be started (level=3) before the bundle which use PojoPerson.

PojoBindableSVN OSGiContext Launch Bundle.png

-Dosgi.framework.extensions=org.eclipse.core.databinding.pojo.bindable.equinox.weaving

Into Arguments tabs you can notice :

 -Dosgi.framework.extensions=org.eclipse.core.databinding.pojo.bindable.equinox.weaving

PojoBindableSVN OSGiContext Launch Arguments.png

Pojo Bindable & EclipseLink

EclipseLink provider Dynamic Weaving Fragment for Equinox into org.eclipse.persistence.jpa.equinox.weaving fragment to transform bytecode.

Back to the top