質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

0回答

224閲覧

Webアプリケーションで複数人が利用するとエラーが起こる

HisashiSakamoto

総合スコア28

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2019/04/01 07:59

編集2022/01/12 10:55

どうも、お世話になっております。

今回発生した事例は、以下のとおりとなります。

まず、データベースがあります。TB_LS_51という名前のテーブルがありますが、わかりやすく言いますと、
会員制のWebアプリケーションを構築しており、ある会員があるデータを別の会員に紹介したときに、このテーブルにその
内容が記録されると言うものです。

具体的には、紹介した会員のIDおよび紹介先の会員IDが1つのレコードとして記録されます。

それに加えて、このテーブルに対応するクラスを作成しました。

下のソースコードがそれですが、紹介をした会員のページには紹介「済」のデータ一覧が表示されますが、
getIntroductionPushListメソッドをJSPで呼び出しています。

一方で、紹介を受けた会員のページには紹介「された」データの一覧が表示され、
getIntroductionPullListメソッドをJSPで呼び出しています。

この2つのページは単独でみれば、問題なくデータベースから呼び出して表示されるのですが、ある条件でバグが発生します。

(バグの発生する条件)
会員Aさんが会員Bさんにデータを紹介した。
会員AさんがAさんの端末でF5で紹介「済」のページをリロード、会員BさんがBさんの端末でF5で紹介「受け」のページをリロード、
これを1秒ぐらいのずれはあれど、同時に行うと、どちらかの端末でエラーメッセージが出る。
Aさんの端末とBさんの端末は異なるマシンです。

エラーメッセージは
重大: Servlet.service() for servlet [jsp] in context with path [/sys] threw exception [java.lang.NullPointerException] with root cause [月 4 01 16:20:16 JST 2019]

の一つのみであり、エラーページへリダイレクトされるようになっています。
見た所、表を作成する途中で発生しているようです。
ほぼ同時期にロードすると、何らかの衝突のようなものが発生しているのではないかと思われます。

経験の豊富な方がおられましたら、教えていただけますと幸いです。よろしくお願いいたします。

Java

1package table; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.ResultSet; 6import java.sql.SQLException; 7import java.sql.Statement; 8import java.util.ArrayList; 9import java.util.List; 10 11public class TB_LS_51 { 12 13 //ゲッター、セッターがここにあります(省略しています)。 14 15 /***************don't be deleted****************/ 16 17 private int S_N; 18 19 public void setS_N(int S_N) { 20 this.S_N = S_N; 21 } 22 23 public int getS_N() { 24 return S_N; 25 } 26 27 public TB_LS_51() { 28 // TODO 自動生成されたコンストラクター・スタブ 29 } 30 31 public TB_LS_51(int TB_LS_51_id) { 32 33 String sql = "SELECT * FROM `DB`.`TB_LS_51` where `id` = " + TB_LS_51_id + ";"; 34 35 try { 36 37 Class.forName("com.mysql.jdbc.Driver"); 38 Connection conn = DriverManager.getConnection(Constant.JDBC_URL, Constant.ID, Constant.PASS); 39 Statement st = conn.createStatement(); 40 ResultSet rs = st.executeQuery(sql); 41 42 rs.next(); 43 44 this.id = rs.getInt("id"); 45 this.TB_US_01_from = rs.getInt("TB_US_01_from"); 46 this.TB_US_01_to = rs.getInt("TB_US_01_to"); 47 this.member_to = rs.getString("member_to"); 48 this.introduction_date = rs.getString("introduction_date"); 49 this.deletion_flag = rs.getInt("deletion_flag"); 50 this.decision_date = rs.getString("decision_date"); 51 this.decision_flag = rs.getInt("decision_flag"); 52 this.TB_LS_01_id = rs.getInt("TB_LS_01_id"); 53 this.name = rs.getString("name"); 54 this.favorite_button_style = rs.getInt("favorite_button_style"); 55 56 rs.close(); 57 st.close(); 58 conn.close(); 59 } catch (ClassNotFoundException e) { 60 System.out.println("ドライバを読み込めませんでした " + e); 61 } catch (SQLException e) { 62 System.out.println("エラー" + e); 63 } 64 65 } 66 67 68 public static String insertIntroductionOfList(List<TB_LS_01> tb_ls_01_selected, TB_US_01 tb_us_01_from, String member_to) { 69 70 //新しいレコードを入れるためのコード(省略しています) 71 72 } 73 74 75 public static List<TB_LS_51> getIntroductionPushList(int TB_US_01_id, String filter) { 76 77 TB_LS_51 tb_ls_51; 78 List<TB_LS_51> list = new ArrayList<TB_LS_51>(); 79 80 try { 81 82 int S_N = 0; 83 84 String sql_select = "SELECT * FROM `DB`.`TB_LS_51` where `TB_US_01_from` = " + TB_US_01_id + " order by `id`;"; 85 86 87 Class.forName("com.mysql.jdbc.Driver"); 88 Connection conn = DriverManager.getConnection(Constant.JDBC_URL, Constant.ID, Constant.PASS); 89 90 Statement st = conn.createStatement(); 91 92 ResultSet rs = st.executeQuery(sql_select); 93 94 while (rs.next()) { 95 96 S_N++; 97 98 if (rs.getInt("deletion_flag") == 0) { 99 100 tb_ls_51 = new TB_LS_51(); 101 102 tb_ls_51.setId(rs.getInt("id")); 103 tb_ls_51.setTb_Us_01_From(rs.getInt("TB_US_01_from")); 104 tb_ls_51.setTb_Us_01_To(rs.getInt("TB_US_01_to")); 105 tb_ls_51.setMember_To(rs.getString("member_to")); 106 tb_ls_51.setIntroduction_Date(rs.getString("introduction_date")); 107 tb_ls_51.setDeletion_Flag(rs.getInt("deletion_flag")); 108 tb_ls_51.setDecision_Date(rs.getString("decision_date")); 109 tb_ls_51.setDecision_Flag(rs.getInt("decision_flag")); 110 tb_ls_51.setTb_Ls_01_Id(rs.getInt("TB_LS_01_id")); 111 tb_ls_51.setName(rs.getString("name")); 112 tb_ls_51.setFavorite_Button_Style(rs.getInt("favorite_button_style")); 113 114 tb_ls_51.setS_N(S_N); 115 116 list.add(tb_ls_51); 117 118 } 119 120 } 121 122 rs.close(); 123 124 st.close(); 125 conn.close(); 126 127 } catch (ClassNotFoundException e) { 128 System.out.println("ドライバを読み込めませんでした " + e); 129 e.printStackTrace(); 130 } catch (SQLException e) { 131 System.out.println("エラー" + e); 132 e.printStackTrace(); 133 } finally { 134 } 135 136 return list; 137 138 } 139 140 public static List<TB_LS_51> getIntroductionPullList(int TB_US_01_id) { 141 142 TB_LS_51 tb_ls_51; 143 List<TB_LS_51> list = new ArrayList<TB_LS_51>(); 144 145 String sql_select = "SELECT * FROM `DB`.TB_LS_51 where `TB_US_01_to` = " + TB_US_01_id + " and `deletion_flag` = 0 order by `id` desc;"; 146 147 try { 148 149 Class.forName("com.mysql.jdbc.Driver"); 150 Connection conn = DriverManager.getConnection(Constant.JDBC_URL, Constant.ID, Constant.PASS); 151 152 Statement st = conn.createStatement(); 153 154 ResultSet rs = st.executeQuery(sql_select); 155 156 while (rs.next()) { 157 158 tb_ls_51 = new TB_LS_51(); 159 160 tb_ls_51.setId(rs.getInt("id")); 161 tb_ls_51.setTb_Us_01_From(rs.getInt("TB_US_01_from")); 162 tb_ls_51.setTb_Us_01_To(rs.getInt("TB_US_01_to")); 163 tb_ls_51.setMember_To(rs.getString("member_to")); 164 tb_ls_51.setIntroduction_Date(rs.getString("introduction_date")); 165 tb_ls_51.setDeletion_Flag(rs.getInt("deletion_flag")); 166 tb_ls_51.setDecision_Date(rs.getString("decision_date")); 167 tb_ls_51.setDecision_Flag(rs.getInt("decision_flag")); 168 tb_ls_51.setTb_Ls_01_Id(rs.getInt("TB_LS_01_id")); 169 tb_ls_51.setName(rs.getString("name")); 170 tb_ls_51.setFavorite_Button_Style(rs.getInt("favorite_button_style")); 171 172 list.add(tb_ls_51); 173 174 } 175 176 rs.close(); 177 178 st.close(); 179 conn.close(); 180 181 } catch (ClassNotFoundException e) { 182 System.out.println("ドライバを読み込めませんでした " + e); 183 } catch (SQLException e) { 184 System.out.println("エラー" + e); 185 } finally { 186 187 } 188 189 return list; 190 191 } 192}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2019/04/01 08:15

> どちらかの端末でエラーメッセージが出る 質問に、エラーメッセージを具体的に記載ください。
HisashiSakamoto

2019/04/01 08:21 編集

エラーメッセージは 重大: Servlet.service() for servlet [jsp] in context with path [/sys] threw exception [java.lang.NullPointerException] with root cause [月 4 01 16:20:16 JST 2019] の一つのみであり、エラーページへリダイレクトされるようになっています。 見た所、表を作成する途中で発生しているようです。
Y.H.

2019/04/01 08:26

この内容(エラーメッセージ)をコメントではなく質問を編集し追記して下さい。
jimbe

2019/04/01 10:53

該当メソッドを2度連続して呼ぶ java アプリケーションを作り実行してみて, 例外が発生すれば, スタックトレースを追えるのではないでしょうか.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問