Prev |  | Next

## 4.9. OSGi setup

In OSGi-related contexts like a number of Application Servers (e.g. Glassfish ) and Eclipse-based systems, Neo4j can be set up explicitly rather than being discovered by the Java Service Loader mechanism.

### 4.9.1. Simple OSGi Activator scenario

As seen in the following example, instead of relying on the Classloading of the Neo4j kernel, the Neo4j bundles are treated as library bundles, and services like the IndexProviders and CacheProviders are explicitly instantiated, configured and registered. Just make the necessary jars available as wrapped library bundles, so all needed classes are exported and seen by the bundle containing the Activator.

    public class Neo4jActivator implements BundleActivator
    {

        private static GraphDatabaseService db;
        private ServiceRegistration serviceRegistration;
        private ServiceRegistration indexServiceRegistration;

        @Override
        public void start( BundleContext context ) throws Exception
        {
            //the cache providers
            ArrayList<CacheProvider> cacheList = new ArrayList<CacheProvider>();
            cacheList.add( new SoftCacheProvider() );

            //the index providers
            IndexProvider lucene = new LuceneIndexProvider();
            ArrayList<IndexProvider> provs = new ArrayList<IndexProvider>();
            provs.add( lucene );
            ListIndexIterable providers = new ListIndexIterable();
            providers.setIndexProviders( provs );

            //the database setup
            GraphDatabaseFactory gdbf = new GraphDatabaseFactory();
            gdbf.setIndexProviders( providers );
            gdbf.setCacheProviders( cacheList );
            db = gdbf.newEmbeddedDatabase( "target/db" );

            //the OSGi registration
            serviceRegistration = context.registerService(
                    GraphDatabaseService.class.getName(), db, new Hashtable<String,String>() );
            System.out.println( "registered " + serviceRegistration.getReference() );
            indexServiceRegistration = context.registerService(
                    Index.class.getName(), db.index().forNodes( "nodes" ),
                    new Hashtable<String,String>() );
            Transaction tx = db.beginTx();
            try
            {
                Node firstNode = db.createNode();
                Node secondNode = db.createNode();
                Relationship relationship = firstNode.createRelationshipTo(
                        secondNode, DynamicRelationshipType.withName( "KNOWS" ) );

                firstNode.setProperty( "message", "Hello, " );
                secondNode.setProperty( "message", "world!" );
                relationship.setProperty( "message", "brave Neo4j " );
                db.index().forNodes( "nodes" ).add( firstNode, "message", "Hello" );
                tx.success();
            }
            catch ( Exception e )
            {
                e.printStackTrace();
                throw new RuntimeException( e );
            }
            finally
            {
                tx.finish();
            }

        }

        @Override
        public void stop( BundleContext context ) throws Exception
        {
            serviceRegistration.unregister();
            indexServiceRegistration.unregister();
            db.shutdown();

        }

    }

| Tip
The source code of the example above is found here.

Copyright © 2013 Neo Technology

Prev | Up | Next
| Home |