You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomee.apache.org by Jacek Laskowski <ja...@laskowski.net.pl> on 2009/10/28 19:01:17 UTC

For adventurous - part 2: deployment and use of EJBs in OSGified OpenEJB runs fine

Hi,

I moved on to handle deploying ejbs to osgified openejb and see if I
could access it from a bundle. I couldn't even think of it and how
simple it could be, but believe it or not it works now! You can deploy
them and access from bundles.

The idea is to deploy a ejb and expose business interfaces as osgi
services. In fact, osgi services are not that different from the way
application servers handle ejbs. That's exactly the same. It's just a
separation of your interface and implementation so the only dependency
of a bundlized ejb client is to import ejb interfaces. Nothing unusual
in Java EE and so is in OSGi.

So, now the set of the required bundles is as follows:

[   0] [Active     ] [    0] System Bundle
[   1] [Active     ] [    1]
file:/c:/openejb-osgi/felix-framework-2.0.1/bundle/org.apache.felix.bundlerepository-1.4.2.jar
[   2] [Active     ] [    1]
file:/c:/openejb-osgi/felix-framework-2.0.1/bundle/org.apache.felix.shell-1.4.1.jar
[   3] [Active     ] [    1]
file:/c:/openejb-osgi/felix-framework-2.0.1/bundle/org.apache.felix.shell.tui-1.4.1.jar
[   4] [Active     ] [    1]
file:C:/.m2/org/apache/openejb/openejb-core/3.1.2-SNAPSHOT/openejb-core-3.1.2-SNAPSHOT.jar
[   5] [Resolved   ] [    1]
http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-annotation_1.0_spec/1.1.1/geronimo-annotation_1.0_spec-1.1.1.jar
[   7] [Resolved   ] [    1]
http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-jta_1.1_spec/1.1.1/geronimo-jta_1.1_spec-1.1.1.jar
[   8] [Resolved   ] [    1]
http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-interceptor_3.0_spec/1.0.1/geronimo-interceptor_3.0_spec-1.0.1.jar
[   9] [Resolved   ] [    1]
http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-javamail_1.4_spec/1.6/geronimo-javamail_1.4_spec-1.6.jar
[  10] [Resolved   ] [    1]
http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-j2ee-management_1.1_spec/1.0.1/geronimo-j2ee-management_1.1_spec-1.0.1.jar
[  11] [Resolved   ] [    1]
http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-jpa_3.0_spec/1.1.1/geronimo-jpa_3.0_spec-1.1.1.jar
[  12] [Resolved   ] [    1]
http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-j2ee-connector_1.5_spec/2.0.0/geronimo-j2ee-connector_1.5_spec-2.0.0.jar
[  13] [Resolved   ] [    1]
http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-jacc_1.1_spec/1.0.2/geronimo-jacc_1.1_spec-1.0.2.jar
[  14] [Resolved   ] [    1]
http://repo2.maven.org/maven2/org/apache/servicemix/bundles/org.apache.servicemix.bundles.wsdl4j/1.6.1_1/org.apache.servicemix.bundles.wsdl4j-1.6.1_1.jar
[  16] [Resolved   ] [    1]
http://repo2.maven.org/maven2/org/ops4j/pax/logging/pax-logging-api/1.4/pax-logging-api-1.4.jar
[  17] [Resolved   ] [    1]
http://download.eclipse.org/tools/orbit/downloads/drops/R20090825191606/bundles/org.apache.commons.cli_1.0.0.v20080604-1500.jar
[  18] [Resolved   ] [    1]
http://download.eclipse.org/tools/orbit/downloads/drops/R20090825191606/bundles/org.apache.commons.lang_2.4.0.v20081016-1030.jar
[  19] [Resolved   ] [    1]
http://download.eclipse.org/tools/orbit/downloads/drops/R20090825191606/bundles/org.apache.commons.logging_1.1.1.v200904062255.jar
[  20] [Resolved   ] [    1]
http://repo2.maven.org/maven2/org/apache/geronimo/components/geronimo-connector/2.1.3/geronimo-connector-2.1.3.jar
[  21] [Resolved   ] [    1]
http://repo2.maven.org/maven2/org/apache/geronimo/components/geronimo-transaction/2.1.3/geronimo-transaction-2.1.3.jar
[  22] [Resolved   ] [    1]
file:C:\.m2\org\apache\openejb\openejb-api\3.1.2-SNAPSHOT\openejb-api-3.1.2-SNAPSHOT.jar
[  23] [Resolved   ] [    1]
file:C:\.m2\org\apache\openejb\openejb-javaagent\3.1.2-SNAPSHOT\openejb-javaagent-3.1.2-SNAPSHOT.jar
[  24] [Resolved   ] [    1]
file:C:/.m2/org/apache/openejb/openejb-jee/3.1.2-SNAPSHOT/openejb-jee-3.1.2-SNAPSHOT.jar
[  25] [Resolved   ] [    1]
file:C:/.m2/org/apache/openejb/openejb-loader/3.1.2-SNAPSHOT/openejb-loader-3.1.2-SNAPSHOT.jar
[  27] [Resolved   ] [    1]
file:C:\.m2\org\apache\xbean\xbean-asm-shaded\3.7-SNAPSHOT\xbean-asm-shaded-3.7-SNAPSHOT.jar
[  29] [Resolved   ] [    1]
file:C:\.m2\org\apache\xbean\xbean-naming\3.7-SNAPSHOT\xbean-naming-3.7-SNAPSHOT.jar
[  30] [Resolved   ] [    1]
file:C:\.m2\org\apache\xbean\xbean-reflect\3.7-SNAPSHOT\xbean-reflect-3.7-SNAPSHOT.jar
[  32] [Resolved   ] [    1]
http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.1.1/geronimo-jms_1.1_spec-1.1.1.jar
[  35] [Active     ] [    1]
http://repo1.maven.org/maven2/org/ops4j/pax/url/pax-url-wrap/1.1.2/pax-url-wrap-1.1.2.jar
[  36] [Resolved   ] [    1]
wrap:http://repo2.maven.org/maven2/org/apache/activemq/activemq-core/4.1.1/activemq-core-4.1.1.jar
[  37] [Resolved   ] [    1]
wrap:http://repo2.maven.org/maven2/org/apache/activemq/activemq-ra/4.1.1/activemq-ra-4.1.1.jar
[  40] [Active     ] [    1]
file:C:\projs\sandbox\openejb-osgi-v1\wynik5\plugins\ejb_stateless_1.0.0.jar
[  44] [Resolved   ] [    1]
file:C:\.m2\org\apache\xbean\xbean-finder-shaded\3.7-SNAPSHOT\xbean-finder-shaded-3.7-SNAPSHOT-bundle.jar
[  48] [Resolved   ] [    1]
file:C:\.m2\org\apache\geronimo\specs\geronimo-ejb_3.1_spec\1.0.0-EA1-SNAPSHOT\geronimo-ejb_3.1_spec-1.0.0-EA1-SNAPSHOT.jar
[  50] [Active     ] [    1]
file:C:\.m2\org\apache\openejb\openejb-core-osgi\3.1.2-SNAPSHOT\openejb-core-osgi-3.1.2-SNAPSHOT.jar
[  52] [Active     ] [    1]
file:C:\projs\sandbox\openejb-osgi-v1\wynik5\plugins\ejb_client_1.0.0.jar

The client (id: 52) looks as follows:

package ejb_client;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;

import ejb.BusinessInterface;

public class Activator implements BundleActivator {

	public void start(BundleContext context) throws Exception {
		System.out.println("Starting the ejb client");
		
		ServiceReference serviceReference =
context.getServiceReference("ejb.BusinessInterface");
		BusinessInterface businessIntf = (BusinessInterface)
context.getService(serviceReference);
		String result = businessIntf.execute("Hello from " +
context.getBundle().getSymbolicName());
		System.out.println(result);
	}
	
	public void stop(BundleContext context) throws Exception {
        System.out.println("Stoping the ejb client...");
	}

}

with its MANIFEST.MF:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Ejb_client
Bundle-SymbolicName: ejb_client
Bundle-Version: 1.0.0
Bundle-Activator: ejb_client.Activator
Import-Package: ejb,
 javax.naming,
 javax.transaction,
 org.apache.openejb.client,
 org.osgi.framework;version="1.3.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Require-Bundle: org.apache.openejb.core;bundle-version="3.1.2"

The rest is in the repo. Ask questions for more information. Give it a
try so you can really feel what I feel :)

I'll be polishing it (no pun intended) to handle more complex use
cases in the coming days.

Jacek

-- 
Jacek Laskowski
Notatnik Projektanta Java EE - http://www.JacekLaskowski.pl

Re: For adventurous - part 2: deployment and use of EJBs in OSGified OpenEJB runs fine

Posted by Mohammad Nour El-Din <no...@gmail.com>.
dman Cool ;)

On Wed, Oct 28, 2009 at 8:01 PM, Jacek Laskowski <ja...@laskowski.net.pl> wrote:
> Hi,
>
> I moved on to handle deploying ejbs to osgified openejb and see if I
> could access it from a bundle. I couldn't even think of it and how
> simple it could be, but believe it or not it works now! You can deploy
> them and access from bundles.
>
> The idea is to deploy a ejb and expose business interfaces as osgi
> services. In fact, osgi services are not that different from the way
> application servers handle ejbs. That's exactly the same. It's just a
> separation of your interface and implementation so the only dependency
> of a bundlized ejb client is to import ejb interfaces. Nothing unusual
> in Java EE and so is in OSGi.
>
> So, now the set of the required bundles is as follows:
>
> [   0] [Active     ] [    0] System Bundle
> [   1] [Active     ] [    1]
> file:/c:/openejb-osgi/felix-framework-2.0.1/bundle/org.apache.felix.bundlerepository-1.4.2.jar
> [   2] [Active     ] [    1]
> file:/c:/openejb-osgi/felix-framework-2.0.1/bundle/org.apache.felix.shell-1.4.1.jar
> [   3] [Active     ] [    1]
> file:/c:/openejb-osgi/felix-framework-2.0.1/bundle/org.apache.felix.shell.tui-1.4.1.jar
> [   4] [Active     ] [    1]
> file:C:/.m2/org/apache/openejb/openejb-core/3.1.2-SNAPSHOT/openejb-core-3.1.2-SNAPSHOT.jar
> [   5] [Resolved   ] [    1]
> http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-annotation_1.0_spec/1.1.1/geronimo-annotation_1.0_spec-1.1.1.jar
> [   7] [Resolved   ] [    1]
> http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-jta_1.1_spec/1.1.1/geronimo-jta_1.1_spec-1.1.1.jar
> [   8] [Resolved   ] [    1]
> http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-interceptor_3.0_spec/1.0.1/geronimo-interceptor_3.0_spec-1.0.1.jar
> [   9] [Resolved   ] [    1]
> http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-javamail_1.4_spec/1.6/geronimo-javamail_1.4_spec-1.6.jar
> [  10] [Resolved   ] [    1]
> http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-j2ee-management_1.1_spec/1.0.1/geronimo-j2ee-management_1.1_spec-1.0.1.jar
> [  11] [Resolved   ] [    1]
> http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-jpa_3.0_spec/1.1.1/geronimo-jpa_3.0_spec-1.1.1.jar
> [  12] [Resolved   ] [    1]
> http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-j2ee-connector_1.5_spec/2.0.0/geronimo-j2ee-connector_1.5_spec-2.0.0.jar
> [  13] [Resolved   ] [    1]
> http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-jacc_1.1_spec/1.0.2/geronimo-jacc_1.1_spec-1.0.2.jar
> [  14] [Resolved   ] [    1]
> http://repo2.maven.org/maven2/org/apache/servicemix/bundles/org.apache.servicemix.bundles.wsdl4j/1.6.1_1/org.apache.servicemix.bundles.wsdl4j-1.6.1_1.jar
> [  16] [Resolved   ] [    1]
> http://repo2.maven.org/maven2/org/ops4j/pax/logging/pax-logging-api/1.4/pax-logging-api-1.4.jar
> [  17] [Resolved   ] [    1]
> http://download.eclipse.org/tools/orbit/downloads/drops/R20090825191606/bundles/org.apache.commons.cli_1.0.0.v20080604-1500.jar
> [  18] [Resolved   ] [    1]
> http://download.eclipse.org/tools/orbit/downloads/drops/R20090825191606/bundles/org.apache.commons.lang_2.4.0.v20081016-1030.jar
> [  19] [Resolved   ] [    1]
> http://download.eclipse.org/tools/orbit/downloads/drops/R20090825191606/bundles/org.apache.commons.logging_1.1.1.v200904062255.jar
> [  20] [Resolved   ] [    1]
> http://repo2.maven.org/maven2/org/apache/geronimo/components/geronimo-connector/2.1.3/geronimo-connector-2.1.3.jar
> [  21] [Resolved   ] [    1]
> http://repo2.maven.org/maven2/org/apache/geronimo/components/geronimo-transaction/2.1.3/geronimo-transaction-2.1.3.jar
> [  22] [Resolved   ] [    1]
> file:C:\.m2\org\apache\openejb\openejb-api\3.1.2-SNAPSHOT\openejb-api-3.1.2-SNAPSHOT.jar
> [  23] [Resolved   ] [    1]
> file:C:\.m2\org\apache\openejb\openejb-javaagent\3.1.2-SNAPSHOT\openejb-javaagent-3.1.2-SNAPSHOT.jar
> [  24] [Resolved   ] [    1]
> file:C:/.m2/org/apache/openejb/openejb-jee/3.1.2-SNAPSHOT/openejb-jee-3.1.2-SNAPSHOT.jar
> [  25] [Resolved   ] [    1]
> file:C:/.m2/org/apache/openejb/openejb-loader/3.1.2-SNAPSHOT/openejb-loader-3.1.2-SNAPSHOT.jar
> [  27] [Resolved   ] [    1]
> file:C:\.m2\org\apache\xbean\xbean-asm-shaded\3.7-SNAPSHOT\xbean-asm-shaded-3.7-SNAPSHOT.jar
> [  29] [Resolved   ] [    1]
> file:C:\.m2\org\apache\xbean\xbean-naming\3.7-SNAPSHOT\xbean-naming-3.7-SNAPSHOT.jar
> [  30] [Resolved   ] [    1]
> file:C:\.m2\org\apache\xbean\xbean-reflect\3.7-SNAPSHOT\xbean-reflect-3.7-SNAPSHOT.jar
> [  32] [Resolved   ] [    1]
> http://repo2.maven.org/maven2/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.1.1/geronimo-jms_1.1_spec-1.1.1.jar
> [  35] [Active     ] [    1]
> http://repo1.maven.org/maven2/org/ops4j/pax/url/pax-url-wrap/1.1.2/pax-url-wrap-1.1.2.jar
> [  36] [Resolved   ] [    1]
> wrap:http://repo2.maven.org/maven2/org/apache/activemq/activemq-core/4.1.1/activemq-core-4.1.1.jar
> [  37] [Resolved   ] [    1]
> wrap:http://repo2.maven.org/maven2/org/apache/activemq/activemq-ra/4.1.1/activemq-ra-4.1.1.jar
> [  40] [Active     ] [    1]
> file:C:\projs\sandbox\openejb-osgi-v1\wynik5\plugins\ejb_stateless_1.0.0.jar
> [  44] [Resolved   ] [    1]
> file:C:\.m2\org\apache\xbean\xbean-finder-shaded\3.7-SNAPSHOT\xbean-finder-shaded-3.7-SNAPSHOT-bundle.jar
> [  48] [Resolved   ] [    1]
> file:C:\.m2\org\apache\geronimo\specs\geronimo-ejb_3.1_spec\1.0.0-EA1-SNAPSHOT\geronimo-ejb_3.1_spec-1.0.0-EA1-SNAPSHOT.jar
> [  50] [Active     ] [    1]
> file:C:\.m2\org\apache\openejb\openejb-core-osgi\3.1.2-SNAPSHOT\openejb-core-osgi-3.1.2-SNAPSHOT.jar
> [  52] [Active     ] [    1]
> file:C:\projs\sandbox\openejb-osgi-v1\wynik5\plugins\ejb_client_1.0.0.jar
>
> The client (id: 52) looks as follows:
>
> package ejb_client;
>
> import org.osgi.framework.BundleActivator;
> import org.osgi.framework.BundleContext;
> import org.osgi.framework.ServiceReference;
>
> import ejb.BusinessInterface;
>
> public class Activator implements BundleActivator {
>
>        public void start(BundleContext context) throws Exception {
>                System.out.println("Starting the ejb client");
>
>                ServiceReference serviceReference =
> context.getServiceReference("ejb.BusinessInterface");
>                BusinessInterface businessIntf = (BusinessInterface)
> context.getService(serviceReference);
>                String result = businessIntf.execute("Hello from " +
> context.getBundle().getSymbolicName());
>                System.out.println(result);
>        }
>
>        public void stop(BundleContext context) throws Exception {
>        System.out.println("Stoping the ejb client...");
>        }
>
> }
>
> with its MANIFEST.MF:
>
> Manifest-Version: 1.0
> Bundle-ManifestVersion: 2
> Bundle-Name: Ejb_client
> Bundle-SymbolicName: ejb_client
> Bundle-Version: 1.0.0
> Bundle-Activator: ejb_client.Activator
> Import-Package: ejb,
>  javax.naming,
>  javax.transaction,
>  org.apache.openejb.client,
>  org.osgi.framework;version="1.3.0"
> Bundle-RequiredExecutionEnvironment: JavaSE-1.6
> Require-Bundle: org.apache.openejb.core;bundle-version="3.1.2"
>
> The rest is in the repo. Ask questions for more information. Give it a
> try so you can really feel what I feel :)
>
> I'll be polishing it (no pun intended) to handle more complex use
> cases in the coming days.
>
> Jacek
>
> --
> Jacek Laskowski
> Notatnik Projektanta Java EE - http://www.JacekLaskowski.pl
>



-- 
Thanks
- Mohammad Nour
- LinkedIn: http://www.linkedin.com/in/mnour
----
"Life is like riding a bicycle. To keep your balance you must keep moving"
- Albert Einstein

"Writing clean code is what you must do in order to call yourself a
professional. There is no reasonable excuse for doing anything less
than your best."
- Clean Code: A Handbook of Agile Software Craftsmanship