- PR -

ExceptionInInitializerErrorが出てしまいます。

投稿者投稿内容
ちゃこ
会議室デビュー日: 2003/06/18
投稿数: 5
投稿日時: 2005-09-06 16:25
はじめまして、ちゃこと申します。

環境
PC Win2000
eclipse3.01
lomboz.301
tomcat5.0.28
j2sdk 1.4.2_07
struts1.2.4
postgresql8.0.0

上記の環境で開発をしております。


ビジネスロジックでの記述で、インスタンスを生成するところで
エラーが出てしまいます。
---------------------------------------------
java.lang.ExceptionInInitializerError
jp.xxx.xxx.xxx.action.GraphYearBloodPressureAction.executeAction(GraphYearBloodPressureAction.java:110)
jp.xxx.xxx.xxx.action.BaseAction.execute(BaseAction.java:57)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:156)

---------------------------------------------

一つのソースコードの行数とかも関係しているのでしょうか?
いままで、メソッドを追加してもエラーがでなかったのですが、
同じようなビジネスロジックを一つ用意しても
同じ現象が出てしまうようになりました。


ソースは以下のとおりです。

+++++ アクションサーブレット +++++

package jp.xxx.xxx.xxx.action;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jp.xxx.xxx.xxx.model.biz.BloodPressureManager;
import jp.xxx.xxx.xxx.model.biz.OneYearFactory;
import jp.xxx.xxx.xxx.model.biz.SevenDaysFactory;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.DynaValidatorForm;

/**
* Action クラス
*/
public final class GraphYearBloodPressureAction extends BaseAction {

/**
* Method execute
* @param ActionMapping mapping
* @param ActionForm form
* @param HttpServletRequest request
* @param HttpServletResponse response
* @return ActionForward
* @throws Exception
*/
public ActionForward executeAction(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {





省略






// 検索をする
List list = null;

try {
BloodPressureYearDAO dao = new BloodPressureYearDAO();
list = bloodPressureManager.getListIntYear(empno, cal_y, cal_m, cal_d ,pp);
//list = dao.findByEmpnoIntYear(empno, cal_y, cal_m, cal_d ,pp);
} catch (Exception e1) {
e1.printStackTrace();
}





省略





}

+++++ ビジネスロジック部分 +++++

package jp.xxx.xxx.xxx.model.biz;

import java.util.List;

import jp.xxx.xxx.xxx.model.dao.BloodPressureYearDAO;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
* Model クラス
*/
public class BloodPressureManager {






省略






public List getListIntYear(String empno, int cal_y, int cal_m, int cal_d, int pp) throws Exception {

List list = null;

try { ↓ここでエラーが出てしまいます
list = new BloodPressureYearDAO().findByEmpnoIntYear(empno, cal_y, cal_m, cal_d ,pp);
return list;

} finally {
log.info("検索処理終了");
}
}






省略






}



+++++ データベース利用部分のソース +++++

package jp.xxx.xxx.xxx.model.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import jp.xxx.xxx.xxx.model.biz.DataSourceFactory;
import jp.xxx.xxx.xxx.model.biz.OneMonthFactory;
import jp.xxx.xxx.xxx.model.biz.OneYearFactory;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class BloodPressureYearDAO {

/** リソースバンドル */
private static ResourceBundle bundle = ResourceBundle
.getBundle("jp.xxx.xxx.xxx.model.dao.sql");

// SQL文をリソースバンドルより取得
private static final String SQL_SELECT_BYSEVENDAYS = bundle.getString("SQL_KENKO_SELECT_BYSEVENDAYS_BLOOD");
private static final String SQL_SELECT_BYAVG = bundle.getString("SQL_KENKO_SELECT_BYAVG_BLOOD");
private static final String SQL_SELECT_BYYEAR = bundle.getString("SQL_KENKO_SELECT_BYYEAR_BLOOD");
private static final String SQL_SELECT_BYTIMEYEAR = bundle.getString("SQL_KENKO_SELECT_BYYEARTIME_BLOOD");
private static final String SQL_SELECT_BYYEARAVG = bundle.getString("SQL_KENKO_SELECT_BYYEARAVG_BLOOD");

private static Log log = LogFactory.getLog(BloodPressureYearDAO.class);

public List findByEmpnoIntYear(String empno, int cal_y, int cal_m, int cal_d, int pp) throws Exception {

Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;

try {
List list = new ArrayList();
OneYearFactory oneYearFactory = new OneYearFactory();
List dt_year = oneYearFactory.getOneYearList(pp, cal_y, cal_m, cal_d);

// 検索用の日付をセットする。
String thisYear = (String) dt_year.get(0);
String oneYearAgo = (String) dt_year.get(1);

int ii[] = new int[37];
int vv[][] = new int[5][37];
String dd = null;
int i = 0;

conn = DataSourceFactory.getDataSource().getConnection();
//SQLステートメントオブジェクトの作成
stmt = conn.prepareStatement(SQL_SELECT_BYYEAR);
stmt.setString(1, empno);
stmt.setString(2, oneYearAgo);
stmt.setString(3, thisYear);

// select文の実行
rs = stmt.executeQuery();

while (rs.next()) {
dd = rs.getString("ym");
i = Integer.parseInt(dd.substring(5, 7)) - 1;
int j = 0;
j = Integer.parseInt(rs.getObject("BP02_TIME").toString());
ii[i * 3 + j] = j;
vv[1][i * 3 + j] = rs.getInt("hi");
vv[2][i * 3 + j] = rs.getInt("low");
vv[3][i * 3 + j] = rs.getInt("pulse");
vv[4][i * 3 + j] = rs.getInt("sugar");
}

list.add(ii);
list.add(vv);

log.info("取得成功");

return list;

} finally {
try {
if (rs != null){
rs.close();
}
if (stmt != null){
stmt.close();
}
if (conn != null){
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}


どうか、アドバイスをよろしくお願い致します。

[ メッセージ編集済み 編集者: ちゃこ 編集日時 2005-09-06 17:57 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-06 16:42
BloodPressureYearDAO のクラスを読み込むところで発生しているのであれば、そのクラスのスタティックイニシャライザで実行時例外やエラーが発生していることになります。
ExceptionInInitializerError.getCause().printStackTrace() すれば根本原因を表示できるかと存じます。
static ブロックや static 変数の初期化を行っている場所のスタックトレースがとれます。
ちゃこ
会議室デビュー日: 2003/06/18
投稿数: 5
投稿日時: 2005-09-06 16:53
インギ様

早速の返信ありがとうございます。

>BloodPressureYearDAO のクラスを読み込むところで
>発生しているのであれば、そのクラスのスタティックイニシャライザで
>実行時例外やエラーが発生していることになります。

そうです。読み込むところで発生しています。

>ExceptionInInitializerError.getCause().printStackTrace()
> すれば根本原因を表示できるかと存じます。
>static ブロックや static 変数の初期化を行っている場所のスタックトレースがとれます。

早速、確認したいのですが、上記の利用方法がわからないのです。
たとえば、どの場所で、どのように記述したらよろしいのでしょうか?
申し訳ございません。教えてくださいませ。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-06 16:57
コード:
} catch (Exception e1) { 
e1.printStackTrace(); 
} 


としているところで、ExceptionInInitializerError をキャッチしてみます。(あくまで暫定的に)
コード:
} catch (Exception e1) { 
e1.printStackTrace(); 
} catch(ExceptionInInitializerError error){
 errori.getCause().printStackTrace();
}


どうでしょう?なにか表示されましたか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-06 16:59
引用:

ちゃこさんの書き込み (2005-09-06 16:53) より:

早速、確認したいのですが、上記の利用方法がわからないのです。
たとえば、どの場所で、どのように記述したらよろしいのでしょうか?
申し訳ございません。教えてくださいませ。


クラス ExceptionInInitializerError
使用例

# リロードするの忘れていました。(*_ _)

[ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2006-10-12 11:29 ]
ちゃこ
会議室デビュー日: 2003/06/18
投稿数: 5
投稿日時: 2005-09-06 17:06
インギ様

ご伝授ありがとうございます。

出ました!!

---------------------------------------
java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key SQL_KENKO_SELECT_BYYEARAVG_BLOOD
at java.util.ResourceBundle.getObject(ResourceBundle.java:326)
at java.util.ResourceBundle.getString(ResourceBundle.java:286)
at jp.xxx.xxx.xxx.model.dao.BloodPressureYearDAO.<clinit>(BloodPressureYearDAO.java:36)
at jp.xxx.xxx.xxx.model.biz.BloodPressureManager.getListIntYear(BloodPressureManager.java:146)
at jp.xxx.xxx.xxx.action.GraphYearBloodPressureAction.executeAction(GraphYearBloodPressureAction.java:110)
at jp.xxx.xxx.xxx.action.BaseAction.execute(BaseAction.java:57)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:156)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
java.lang.NullPointerException
at jp.xxx.xxx.xxx.model.biz.OneYearFactory.getAllAverageListYear(OneYearFactory.java:174)
at jp.xxx.xxx.xxx.action.GraphYearBloodPressureAction.executeAction(GraphYearBloodPressureAction.java:128)
at jp.xxx.xxx.xxx.action.BaseAction.execute(BaseAction.java:57)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:156)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
2005/09/06 17:01:42 jp.xxx.xxx.xxx.model.biz.SystemExceptionHandler execute
致命的: java.lang.NullPointerException
at jp.xxx.xxx.xxx.action.GraphYearBloodPressureAction.executeAction(GraphYearBloodPressureAction.java:138)
at jp.xxx.xxx.xxx.action.BaseAction.execute(BaseAction.java:57)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:156)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)

---------------------------------------
SQL文を書いているプロパティファイルがあるのですが、
それが、読み込めていないようです。
その辺を調査してみます。

[ メッセージ編集済み 編集者: ちゃこ 編集日時 2005-09-06 17:58 ]
ちゃこ
会議室デビュー日: 2003/06/18
投稿数: 5
投稿日時: 2005-09-06 17:25
申し訳ございません。
記述ミスでした。。(汗)

変更前
// SQL文をリソースバンドルより取得
private static final String SQL_SELECT_BYSEVENDAYS = bundle.getString("SQL_KENKO_SELECT_BYSEVENDAYS_BLOOD");
private static final String SQL_SELECT_BYAVG = bundle.getString("SQL_KENKO_SELECT_BYAVG_BLOOD");
private static final String SQL_SELECT_BYYEAR = bundle.getString("SQL_KENKO_SELECT_BYYEAR_BLOOD");
private static final String SQL_SELECT_BYTIMEYEAR = bundle.getString("SQL_KENKO_SELECT_BYYEARTIME_BLOOD");
private static final String SQL_SELECT_BYYEARAVG = bundle.getString("SQL_KENKO_SELECT_BYYEARAVG_BLOOD");



変更後
// SQL文をリソースバンドルより取得
private static final String SQL_SELECT_BYSEVENDAYS = bundle.getString("SQL_KENKO_SELECT_BYSEVENDAYS_BLOOD");
private static final String SQL_SELECT_BYAVG = bundle.getString("SQL_KENKO_SELECT_BYAVG_BLOOD");
private static final String SQL_SELECT_BYYEAR = bundle.getString("SQL_KENKO_SELECT_BYYEAR_BLOOD");
private static final String SQL_SELECT_BYTIMEYEAR = bundle.getString("SQL_KENKO_SELECT_BYYEARTIME_BLOOD");

処理が走るようになりました。
この後の作業が続けられます。

インギ様
じゃんぬねっと様

本当にありがとうございました(涙)
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-06 17:42
ExceptionInInitializerError はそれ自体のスタックトレースでは原因がわからないのでちょっと面倒ですよね。
解決したとのことでなによりです。

スキルアップ/キャリアアップ(JOB@IT)