六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 139|回复: 0

学习配置Sun JAVA System Application Server 中的数据源

[复制链接]

升级  50%

106

主题

106

主题

106

主题

举人

Rank: 3Rank: 3

积分
350
 楼主| 发表于 2013-1-14 23:00:10 | 显示全部楼层 |阅读模式
使用netbean 6.0 ,JDK1.6 , J2EE 5 SDK ,Derby数据库
1.首先配置Connection Pool
开始一直在J2EE 5 SDK的控制台中配置,但是在配置Connection Pool时,利用默认的参数,并将DatabaseName,User,Password,driverClass,serverName分别配置好后,却无法Ping通。找了很长时间都没找到原因,后来发现利用netbean就能配置Connection Pool,方法:File->New File->[Categories:Glassfish, File Type:JDBC Connection Pool]->next-> …… 。利用这种方法配置好后,在J2EE 5 SDK的控制台中可以发现增加的这个Connection Pool,并且能够ping通。
比较了一下上面两种做法,发现在控制台中配置的Additional Properties与在netbean中配置的不同,增加了一个Url:jdbc:derby://localhost:1527/LoginInfo属性,关键是少了很多属性【默认的属性还有:SecurityMechanism=4,RetrieveMessageText=true,TraceFileAppend=false,TraceLevel=-1,LoginTimeout=0】,将SecurityMechanism这个属性delete掉后,或者将值改为3和8都能ping通。
注:SecurityMechanism,the valid values are 4(USRIDONL), 3(USRIDPWD), 9(EUSRIDPWD) and8(USRSSBPWD).2.然后配置JDBC Resource最初设置的JNDI Name:jdbc/login,选择好上面配置的Connection Pool。在sun-web.xml中设置如下: <resource-ref>
<res-ref-name>ds</res-ref-name>
<jndi-name>jdbc/login</jndi-name>
</resource-ref>程序中的使用方法: @Resource(name = "ds")
private DataSource ds;
con = ds.getConnection(); // 即应该可以使用,但是报错:【Caused by: com.sun.enterprise.InjectionException: Exception attempting to inject Res-Ref-Env-Property: ds@javax.sql.DataSource@ resolved as: jndi: jdbc/login[email=myDatasource@res]@res[/email] principal: [email=null@mail]null@mail[/email]: null

改正方法:将JNDI Name改成login,在sun-web.xml中设置如下: <resource-ref>
<res-ref-name>ds</res-ref-name>
<jndi-name>login</jndi-name>
</resource-ref>成功!问题:
在程序中如何不用
@Resource(name = "ds")这种方式,为什么使用
            InitialContext icontext = new InitialContext();
            Context   context   =   (Context) icontext.lookup("java:com/env");   
            DataSource ds = (DataSource) context.lookup("login");
却无法取到数据源?
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表