3 Replies Latest reply on Jan 3, 2012 3:16 AM by bosschaert

    How to create a simple OSGI module

    rcbandit

      Hi,

        I need help with a writing a OSGI module. This is the code that I wrote. It's still not finished but I can compile it with Netbeans.

       

       

      /*
       * OSGI Module for Sessions handling
       */
      
      package com.SessionHandle;
      /** include SQL Packages */
      import java.sql.Connection;
      import java.sql.PreparedStatement;
      import java.sql.ResultSet;
      import java.sql.SQLException;
      import javax.sql.DataSource;
      import javax.annotation.Resource;
         // or import javax.faces.bean.ManagedBean;   
      
      public class sessionLogger {
          public String error_Message = null;
          public String error_Database = null;
          
          /** Call the Oracle JDBC Connection driver */
          @Resource(name="java:/Oracle")
          private DataSource ds;
              
          
          /** method for checking active sessions into the Oracle database.
           *  The calling module sends the UserId, UserIP, UserBrowserId.
           *  If the check is successful the LastRefreshTime is updated with
           *  with the current time.
           */
          
          /*
           CREATE TABLE "ACTIVESESSIONS"(
        "SessionId" Char(20 ) NOT NULL,
        "UserId" Varchar2(30 ) NOT NULL,
        "LoginTime" Timestamp(6),
        "LastRefreshTime" Timestamp(6),
        "UserIP" Varchar2(30 ),
        "UserBrowserID" Varchar2(30 )) 
           */
          
             public Integer activeSessionCheck(String sessionId, String userId, 
                                               String loginTime, String lastRefreshTime, 
                                               String userIp,    String userBrowserId) throws SQLException {
                 
                  String storedSession = null;
                  error_Message = null;
                  String SQL_Statement = null;
                  
                  if (ds == null) throw new SQLException( error_Database = "No data source");      
             Connection conn = ds.getConnection();
                  if (conn == null) throw new SQLException( error_Database = "No connection");      
            
             try {
                  conn.setAutoCommit(false);
                  boolean committed = false;
                      try {
                             SQL_Statement = "SELECT * from ACTIVESESSIONS WHERE SessionId = ? AND UserIP = ? AND UserBrowserID = ?";
                          
                             PreparedStatement sessionQuery = conn.prepareStatement(SQL_Statement);
                             sessionQuery.setString(1, sessionId);
                             sessionQuery.setString(2, userIp);
                             sessionQuery.setString(3, userBrowserId);
               
                             ResultSet result = sessionQuery.executeQuery();
                             
                             if(result.next()){
                                  storedSession = result.getString("SessionId");
                             }
                                           
                             conn.commit();
                             committed = true;
                       } finally {
                             if (!committed) conn.rollback();
                             }
                  }
                      finally {               
                      conn.close();
                      
                      }  
               /** If the session is not null update the session expire time */
               if (storedSession != null){
                     
                       try {
                          conn.setAutoCommit(false);
                          boolean committed = false;
                          try {           /* insert into Oracle the default system(Linux) time */
                                 SQL_Statement = "UPDATE ACTIVESESSIONS SET LastRefreshTime = SYSDATE WHERE SessionId = ?";
      
                                 PreparedStatement insertQuery = conn.prepareStatement(SQL_Statement);                                                             
                                 insertQuery.setString(1, sessionId);                       
                                 insertQuery.executeUpdate();                  
      
                                 conn.commit();
                                 committed = true;
                           } finally {
                                 if (!committed) conn.rollback();
                                 }
                          }
                          finally {               
                          conn.close();
      
                          }      
                     /** if the session is registered successfully return 0 */ 
                     return 0;
                 } else {
                     /** if the session is not registered return 1 */ 
                     return 1;
                 }     
               /*!!!!!! dobavi vav faces-config novo navigation rule - ako se varne otgovor 1 da prepra6ta klienta na login menu */
             }
             
             /** method for recording user activity into the Oracle database */
             
             /*
              CREATE TABLE "SESSIONSLOG"(
        "SessionID" Varchar2(30 ) NOT NULL,
        "Username" Varchar2(30 ),
        "IpAddress" Varchar2(30 ),
        "WebBrowserID" Varchar2(30 ),
        "LoginTime" Timestamp(6),
        "LogoutTime" Timestamp(6)) 
              */       
             
             public void sessionLog(String sessionId, String userName,
                                      String ipAddress, String webBrowserId,
                                      String loginTime, String logoutTime) throws SQLException {
                 
                  String storedPassword = null;
                  error_Message = null;
                  String SQL_Statement = null;
                  
                  if (ds == null) throw new SQLException( error_Database = "No data source");      
             Connection conn = ds.getConnection();
                  if (conn == null) throw new SQLException( error_Database = "No connection");      
            
             try {
                  conn.setAutoCommit(false);
                  boolean committed = false;
                      try {
                             SQL_Statement = "SELECT passwd from USERS WHERE userz = ?";
                          
                             PreparedStatement passwordQuery = conn.prepareStatement(SQL_Statement);
                             passwordQuery.setString(1, sessionId);
               
                             ResultSet result = passwordQuery.executeQuery();
                             
                             if(result.next()){
                                  storedPassword = result.getString("passwd");
                             }
                                           
                             conn.commit();
                             committed = true;
                       } finally {
                             if (!committed) conn.rollback();
                             }
                  }
                      finally {               
                      conn.close();
                      
                      }  
             /** if the user is not found or password don't match display error message*/
             if (storedPassword == null){
                 error_Message = "Invalid Username!";
             } else {
                 error_Message = "Invalid Password!";
             }
             
             return;       
             }
          
             
             
             /** method for recording sessions activity into the Oracle database */
             
             /*
              CREATE TABLE "ACTIVESESSIONSLOG"(
        "SessionId" Varchar2(30 ) NOT NULL,
        "UserId" Varchar2(30 ),
        "ActivityStart" Timestamp(6),
        "ActivityEnd" Timestamp(6),
        "Activity" Clob) 
              */
             
             public void activeSessionLog(String sessionId,     String userId,
                                            String activityStart, String activityEnd,
                                            String Activity) throws SQLException {
                  String storedPassword = null;
                  error_Message = null;
                  String SQL_Statement = null;
                  
                  if (ds == null) throw new SQLException( error_Database = "No data source");      
             Connection conn = ds.getConnection();
                  if (conn == null) throw new SQLException( error_Database = "No connection");      
            
             try {
                  conn.setAutoCommit(false);
                  boolean committed = false;
                      try {
                             SQL_Statement = "SELECT passwd from USERS WHERE userz = ?";
                          
                             PreparedStatement passwordQuery = conn.prepareStatement(SQL_Statement);
                             passwordQuery.setString(1, sessionId);
               
                             ResultSet result = passwordQuery.executeQuery();
                             
                             if(result.next()){
                                  storedPassword = result.getString("passwd");
                             }
                                           
                             conn.commit();
                             committed = true;
                       } finally {
                             if (!committed) conn.rollback();
                             }
                  }
                      finally {               
                      conn.close();
                      
                      }  
             /** if the user is not found or password don't match display error message*/
             if (storedPassword == null){
                 error_Message = "Invalid Username!";
             } else {
                 error_Message = "Invalid Password!";
             }
             
             return;       
             }
             
          
      }
      
      

       

       

      This is the file structure of the OSGI bundle:

       

       

      rcbandit@rcbandit-laptop:~/NetBeansProjects$ tree SL_24
      SL_24
      ├── nbactions.xml
      ├── pom.xml
      ├── src
      │   └── main
      │       ├── assembly
      │       │   └── felix.xml
      │       ├── java
      │       │   └── com
      │       │       ├── SessionHandle
      │       │       │   └── sessionLogger.java
      │       │       └── SL_24
      │       │           └── Activator.java
      │       └── resources
      │           └── com
      │               └── SL_24
      └── target
          ├── classes
          │   ├── com
          │   │   ├── SessionHandle
          │   │   │   └── sessionLogger.class
          │   │   └── SL_24
          │   │       └── Activator.class
          │   └── META-INF
          │       └── MANIFEST.MF
          ├── generated-sources
          │   └── annotations
          ├── SL_24-1.0-SNAPSHOT.jar
          └── surefire
      
      19 directories, 9 files
      

       

      And this is the Activator class which I don't know how to write:

       

       

      package com.SL_24;
      
      import org.osgi.framework.BundleActivator;
      import org.osgi.framework.BundleContext;
      
      public class Activator implements BundleActivator {
      
          public void start(BundleContext context) throws Exception {
              System.out.println("Module SL_24 is Loaded!");
          }
      
          public void stop(BundleContext context) throws Exception {
              System.out.println("Module SL_24 in Unloaded!");
          }
      
      }
      

       

       

      The problem comes when i try to deploy it to JBoss 7.1.0 server. It seems that the activator class is not properly written. Can you help me write it in proper way and how after that I can call methods for the OSGI bundle insight EAR package?

       

      King Regards,

      Peter