查看Weblogic JNDI 树的几种方式
weblogic配置数据库连接
一、weblogic数据源配置进入到weblogic控制台,找到服务→jdbc→数据源,锁定并编辑后,新增数据源. 进入到新建页面,如下图:修改配置如下:注意,上面的jndi名称,需要在torConfig.xml配置文件中用到点击下一步(此步不需修改配置),再点击下一步,进入到如下页面:修改配置:数据库名称,即oracle的实例名(SID),主机名:可以输入oracle数据库所在机器的IP,端口号,根据实际情况输入,用户名和密码都根据实际生产环境的配置输入.以上配置,可以根据目前的torConfig.xml文件中的数据库连接方式把相应的配置录入到页面即可.如下图为我本机的配置:再点击下一步,出现如下图的页面:根据前一步数据库配置不同,有些数据与下图会不一样,点击测试配置,如果显示连接测试成功即表示配置成功:测试成功后,点击下一步,选择对应的运用服务,点击完成即可.(备注:每次修改保存后、都需要激活更改)激活以后,再次选择jdbc数据源,并点击“锁定并编辑”,选择对应的数据源,点击进入,会到以下页面:选择连接缓冲池,进入以下页面:调整初始容量为:30,最大容量为250(目前客户生产环境,设置的oracle最大连接数为300),容量增长为:15;语句缓存大小为:30;根据上面的配置调整后,激活更改,weblogic的数据源配置即可完成二、tor数据库连接配置把TORConfig.xml文件中目前的配置,如下代码,注释掉:<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="close"><property name="driver"><value>oracle.jdbc.driver.OracleDriver</value></property><property name="driverUrl"><value>jdbc:oracle:thin:gzldoa/*************.1.201:1521:ldoadev</value></property><property name="user"><value>gzldoa</value></property><property name="password"><value>toone</value></property><property name="alias"><value>gzwork</value></property><property name="houseKeepingSleepTime"><value>90000</value></property><property name="prototypeCount"><value>5</value></property><property name="maximumConnectionCount"><value>100</value></property><property name="minimumConnectionCount"><value>10</value></property><property name="trace"><value>true</value></property><property name="verbose"><value>true</value></property></bean>新增jndi连接方式配置:<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"><value>ldjoa</value></property></bean>后保存即可,注意需要把上面的ldjoa改成刚在weblogic控制台配置的jndi名称。
weblogic配置JNDI数据源
weblogic配置JNDI数据源一、在WebLogic新建针对Oracle数据库的JNDI数据源进入weblogic管理控制台,此处是远程访问:http://192.168.1.144:7001/console点击左侧【域结构】→【base domain】→【服务】→【数据源】然后点击右侧【新建】→【般数据源】,如下图所示:填写JDBC数据源的【名称】、【jndi名称】,选择数据库类型,如选择【oracle】,下一步选择Oracle数据库的驱动程序,如下图所示:这里选择【Oracle' s Driver (Thin)for Instance connections;Version:Any】,点击【下一步】按钮,进入下一个配置步骤:这里使用默认配置即可,点击【下一步】按钮,进入下一个配置步骤:如下图所示:填写数据库的连接信息:要连接的数据库,数据库的IP地址,连接数据库时使用的端口号,登录数据库时使用的用户名和密码点击【下一步】按钮,进入下一个配置步骤:如下图所示:连接测试结果如下:点击【下一步】按钮,进入下一个配置步骤:如下图所示:点击【完成】,这样WebLogic就会创建一个新的JDBC数据源,如下图所示:到此,在WebLogic新建针对Oracle数据库的JNDI数据源就算是全部完成了。
数据源创建之后,我们就可以在应用程序中使用数据源了。
二、在WebLogic新建针对MySQL数据库的JNDI数据源上面我们已经配置好了一个针对Oracle数据库的JNDI数据源,这里我们在新建一个针对MySQL数据库的数据源,配置步骤和上述针对Oracle数据库创建的JDBC数据源大部分是一样的,针对不一样的地方给出如下的截图说明:到此,在WebLogic新建针对MySQL数据库的JNDI数据源就算是全部完成了。
查看jndi树,可以看到JNDI树上面挂载了两个数据源,如下图所示:三、在应用程序中使用WebLogic配置JNDI数据源3.1、创建测试项目新建一个测试项目,如下图所示:3.2、编写测试代码编写一个WebLogicJndiUtil工具类,用于从WebLogic的JNDI容器中取出数据源。
weblogic基本目录介绍,位数查看,启动与发布项目,修改JVM参数,设置项目为默认项目
weblogic基本⽬录介绍,位数查看,启动与发布项⽬,修改JVM参数,设置项⽬为默认项⽬ 这⾥的基本⽬录%base%表⽰安装⽬录,如我的⽬录为:E:/weblogic就是%base%1.weblogic⽬录介绍 weblogic主要的⽬录介绍:1.⽇志⽬录: 每个domain(域)都有⾃⼰的⽇志⽬录,⼀般启动⽇志是AdmiServer.log,存放位置在:%base%\user_projects\domains\base_domain\servers\AdminServer\logs,如下:2.项⽬发布⽬录: 每个域也都有⾃⼰的项⽬发布⽬录。
存放位置在:%base%\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_user,例如:3.JSP编译之后的⽬录:(我们需要知道weblogic编译JSP依赖⾃⼰的lib库,所以在编译之后的class⽂件头部引⼊⾃⼰的lib,⽽tomcat也依赖于⾃⼰的lib) 存放的是JSP编译之后的⽬录,位置在:%base%\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_user\Struts\km2umq\jsp_servlet⽂件夹下⾯。
⽽且JSP不会⼀次性全部编译,是我们第⼀次访问哪个JSP编译哪个JSP(JSP的延迟编译特性确实给性能带来了不⼤不⼩的影响,第⼀次访问超慢的那种状况给⼈的感觉⾮常不好),⽽且项⽬的根⽬录的JSP编译之后的package是默认的,然后每个⽬录对应⼀个package,例如:(1)根⽬录下的JSP: JSP内容 <%@ page pageEncoding="GBK" contentType="text/html; charset=GBK" %><%@taglib uri = "/jsp/jstl/core" prefix="c" %><c:set var="baseurl" value="${pageContext.request.contextPath}"></c:set><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>"${baseurl}"</body></html> 编译之后的位置:%base%\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_user\Struts\km2umq\jsp_servlet\ 查看反编译之后的内容:package jsp_servlet;import java.io.IOException;import java.io.UnsupportedEncodingException;import javax.servlet.ServletConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import javax.servlet.jsp.JspFactory;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.PageContext;import javax.servlet.jsp.SkipPageException;import javax.servlet.jsp.tagext.JspTag;import javax.servlet.jsp.tagext.SimpleTag;import javax.servlet.jsp.tagext.Tag;import org.apache.taglibs.standard.tag.rt.core.SetTag;import weblogic.jsp.internal.jsp.JspFunctionMapper;import weblogic.jsp.internal.jsp.utils.JspRuntimeUtils;import weblogic.servlet.jsp.ByteWriter;import weblogic.servlet.jsp.DependencyInjectionHelper;import weblogic.servlet.jsp.ELHelper;import weblogic.servlet.jsp.ExpressionInterceptor;import weblogic.servlet.jsp.ExpressionInterceptor.Type;import weblogic.servlet.jsp.JspBase;import weblogic.servlet.jsp.StaleChecker;import weblogic.servlet.jsp.StaleIndicator;public final class __forwardextends JspBaseimplements StaleIndicator{private static void _releaseTags(PageContext pageContext, JspTag t){while (t != null){DependencyInjectionHelper.preDestroy(pageContext, t);if ((t instanceof Tag)){Tag tmp = (Tag)t;t = ((Tag)t).getParent();try{tmp.release();}catch (Exception localException) {}}else{t = ((SimpleTag)t).getParent();}}}public boolean _isStale(){boolean _stale = _staticIsStale((StaleChecker)getServletConfig().getServletContext());return _stale;}public static boolean _staticIsStale(StaleChecker sci){if (sci.isResourceStale("/forward.jsp", 1537094471925L, "12.2.1.3.0", "UTC")) {return true;}return false;}private ExpressionInterceptor _jsp_expressionInterceptor = JspRuntimeUtils.getNonOperExpressionInterceptor();private static boolean _WL_ENCODED_BYTES_OK = true;private static final String _WL_ORIGINAL_ENCODING = "GBK".intern();private static byte[] _getBytes(String block){try{return block.getBytes(_WL_ORIGINAL_ENCODING);}catch (UnsupportedEncodingException u){_WL_ENCODED_BYTES_OK = false;}return null;}private static String _wl_block0 = "\r\n";private static final byte[] _wl_block0Bytes = _getBytes(_wl_block0);private static String _wl_block1 = "\r\n<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n<title>Insert title here</title>\r\n</head>\r\n<body>\r private static final byte[] _wl_block1Bytes = _getBytes(_wl_block1);private static String _wl_block2 = "\"\r\n</body>\r\n</html>";private static final byte[] _wl_block2Bytes = _getBytes(_wl_block2);private static JspFunctionMapper _jspx_fnmap = JspFunctionMapper.getInstance();protected void _jspInit(){this._jsp_expressionInterceptor = JspRuntimeUtils.getExpressionInterceptor(getServletConfig());}public void _jspService(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{ServletConfig config = getServletConfig();ServletContext application = config.getServletContext();JspTag _activeTag = null;Object page = this;PageContext pageContext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);response.setHeader("Content-Type", "text/html; charset=GBK");JspWriter out = pageContext.getOut();ByteWriter _bw = (ByteWriter)out;_bw.setInitCharacterEncoding(_WL_ORIGINAL_ENCODING, _WL_ENCODED_BYTES_OK);JspWriter _originalOut = out;HttpSession session = request.getSession(true);try{response.setContentType("text/html; charset=GBK");_bw.write(_wl_block0Bytes, _wl_block0);_bw.write(_wl_block0Bytes, _wl_block0);if (_jsp__tag0(request, response, pageContext, _activeTag, null)) {return;}_bw.write(_wl_block1Bytes, _wl_block1);out.write(this._jsp_expressionInterceptor.intercept((String)ELHelper.evaluate("${baseurl}", String.class, pageContext, null), pageContext, ExpressionInterceptor.Type.EL)); _bw.write(_wl_block2Bytes, _wl_block2);}catch (Throwable __ee){if (!(__ee instanceof SkipPageException)){while ((out != null) && (out != _originalOut)) {out = pageContext.popBody();}_releaseTags(pageContext, _activeTag);pageContext.handlePageException(__ee);}}finally{JspFactory.getDefaultFactory().releasePageContext(pageContext);}}private boolean _jsp__tag0(ServletRequest request, ServletResponse response, PageContext pageContext, JspTag activeTag, JspTag parent)throws Throwable{JspTag _activeTag = activeTag;JspWriter out = pageContext.getOut();ByteWriter _bw = (ByteWriter)out;SetTag __tag0 = null;int __result__tag0 = 0;if (__tag0 == null){__tag0 = new SetTag();DependencyInjectionHelper.inject(pageContext, __tag0);}__tag0.setPageContext(pageContext);JspRuntimeUtils.setParentForClassicTag(__tag0, parent);__tag0.setVar((String)JspRuntimeUtils.convertType("baseurl", String.class, "var"));__tag0.setValue(ELHelper.evaluate("${pageContext.request.contextPath}", Object.class, pageContext, _jspx_fnmap));_activeTag = __tag0;try{__result__tag0 = __tag0.doStartTag();if ((__result__tag0 == 0) ||(__tag0.doEndTag() == 5)){_activeTag = null;_releaseTags(pageContext, __tag0);return true;}}finally{_activeTag = __tag0.getParent();DependencyInjectionHelper.preDestroy(pageContext, __tag0);__tag0.release();}return false;}}(2)⽬录下的JSP,⼀个⽬录相当于⼀个package:编译之后的位置:查看你编译之后的头部内容:4.存放lib的⽬录: 存放⼀些公共项⽬使⽤的lib,存放位置在%base%\user_projects\domains\base_domain\lib,如下:5.weblogic⾃带的lib,类似于tomcat的lib⽬录,是weblogic⾃⼰启动所需要的包,⼀般也是造成冲突包的位置: 存放位置在:%base%\wlserver\modules6.缓存⽬录: 有时候缓存造成发布问题,所以我每次除了清掉缓存⽬录,还要清掉logs⽬录和项⽬tmp⽬录,也就是我每次启动项⽬都清掉下⾯三个⽬录,每次启动都会重新⽣成下⾯三个⽬录:2.weblogic位数查看 在weblogic安装⽬录下wlserver\server\native\win⽬录下根据⽬录即可查看,例如我的64位的:3.weblogic启动 weblogic启动的程序是在%base%\user_projects\domains\base_domain\startWebLogic.cmd (其内部调⽤了%base%\\user_projects\domains\base_domain\bin⽬录下的startWebLogic.cmd),源码如下:@ECHO OFF@REM WARNING: This file is created by the Configuration Wizard.@REM Any changes to this script may be lost when adding extensions to this configuration.SETLOCALset DOMAIN_HOME=E:\weblogic\user_projects\domains\base_domaincall "%DOMAIN_HOME%\bin\startWebLogic.cmd" %*ENDLOCAL 双击之后启动即可,启动可以访问登陆页⾯。
Weblogic使用手册大全详解(中文)
1 WEBLOGIC服务器管理概述10域、管理服务器与受管服务器10启动管理控制台12运行时对象与配置对象12日志消息的集中访问14W EB L OGIC管理服务器与W EB L OGIC受管服务器15启动时的错误消息15启动W EB L OGIC管理服务器15WebLogic服务器启动时的口令使用16从Start菜单启动WebLogic管理服务器16启动与终止Windows服务形式的WebLogic服务器16从命令行启动WebLogic管理服务器17用脚本启动管理服务器20在受管服务器运行时重启管理服务器 20在同台机器上重启管理服务器21在其它机器上重启管理服务器21将W EB L OGIC受管服务器加入到域22启动W EB L OGIC受管服务器22通过脚本启动W EB L OGIC受管服务器 24从老版本W EB L OGIC服务器升级 25从管理控制台终止W EB L OGIC服务器 25从命令行停止服务器25暂停和恢复受管服务器26将W EB L OGIC服务器设置为W INDOWS服务26删除W INDOWS服务形式的W EB L OGIC服务器27更改安装成Windows服务的服务器口令27注册启动与终止类282 节点管理器 29节点管理器概述29配置与启动节点管理器30启动节点管理器31启动管理服务器323 配置WEBLOGIC服务器与集群35服务器与集群配置概述35管理服务器的角色35启动管理控制台37动态配置的工作原理38集群配置规划38- 1 -服务器配置任务列表39集群配置列表41新建一个域42概述43监控服务器44终止或暂停服务器45性能45集群数据46服务器安全46JMS 47JTA 47监控JDBC连接池 47管理控制台的M ONITORING页面一览表484 用日志消息管理WEBLOGIC服务器51日志子系统概述51本地服务器的日志文件53启动日志53客户端日志54日志文件的格式54消息属性54消息目录55消息的严重级别55消息调试56浏览日志文件56查看日志56创建域日志过滤器575 分发应用58分发格式58用管理控制台分发应用58步骤1:配置与分发应用59步骤2:分发应用组件 59分发顺序61自动分发62启用或禁用自动部署62动态分发64启用与禁用自动分发64自动分发展开目录格式的应用64卸载或重新分发被自动分发的应用656 配置WEBLOGIC服务器的WEB组件66- 2 -概述66HTTP参数66配置监听端口67W EB应用68Web应用与集群68指定缺省的Web应用68配置虚拟主机70虚拟主机与缺省Web应用70设置虚拟主机71W EB L OGIC服务器如何解析HTTP请求72设置HTTP访问日志73日志回旋(Log Rotation)73使用管理控制台设置HTTP访问日志 73普通日志格式74使用扩展日志格式75防止“POST拒绝服务”攻击80设置W EB L OGIC服务器的HTTP隧道 81配置HTTP隧道连接81建立客户端与WebLogic服务器之间的连接82用本地I/O提供静态文件服务(只适用于W INDOWS)827 代理对另一个HTTP服务器的请求 84概述84设置从服务器的代理84代理S ERVLET的分发描述符示例858 代理对WEBLOGIC集群的请求87概述87设置H TTP C LUSTER S ERVLET 87H TTP C LUSTER S ERVLET的分发描述符示例889 91配置W EB应用的安全性91设置对Web应用的授权91多Web应用、Cookies与身份验证92限制对Web应用资源的访问92在servlet中使用用户和角色94配置W EB应用的外部资源96在W EB应用中引用EJB S97配置会话管理98HTTP会话属性98- 3 -会话超时98配置会话Cookies 99使用长效cookies 99配置持久化会话100通用属性100使用基于内存的、单服务器的、非复制的持久存储 101使用基于文件的持久存储101使用基于数据库的持久存储 102使用URL重写103URL重写的编码指南104URL重写与无线访问协议(WAP) 104使用字符集与POST数据10410 配置APACHE-WEBLOGIC服务器插件106概述106平台支持107安装库107配置HTTPD.CONF文件109通过URL代理109通过MIME文件类型代理110A PACHE-W EB L OGIC S ERVER插件的参数110使用SSL协议112与SSL-A PACHE配置有关的问题 113H TTPD.CONF文件示例114配置文件示例115使用WebLogic集群的例子115不使用WebLogic集群的例子115配置虚拟主机的例子116分发A PACHE-W EB L OGIC S ERVER插件11611 配置MICROSOFT-IIS插件117概述117连接池以及保持活动状态117安装库118更新IIS设置使请求转给W EB L OGIC118创建IIS P ROXY.INI文件119文件扩展名方式的请求代理 122路径方式的请求代理123.ini文件示例123使用SSL 124将SERVLETS请求转交给W EB L OGIC服务器处理125- 4 -安装测试12612 配置NETSCAPE插件127概述127连接池和保持激活127插件的配置128步骤1:复制库128步骤2:设置obj.conf文件128步骤3:更改MIME.types文件132步骤4:分发与测试NSAPI插件 132参数132使用SSL协议135有关W EB L OGIC服务器集群失败转移的注意事项1360BJ.CONF文件示例(不使用W EB L OGIC集群的情况)136OBJ.CONF文件(使用W EB L OGIC集群的情况) 13813 安全管理141安全配置概述141改变系统口令143指定一个安全域143配置缓存域144配置LDAP安全域147配置Windows NT安全域151配置UNIX安全域 153配置RDBMS安全域154安装一个定制安全域155测试代用安全域与定制安全域156迁移安全域157定义用户157定义用户组159定义虚拟机的用户组159定义ACL 160配置SSL协议161获得私钥与数字证书162保存私钥与数字签名164定义可靠的证书管理机构165定义SSL协议的配置字段165配置双向验证167C ONFIGURING RMI OVER IIOP OVER SSL(TBD)168口令的保护168安装审计提供者170- 5 -安装连接过滤器170设置J AVA安全管理器171配置安全上下文传播17314 管理事务176事务管理概述176配置事务177事务的监控与日志记录178将服务器迁移到另一台机器中17815 管理JDBC连接180用管理控制台管理JDBC 180JDBC配置指南180JDBC配置概述181配置JDBC驱动程序182连接池187设置连接池187管理连接池188多池188创建多池188管理多池188数据源189创建数据源189数据源管理18916 管理JMS 191配置JMS 191配置连接工厂192配置模板193配置收信方主键193配置备份库194配置JMS服务器195配置收信方195配置会话池196配置连接使用者197监控JMS 197恢复失败的W EB L OGIC服务器198重启或替换WebLogic服务器198编程考虑19917 管理JNDI 200- 6 -将对象装载到JNDI树200查看JNDI树20018 管理WEBLOGIC J2EE连接器构架201W EB L OGIC J2EE连接器构架概述201安装资源适配器202配置与部署资源适配器202配置与部署资源适配器202查看已部署的资源适配器203卸载已部署的资源适配器203删除一个资源适配器204查看元素与属性205监控连接池与参数205编辑资源适配器分发描述符 20519 管理WEBLOGIC服务器许可证208安装W EB L OGIC许可证208更新许可证208A 使用WEBLOGIC JAVA工具210A PPLET A RCHIVER210语法211C ONVERSION211D ER2PEM211例子212DBPING212语法212D EPLOY212参数212Actions(从下表中选一个) 213其它参数213选项213例子213GET P ROPERTY 215语法215例子215LOG T O Z IP216语法216例子217M ULTICAST T EST217语法218例子218- 7 -MYIP219语法219例子219P EM2DER 219语法219例子220S CHEMA220语法220例子220SHOW L ICENSES221语法221SYSTEM221语法221例子221T3DBPING222语法222VERBOSE T O Z IP222语法223UNIX上的例子223NT上的例子223VERSION223语法223例子223WRITE L IENSE224语法224例子224B WEBLOGIC服务器的命令行接口参考226命令行接口简介226Before You Begin 226使用W EB L OGIC服务器命令227语法227参数227W EB L OGIC服务器管理命令参考228CONNECT 229HELP 229LICENSES 230LIST 230LOCK 231PING 231SERVERLOG 232SHUTDOWN 233THR EAD_DUMP 233- 8 -unlock 234VERSION 234M BEAN管理命令参考235CREATE命令 235DELETE命令 236GET命令237INVOKE命令 238SET命令239配置及管理连接池的命令240命令的名字240WEB服务器插件的参数241概述241W EB SERVER插件的一般参数241W EB SERVER插件的SSL参数245- 9 -1WebLogic服务器管理概述本章将介绍WebLogic服务器的管理工具,内容如下:✓域、管理服务器以及受管理的服务器✓启动管理控制台✓运行时对象与配置对象✓对日志消息的集中访问BEA WebLogic Server™包含了许多互相关联的资源。
JNDI具体用法详解
JNDI具体⽤法详解JNDI全称(Java Naming and Directory Interface),是java命名和⽬录接⼝。
它是⼀个应⽤程序设计的API,为开发⼈员提供了查找和访问各种命名和⽬录服务的通⽤、统⼀的接⼝,类似JDBC都是构建在抽象层上。
1、命名的概念与应⽤JNDI中的命名(Naming),就是将Java对象以某个名称的形式绑定(binding)到⼀个容器环境(Context)中,以后调⽤容器环境到JNDI容器环境(Context)的查找(lookup)⽅法⼜可以查找出某个名称所绑定的Java对象。
这样做的好处在于在真实的项⽬应⽤中,通常是由系统程序或框架程序先将资源对象绑定到JNDI环境中,以后在该系统或框架中运⾏的模块程序就可以从JNDI环境中查找这些资源对象了。
⽐如,Tomcat服务器在启动时可以创建⼀个连接到某种数据库系统的数据源(DataSource)对象,并将该数据源(DataSource)对象绑定到JNDI环境中,以后在这个Tomcat服务器中运⾏的Servlet和JSP程序就可以从JNDI环境中查询出这个数据源(DataSource)对象进⾏使⽤,⽽不⽤关⼼数据源(DataSource)对象是如何创建出来的,这种⽅式极⼤的增强了系统的可维护性,这样,当数据库系统的连接参数发⽣变更时,就只是Tomcat系统管理员⼀个⼈要关⼼的事情,⽽与所有的应⽤程序开发⼈员⽆关。
容器环境(Context)本⾝也是⼀个Java对象,它可以通过⼀个名称绑定到另⼀个容器环境中。
将⼀个Context对象绑定到另⼀个Context对象中,这就形成了⼀种⽗⼦级联关系,多个Context对象最终可以级联成⼀种树状结构,树中的每个Context对象中都可以绑定若⼲个Java对象。
上图中的每个⽅框分别代表以后个Context对象,它们分别绑定的名称分别为a、b、c、d、e,其中b和c是a的⼦Context,d是b的⼦Context,e⼜是d的⼦Context。
跟我学EJB 分布式编程技术——WebLogic下的JNDI编程及实现实例
目 录
1.1 跟我学 EJB 分布式编程技术——WebLogic 下的 JNDI 编程及实现实例 ...............2 1.1.1 1.1.2 1.1.3 1.1.4 WebLogic 下的 JNDI 编程相关技术 ......................................................................2 常用的 JNDI 操作 ...................................................................................................3 JNDI 的编程实现过程和实例 ................................................................................7 JNDI 应用编程示例 ..............................................................................................12
2 杨教授工作室,版权所有,盗Байду номын сангаас必究, 2/13 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
(2)提供服务的接口:在一个新的服务中使用 SPI 来提供服务。 3、与 JNDI 相关的以些术语 (1)绑定 绑定是将一个不可分割的名字(该名字为“原子”状态的名字)与一个对象联系起来。 像 DNS,我们用名字 与 IP 地址 216.32.74.53 联系起来,一个文件对象用文 件名 afile.txt 联系起来。 (2)名字空间 名字空间包含一组名字,但名字空间内每个名字是唯一的。一个文件目录就是一个简单 的名字空间,如目录 C:temp,在这个目录下,不能有两个相同名字的文件,但是,不同目录 下的两个文件可能有相同的名字。 (3)复合名字 复合名字是用名字空间构成的唯一名字,有一个或多个“原子”名字构成,取决于所在 的名字空间。文件路径就是一个复合名字,比如我们用 C:tempmyfile.txt,我们可以看到, 这个名字由根目录名(C:),临时目录名(temp)和一个文件名(myfile.txt)构成,这 3 个名字复合起来表示一个唯一的名字。 (4)组合名字 组 合 名 字 能 跨 越 多 个 名 字 空 间 。 一 个 URL 就 是 一 个 组 合 名 字 , 如 果 我 们 看 见 /index.htm,我们使用 http 服务连接到服务器,然后使用另一个名字空 间/index.htm 来访问一个文件。 (5)目录服务 目录服务提供一组分成等级的目录对象,具有可搜索的能力。在目录服务中存储的对象 可以是任何能用一组属性描述的对象,每个对象都可通过一组属性来描述该对象的能力。 例如,一个 Person 对象可能有 height,hair color,age,sex 等属性。目录服务还可 提供根据要求来搜索的能力, 如我们可以使用 Person 的 age 属性, 搜索 20-25 岁间的 Person 对象,目录服务将返回符合条件的 Persion 对象。这通常被称作基于内容的搜索。 1.1.2 常用的 JNDI 操作 1、JNDI API 的各个包
Weblogic监控jndi泄露连接地方法
Weblogic监控jndi泄露连接的方法1说明如果后台出现“No resources currently available in pool iscjndi to allocate to applications”类似这个错误,说明weblogic的数据库连接池满了:可以考虑通过此方法排查一下具体是程序中的什么方法导致。
查看数据源监控页面,如果“当前活动连接数”超过系统配置的最大数字(系统默认是15,优化之后为150),就会出现以上错误:最大连接数配置:2配置一:设置“非活动连接超时”参数设置后连接在指定时间内(单位:秒)没有活动的话,WebLogic会将之释放并回收到连接池。
设置步骤:“数据源-(数据源名称)-连接池-非活动连接超时”1、点击“数据源-(数据源名称)”2、选择“连接池”3、展开高级内容4、找到高级中“非活动连接超时”参数,设置为1004、保存配置3配置二:开启weblogic数据库连接泄漏日志设置步骤:“数据源-(数据源名称)-诊断 -概要文件连接使用情况”1、点击“数据源-(数据源名称)”2、点击“诊断”3、选中“概要文件连接情况”、“概要文件连接泄露”:4、保存配置4查看日志在系统中操作,重现一下相关问题,同时监控weblogic日志,日志中会出现类似以下格式的异常信息,提供研发找到具体class进一步排查泄露原因。
注意:操作之后等待一段时间,weblogic自动回收连接时才产生日志,不是操作的时候立即产生。
日志文件位置:/app/weblogic/user_projects/domains/【domain名称】/servers/【server名称】/logs/【server名称】.log 比如总部测试环境的日志文件位置:/app/weblogic/user_projects/domains/mpsm_domain/servers/mpsmServer/logs/mpsmServer.logat mon.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:373)at mon.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:339)at mon.internal.ConnectionPool.reserve(ConnectionPool.java:469)at mon.internal.ConnectionPool.reserve(ConnectionPool.java:363)at mon.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:125)at mon.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:158)at weblogic.jdbc.pool.Driver.connect(Driver.java:132)at weblogic.jdbc.jts.Driver.getNonTxConnection(Driver.java:658)at weblogic.jdbc.jts.Driver.connect(Driver.java:127)at mon.internal.RmiDataSource.getConnectionInternal(RmiDataSource.java:548)at mon.internal.RmiDataSource.getConnection(RmiDataSource.java:513)at mon.internal.RmiDataSource.getConnection(RmiDataSource.java:506)atorg.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:116)at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:202)at org.hibernate.impl.SessionImpl.executeNativeUpdate(SessionImpl.java:1310)at org.hibernate.impl.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:396)at erPostReleDao.updateUserBizRoleNum(UserPostReleDao.java:360)at erPostReleService.saveUserPost(UserPostReleService.java:77)at com.sgcc.isc.authorize.businessduty.action.BusinessDutyController.saveUserPost(BusinessDutyController.java:314)at com.sgcc.isc.authorize.businessduty.action.BusinessDutyController$$FastClassByCGLIB$$f3bff139.invoke(<generated>)at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:42)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)atorg.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)at com.sgcc.isc.authorize.sync.aop.ServerAop.aroundMethod(ServerAop.java:138)at sun.reflect.GeneratedMethodAccessor639.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at ng.reflect.Method.invoke(Method.java:597)at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621) at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)atcom.sgcc.isc.authorize.businessduty.action.BusinessDutyController$$EnhancerByCGLIB$$94f3347a.saveUserPost(<generated>)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at ng.reflect.Method.invoke(Method.java:597)at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)atorg.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMetho d.java:96)atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdap ter.java:617)atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.j ava:578)at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)at mon.filter.AuthorFilter.doFilter(AuthorFilter.java:57)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)at mon.filter.CurrentThreadContextInitFilter.doFilter(CurrentThreadContextInitFilter.java:43) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3748)at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3714)at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2283)at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2182)at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1491)at weblogic.work.ExecuteThread.execute(ExecuteThread.java:263)at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)。
weblogic配置数据库连接池以及事务处理
我已经碰到过n次被人问到如何在Weblogic上把Hibernate配置到JNDI上的问题了,其实Hibernate的文档已经做出了解答(/74.html),只不过给出的代码不全,也没有详细描述如何配置。
我感觉到很多人对Weblogic本身的配置都不熟悉,所以还是不停的问我,我把详细步骤介绍一下,我的环境是Weblogic7.0,Oracle8.1.7,Hibernate2.0.1:一、首先需要把Hibernate用到的jar包和配置文件都放到Weblogic能够搜索到的CLASSPATH路径上。
单单这一步就有很多人很迷茫,其实去仔细看看Weblogic的启动脚本文件startWeblogic.cmd和startWLS.cmd,我想大部分人都知道该怎么配置了。
我机器上的有个Hibernate的项目,在D:\test\oracle目录下,该目录下的结构是:D:\test\oracle\lib 放置hibernate的所有jar包D:\test\oracle\src 放置源代码D:\test\oracle\classes 编译好的代码和hibernate的配置文件(hibernate.properties, log4j.properties, f)现在需要把D:\test\oracle\lib目录下那些jar文件和D:\test\oracle\classes目录都放置到Weblogic的CLASSPATH里面去,所以修改mydomain里面的Weblogic启动脚本startWeblogic.cmd,在启动Weblogic之前,插入设置CLASSPATH的命令,如下:@rem set hibernate classpathset HIBERNATE_LIB=D:\test\oracle\libset HIBERNATE_CLASSES=D:\test\oracle\classessetCLASSPATH=%CLASSPATH%;%HIBERNATE_LIB%\cglib-asm.jar;%HIBERNATE_LIB%\commons-bea nutils.jar;%HIBERNATE_LIB%\commons-collections.jar;%HIBERNATE_LIB%\commons-lang .jar;%HIBERNATE_LIB%\commons-logging.jar;%HIBERNATE_LIB%\dom4j-full.jar;%HIBERN ATE_LIB%\hibernate2.jar;%HIBERNATE_LIB%\jcs.jar;%HIBERNATE_LIB%\log4j-1.2.8.jar ;%HIBERNATE_LIB%\odmg.jar;%HIBERNATE_CLASSES%下面一行,就是本来脚本里面的启动命令:@rem Call Weblogic Servercall "C:\bea\weblogic700\server\bin\startWLS.cmd"二、在Weblogic上配置Oracle数据库的连接池。
WebLogic+JNDI连接池的配置
WebLogic JNDI连接池的配置
1.console登陆,点击左边AdminServerName -> Services -> JDBC -> DataSources
2. 点击左上角的Lock & Edit
3. 点击DataSources中的New按钮
4. Name输入连接的名字(建议用数据库的名字命名便于区分),JNDI Name是JNDI连接的名字,在调查管理系统中统一使用SurveyJNDI作为JNDI Name,数据库类型选择Oracle,数据库Driver如图选择*Oracle’s Driver (Thin) Versions:9.0.1.9.2.0.10,点击Next进入下一步。
5.这里使用默认设置即可,点击Next进入下一步。
6.这个页面是设置数据库连接的详细信息,DatabaseName需要连接的数据库名称,
HostName输入数据库的IP或者主机名,Port是连接端口,使用默认的1521,之后输入连接的用户名和密码,并输入确认密码,点击Next进入下一步。
7.这个页面是让你确认之前填写的设置,还可以点击Test Configuration测试连接是否成
功,如果成功,会出现Connection test succeeded.的提示,点击Next进入下一步。
8.勾选AdminServer连接池自动启动,点击Finish完成设置。
Weblogic经常使用监控方式及指标
性能测试工作室,专注于性能测试技术研究(AutomationQA)JMSRuntimeJMSServersCurrentCount 返回当前JMS效劳的连接数ConnectionsCurrentCount 返回本JMS效劳器被骗前的连接数JMSServersHighCount 返回自效劳器启动后JMS效劳的最大连接数ConnectionsHighCount 返回本JMS效劳器自上次重置后的最大连接数JVMRuntimeHeapSizeCurrent 返回当前JVM堆中内存数,单位时字节HeapFreeCurrent 返回当前JVM堆中空闲内存数,单位时字节ExecuteQueueRuntime ExecuteThreadCurrentIdleCount 返回队列中当前空闲线程数PendingRequestOldestTime 返回队列中最长的等待时刻PendingRequestCurrentCount 返回队列中等待的请求数Queue Length 队列长度JDBCConnectionPoolRuntimeWaitingForConnectionHighCount返回本JDBCConnectionPoolRuntimeMBean 上最大等待连接数WaitingForConnectionCurrentCount 返回当前等待连接的总数MaxCapacity 返回JDBC池的最大能力WaitSecondsHighCount 返回等待连接中的最长时刻等待者的秒数ActiveConnectionsCurrentCount 返回当前活动连接总数ActiveConnectionsHighCount 返回本JDBCConnectionPoolRuntimeMBea n 上最大活动连接数注:weblogic通常监控JVM和执行队列,JDBC连接池,其中执行队列最关键的指标是Queue Length 队列长度weblogic一样来讲监控jvm的利用、执行线程队列情形、和连接池的转变情形,还有一个很重要的检查weblogic的console日记那个地址常常能反映一些很重要到情形。
Linux服务器下Weblogic版本号查看方式
Weblogic12跟Weblogic10的目录有些不同,因此也不能全部照搬Weblogic10的查看方式。
第一种:通过调用weblogic.jar查看
# 进入到这个目录 weblogic12目录中 这个wlserver后面就没有数字了 [weblogic@app01 soft]$cd weblogic12/wlserver/server/lib # 通过jar包查看 结果这里报了个错 [weblogic@app01 soft]$java -cp weblogic.jar weblogic.version Exception in thread "main" ng.UnsupportedClassVersionError: weblogic/version : Unsupported major.minor version 51.0
第三种:通过log.txt安装日志文件查看
# 进入到这个目录 [weblogic@app01 soft]$cd weblogic/logs # 查看log.txt文件 这个文件是weblogic安装的信息也可以看到Weblo1 soft]$cat log.txt
第二种:通过调用weblogic.jar查看
registry.dat registry.xml user_projects utils wlserver_10.3
# 进入到这个目录 其中wlserver_10.3目录 可能weblogic版本号不同后面的数字也不同 [weblogic@app01 soft]$cd weblogic/wlserver_10.3/server/lib # 通过jar包查看 [weblogic@app01 soft]$java -cp weblogic.jar weblogic.version # 同样的也可以直接的看出版本号
jndi lookup方法使用
jndi lookup方法使用在 Java 中,`JNDI`(Java Naming and Directory Interface)是一种用于访问命名和目录服务的 API。
它允许 Java 应用程序通过统一的接口来查找和访问各种不同类型的命名和目录服务,例如 LDAP、DNS、RMI 等。
使用`JNDI`进行查找的步骤通常如下:1. 初始化`JNDI`上下文:通过创建一个`InitialContext`对象来初始化`JNDI`上下文。
这将建立与命名服务的连接。
2. 查找对象:使用`lookup()`方法在初始化的上下文中查找指定的对象。
该方法接受一个名称作为参数,并返回找到的对象。
3. 绑定对象:如果需要将对象绑定到命名服务中,可以使用`bind()`方法。
4. 解除绑定对象:使用`unbind()`方法来解除已绑定的对象。
5. 关闭`JNDI`上下文:在使用完`JNDI`后,应该关闭上下文以释放资源。
下面是一个简单的示例代码,演示了如何使用`JNDI`来查找一个对象:```javaimport javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;public class JNDIExample {public static void main(String[] args) {try {// 初始化 JNDI 上下文Context context = new InitialContext();// 查找对象Object obj = context.lookup("example");// 打印找到的对象System.out.println("Found object: " + obj);} catch (NamingException e) {e.printStackTrace();}}}```在上面的示例中,我们使用`InitialContext`类来初始化`JNDI`上下文。
配置项目使用weblogic的JNDI数据源
配置代码如下:
bean id='dataSource' class='org.springframework.jndi.JndiObjectFactoryBean'> property name='jndiName'> value>dataSourcevalue> property> bean>
3.将项目部署至配置该数据源的weblogic中间件。
在w的名称为datasourcejndi名称可以自己设置若没有设置的话默认和数据源的名称一致
配置项目使用weblogic的JNDI数据源
项目结构构:Spring Framework + SpirngMVC + SpringData JPA + Maven
1.在weblogic的控制台界面中配置数据源(假定我们配置的数据源的名称为dataSource,JNDI名称可以自己设置,若没有设置的话默认和数据源的名称一致):
配置完成之后可以在JNDI树上查看到:
2.在项目中配置使用JNDI数据源:把原先配置的C3P0数据源或者其他数据源改为
org.springframework.jndi.JndiObjectFactoryBean
Weblogic监控jndi泄露连接的方法
Weblogic监控jndi泄露连接的方法1说明如果后台出现“No resources currently available in pool iscjndi to allocate to applications”类似这个错误,说明weblogic 的数据库连接池满了:可以考虑通过此方法排查一下具体是程序中的什么方法导致。
查看数据源监控页面,如果“当前活动连接数”超过系统配置的最大数字(系统默认是15,优化之后为150),就会出现以上错误:最大连接数配置:2配置一:设置“非活动连接超时”参数设置后连接在指定时间内(单位:秒)没有活动的话,WebLogic会将之释放并回收到连接池。
设置步骤:“数据源-(数据源名称)-连接池-非活动连接超时”1、点击“数据源-(数据源名称)”2、选择“连接池”3、展开高级内容4、找到高级中“非活动连接超时”参数,设置为1004、保存配置3配置二:开启weblogic数据库连接泄漏日志设置步骤:“数据源-(数据源名称)-诊断-概要文件连接使用情况”1、点击“数据源-(数据源名称)”2、点击“诊断”3、选中“概要文件连接情况”、“概要文件连接泄露”:4、保存配置4查看日志在系统中操作,重现一下相关问题,同时监控weblogic日志,日志中会出现类似以下格式的异常信息,提供研发找到具体class进一步排查泄露原因。
注意:操作之后等待一段时间,weblogic自动回收连接时才产生日志,不是操作的时候立即产生。
日志文件位置:/app/weblogic/user_projects/domains/【domain名称】/servers/【server名称】/logs/【server名称】.log比如总部测试环境的日志文件位置:at mon.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:373)at mon.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:339)at mon.internal.ConnectionPool.reserve(ConnectionPool.java:469)at mon.internal.ConnectionPool.reserve(ConnectionPool.java:363)at mon.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:125)at mon.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:158)at weblogic.jdbc.pool.Driver.connect(Driver.java:132)at weblogic.jdbc.jts.Driver.getNonTxConnection(Driver.java:658)at weblogic.jdbc.jts.Driver.connect(Driver.java:127)at mon.internal.RmiDataSource.getConnectionInternal(RmiDataSource.java:548)at mon.internal.RmiDataSource.getConnection(RmiDataSource.java:513)at mon.internal.RmiDataSource.getConnection(RmiDataSource.java:506)at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:116)at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:202)at org.hibernate.impl.SessionImpl.executeNativeUpdate(SessionImpl.java:1310)at org.hibernate.impl.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:396)at erPostReleDao.updateUserBizRoleNum(UserPostReleDao.java:360)at erPostReleService.saveUserPost(UserPostReleService.java:77)at com.sgcc.isc.authorize.businessduty.action.BusinessDutyController.saveUserPost(BusinessDutyController.java:314)at com.sgcc.isc.authorize.businessduty.action.BusinessDutyController$$FastClassByCGLIB$$f3bff139.invoke(<generated>)at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:42)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)at com.sgcc.isc.authorize.sync.aop.ServerAop.aroundMethod(ServerAop.java:138)at sun.reflect.GeneratedMethodAccessor639.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at ng.reflect.Method.invoke(Method.java:597)at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)at com.sgcc.isc.authorize.businessduty.action.BusinessDutyController$$EnhancerByCGLIB$$94f3347a.saveUserPost(<generated>)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at ng.reflect.Method.invoke(Method.java:597)at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)atorg.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)at mon.filter.AuthorFilter.doFilter(AuthorFilter.java:57)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)at mon.filter.CurrentThreadContextInitFilter.doFilter(CurrentThreadContextInitFilter.java:43)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3748)at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3714)at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2283)at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2182)at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1491)at weblogic.work.ExecuteThread.execute(ExecuteThread.java:263)at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)。
WLS_JNDI安全访问控制
Weblogic JNDI安全访问控制默认情况下,在Weblogic Console里配置JNDI后,JNDI资源是可匿名访问的。
只要知道IP地址、端口、JNDI名称,就可以通过编写简单程序获取该JNDI资源,如果是数据源,那么就可以访问数据库。
通过修改配置可以实现关闭匿名访问,以下是Weblogic9.23为例的配置。
1关闭JNDI匿名访问配置(WLS9)2基于ARCH4系统的配置调整<bean id="dataSource" class="ins.framework.jndi.JndiObjectFindFactoryBean"> <property name="jndiName"><value>xxxDataSource</value></property><property name="jndiTemplate" ref="jndiTemplate"></bean><bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"><constructor-arg><props><prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop><prop key="java.naming.provider.url">t3://127.0.0.1:7001</prop><prop key="java.naming.security.principal">testuser</prop><prop key="java.naming.security.credentials">testpass</prop></props></constructor-arg></bean>这两个通常不用设置:<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop><prop key="java.naming.provider.url">t3://127.0.0.1:7001</prop>这两个分别是设置用户名和密码,需要设置:<prop key="java.naming.security.principal">testuser</prop><prop key="java.naming.security.credentials">testpass</prop>3关闭JNDI匿名访问配置(WLS7)4基于sysframework系统的配置调整在WEB-INF\config\appconfig\SysConstConfig.xml中增加相应的配置项,具体为:INITIAL_CONTEXT_FACTORY CONTEXT_FACTORY,通常不用设置PROVIDER_URL URL,通常不用设置SECURITY_PRINCIPAL 用户名SECURITY_CREDENTIALS 密码。
JNDI常见配置方式
JNDI常见配置⽅式JNDI(Java Naming and Directory Interface,Java命名和⽬录接⼝)是⼀组在Java应⽤中访问命名和⽬录服务的API。
命名服务将名称和对象联系起来,使得我们可以⽤名称访问对象。
⽬录服务是⼀种命名服务,在这种服务⾥,对象不但有名称,还有属性。
tomcat配置jndi有全局配置和局部配置。
第⼀种:全局配置1)在tomcat的conf⽂件夹下的context.xml配置⽂件中加⼊:<Resource name="sqlconn"auth="Container"type="javax.sql.DataSource" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"url="jdbc:sqlserver://localhost:1433;databasename=dbname"username="sa"password="sa123"maxActive="20"maxIdle="10"maxWait="10000"/>2)在项⽬的web.xml中加⼊资源引⽤:<resource-ref><description>JNDI DataSource</description><res-ref-name>sqlconn</res-ref-name><res-ref-type>javax.sql.DataSource</res-ref-type><res-auth>Container</res-auth></resource-ref>3)jndi测试⽅法:public void testJNDI() throws NamingException, SQLException{Context ctx = new InitialContext();DataSource ds = (DataSource) ctx.lookup("java:comp/env/sqlconn");Connection conn = ds.getConnection();System.out.println(conn.isClosed());}4)在jsp中调⽤加载jndi⽅式,不可以直接⽤main⽅法测试,必须通过启动容器从jsp中调⽤:TestPageAccessURL test = new TestPageAccessURL();test.testJNDI();第⼆种:局部配置(不推荐)。
Hibernate_jndi数据源配置详解
1 什么是JNDI英文全称是:Java Naming and Directory Interface术语解释:一组帮助做多个命名和目录服务接口的API。
JNDI(Java Naming and Directory Interface)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java 应用程序可以和这些命名服务和目录服务之间进行交互。
集群JNDI实现了高可靠性JNDI[8],通过服务器的集群,保证了JNDI的负载平衡和错误恢复。
在全局共享的方式下,集群中的一个应用服务器保证本地JNDI树的独立性,并拥有全局的JNDI树。
每个应用服务器在把部署的服务对象绑定到自己本地的JNDI树的同时,还绑定到一个共享的全局JNDI 树,实现全局JNDI和自身JNDI的联系。
JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。
JNDI可访问的现有的目录及服务有:DNS、XNam 、Novell目录服务、LDAP(Lightweight Directory Access Protocol轻型目录访问协议)、CORBA对象服务、文件系统、Windows XP/2000/NT/Me/9x的注册表、RMI、DSML v1&v2、NIS。
2 JNDI组件1、Javax.naming:命名操作;包含了访问命名服务的类和接口。
例如,它定义了Context 接口,这是命名服务执行查询的入口。
2、Javax.naming.directory:目录操作;对命名包的扩充,提供了访问目录服务的类和接口。
例如,它为属性增加了新的类,提供了表示目录上下文的DirContext接口,定义了检查和更新目录对象的属性的方法。
weblogic10JNDI的配置
Weblogic 10.1配置JNDI数据源一、JNDI连接的使用原理1.在设计器中先用JDBC连接到数据库,建立数据库连接,然后用SQL或者其他方法创建数据集,使用数据集制作好报表,然后把建立的数据库连接从JDBC连接改成JNDI连接,保存模板,并部署至weblogic服务器。
2.服务器端配置数据源。
3.修改应用WEB-INF下的web.xml文件。
这样就可以通过WEB浏览器浏览到使用JNDI数据源的报表了。
二、我们以oracle 10g数据源制作的模板jndi.cpt为例来说明1.设计器制作报表:在设计器中用JDBC连接到oracle 10g数据库,使用数据库中的数据表student 制作如下模板jndi.cpt:回到定义数据连接面板,将先前定义的数据库连接变为JNDI连接,设置JNDI的名字为oracle保存模板至weblogic 10的应用目录WebReport/WEB-INF/reportlets下,保存为jndi.cpt。
此时服务器端的数据源还没有配置,启动服务器并访问jndi报表会显示如下类似错误:2.服务器端配置数据源:打开weblogic 10 的控制界面:http://localhost:7001/console ;登录weblogic server 域选择域结构|服务|JDBC|数据源打开数据源配置界面:锁定并编辑该界面,新建一数据源,设置数据源JNDI名称为oracle(即制作模板时定义的JNDI名字),选择数据库类型及驱动点击“下一步”,如下图:事务选项根据自己要求定义,在此默认,点击“下一步”配置连接属性:数据库名,URL,用户名及密码,建立weblogic 10 至oracle 10g的物理连接测试刚定义的数据源连接:weblogic 服务器会呈现之前我们配置好的数据源,并提供连接测试,点击“测试配置”,弹出消息“连接测试成功”说明配置正确,点击“下一步”部署新建的JDBC数据源:选中需要部署该数据源的服务器,点击“完成”服务器端的数据源配置好了,激活配置后部署的应用就能通过“oracle”这个桥梁(JNDI名字)与oracle数据库连接3.修改应用WebReport/web-inf 下的web.xml文件:在……之间增加如下语句:4.配置完全,可以访问JNDI数据源报表了:。