2011-12-28 12 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 

そして、これは私が書く方法を知らないアクティベータークラスです:

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バンドルの洞察EARパッケージのメソッドを呼び出すことができますか?

キングよろしく、あなたのコメントで与えられたエラートレースに基づいて

ピーター

+0

p.s.この行を削除すると、@Resource(name = "java:/ Oracle") "というバンドルが正常にデプロイされていることがわかります。たぶん、POMファイルに何かがないのでしょうか?あるいは、OSGIバンドルはデータベースに問い合わせることができません。 –

+0

単に「動作しません」または「正しく書かれていないようです」というエラーメッセージを必ずご連絡ください。これらの種類の声明は、問題の内容を解決するためにまったく役に立たない。 –

+0

もちろん** OSGiバンドルはデータベースクエリを行うことができます。 –

答えて

1

は、私は、JBoss内からスローされるNullPointerExceptionがあることがわかります。これはJBossのバグである可能性が高いので、JBossフォーラムで議論する必要があります。

+0

Activatorクラスを変更する必要がありますか? –

+0

なぜですか?それに何か悪いことはないようです(ただし何も役に立たないことを除いて、あなたはすでにそれを知っていたと思います!) –

関連する問題