如果JNDI数据源连接为null,则抛出什么异常?

时间:2015-01-21 06:32:42

标签: java database exception junit jndi

我有以下代码:

static Connection getConnection() {
        String datasourceContext = "jdbc/infy";
        Connection connection = null;
        try {
            Context initialContext = new InitialContext();

            DataSource datasource = (DataSource) initialContext
                    .lookup(datasourceContext);
            if (datasource != null) {
                connection = datasource.getConnection();
                connection.setAutoCommit(false);
            } else {
                System.out.println("Failed to lookup datasource");
            }
        } catch (NamingException e) {
            System.out.println("Failed to get context " + e);
        } catch (SQLException e) {
            System.out.println("Failed to get connection " + e);
        }
        return connection;
    }

我正在尝试制作整洁且可测试的代码,我的问题是:如何在数据源为null或/和连接为空时正确处理大小写,而不使用条件语句。我认为最好的办法是抛出异常,但是什么样的异常? 谢谢。

1 个答案:

答案 0 :(得分:1)

如果找不到数据源,JNDI查找会抛出NameNotFoundException。 AFAIK它永远不应该返回null,所以我没有看到null检查中的点。

你可以调整关于NamingException的错误消息,因为它目前是误导性的,NameNotFoundException也是一个NamingException - 尽管你真正应该做的只是重新抛出你得到的异常。我只是将其更改为未经检查的异常而不是检查,如

 catch (NamingException e) {
    throw new IllegalStateException("Failed with JNDI lookup of "
        + datasourceContext, e);
 }

与SQLException类似。