前提・実現したいこと
現在、JavaEE環境でのWebアプリケーションを使用しています。その中でJNDIを使用したDB操作ロジックを実装しているのですがJunitから単体テストを実行した際にエラーが発生し悩んでおります。
JunitではTomcatが起動していないのでJNDIが使用できないのかなと考えているのですが、
具体的な対策等がわからずにいます。
発生している問題・エラーメッセージ
javax.naming.NoInitialContextException: Cannot instantiate class: org.osjava.sj.SimpleContextFactory [Root exception is java.lang.ClassNotFoundException: org.osjava.sj.SimpleContextFactory]
該当のソースコード
Java
1DatasorceをJNDIから取得するクラス 2public class ConnectionProvider { 3 4 public static DataSource connectionDb() { 5 // content.xmlからDB接続情報を取得する 6 7 Context initContext = null; 8 Context envContext = null; 9 DataSource ds = null; 10 11 try { 12 initContext = new InitialContext(); 13 envContext = (Context)initContext.lookup("java:/comp/env"); 14 ds = (DataSource) envContext.lookup("jdbc/social_meeting"); 15 16 } catch (NamingException e) { 17 Log4j log = Log4j.getInstance(); 18 log.error(e); 19 } finally { 20 try { 21 initContext.close(); 22 envContext.close(); 23 } catch (NamingException e) { 24 Log4j log = Log4j.getInstance(); 25 log.error(e); 26 } 27 } 28 29 return ds; 30 } 31} 32
Java
1ConnectionProvider の呼び出し元 2 public Users findUser(String emailAddress) { 3 4 StringBuilder sql = new StringBuilder(); 5 sql.append("SELECT "); 6 sql.append("id"); 7 sql.append(",email_address"); 8 sql.append(",password"); 9 sql.append(",created_at"); 10 sql.append(",update_at"); 11 sql.append("FROM"); 12 sql.append("users"); 13 sql.append("WHERE"); 14 sql.append("email_address = ?"); 15 16 Users user = new Users(); 17 // コネクション情報を取得して格納 18 DataSource ds = ConnectionProvider.connectionDb(); 19 20 try (Connection con = ds.getConnection(); 21 PreparedStatement ps = con.prepareStatement(sql.toString());) { 22 23 ps.setString(1, emailAddress); 24 ResultSet rs = ps.executeQuery(); 25 26 while (rs.next()) { 27 28 user.setId(rs.getInt("id")); 29 user.setEmailAddress(rs.getString("email_address")); 30 user.setPassword(rs.getString("password")); 31 user.setCreatedAt(rs.getDate("created_at")); 32 user.setUpdatedAt(rs.getDate("update_at")); 33 } 34 35 } catch (SQLException e) { 36 Log4j log = Log4j.getInstance(); 37 log.error(e); 38 } 39 return user; 40 } 41
試したこと
SimpleJNDIというものを調べて試してみたのですが、うまく行かず途方に暮れております。
補足情報(FW/ツールのバージョンなど)
実行環境
JavaSE 11
JavaEE 8
Tomcat 9.0.341
開発環境
IntelliJ
どなたかご回答よろしくお願い致します。
あなたの回答
tips
プレビュー