« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
|
公告 |
我近期在研究Maven、Turbine、EJB,如果有朋友想一起交流学习,请加我的MSN:moshco_zhu@hotmail.com!
你为什么来,你何必来,叫我怎么见你!
--《小城之春》 |
| 
|
本站首页 管理页面 写新日志 退出
[01 技术文档]在Weblogic 10中做EJB3的开发 之基础开发 (3) |
在Weblogic 10中做EJB3的开发 之基础开发 (3)
---------------------------------------------------------------------------
下面用jsp实现表示层,还是两个,一个是有状态会话Bean的业务,一个是无状态会话Bean的业务。
文件地址:[WebContext/JavaSource/com/mh/servlet/test/ejb3statefull/AccountMoneyStatelessSV.java] 包名:[com.mh.servlet.test.ejb3statefull] 名称:[AccountMoneyStatelessSV] 内容如下: ---------------------------------------------------------------------- <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage=""%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>测试-使用有状态会话Bean</title> </head> <script language="javascript" type="text/javascript">
/** * 函数名: getSysAliasAss * 功能描述: 获取运行系统别名(辅助) */ function getSysAliasAss(){ //读取系统当前请求的pathName var strPathName = window.location.pathname; //以字符串"/"分割到数组 var oAryTmp = strPathName.split("/"); //系统别名 var strSysAlias = "/" + oAryTmp[1]; //返回函数值 return strSysAlias; } /** * 函数名: isInitAccount * 功能描述: 是否已经初始化 */ function isInitAccount(){ //创建Ajax对象 var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); //确定请求的Url var strUrl = getSysAliasAss() + "/sv/AccountMoneySV.do?dowith=isInitAccount"; //发出请求 xmlHttpReq.open("GET", strUrl, false); xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;"); xmlHttpReq.send(); //读取数据 var strIsInitAccount = xmlHttpReq.responseText; //返回函数值 return strIsInitAccount; }
/** * 函数名: initAccount * 功能描述: 初始化账户 */ function initAccount(){ //账户是否已经初始化 var strIsInitAccount = isInitAccount(); if(strIsInitAccount != null && strIsInitAccount == "yes"){ alert("账户已经初始化!不能重复初始化!"); return false; } //创建Ajax对象 var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); //确定请求的Url var strUrl = getSysAliasAss() + "/sv/AccountMoneySV.do?dowith=initAccount"; //发出请求 xmlHttpReq.open("GET", strUrl, false); xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;"); xmlHttpReq.send(); //读取数据 var strMessage = xmlHttpReq.responseText; outMessage.innerHTML = strMessage; //刷新账户状态 refreshState(); //返回函数值 return true; } /** * 函数名: delAccount * 功能描述: 删除账户 */ function delAccount(){ //账户是否已经初始化 var strIsInitAccount = isInitAccount(); if(strIsInitAccount != null && strIsInitAccount == "no"){ alert("账户还没有初始化!"); return false; } //创建Ajax对象 var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); //确定请求的Url var strUrl = getSysAliasAss() + "/sv/AccountMoneySV.do?dowith=delAccount"; //发出请求 xmlHttpReq.open("GET", strUrl, false); xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;"); xmlHttpReq.send(); //读取数据 var strMessage = xmlHttpReq.responseText; outMessage.innerHTML = strMessage; //刷新账户状态 refreshState(); //返回函数值 return true; } /** * 函数名: charge * 功能描述: 给账户冲值 */ function charge(){ //创建Ajax对象 var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); //获取账户 var strAccountCharge = accountCharge.value; //金额 var fMoney = chargeMoney.value; //确定请求的Url var strUrl = getSysAliasAss() + "/sv/AccountMoneySV.do?dowith=charge&account=" + strAccountCharge + "&money=" + fMoney; //发出请求 xmlHttpReq.open("GET", strUrl, false); xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;"); xmlHttpReq.send(); //读取数据 var strMessage = xmlHttpReq.responseText; outMessage.innerHTML = strMessage; //返回函数值 return true; } /** * 函数名: pay * 功能描述: 账户扣款 */ function pay(){ //创建Ajax对象 var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); //获取账户 var strAccountPay = accountPay.value; //金额 var fMoney = payMoney.value; //确定请求的Url var strUrl = getSysAliasAss() + "/sv/AccountMoneySV.do?dowith=pay&account=" + strAccountPay + "&money=" + fMoney; //发出请求 xmlHttpReq.open("GET", strUrl, false); xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;"); xmlHttpReq.send(); //读取数据 var strMessage = xmlHttpReq.responseText; outMessage.innerHTML = strMessage; //返回函数值 return true; } /** * 函数名: refreshState * 功能描述: 刷新账户状态 */ function refreshState(){ //创建Ajax对象 var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); //确定请求的Url var strUrl = getSysAliasAss() + "/sv/AccountMoneySV.do?dowith=isInitAccount"; //发出请求 xmlHttpReq.open("GET", strUrl, false); xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;"); xmlHttpReq.send(); //读取数据 var strIsInitAccount = xmlHttpReq.responseText; if(strIsInitAccount != null && strIsInitAccount == "no"){ accountState.innerHTML = "<font color='red'>没有初始化</font>"; }else if(strIsInitAccount != null && strIsInitAccount == "yes"){ accountState.innerHTML = "<font color='blue'>激活</font>"; } //返回函数值 return true; } /** * 函数名: account * 功能描述: 获取账户余额 */ function account(){ //账户是否已经初始化 var strIsInitAccount = isInitAccount(); if(strIsInitAccount != null && strIsInitAccount == "no"){ alert("账户还没有初始化!"); return false; } //创建Ajax对象 var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); //确定请求的Url var strUrl = getSysAliasAss() + "/sv/AccountMoneySV.do?dowith=account"; //发出请求 xmlHttpReq.open("GET", strUrl, false); xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;"); xmlHttpReq.send(); //读取数据 var strMessage = xmlHttpReq.responseText; outMessage.innerHTML = strMessage; //返回函数值 return true; }
</script>
<body> <p>账户管理:<br> <hr width="100%" size="1" /> </p> <table width="600" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td bgcolor="#FFFFFF"> <table width="600" border="0" cellspacing="1" cellpadding="0"> <tr> <td height="20" bgcolor="#CCCCCC">有状态会话Bean测试</td> </tr> <tr> <td height="20"> <hr width="100%" size="1" /> </td> </tr> <tr> <td height="20"> <input name="initAccount" type="button" id="initAccount" value="账户初始化" onclick="initAccount();" /> <input type="button" name="Submit" value="删除账户A、B" onclick="delAccount();" /> 账户当前状态:<span id="accountState"></span> <input name="refreshState" type="button" id="refreshState" value="刷新" onclick="refreshState()" /> </td> </tr> <tr> <td height="20">选择一个账户: <select name="accountCharge" id="accountCharge"> <option>选择一个账户</option> <option value="A">A</option> <option value="B">B</option> <option value="ALL">All</option> </select> 冲值金额: <input name="chargeMoney" type="text" id="chargeMoney" size="10" /> 元 <input name="charge" type="button" id="charge" value="冲值" onclick="charge();" /></td> </tr> <tr> <td height="20">选择一个账户: <select name="accountPay" id="accountPay"> <option>选择一个账户</option> <option value="A">A</option> <option value="B">B</option> <option value="ALL">All</option> </select> 扣款金额: <input name="payMoney" type="text" id="payMoney" size="10" /> 元 <input name="pay" type="button" id="pay" value="扣款" onclick="pay();" /></td> </tr> <tr> <td height="20"> <input name="account" type="button" id="account" value="账户余额" onclick="account();" /> </td> </tr> <tr> <td height="40"><span id="outMessage"></span></td> </tr> </table> </td> </tr> </table> </body> </html> ---------------------------------------------------------------------- 这个是实现有状态会话Bean。
文件地址:[WebContext/account_stateless.jsp] ---------------------------------------------------------------------- <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage=""%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>测试-使用无状态会话Bean</title> </head> <script language="javascript" type="text/javascript">
/** * 函数名: getSysAliasAss * 功能描述: 获取运行系统别名(辅助) */ function getSysAliasAss(){ //读取系统当前请求的pathName var strPathName = window.location.pathname; //以字符串"/"分割到数组 var oAryTmp = strPathName.split("/"); //系统别名 var strSysAlias = "/" + oAryTmp[1]; //返回函数值 return strSysAlias; } /** * 函数名: isInitAccount * 功能描述: 是否已经初始化 */ function isInitAccount(){ //创建Ajax对象 var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); //确定请求的Url var strUrl = getSysAliasAss() + "/sv/AccountMoneyStatelessSV.do?dowith=isInitAccount"; //发出请求 xmlHttpReq.open("GET", strUrl, false); xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;"); xmlHttpReq.send(); //读取数据 var strIsInitAccount = xmlHttpReq.responseText; //返回函数值 return strIsInitAccount; }
/** * 函数名: initAccount * 功能描述: 初始化账户 */ function initAccount(){ //账户是否已经初始化 var strIsInitAccount = isInitAccount(); if(strIsInitAccount != null && strIsInitAccount == "yes"){ alert("账户已经初始化!不能重复初始化!"); return false; } //创建Ajax对象 var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); //确定请求的Url var strUrl = getSysAliasAss() + "/sv/AccountMoneyStatelessSV.do?dowith=initAccount"; //发出请求 xmlHttpReq.open("GET", strUrl, false); xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;"); xmlHttpReq.send(); //读取数据 var strMessage = xmlHttpReq.responseText; outMessage.innerHTML = strMessage; //刷新账户状态 refreshState(); //返回函数值 return true; } /** * 函数名: delAccount * 功能描述: 删除账户 */ function delAccount(){ //账户是否已经初始化 var strIsInitAccount = isInitAccount(); if(strIsInitAccount != null && strIsInitAccount == "no"){ alert("账户还没有初始化!"); return false; } //创建Ajax对象 var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); //确定请求的Url var strUrl = getSysAliasAss() + "/sv/AccountMoneyStatelessSV.do?dowith=delAccount"; //发出请求 xmlHttpReq.open("GET", strUrl, false); xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;"); xmlHttpReq.send(); //读取数据 var strMessage = xmlHttpReq.responseText; outMessage.innerHTML = strMessage; //刷新账户状态 refreshState(); //返回函数值 return true; } /** * 函数名: charge * 功能描述: 给账户冲值 */ function charge(){ //创建Ajax对象 var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); //获取账户 var strAccountCharge = accountCharge.value; //金额 var fMoney = chargeMoney.value; //确定请求的Url var strUrl = getSysAliasAss() + "/sv/AccountMoneyStatelessSV.do?dowith=charge&account=" + strAccountCharge + "&money=" + fMoney; //发出请求 xmlHttpReq.open("GET", strUrl, false); xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;"); xmlHttpReq.send(); //读取数据 var strMessage = xmlHttpReq.responseText; outMessage.innerHTML = strMessage; //返回函数值 return true; } /** * 函数名: pay * 功能描述: 账户扣款 */ function pay(){ //创建Ajax对象 var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); //获取账户 var strAccountPay = accountPay.value; //金额 var fMoney = payMoney.value; //确定请求的Url var strUrl = getSysAliasAss() + "/sv/AccountMoneyStatelessSV.do?dowith=pay&account=" + strAccountPay + "&money=" + fMoney; //发出请求 xmlHttpReq.open("GET", strUrl, false); xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;"); xmlHttpReq.send(); //读取数据 var strMessage = xmlHttpReq.responseText; outMessage.innerHTML = strMessage; //返回函数值 return true; } /** * 函数名: refreshState * 功能描述: 刷新账户状态 */ function refreshState(){ //创建Ajax对象 var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); //确定请求的Url var strUrl = getSysAliasAss() + "/sv/AccountMoneyStatelessSV.do?dowith=isInitAccount"; //发出请求 xmlHttpReq.open("GET", strUrl, false); xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;"); xmlHttpReq.send(); //读取数据 var strIsInitAccount = xmlHttpReq.responseText; if(strIsInitAccount != null && strIsInitAccount == "no"){ accountState.innerHTML = "<font color='red'>没有初始化</font>"; }else if(strIsInitAccount != null && strIsInitAccount == "yes"){ accountState.innerHTML = "<font color='blue'>激活</font>"; } //返回函数值 return true; } /** * 函数名: account * 功能描述: 获取账户余额 */ function account(){ //账户是否已经初始化 var strIsInitAccount = isInitAccount(); if(strIsInitAccount != null && strIsInitAccount == "no"){ alert("账户还没有初始化!"); return false; } //创建Ajax对象 var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0"); //确定请求的Url var strUrl = getSysAliasAss() + "/sv/AccountMoneyStatelessSV.do?dowith=account"; //发出请求 xmlHttpReq.open("GET", strUrl, false); xmlHttpReq.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8;"); xmlHttpReq.send(); //读取数据 var strMessage = xmlHttpReq.responseText; outMessage.innerHTML = strMessage; //返回函数值 return true; }
</script>
<body> <p>账户管理:<br> <hr width="100%" size="1" /> </p> <table width="600" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"> <tr> <td bgcolor="#FFFFFF"> <table width="600" border="0" cellspacing="1" cellpadding="0"> <tr> <td height="20" bgcolor="#CCCCCC">无状态会话Bean测试</td> </tr> <tr> <td height="20"> <hr width="100%" size="1" /> </td> </tr> <tr> <td height="20"> <input name="initAccount" type="button" id="initAccount" value="账户初始化" onclick="initAccount();" /> <input type="button" name="Submit" value="删除账户A、B" onclick="delAccount();" /> 账户当前状态:<span id="accountState"></span> <input name="refreshState" type="button" id="refreshState" value="刷新" onclick="refreshState()" /> </td> </tr> <tr> <td height="20">选择一个账户: <select name="accountCharge" id="accountCharge"> <option>选择一个账户</option> <option value="A">A</option> <option value="B">B</option> <option value="ALL">All</option> </select> 冲值金额: <input name="chargeMoney" type="text" id="chargeMoney" size="10" /> 元 <input name="charge" type="button" id="charge" value="冲值" onclick="charge();" /></td> </tr> <tr> <td height="20">选择一个账户: <select name="accountPay" id="accountPay"> <option>选择一个账户</option> <option value="A">A</option> <option value="B">B</option> <option value="ALL">All</option> </select> 扣款金额: <input name="payMoney" type="text" id="payMoney" size="10" /> 元 <input name="pay" type="button" id="pay" value="扣款" onclick="pay();" /></td> </tr> <tr> <td height="20"> <input name="account" type="button" id="account" value="账户余额" onclick="account();" /> </td> </tr> <tr> <td height="40"><span id="outMessage"></span></td> </tr> </table> </td> </tr> </table> </body> </html> ---------------------------------------------------------------------- 这个是实现无状态会话Bean。
上面两个表示层使用了Ajx技术,据微软说Ajax是一种老调重谈的技术,但是我很纳闷,为什么以前我一直想要实现这样的效果就从来没有人跟我说呢?!所以,我觉得AJax是一门新技术,而且应该再次基础上发展,它应该是很有潜质的。
接下来要在欢迎页面[WebContext/index.jsp]中加入下面的部分: ---------------------------------------------------------------------- <p> <center> EJB3测试:有状态会话Bean与无状态会话Bean的差别<br> <a href="<%=request.getContextPath() %>/account.jsp" target="_blank">账户管理:有状态会话Bean实现</a><br> <a href="<%=request.getContextPath() %>/account_stateless.jsp" target="_blank">账户管理:无状态会话Bean实现</a> </center> </p> ----------------------------------------------------------------------
最后使用[build.xml]来构建发布程序吧!
测试效果的时候,你会发现,有状态的两个账户[A、B]的金额是无不关连互不影响的,但是,无状态就会出现,A账户增加减少金额,会反应在A、B上,而且删除账户后,再从新创建账户,账户的金额会反应在新创建的账户上。这就就说明,无状态会话Bean是可以被重复利用,并不会因为一个用户不使用就从容器中删除,而是由容器来合理配置,继续提供给下一个用户使用;而用状态会话Bean它只与一个用户保持关联,每个用户的调用,都是一个新的Bean对象。
|
阅读全文(2885) | 回复(-1) | 编辑 | 精华 |
|