2012-03-07 22 views
0

weblogicからPointbaseでストアドプロシージャを実行しようとすると、以下のエラーが発生します。実行時例外java.lang.ClassNotFoundExceptionストアドプロシージャの実行時

java.sql.SQLException: The external "DbLog::insLog" routine had the following runtime exception "java.lang.ClassNotFoundException: DbLog" 

次のようにだから私は

set POINTBASE_HOME=%WL_HOME%\common\eval\pointbase 
set POINTBASE_CLIENT_CLASSPATH=%POINTBASE_HOME%\lib\pbclient57.jar 
set POINTBASE_CLASSPATH=%POINTBASE_HOME%\lib\pbembedded57.jar;%POINTBASE_CLIENT_CLASSPATH%;C:\bea\user_projects\workspaces\work1\utility\build\classes 
set POINTBASE_TOOLS=%POINTBASE_HOME%\lib\pbtools57.jar 

マイDBLOGクラスは、パスにCである

、commEnv.cmdにクラスパスをsetted:\ BEA \ user_projects \ワークスペース\ときWork1 \ UTIL \ビルド\クラス\ net \ local \ util \ common FYI、net \ local \ util \ commonはパッケージ構造です。

しかし、私はRequestFilter.javaを呼び出してページを実行しようとしたとき、私は、次のエラーを取得しています

Error 500--Internal Server Error 
java.lang.NoClassDefFoundError: Could not initialize class net.local.util.common.DbLog 

--RequestFilter.java

import net.local.util.common.DbLog; 

    public final class RequestFilter { 

    public void log() { 

    DbLog dblog = new DbLog(); 
    dblog.logPreAuth(); 
    } 
    } 

--DbLog.java

package net.local.util.common; 

    import java.sql.*; 
    import org.apache.log4j.Logger; 
    import com.pointbase.jdbc.*; 


    public class DbLog { 


     private static final Logger logger = Logger.getLogger(DbLog.class); 
     private static boolean DEBUGGING = logger.isDebugEnabled(); 
     private Connection conn = null; 
     private Statement m_stmt; 
     private Statement l_stmt; 
     private CallableStatement m_callStmt = null; 
     //static ResultSet l_rs = null; 

public DbLog() { 

     logger.info("DbLog constructor called"); 
     init(); 

    } 

    public void init() { 
     logger.info("DbLog init called"); 
    } 




    public void logPreAuth() { 

      try { 
       logger.info("Inside logPreAuth method"); 



       String I_URL = "jdbc:pointbase:server://localhost:9093/weblogic_eval"; 
       Class.forName("com.pointbase.jdbc.jdbcUniversalDriver").newInstance(); 
       //Class.forName("com.pointbase.jdbc.jdbcDataSource"); 
       conn = DriverManager.getConnection(I_URL, "PBPUBLIC", "PBPUBLIC"); 

      String SQL_CREATE_PROC = "CREATE PROCEDURE insLog(IN P1 VARCHAR(30))" 
        + " LANGUAGE JAVA" 
        + " SPECIFIC insLog" 
        + " DETERMINISTIC" 
        + " NO SQL" 
        + " EXTERNAL NAME \"DbLog::insLog\"" 
        + " PARAMETER STYLE SQL";  


       m_stmt = conn.createStatement(); 
       m_stmt.executeUpdate(SQL_CREATE_PROC); 
       m_stmt.close();  
       m_callStmt = conn.prepareCall("{ call PBPUBLIC.insLog(?) }"); 
       m_callStmt.setString(1, "Success!!"); 
       m_callStmt.execute();  

      } 


      catch (Exception e) { 
       logger.error("Error in logPreAuth method" + e); 
      } 


     } 

    public void insLog(String test) 
    { 
     try { 

      l_stmt = conn.createStatement(); 
      l_stmt.execute("Insert into logs values('" + test + "')"); 
      l_stmt.close(); 
      conn.close(); 
     } 
     catch (Exception e) { 

     } 

    } 
    } 
+0

実際のエラーは、スタックトレースでさらに低下します。全スタックトレースを送信します。 –

答えて

0

java.lang.NoClassDefFoundError: Could not initialize class net.local.util.common.DbLog

この基本的にM Class.forName("net.local.util.common.DbLog")が例外で失敗したことを示します。つまり、問題のクラスのstatic変数またはイニシャライザブロックのいずれかが未処理の例外をスローしたことを意味します。クラスロード中に実行されます。

あなたは、そのクラスでそれらの2をしました:

private static final Logger logger = Logger.getLogger(DbLog.class); 
private static boolean DEBUGGING = logger.isDebugEnabled(); 

それらのどちらかは、このように例外をスローしました。そのスタックトレースはあなたのログの下に表示されます。ログを読んで、stacktraceの一番下の例外を確認してください。これが最初の根本的な原因です。十分に自己説明的でなければならない。おそらくLog4jは実行時クラスパスなどにはありません。

関連する問題