前提・実現したいこと
JUnitの単体テストにおいてJNDIを使ってMySQLとのConnectionを確立したい。
発生している問題・エラーメッセージ
以下はJunitテストを実行している最中に出たエラーを記載しています。
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or in an application resource file: java.naming.factory.initial
該当のソースコード
java
1abstract public class BaseDAO { 2 public Connection connect() throws SQLException, NamingException { 3 Context initContext = new InitialContext(); 4 // 以下でエラー 5 Context envContext = (Context)initContext.lookup("java:comp/env"); 6 DataSource ds = (DataSource)envContext.lookup("jdbc/ecsite"); 7 Connection con = ds.getConnection(); 8 return con; 9 } 10 11 public void disconnect(Connection con) throws SQLException { 12 if (con != null) { 13 con.close(); 14 } 15 } 16}
試したこと
- DriverManagerを利用した接続の場合は上手く繋げられることを確認しています。
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ecsite", "ecsite", "password");
- mysql-connector-java-8.0.24をWEB-INF/lib下に置く
- mysql-connector-java-8.0.24をC:\pleiades\tomcat\9\lib下に置く
- META-INF下のcontext.xmlを以下のように設定
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Context> <Context reloadable="true"> <Resource name="jdbc/ecsite" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/ecsite?serverTimezone=JST&characterEncoding=UTF-8" username="ecsite" password="password" maxTotal="100" maxIdle="30" maxWaitMillis="10000" validationQuery="SELECT 0" removeAbandonedOnBorrow="true" removeAbandonedTimeout="60" /> </Context>
- WEB-INF下のweb.xmlを以下のように設定
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> <display-name>Ecsite</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <resource-ref> <res-ref-name>jdbc/ecsite</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app>
- C:\pleiades\tomcat\9\conf下のserver.xmlのResourceタグをweb.xmlのように設定してみる(現在はデフォルトのままにしています)
補足情報(FW/ツールのバージョンなど)
- MySQL --version: 8.0.24
- tomcat --version: 9
- java --version: 11
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/03 03:44
2021/05/03 07:21
2021/05/03 13:10