Как создать простой модуль OSGI - PullRequest
1 голос
/ 28 декабря 2011

Мне нужна помощь с написанием модуля OSGI. Это код, который я написал. Это еще не закончено, но я могу скомпилировать его с 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;       
       }


}

Это файловая структура комплекта OSGI:

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

А это класс Activator, который я не знаю, как написать:

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!");
    }

}

Проблема возникает, когда я пытаюсь развернуть ее на сервере JBoss 7.1.0. Кажется, что класс активатора написан неправильно. Можете ли вы помочь мне написать это правильно, и как после этого я могу вызывать методы для пакета EAR OSGI bundle insight?

Король С уважением,

Peter

1 Ответ

1 голос
/ 28 декабря 2011

На основании трассировки ошибок, приведенной в вашем комментарии, я вижу, что из JBoss выбрасывается NullPointerException. Вполне вероятно, что это ошибка в JBoss, и поэтому ее следует обсуждать на форумах JBoss.

...