【问题标题】:javax.naming.NoInitialContextException with mysql DataSourcejavax.naming.NoInitialContextException 与 mysql 数据源
【发布时间】:2013-11-16 08:43:11
【问题描述】:

尝试连接 MySQL 数据库

MysqlDataSource mysqlDs = new MysqlDataSource();
Properties prop = new Properties();
String mysqlDataSourceDriver = "com.mysql.jdbc.jdbc2.optional.MysqlDataSource";  
Properties properties = new Properties();  
properties.put(Context.INITIAL_CONTEXT_FACTORY, mysqlDataSourceDriver); 
properties.put(Context.PROVIDER_URL , "jdbc:mysql://localhost:3306/database");
Context ctx = new InitialContext(prop);
ctx.bind("jdbc/wczasy", mysqlDs);

还有堆栈跟踪:

javax.naming.NoInitialContextException: Need to specify class name in environment or     system property, or as an applet parameter, or in an application resource file:      java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344)
at javax.naming.InitialContext.bind(InitialContext.java:419)
at src.wczasy.database.Connector.connect(Connector.java:53)
at src.wczasy.Wczasy.main(Wczasy.java:10)

由行引起:ctx.bind("jdbc/wczasy", mysqlDs); 我被困住了,有人可以帮我吗?谢谢。

【问题讨论】:

    标签: java mysql datasource jndi


    【解决方案1】:

    这是因为MysqlDataSource 没有实现javax.naming.spi.InitialContextFactory 接口。

    如果您不在容器中,则可以使用 rmi 注册表。比如:

    try{
      startRegistry();
      InitialContext context = createContext();
      MysqlDataSource mysqlDs = new MysqlDataSource();
      context.rebind("jdbc/wczasy", mysqlDs);
    } catch (Exception e) {
      System.out.println("Error while binding: " + e.getMessage());
      e.printStackTrace();
    }
    
    
    private static void startRegistry() throws RemoteException {
      LocateRegistry.createRegistry(1099);
      System.out.println("RMI registry ready.");
    }
    
    private static InitialContext createContext() throws NamingException {
      Properties env = new Properties();
      env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
      env.put(Context.PROVIDER_URL, "rmi://localhost:1099");
      InitialContext context = new InitialContext(env);
      return context;
    }
    

    【讨论】:

    • 解释和一个可行的例子是我们所寻求的。非常感谢!
    猜你喜欢
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 2018-08-06
    • 1970-01-01
    • 2015-05-10
    • 2013-03-24
    • 2012-08-04
    相关资源
    最近更新 更多