java应用程序通过spring访问数据源失败(请大家帮忙指点)

xtbzqw 2009-04-07 04:52:03
大家好,我在做一个java swing程序的时候遇到一些问题。
我的系统分为: swing(前端图形界面)+spring+hibernate
在开发的过程中遇到无法访问数据源的问题,我只知道在bs系统中通过配置tomcat数据源,然后spring去访问这个数据源,可是现在是一个j2se程序,也就是说没有应用服务器,这样就不知道怎么去注册数据源,我通过在网上找资料,把数据源通过jndi来注册,虽然jndi注册成功,可是spring还是无法得到数据源,请各位帮忙指点
我的java代码:

import java.beans.PropertyVetoException;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.orm.hibernate3.LocalSessionFactoryBean;

import com.xtb.util.PlatUtil;
import com.mchange.v2.c3p0.ComboPooledDataSource;

;public class ServiceFactory {
//这里是初始化数据源,并把它注册到jndi中
static{
try{
PlatUtil util = new PlatUtil();
ComboPooledDataSource dataSource=new ComboPooledDataSource();
dataSource.setUser("root");
dataSource.setPassword("000000");
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/chat?useUnicode=true&characterEncoding=gbk");
dataSource.setMaxPoolSize(10);
dataSource.setMinPoolSize(2);
dataSource.setAcquireIncrement(2);
Properties prop=new Properties();
prop.setProperty(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext.RefFSContextFactory");
prop.setProperty(Context.PROVIDER_URL,util.getPlatPath("temp"));
Context myContext=new InitialContext(prop);
myContext.bind("dataSource",dataSource);

} catch(Exception e){
e.printStackTrace();
}
}
private static ServiceFactory factory = new ServiceFactory();

private ApplicationContext oAC = null;

private ServiceFactory() {
init();
}

public static ServiceFactory getInstance() {
return factory;
}

public Object getService(String name) {
return oAC.getBean(name);
}

public void init() {
PlatUtil util = new PlatUtil();
oAC = new FileSystemXmlApplicationContext(util
.getPlatPath("applicationContext.xml"));
}

public static void main(String[] args) {
UserService service = (UserService) ServiceFactory.getInstance()
.getService("userService");
if (service == null)
System.out.println("fail");
else
System.out.println("success");
}
}


这里是我的spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>


<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>dataSource</value>
</property>
</bean>


<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/xtb/model/Users.hbm.xml</value>
<value>com/xtb/model/Message.hbm.xml</value>
<value>com/xtb/model/LoginRecord.hbm.xml</value>
</list>
</property>
</bean>

<bean id="dao" class="com.xtb.dao.BaseDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="baseService" abstract="true">
<constructor-arg>
<ref bean="dao" />
</constructor-arg>
</bean>

<bean id="userService" class="com.xtb.service.UserServiceImpl"
parent="baseService">
</bean>

<bean id="messageService" class="com.xtb.service.MessageServiceImpl"
parent="baseService">
</bean>

<bean id="loginRecordService"
class="com.xtb.service.LoginRecordServiceImpl" parent="baseService">
</bean>
</beans>



...全文
139 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Study_Work_2009 2009-04-08
  • 打赏
  • 举报
回复
恭喜
xtbzqw 2009-04-08
  • 打赏
  • 举报
回复
谢谢各位,是我自己配置spring的时候,配置错了,而不是上面这个原因,谢谢大家!
loveunittesting 2009-04-07
  • 打赏
  • 举报
回复
。。。没应用服务器干嘛非要用jndi呢,不懂。比如我用c3p0数据源这样就ok了,
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/dbname?autoReconnect=true&useUnicode=true&characterEncoding=GBK"/>
<property name="user" value="username"/>
<property name="password" value="password"/>
</bean>
ben0759 2009-04-07
  • 打赏
  • 举报
回复
楼主应该是不能用jndi吧,我记得jndi主要是依附在服务器,例如tomcat上才可以的,楼主可以考虑用c3p0来实现你要的功能。
mike_24 2009-04-07
  • 打赏
  • 举报
回复
UP
999朵玫瑰 2009-04-07
  • 打赏
  • 举报
回复
学习了
yangfeitarena 2009-04-07
  • 打赏
  • 举报
回复
你的数据源配置正确了?看看下面的:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/数据源名</value>
</property>
</bean>
  • 打赏
  • 举报
回复
对,帮你顶
mumu_java 2009-04-07
  • 打赏
  • 举报
回复
lz先确定com.mysql.jdbc.Driver驱动文件是否在你的应用下边,然后你的jdbc:mysql://localhost:3306/chat?useUnicode=true&characterEncoding=gbk似乎没有数据库用户名和密码,lz的这种配置方法我没用过,不过在配置文件中或代码中是要有用户名和密码的。

81,111

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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