2011-12-28 67 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服务器时。看来,激活类没有正确书写。你能帮我以适当的方式写下来,以后我可以调用OSGI bundle insight EAR包的方法吗?

国王的问候,

彼得

+0

p.s.事实证明,当我删除这行“@Resource(name =”java:/ Oracle“)”时,该包已成功部署。也许我错过了POM文件中的东西?或者OSGI包不能查询数据库? – 2011-12-28 11:07:27

+0

请始终声明您收到的错误消息,而不仅仅是“它不工作”或“看起来没有正确书写”。这些声明根本无助于解决问题。 – 2011-12-28 12:51:45

+0

哦,当然** ** OSGi包可以进行数据库查询。 – 2011-12-28 12:52:30

回答

1

根据您的评论给出的错误跟踪,我看到有一个NullPointerException来自内部的JBoss被抛出。看起来这可能是JBoss中的一个bug,因此应该在JBoss论坛上讨论。

+0

我应该更改Activator类吗? – 2011-12-28 13:23:18

+0

为什么?似乎没有任何问题(除非它没有任何用处,但我想你已经知道了!) – 2011-12-28 13:31:53

相关问题