容器外调用tomcat的数据源问题

sun113 2007-04-27 10:14:01
使用了jndi但是会出错,

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"org.apache.commons.dbcp.BasicDataSourceFactory");
env.put(Context.PROVIDER_URL,"localhost:8080");

Context initialContext = new InitialContext(env);

这样配置后,提示需要Server Class name,请问tomcat对应Server Class name是什么,或者请大家给个例子。

谢谢。
...全文
1284 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyecat 2008-05-28
  • 打赏
  • 举报
回复
用下面这段即可

BasicDataSource ds= new BasicDataSource();
// 设置数据库驱动
ds.setDriverClassName("org.gjt.mm.mysql.Driver");
// 设置JDBC的URL
ds.setUrl("jdbc:mysql://localhost/test");
ds.setUsername("root");
ds.setPassword("root");
// 设置连接池初始大小
bdds.setInitialSize(2);

javaURLContextFactory j = new javaURLContextFactory();

// JNDI配置
Hashtable env = new Hashtable();
env.put("java.naming.factory.initial",
"org.apache.naming.java.javaURLContextFactory");
InitialContext ctx = new InitialContext(env);

// 数据源绑定到JNDI
ctx.bind("tomcatDS", ds);
// 在JNDI查找数据源
DataSource ds = (DataSource) ctx.lookup("tomcatDS");
Connection con = ds.getConnection();
log.info(con.toString());
Statement stmt = con.createStatement();
String strSql = "select * from diary";
ResultSet rs = stmt.executeQuery(strSql);
pubroom 2007-11-20
  • 打赏
  • 举报
回复
这个问题好像还没解决,哪位大侠帮忙看看阿
pubroom 2007-11-20
  • 打赏
  • 举报
回复
javax.naming.NoInitialContextException: Cannot instantiate class: org.apache.commons.dbcp.BasicDataSourceFactory [Root exception is java.lang.ClassCastException]
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:652)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243)
at javax.naming.InitialContext.init(InitialContext.java:219)
at javax.naming.InitialContext.<init>(InitialContext.java:195)
at com.mas.db.DBPool.getInitialContext(DBPool.java:78)
at com.mas.db.DBPool.<clinit>(DBPool.java:27)
Caused by: java.lang.ClassCastException
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:649)
... 5 more
'DBPool' is an unknown DataSource
pubroom 2007-11-20
  • 打赏
  • 举报
回复
package com.mas.db;

import java.sql.*;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.StringRefAddr;





import javax.sql.DataSource;

public class DBPool {
private static DataSource pool;
static {
//Context env = null;
// env = (Context) new InitialContext().lookup("java:comp/env");
// pool = (DataSource)env.lookup("jdbc/DBPool");
InitialContext initialContext = null;
try
{
initialContext = getInitialContext();
pool = (DataSource) initialContext.lookup("jdbc/DBPool");
if(pool==null)
System.out.println("查找连接池失败!");
} catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

if(pool==null)
System.err.println("'DBPool' is an unknown DataSource");

}
public static DataSource getPool() {
return pool;
}
private static InitialContext getInitialContext() throws Exception
{
String url = "jdbc:mysql://192.168.2.201:3306/mastest";
String user = "mastest";
String password = "mastest";
Properties properties = null;
try
{

// InitialContext ic = new InitialContext();
//
// // Construct BasicDataSource reference
// Reference ref = new Reference("javax.sql.DataSource",
// "org.apache.commons.dbcp.BasicDataSourceFactory", null);
// ref.add(new StringRefAddr("driverClassName",
// "com.mysql.jdbc.Driver"));
// ref.add(new StringRefAddr("url",
// url));
// ref.add(new StringRefAddr("username", user));
// ref.add(new StringRefAddr("password", password));
// ic.rebind("mySqlDS", ref);

properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.commons.dbcp.BasicDataSourceFactory");
// org\apache\tomcat\dbcp\dbcp

properties.put(Context.PROVIDER_URL, url);
if (user != null)
{
properties.put(Context.SECURITY_PRINCIPAL, user);
properties.put(Context.SECURITY_CREDENTIALS,
password == null ? " " : password);
}
return new InitialContext(properties);
}
catch(Exception e)
{
throw e;
}
}
public static void main(String args[])
{
DataSource ds = DBPool.getPool();
try
{
if(ds!=null)
{
Connection conn = ds.getConnection();
if(conn!=null)
{
System.out.println("conn is not null!");
}
}
} catch (SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
sun113 2007-05-14
  • 打赏
  • 举报
回复
最近没时间弄,结贴吧!
luc_ne 2007-04-29
  • 打赏
  • 举报
回复
DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/MyDbPool");
在容器外也能这样用?强的
sun113 2007-04-28
  • 打赏
  • 举报
回复
pdvv(我爱花猫)
我觉得问题出在无法加载org.apache.commons.dbcp.BasicDataSourceFactory,使用DBCP连接池需要包naming-factory-dbcp.jar,把它包含进来试试。

测试下再说,谢谢回复
sun113 2007-04-28
  • 打赏
  • 举报
回复
worinia()
到底是容器内还是外部?
你上面的代码上容器内的了

上面的代码是在一般的类中写的。我想这不是tomcat范围内吧
我理解的是tomcat管理的只是jsp和action,form等

刚才一想,我对这个概念其实挺模糊的。
当然我是配置的tomcat数据源,启动tomcat,然后再在一般的类中调用的上述的代码。
不知道这个算不算容器外呢?
pdvv 2007-04-27
  • 打赏
  • 举报
回复
是不是找不到org.apache.commons.dbcp.BasicDataSourceFactory类啊?

容器外不清楚,容器内很简单:
Context initialContext = new InitialContext();
DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/MyDbPool");

likgui 2007-04-27
  • 打赏
  • 举报
回复
关注
vdragon 2007-04-27
  • 打赏
  • 举报
回复
不太明白你为什么需要在tomcat外来调用tomcat的datasource
用commons-dbcp自己写一个好了
很简单的
worinia 2007-04-27
  • 打赏
  • 举报
回复
到底是容器内还是外部?
你上面的代码上容器内的了
sun113 2007-04-27
  • 打赏
  • 举报
回复
是这样的容器外配置是需要传一个参数进去的。
就是我开始说的
Hashtable env = new Hashtable();

这个哈希表应该包含一些参数,可以我的还是出问题。如下:
javax.naming.NoInitialContextException: Cannot instantiate class: org.apache.commons.dbcp.BasicDataSourceFactory [Root exception is java.lang.ClassCastException]
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:652)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243)
at javax.naming.InitialContext.init(InitialContext.java:219)
at javax.naming.InitialContext.<init>(InitialContext.java:195)
at datasource.TomcatDSTest.DBManager(TomcatDSTest.java:74)
at datasource.TomcatDSTest.main(TomcatDSTest.java:23)
Caused by: java.lang.ClassCastException
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:649)
... 5 more
java.lang.NullPointerException
at datasource.TomcatDSTest.main(TomcatDSTest.java:27)
Exception in thread "main"


错误是在conn = ds.getConnection();这句出的
程序如下:
DataSource ds = (DataSource)initialContext.lookup("java:comp/env/jdbc/MyDbPool");
Connection conn ;
ResultSet rs = null;
try{
conn = ds.getConnection();
String sql = "select * from ammm";
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
showRS(rs);
}catch(SQLException e){
e.printStackTrace();
}
pdvv 2007-04-27
  • 打赏
  • 举报
回复
我觉得问题出在无法加载org.apache.commons.dbcp.BasicDataSourceFactory,使用DBCP连接池需要包naming-factory-dbcp.jar,把它包含进来试试。
sun113 2007-04-27
  • 打赏
  • 举报
回复
首先,谢谢我爱花猫,
你给的答案不是我的问题,
我的代码容器内的没问题,容器外的就需要另外配置了,想研究下,还请帮忙。

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧