2 <div id="main">
3 <div id="like" >
4 <h2>猜你喜欢</h2>
5 <ul>
6 <li>海飞丝洗头膏</li>
7 <li >六神花露水</li>
8 <li>舒肤佳香皂</li>
9 <li>心相印纸巾</li>
10 <li>哇哈哈矿泉水</li>
11 <li>王老吉</li>
12 </ul>
13 </div>
14 <div id="hot" >
15 <h2>热门推荐</h2>
16 <ul>
17 <li>融氏橄榄油</li>
18 <li>帮宝适纸尿裤</li>
19 <li>有机大米</li>
20 <li>妙洁垃圾袋</li>
21 <li>优乐美奶茶</li>
22 <li>亲亲果冻</li>
23 </ul>
24 </div>
25 <div id="inner"></div>
26 </div>
27 <script type="text/javascript" language="javascript">
28 var hot = document.getElementById("hot");
29 var li = hot.getElementsByTagName("li");
30 for(var i in li) {
31 li[i].onmouseover = function() {
32 this.style.color = "red";
33 };
34 li[i].onmouseout = function() {
35 this.style.color = "black";
36 };
37 }
38 </script>
39 </body>
2 $("#hot li").hover(
3 function() {
4 $(this).css("color","red");
5 },
6 function() {
7 $(this).css("color","black");
8 }
9 );
10 </script>
作者:老默 http://senir.blog.163.com (转载请注明出处)
本文链接
在网上看到了这样的一道题目:
下列关于使用JNDI的说法中错误的是?
A、可以解决多个应用程序访问同一个资源的问题B、可以解决跨容器访问资源的问题
C、可以解决集群环境中资源共享问题
D、可以解决跨平台访问资源的问题
由于我没有了解过什么是JNDI,以前仅仅听说过这个词儿。今天看到了这样的一个题,我开始了解了JNDI。。。
下面看一个一个网友写的关于JNDI的看法,觉得挺有意思的:
======================================
看了JNDI的实现,我感有点惊讶和一点迷惑,惊讶的是系统编程比应用编程就难度来说还真不好说,比如就象实现JNDI,SUN已经定好了Interface,你要做的就是弄清楚整个功能的原理,然后去实现他,然而应用编程则没有人为你定好Interface,你只能根据需求分析自己定好Interface,自己定好框架,但是这个框架能不能满足需求那就不好说了,但是SUN定的规范可是肯定可以实现功能的,并且一般情况下你必须全部实现接口中的每一个函数,要不然,人家说你又不符合他的规范,不能通过他的认证。好了下面我讲讲我读JNDI的经过。JNDI的规范我大概的看了一下,大概知道了JNDI是干什么用的,实际上我的理解就是JNDI是一种服务,什么样的服务呢 ,就是你给我一个字符串,我就给出对应字符串所对应的对象。那这东西有什么用呢?那我们不是经常在客户端写代码的 时候不是经常写
Context ctx = new InitialContext();Object obj=ctx.lookup("/ejb/LotteryEJB");这样类似的代码, 如果说"/ejb/LotteryEJB"是你刚才所说的字符串的话,那obj就应该是对应的对象,夷,这怎么好象有点象EJB的调用啊, 哈,哥哥你真是冰雪聪明,这就是EJB调用开始的时候调用JNDI服务的代码。原来就是这样啊,那实现这玩意不是太容易了,
弄一个HashMap的实例hm,把你要部署的字符和对象通过hm.put("/cs",对象)放进去,如果谁要查的时候就是把要查的字符 传过来,Object cs = hm.get("/cs"),CS就是要你要找的对象。CS?好啊,AK,M4,暴头....,我想暴头想了很久了,但是 这CS到底是我要暴头的人,还是和我一起暴头的人,还是已被我暴头的人呢?哈,告诉你吧,都是。根据JNDI的规范,这CS可以代表 对象,设备都可以,当然只要你愿意连MM都可以代表,真的,哪里有啊!我机子上好多啊---100多M的美女图片,哦我差点忘了, 文件也可以是JNDI服务所返回的东东。对了要是你问我MM图片怎么传到你的机子上面去,我只能告诉你,你可以通过socket传啊, 你传一个"/cs",我回传一个cs给你,就这么简单。好了,如果到目前为止你只对我的100M图片感兴趣的话呢,那你就不要往下看了, 你给我发E-MAIL,我告诉你哪里还有好多。 org.huihoo.jfox.jndi下面的ContextImpl是实现Context接口,但是很这个类不是实现真正JNDI功能的类,真正实现该功能就是 NamingServiceImpl类,NamingService不是SUN规范所规定的接口,但是他的函数和Context接口差不多,也就是说完成的是和 Context接口的功能差不多。也就是说NamingServiceImpl才是JNDI服务的提供者,而Context是客户端去调用JNDI服务的接口,那提起 服务的实现那大家都自然都想起了多线程,就想起了一个孤独的socket的实例fox在不停的listen,listen啊,但是他怎么等不到 "我要嫁给你"的字符串!fox不止一次的怀疑自己的实现的Runnable接口是否为倒版,并且还怀疑对方是不是找对了IP而发错了端口。 所以说为了能更好提供JNDI服务,NamingServiceImpl决定把自己交给ServiceWrapper包装一下,然后再对外发布,要知道ServiceWrapper 专门为守侯线程所设计,面对各种各样的的请求,都能抓住处理掉,并且面对各种请求都能一一满足。现在我只希望ServiceWrapper能够 满足我一种请求那就是--有没有吃的,我好饿!有没有人请吃饭啊!我饿死了!
============================
下面是http://www.ibm.com中的一篇文章:
题目:
JNDI 在 J2EE 中的角色虽然 J2EE 平台提高了普通企业开发人员的生活水平,但是这种提高是以不得不学习许多规范和技术为代价的,这些规范和技术则是 J2EE 为了成为无所不包的分布式计算平台而整合进来的。Dolly Developer 是众多开发人员中的一员,她已经发现了一个特性,该特性有助于缓解随企业级应用程序部署而带来的负担,这个特性就是 JNDI,即 Java 命名与目录接口(Java Naming and Directory Interface)。让我们来看看 Dolly 在没有 JNDI 的时候是怎么做的,以及她是如何正确地应用 JNDI 来改善其状况的。
所有人都非常熟悉的旅程
Dolly Developer 正在编写使用 JDBC 数据源的 Web 应用程序。她知道自己正在使用 MySQL,所以她将一个对 MySQL JDBC 驱动程序类的引用进行了编码,并通过使用适当的 JDBC URL 连接到其 Web 应用程序中的数据库。她认识到数据库连接池的重要性,所以她包含了一个连接池包,并把它配置成最多使用 64 个连接;她知道数据库服务器已经被设置成最多允许 128 台客户机进行连接。
Dolly 在走向灾难
在开发阶段,每件事都进行得很顺利。但是,在部署的时候,开始失控。Dolly 的网络管理员告诉她,她不能从她的桌面机访问生产服务器或登台服务器(staging server),所以她不得不为每个部署阶段开发不同的代码版本。因为这种情况,她需要一个新的 JDBC URL,所以还要为测试、阶段和生产进行独立的部署。(一听到要在每个环境中建立单独部署,熟悉配置管理的人会战战兢兢的,但是既然这是种非常普遍的情况,所以他们也只好硬着头皮上了。)
就在 Dolly 认为通过不同的 URL 建立彼此独立的部署已经解决了自己的配置问题时,她发现她的数据库管理员不想在生产环境中运行 MySQL 实例。他说,MySQL 用作开发还可以,但是对于任务关键型数据而言,业务标准是 DB2®。现在她的构建不仅在数据库 URL 方面有所不同,而且还需要不同的驱动程序。
事情越变越糟。她的应用程序非常有用,并且变得非常关键,以致于它从应用服务器那里得到了故障恢复的能力,并被复制到 4 个服务器集群。但是数据库管理员提出了抗议,因为她的应用程序的每个实例都要使用 64 个连接,而数据库服务器总共只有 200 个可用连接 —— 全部都被 Dolly 的应用程序占用了。更麻烦的是,DBA 已经确定 Dolly 的应用程序只需要 32 个连接,而且每天只有一个小时在使用。随着她的应用程序规模扩大,应用程序遇到了数据库级的争用问题,而她的惟一选择就是改变集群的连接数量,而且还要做好准备,在集群数量增长或者应用程序复制到另一个集群时再重复一次这样的操作。看来她已经决定了如何配置应用程序,应用程序的配置最好是留给系统管理员和数据库管理员来做。
Node.js一直都与mysql , Nosql 配合使用,对于Sql Server却没有很好的支持,一直都是小众技术人员自己编写访问程序。
2012年微软公司官方发行一款Node.js访问Sql Server的驱动程序——msnodesql ,让Node.js访问SQL Server更加简单。
安装
msnodesql 下载地址:下载 自行选择与自己系统相符的版本,点击安装。
msnodesql 官方地址:https://github.com/WindowsAzure/node-sqlserver 含wiki 和 疑问解答 。
在node.js环境下,安装方式和其他驱动安装一样,安装命令:nmp install msnodesql
安装过程中需要注意的两个问题:
1、安装之前必须安装SQL Server Native Client 11.0 32位下载地址:下载 64位下载地址:下载 ,安装此程序不需要SQL server2012支持,经测试,SQL 2005和SQL 2008 可以正常安装使用。
2、安装过程中,如出现错误,检查是否在管理员界面下进行命令安装,这个问题我纠结了好长一段时间。
(右键——以管理员身份运行)
使用
引用驱动
建立数据库连接
不要被 SQL Server Native Client 11.0 吓到,可以完美支持sql 2005和sql 2008 的。
打开数据库
if (err) {
console.log("Error opening the connection!");
return;
}
//这里是查询语句
});
SQL操作
function (err, results)
{
if (err)
{
console.log("Error running query!");
return;
}
for (var i = 0; i < results.rows.length; i++)
{
console.log("0:" + results.rows[i][0]); }
});
注意:此处的写法与wiki文档的写法有些不同,我用过wiki文档的写法(https://github.com/WindowsAzure/node-sqlserver/wiki),有时会出现无法查询数据的情况,w我这种写法是参考源代码中参数的写法,queryRaw包含四个参数:
connectionstring:链接字符串(wiki里面的居然没有用这个,直接用function里面的参数 conn,搞不懂)query:SQL语句
param:参数(可选的)
callback:回传函数,操作完以后返回的事件
一个完整的例子
var conn_str="Driver={SQL Server Native Client 11.0};Server={.};Database={nodetest};uid=sa;PWD=123456;";
sql.open(conn_str, function (err, conn) {
if (err) {
console.log('发生错误');
}
sql.queryRaw(conn_str, "select * from users", function (err, results) {
if (err) {
console.log(err);
}
else {
for (var i = 0; i < results.rows.length; i++) {
console.log(results.rows[i][0] + results.rows[i][1]);
}
}
})
})
本文链接