关于Java 连接池的问题

请问下面的代码中,将DataSource为static类型,然后用if(ds==null){}来判断是否需要实例化InitialContext有问题吗?

 public Connection conn = null;
    public static DataSource ds =null;
    @Override
    public DataSource getDataSource() throws Exception {
        InitialContext ctx;
        try {
           if(ds==null){
           ctx = new InitialContext();
           String strLookup = "java:comp/env/jdbc/rbac";
            ds =(DataSource) ctx.lookup(strLookup);
           }
        } catch (Exception e) {
                throw e;
        }
        return ds;
    }

DataSource在系统中应该是单例的,最好是按照标准单例模式来写