2011-12-28 2 views
1

Мне нужна помощь в написании модуля OSGI. Это код, который я написал. Это еще не закончено, но я могу скомпилировать его с Netbeans.Как создать простой модуль OSGI

/* 
* 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 пачке:

[email protected]:~/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?

King С уважением,

Питер

+0

p.s. Оказывается, когда я удаляю эту строку «@Resource (name =« java:/Oracle »), пакет успешно развертывается. Может быть, я что-то пропустил в POM-файле? Или пакеты OSGI не могут делать запросы к базам данных? –

+0

Всегда указывайте сообщение об ошибке, которое вы получаете, а не просто «оно не работает» или «похоже, что это неправильно написано». Такие заявления не помогают вообще решить, в чем проблема. –

+0

О, и ** конечно ** пакеты OSGi могут делать запросы к базе данных. –

ответ

1

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

+0

Должен ли я изменить класс Activator? –

+0

Почему? Кажется, в нем нет ничего плохого (кроме того, что он ничего полезного не делает, но, я думаю, вы уже это знали!) –

Смежные вопросы