破解不能复制的网页文字和图片及普元启动服务失败的解决方法_第1页
破解不能复制的网页文字和图片及普元启动服务失败的解决方法_第2页
破解不能复制的网页文字和图片及普元启动服务失败的解决方法_第3页
破解不能复制的网页文字和图片及普元启动服务失败的解决方法_第4页
破解不能复制的网页文字和图片及普元启动服务失败的解决方法_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

『Photoshop』破解不能复制的网页文字和图片把下面这段代码复制到地址栏,然后按回车键。之后就可以复制当前页面了。javascript:alert(document.onselectstart=document.oncontextmenu=document.onmousedown=document.onkeydown=function(){returntrue;});很多资料性的网络文章,往往在网页禁止使用“复制”、“粘贴”命令。其解决方法如下:方法一、最简单的破解方法:单击IE浏览器的“工具”——“internet选项”——“安全”,将其中的“internet”的安全级别设为最高级别,“确定”后刷新网页即可。安全级别最高的时候,一切控件和脚本均不能运行,再厉害的网页限制手段统统全部作废。方法二、破解网页不能复制的方法:但对有些网页却不管用因为他们并不用脚本限制我们的(好象起点就是这样),他们在网页中加了如下代码:禁止左键〈bodyonselectstart="returnfalse"〉禁止右键〈bodyoncontextmenu=self.event.returnvalue=false〉结合起来禁止左右键〈bodyoncontextmenu=self.event.returnvalue=falseonselectstart="returnfalse">左右键被禁止了自然无法复制什么的了,在浏览器里查看源文件,搜索oncontextmenu.false之类的代码删除,再刷新就可以了。现在一般禁止网页复制的代码就是在<body>里加入以下代码:<bodyoncontextmenu="returnfalse"onselectstart="return">解决办法就是先把网页另存为,保存在本地之后,再对本地的那个页面用记事本编辑,把上面这段代码去掉就可以复制内容了。方法三、破解网页不能复制的方法:用word破解某些网页中的文字无论用什么方法都不能选中复制。因为被禁止复制了,如果要得到其中的某段文字,虽然可以用降低安全级别、查看源文件等方法来实施,但我们还可以用常用的Word来更为简单方便的获取。首先复制网页地址,然后打开Word,依次单击“文件/打开”,弹出“打开”窗口。在“文件名”中用“Ctrl+V”粘贴入已复制的网页地址,再单击“打开”按钮,这里Word就会自动连接到网站。在打开网页之前,可能会弹出“Word没有足够的内存,此操作完成后无法撤消。是否继续?”的提示窗口,单击“是”,即弹出新的窗口,询问是否信任文件来源,再单击“是”后,Word会自动链接到对应的服务器并打开网页,这时我们就可以选中其中的文字进行复制粘贴了。另外,此法在WPS2005中也可以使用,操作起来十分方便。方法四、把下面这段代码复制到地址栏,然后按回车键。之后就可以复制当前页面了。javascript:alert(document.onselectstart=document.oncontextmenu=document.onmousedown=document.onkeydown=function(){returntrue;});方法五、使用邮件功能(以outlook为例):在浏览器快捷工具栏中中有一个邮件工具,点击后选择“发送网页”,这时候会启动outlook,并自动创建一个新邮件,邮件内容即为网页内容,这时候就可以在里面选择和复制所需要的内容了。当然也可以依次选择“文件”→“发送”→“电子邮件页面”,同样可以在outlook中打开所需要的页面并进行复制、编辑。方法六、使用网页编辑软件:浏览器有默认的网页编辑软件(一般为frontpage或者word),只要在快捷工具栏中点击相应的按钮,或者依次选择“文件”→“使用MicrosoftFrontpage(或者MicrosoftWord)编辑”,即可在相应软件的编辑窗口中显示网页的全部内容,这个时候就可以进行复制或修改了让你的问题迎刃而解!在网上浏览网页,特别是一些资料性的网站的时候,网站为了避免资料流失,往往在网页里加一些代码和脚本来进行限制,我们便不能进行复制等操作,如图:其实我们破解这样的网页,也有很简单的办法,那么就是用IE来限制这些网页的脚本和代码来运行,步骤如下:单击IE浏览器的“工具”——“internet选项”——“安全”,将其中的“internet”的安全级别设为最高级别,“确定”.如图:做了这么多,怎么我们回到网页还是不能复制呢?其实还有重要的一步在后面,那就是刷新,如图完成了上面的几步,我们现在来选择网页上的文字和图片,看是不是能和一般的网站一样进行复制了啊?看看手表,是不是很快,而且只有几步呢?4步破解不能复制的网页文字和图片在网上浏览网页,特别是一些资料性的网站的时候,网站为了避免资料流失,往往在网页里加一些代码和脚本来进行限制,我们便不能进行复制等操作,如图:其实我们破解这样的网页,也有很简单的办法,那么就是用IE来限制这些网页的脚本和代码来运行,步骤如下:单击IE浏览器的“工具”——“internet选项”——“安全”,将其中的“internet”的安全级别设为最高级别,“确定”.如图:做了这么多,怎么我们回到网页还是不能复制呢?其实还有重要的一步在后面,那就是刷新,如图完成了上面的几步,我们现在来选择网页上的文字和图片,看是不是能和一般的网站一样进行复制了啊?看看手表,是不是很快,而且只有几步呢?网页文字不能复制?图片不能保存?破解网页的一切限制!网页某些功能的限制通常都是通过JavaScript来做的,要破解这些限制很简单:干掉JavaScript!使用FireFox可以轻易达到这个目的,之需要安装一款名为NoScript的插件就可以了。插件地址:/zh-CN/firefox/addon/722另外,作为网页设计师或者网站编辑的你,可能需要下面这款名为WebDeveloper的插件:/zh-CN/firefox/addon/60右键限制、复制限制、图片保存限制、查看源代码限制等等,全部搞定。网页屏蔽鼠标右键的解除方法遇到网页上有精美图片或者精彩文字想保存时,通常大家都是选中目标后按鼠标右键,在弹出菜单中选择“图片另存为”或“复制”来达到我们的目的。但是,目前有许多网页都屏蔽了鼠标右键,致使我们一按鼠标右键就会弹出个窗口,上面写着XXX版权所有、禁止使用右键之类的话,对此大家都已经习以为常了。其实,这是由于网页文件中被加入了如上一代码所示:这样在浏览网页时除单击鼠标左键外,其他任何形式的鼠标点击或组合点击,都将出现“版权所有(C),严禁复制!”的提示框。对于以上鼠标右键禁用的破解是很容易的,方法是:先选中目标,然后在目标上按下鼠标右键,此时会弹出提示窗口,这时不要松开右键,将鼠标指针移到提示窗口的“确定”按钮上,然后按下左键。现在松开鼠标左键,限制窗口被关闭了,再将鼠标移到目标上松开鼠标右键,呵呵,弹出了鼠标右键菜单,限制取消了!除此以外,我们还可以按Shift+F10或按动键盘上与右手边的Ctrl键紧挨着的那个键,都可以轻松的破解上面这种对鼠标右键的屏蔽。最近在某网页中又遇到一种新的屏蔽方法,使用上面这些破解方法无效。关键代码如上二所示把上面的代码加入到你的网页中,然后你可以按右键试试,不管用了吧?再按Shift+F10试试?还是不行!再用一招:按动键盘上与右手边的Ctrl键紧挨着的那个键试试,唉,也不灵了。慢着,我还有一招没有用呢!在屏蔽鼠标右键的页面中点右键,出现警告窗口,此时不要松开右键,用左手按键盘上的ALT+F4组合键,这时提示窗口就被我们关闭了,松开鼠标右键,还是没有反应!想当初这招可是“百发百中”的!现在居然也不管用了!不能着急,再动动脑筋,它既然能用javascript限制我们使用鼠标右键,我们就应该能用javascript来破解它!仔细看看上面的代码,关键是这句:“document.oncontextmenu=stop”,如果我们能让其中的“stop”失效不就成功的破解了吗?OK,让我们来试试,具体方法是:在浏览器地址栏中键入“javascript:alert(document.oncontextmenu='')”(输入时不要输入双引号),此时会弹出个对话框,点击“确定”按钮,然后再对着你的目标(图片或文字)点击鼠标右键就可以看到弹出菜单了!方法1、通过右键菜单复制选中你要复制的内容→点击键盘上面有一个鼠标和一个菜单列表的键→点复制→打开文本编辑器→粘贴。方法2、通过Ctrl+C快捷键复制选中你要复制的内容→点击键盘上面有一个鼠标和一个菜单列表的键→按Ctrl+C快捷键→打开文本编辑器→粘贴。方法3、通过网页源码复制打开编辑→源代码选项,在里面查找你要复制开始的网页内容,拖动选中直到你要复制结束的网页内容,复制→打开文本编辑器→粘贴→清除网页内容里面的代码。方法4、通过FP等网页编辑器复制用FP之类网页编辑器打开该网页→在网页编辑窗口里面复制你所需要的网页内容。有些网站是做了保护的,一般有几种情况。1、最普通的屏蔽右键功能,此类页面下选好你所需要的内容后单击右键不会跳出菜单或弹出窗口提示不能复制,此时可使用CTRL+c来复制内容。2、屏蔽右键以及CTRL+c,此类页面可采用点击:“文件=〉页面另存为”保存内容至本地计算机,然后用WORD打开储存的页面文件来复制你要的内容。或者点击“察看=〉源文件”在页面源文件里找到你要的内容(此方法仅适用于文字内容。)3、有些页面做的保护更强的此时在IE浏览器下,不仅右键以及CTRL+c无效甚至连保存也不能进行,源文件也中也没有相关内容。此时可以考虑使用MozillaFirefox网络浏览器,用其“文件=〉页面另存为”这样就可以将页面上的内容保存到本地计算机了然后用WORD,或者各类网页编辑软件打开页面文件选择复制你所需的信息4、还有一种最最无奈的办法,仅在上述方法都没用的情况下使用(至今没遇到过以上方式摆不平的页面)。就是将你需要的内容托到在屏幕上看一看到的位置然后按一下键盘上的“PrntScrn”键(F12键的旁边),然后点击“开始=〉程序=〉附件=〉图画”打开画板后按CTRL+V键将显示屏的内容以图片的形式粘贴出来,并保存下来,以供使用。普元启动服务失败的解决方法

当多个人同时使用一个数据库的时候,启动普元控制台会一直停留在rcall,然后显示一个超时的警告,那样就需要修改一下普元的一个定时器配置项。

安装目录下\Primeton\Platform\apps_config\default\config中的一个user-config.xml文件将下列代码中高亮字段中的true改为false即可

<modulename="Schedule">

<groupname="Default">

<!--IsSchedulerStart[optional,defaultto"true"],whethertostarttimerwhenapplicationstartsup-->

<configValuekey="IsSchedulerStart">true</configValue>

<!--DataSouceName[optional,defaultto"default"],datasoucename(mustbethesameasDataSource'sGroupname)->

<!--configValuekey="DataSouceName">default</configValue-->

</group>

</module>

当EOS启动调试服务时,控制台停留在RCALL后无反应一般是因为定时任务的表被锁住的原因,可在plsqldeveloper中执行以下语句:select'altersystemkillsession'''||b.SESSION_ID||','||c.SERIAL#||'''immediate;'fromv$locked_objectb,v$sessioncwhereb.SESSION_ID=c.SID将查询结果复制到新的SQL窗口执行,执行完成后再启动服务--解决EOS连接失败无法启动的问题--查看有没有被锁的对象

select*fromv$locked_object--查看被锁的对象是哪张表select*fromdba_objectswhereobject_idin(selectt.OBJECT_IDfromv$locked_objectt)--select*fromdba_objectswhereobject_id=73713--从菜单栏进入Tools/Sessions,将Status='ACTIVE'andSid=被锁对象id的记录,点击右键菜单中的Kill跟操作系统的兼容性有关,建议去下看ide\eclipse\plugins目录下org.eclipse.swt.win32.win32.x86_3.2.0.和org.eclipse.swt_3.2.0两个jar的版本,更换成高版本试试。提供清理eos开发过程中缓存清理的方法摘要:提供清理eos开发过程中缓存清理的方法。在eos开发过程中,经常遇到新开发的代码无法使用,右键部署之后依然使用原来的老旧代码,非常影响开发速度。这里提供下清理缓存的方式,确定我们的最新代码能够被使用。对于分组开发过程中,各人代码版本差异无法实现同样的运行效果有特效。1.

删除%EOS_HOME%\apps_config\default\work_temp下的所有文件和文件夹。如需使用平台的各种日志请酌情备份logs下的内容。2.

删除%EOS_HOME%\apache-tomcat-7.0.54\work下的所有内容,情况tomcat的缓存。3.

删除%EOS_HOME%\apache-tomcat-7.0.54\webapps\default\WEB-INF\_srv\work\user下我们自己项目的内容。慎重,别删错了,我们自己开发的。ESB修改默认端口61616windows操作系统下的默认的ICS服务(InternetConnectionSharing)默认占用了61616端口,因此要解决jms端口冲突的情况有两种方式。方式一:

停止ICS服务。

命令行执行“services.msc”,找到ICS服务,右键停止,并设置为以后手动启动。方式二:修改ESB下JMS默认端口。

找到D:\Primeton\ESB\studio\server\EOS\_srv\config下的esb-mq-config.xml和fts-server-config.xml文件,分别修改如下内容:

(esb-mq-config.xml)

<transportConnectors>

<transportConnectorname="openwire"uri="tcp://:61616"/>

</transportConnectors>

(fts-server-config.xml)<mqconfig>

<url>tcp://:61616</url>

<reConnectTime>5</reConnectTime>

<heartbeat_interval>1</heartbeat_interval>

</mqconfig>

如何修改Platform发布Webservice服务的命名空间摘要:如何修改Platform发布Webservice服务的命名空间()为自己指定的名字。问题描述:Platform发布Webservice服务,在浏览器上查看wsdl,客户想修改其中的命名空间,如下图红色框的内容,想更换成自己的命名空间。适用环境:

PlatformV6及以上版本处理经验:

可以修改user-config.xml中的配置,将DefultNameSpace这行的注释放开,修改为自己指定的值。<module

name="WebService">

<group

name="WSDL">

<!--<configValue

key="DefultNameSpace">/</configValue>-->

</group>

</module>应用被拦截,调用报错无法访问摘要:应用被拦截,调用报错无法访问场景描述:

test.html

放在

Tomcat

webapps/ROOT

目录下,或者其他非default应用下该静态

HTML

页面中有一个超链接

<a

href=":8080/default/"

target="_blank">EOStest</a>在资源管理器中直接双击该文件,在浏览器打开后(file:///

协议),点击该超链接可以正常访问。但如果我通过

:8080/test.html

访问该页面(http://

协议),点击该超链接时,直接报错了,错误信息为:调用异常,请查看日志!而使用window.open没有问题。<ahref="#"onclick="open_win();">EOStest</a>,

<scripttype="text/javascript">

functionopen_win()

{

window.open(":8080/default/skins/default/index.jsp")

}

</script>情况分析:获取前后http头,referer为不同应用之间的请求,那么可能被default给拦截了。解决办法:去除拦截器:把apps_config\default\config\eos\handler-web.xml中的以下配置注释掉,看看是否还会不会有问题:

<handlerid="HttpRefererWebInterceptor"sortIdx="3"pattern="/*"class="com.eos.access.http.security.HttpRefererWebInterceptor"/>摘要:EOS工程部署到JBOSS后报错。分析日后初步确定为"\jboss-6.1.0.Final\common\lib\slf4j-api.jar"与"\jboss-6.1.0.Final\server\default\deploy\default.ear\default.war\WEB-INF\lib\slf4j-api-1.5.6.jar"冲突导致该问题已经解决。方案如下:

修改jboss\server\default\deployers\jbossweb.deployer\META-INF\war-deployers-jboss-beans.xml

添加org.slf4j,以过滤该包代码如下:<!--

Allow

for

war

local

class

loaders:

in

testing

-->

<bean

name="WarClassLoaderDeployer"

class="org.jboss.web.tomcat.service.deployers.WarClassLoaderDeployer">

<property

name="relativeOrder">-1</property>

<property

name="filteredPackages">javax.servlet,mons.logging,org.slf4j</property>

</bean>

然后重启JBOSS服务器。原因分析:

jboss加载jar包顺序问题。摘要:在最近修改SSO应用的时候,涉及到需要在jar包中读取工程配置文件的问题。在jar包中,读取配置文件,需要单独处理。项目中的一些配置文件,如pertieslog4j.xml不想打包进jar。因为可能会修改其中的一些配置信息,打包进jar,就变得比较笨拙,不方便修改文件。可以用如下方式,实现在jar包中读取外部配置文件。方法一:关键代码。读取properties文件方法:InputStream

ins

=

getClass().getResourceAsStream("/resource/perties");

但是log4j.xml又需要单独处理:PropertyConfigurator.configure(System.getProperty("user.dir")

+

"/resource/log4j.xml");

方法二:配置文件perties和jiar包在同一个目录下面:FileInputStream

inputStream1

=

new

FileInputStream("perties");

配置文件perties在jar包内部:InputStream

inputStream2

=

a.class.getResourceAsStream("/perties");org.apache.axis2.AxisFault:WSDoAllReceiver:摘要:使用EOS7.2自动生成的客户端代码,在调用带有安全头部消息的webservice接口的时候,会经常出现org.apache.axis2.AxisFault:WSDoAllReceiver:IncomingmessagedoesnotcontainrequiredSecurityheader的异常,可以照下文处理使用EOS7.2自动生成的客户端代码,在调用带有安全头部消息的webservice接口的时候,会经常出现org.apache.axis2.AxisFault:WSDoAllReceiver:IncomingmessagedoesnotcontainrequiredSecurityheader的异常,表示传入的消息不包含所需的安全报头,经过分析发现是该方法在第一次被调用后,已经生成了一些安全校验数据,ListenerManager.defaultConfigurationContext不为空,无法对新的请求进行安全数据的封装,导致请求失败,应该清空ListenerManager.defaultConfigurationContext应用环境,重新生成对应的安全校验数据。可以照如下方式进行处理。在使用客户端代码的方法中,加入ListenerManager.defaultConfigurationContext=null;用于清空运行环境,以对新的请求,作出新的安全设置。示例代码片段:@Bizlet

publicMapsellOrderPriceUpdate(SellOrderImplsellOrderImpl,SellOrderDetailImpl[]sellOrderDetailImpls)throwsException{

ListenerManager.defaultConfigurationContext=null;

//重置axis2部分运行参数环境,用于新的请求

ZCOP_SERVICEStub.ZifSoChangein=newZCOP_SERVICEStub.ZifSoChange();

//输入

ZifSoChangeResponseresponse=newZCOP_SERVICEStub.ZifSoChangeResponse();//输出EOS在业务程序中获取逻辑构件执行的SQL语句文章

>

huangxu@

>

文章详情EOS在业务程序中获取逻辑构件执行的SQL语句

huangxu@

发表于3个月前

来自话题

#应用开发平台(EOSPlatform)#

·

90

浏览摘要:更改log4j的日志配置,使用类继承方式,方法重写,在程序中获取逻辑流执行SQL。配置文件:应用配置目录/log4j-sys.xml(可根据实际情况使用更改具体配置文件);更改log4j的日志配置,使用类继承方式,方法重写,在程序中获取逻辑流执行SQL。配置文件:应用配置目录

/log4j-sys.xml

(可根据实际情况使用更改具体配置文件);配置文件说明:config/log4j-deploy.xml

部署日志

记录系统启动、停止、构件包部署、集群通知等信息的日志。config/log4j-trace.xml

跟踪日志

Server引擎的调试日志,用于系统维护人员定位系统运行问题使用。config/log4j-sys.xml

系统日志

大粒度的引擎运行的入口、出口的日志,用于调用栈分析,可以进行性能分析使用config/log4j-engine.xml

引擎日志

细粒度的引擎运行日志,可以打印上下文数据,用于定位业务问题。记录时机:页面流(P)执行、逻辑流(B)执行、服务(S)执行、Web服务(W)调用、定时任务(D)执行、JSP(J)执行、SQL(Q)执行(超过时限者记录)、运算逻辑(X)执行(超过时限者记录);记录格式:有固定格式[记录时间][请求编号][P|B|S|W|D|J|Q|X(类型)][Begin|End|Exception|Run][全名][执行时长][父全名][IP地址][登录用户ID][登录用户名][当前内存总量][当前空闲内存量][自定义信息]。配置文件log4j-sys.xml

,找到log.sys.sql开关,<levelvalue="off"/>off更改为all找到RollingFileAppender新建新类LimsLogOut继承RollingFileAppender,重写doAppend方法,方法参数LoggingEvent内有属性可区分SQL。截图实例如下:由于该类记录SQL日志为超过时限者记录,时限默认设置为1000毫秒,很多sql执行时间可能不需要1000毫秒,需进行更改,找到sys-config.xml配置文件,将属性LogSqlWhenTimeout设置为1。部署配置文件,在新建类LIMSLogOut中可以处理SQL日志。多个EOS连接同一个数据库出现定时器表锁定的问题解决方案文章

>

bigdabao

>

文章详情多个EOS连接同一个数据库出现定时器表锁定的问题解决方案

bigdabao

发表于4个月前

来自话题

#应用开发平台(EOSPlatform)#

·

260

浏览摘要:多个EOS连接同一个数据库出现定时器表锁定的问题解决方案问题描述:

如果多个EOS连接同一个数据库,在server启动的时候,会出现EOS_QRTZ_LOCKS锁表的情况,导致Server启动不成功解决方案:

多个环境连通过库,容易出现定时器锁表的问题,因为定时器默认情况下是启动,可尝试如下操作:<modulename="Schedule"><groupname="Default"><!--IsSchedulerStart[optional,defaultto"true"],whethertostarttimerwhenapplicationstartsup--><configValuekey="IsSchedulerStart">true</configValue><!--DataSouceName[optional,defaultto"default"],datasoucename(mustbethesameasDataSource'sGroupname)--><!--configValuekey="DataSouceName">default</configValue--></group></module>将颜色标记的true改为false(连同一个库的每个环境都需要改)用户session失效,ajax调用不能跳转的解决方案文章

>

liucl

>

文章详情用户session失效,ajax调用不能跳转的解决方案(PrimetonEOS)

liucl

发表于9个月前

来自话题

#应用开发平台(EOSPlatform)#

·

341

浏览摘要:在某客户项目支持过程中发现session失效后,ajax还能继续调用,原因是在拦截器虽然能拦截到ajax调用,也做了跳转到index.jsp的操作,但由于是ajax调用,在index.jsp中并不能完成跳转,页面没有任何变化,所以不能正常跳转到登录页面,在abframe或其它项目可能也存在这种问题。场景一个基于Ajax技术的Web应用,采用的是多页面方式,每个页面内部使用Ajax实现复杂业务逻辑之间的无刷新切换,使用了Struts来实现MVC。问题对于Ajax请求,只有在通过用户验证无误之后才能对请求作出响应。如果用户长时间不做操作导致Session过时之后才发出请求,则此时应该跳转到出错页面,提示用户重新登录。对于非Ajax请求,可以自定义异常并针对此异常设置相应的出错页面。在用户信息验证失败的时候直接抛出此异常即可,web容器会自动捕捉到此异常并且显示出错页面;但是,对于Ajax请求,则不会如期待的那样自动跳转到出错页面。若不错特殊处理,Ajax请求的回调函数会得到意想不到的数据而导致程序出错。分析对于一个Ajax的应用,每一次客户端和服务器的数据交互,可以看成是在一个由客户端的XMLHttpRequest和服务器端的Servlet(这里假设用Servlet响应Ajax请求)组成的闭合管道。解决在Filter中,判断当前用户是否处理登录状态,如果session已经失效则调用response.getWriter.write("session_time_out");修改eos-ajax.js内容,判断返回的ajax.responseText的内容是否为"session_time_out",如果相等,则认为session已经失效并调用top.location="auth/login.jsp";注意eos-ajax.js是平台js库文件,所以像"auth/login.jsp"这样的项目路径最后采用配置的方式。总结对于Ajax的请求,其数据流是封闭的,服务器发送给在客户端的数据都被XMLHttpRequest对象所获得。本文通过从Filter中发出javascript代码让其在客户端得到执行,从而可以在session过时验证用户信息失败之后,让客户端自动跳转到登录页面,与非Ajax请求时的客户体验相一致。对于Ajax请求,此方法进一步推广,可以直接在服务器端发出javascript让其在客户端得到执行。FTP大数据解决方案/articles/53c8c681e13823343b0000e3某客户系统EOSPlatform流程数据丢失问题定位以及故障排除过程文章

>

yang-yong

>

文章详情某客户系统EOSPlatform流程数据丢失问题定位以及故障排除过程

yang-yong

发表于9个月前

来自话题

#应用开发平台(EOSPlatform)#

·

88

浏览摘要:从解决问题的角度,我们不建议用户直接将Connection的autoCommit设置为false,理由就是这样破坏了数据库连接;如果用户需要将连接设置为false,则需要在用完连接后,将连接的状态设置回去;或者直接在外层使用事务。一.客户环境产品版本:EOSPlatform6.5服务器:Was7,4个节点的集群数据库:Oracle11gJDK版本:1.6浏览器:IE7二.问题描述客户环境上主要表现为通过逻辑流调用了BPS的服务,同时在逻辑流里面存在业务数据的操作,调用完逻辑流之后,流程数据和业务数据都丢失了,且整个过程没有抛出异常,问题只是偶然重现,而且只能在正式环境上重现,测试环境始终没有重现问题。三.问题分析定位过程1.熟悉客户系统,了解问题重现方式,发现流程数据丢失需要客户操作很多次才会出现一次,重现概率比较低;2.熟悉客户代码,发现客户的逻辑流里面存在嵌套事务,且业务操作和流程操作在同一个事务里面,对流程的操作在一个子事务里面,逻辑流里面事务设置都是接收外部事务,且同步join方式执行,没有新开事务的情况,也不存在事务图元不匹配的情况。3.分析报错后的错误日志,发现错误是从事务同步器里面抛出来的,原因是queryWorkItemDetail报错,即找不到工作项;正常的情况下,工作项不可能不存在,因为执行到事务同步器的时候,事务必定已经提交了,而此时查询工作项肯定可以查询到,但是目前的错误情况下,工作项不存在,即根据错误日志可以推断出:事务已经提交,但是数据没有入库。4.一开始对事务同步器理解不够深刻,以为用户调用了事务管理器的commit操作就会触发同步器的方法,所以一开始怀疑用户可能是事务使用不当,事务管理器的begin,commit不匹配之类的情况导致事务没有正真提交,数据没有入库,所以需要验证用户是不是正真做了事务提交;5.验证事务是不是正真做了提交:添加日志,在逻辑流里面的事务提交图元前后打印出事务状态,通过这个状态就能判断出事务管理器方法是不是存在不匹配的情况,同时在事务同步器里面打印出流程实例,活动实例,工作项实例的ID以及状态,线程ID,请求ID之类的信息,方便问题重现后定位问题;我们判断事务状态的目的是:如果用户正真做了提交,而数据没有入库,说明和产品存在一定关系,如果用户没有做事务提交,则是用户代码的问题,这样我们就可以根据这个状态进行2个大的方向定位。6.分析错误日志,对比正确情况和错误情况,发现打印出的事务状态2种情况是一样的,提交前是活动状态,提交后是无事务状态,说明用户正真做了事务提交,即用户使用的事务管理器begin,commit是匹配的;而且分析事务同步器里面打印出的流程实例,活动实例,工作项实例ID及状态也都是一样的,不存在异常情况,但是数据就是没有进入到数据库;7.由于事务管理器的使用方式没有问题,问题又回到原点;后续只能通过大量重现问题,仔细分析日志,看还能否找到其他的蛛丝马迹;由于这个问题是偶然重现,所以我们怀疑可能跟线程是否有关系,我们拿到大量的错误日志后,仔细查找这个问题是否和线程相关,发现他们存在一定的联系,我们分析日志得到规律是:如果一个线程出错后,后面所有由这个线程处理的逻辑流,流程数据都丢失,且有一个线程丢失的流程数据达8次之多;8.由于客户现场不能对正式环境进行远程调试,再加上测试环境一直重现不了,所以即使我们怀疑是线程问题,但是也无法进一步走下去。9.经过讨论会之后,我们开始定位数据库连接是否存在问题;后续我们还是通过打日志的方式来判断连接是否存在问题;我们在BPS获取连接的入口打印连接的实现类,连接的状态等信息;同时在事务管理器里面增加日志,在连接的setAutoCommit,close,commit方法上增加日志;10.分析日志:对比正确日志和错误日志可以发现,正确情况下,Connection的autoCommit状态是true,错误情况下,Connection的autoCommit状态是false;在正确情况下,Connection的autoCommit状态是true,我们怀疑用户的was环境存在问题,因为Connection受事务管理之后,autoCommit状态一定是false,所以我们验证用户的环境是否是正常的;我们使用JSP做了最简单的验证:开启事务,拿到连接,执行第一条sql,然后执行第二条sql,然后抛出异常,然后再执行第3条sql,最后提交,抛出异常则回滚,部署到用户的测试机器上验证,发现客户的服务器并没有回滚,前2条数据入库了;所以我们断定客户的环境出了问题。11.后面一天我们都在修改was服务的配置,以为是数据源配置错了,导致数据库连接不受事务管理;折腾了一天之后,最后发现was环境下,即使外部开了事务,Connection的autoCommit状态就是true,不像tomcat,Connection受事务管理之后,autoCommit是false;12.根据日志,如果说Connection的autoCommit状态是true是正确的,那么Connection的状态是false则可能就会存在问题;因为正确日志和错误日志只有这个地方存在区别;所以这个时候我们怀疑是连接坏了;继续分析日志,发现日志里面有在逻辑流里面调用了setAutoCommit的方法,用户代码将autoCommit属性设置了false,所以我们去走查用户代码,找到调用setAutoCommit的地方。四.解决问题1.找到用户代码之后,询问当事人为什么需要将Connection设置成false,当事人也说不出正确的理由,而且还说这个可以去掉,他只是复制的;所以我们将这行代码注释好之后,部署到测试服务器验证;同时验证打补丁之前和打补丁之后的测试环境,此时,则是环境能重现问题了,然后打上补丁之后,问题未能重现。第二天将补丁打到生产环境,问题也未能重现,问题即解决。2.在问题的验证过程中,有人提出,在was容器下,Connection的autoCommit状态无论是true或者false对事务管理器没有任何影响,因为通过走j2ee事务的标准接口,在was容器下,无论autoCommit的状态是true还是false,事务管理器都是正常的;3.第二天我们对这一问题进行了验证,发现在was环境下,通过j2ee事务的标准接口使用事务,Connection的autoCommit状态true或者false,标准接口的事务确实不受影响;所以从另一个方面来说,eos的事务管理器对Connection的autoCommit状态为false这种情况支持的不够完善;五.结论1.从解决问题的角度,我们不建议用户直接将Connection的autoCommit设置为false,理由就是这样破坏了数据库连接;如果用户需要将连接设置为false,则需要在用完连接后,将连接的状态设置回去;或者直接在外层使用事务。2.从产品的角度,由于标准接口true或者false2种情况都支持,所以也可以说是EOS的事务管理器支持的不完善,在特定的环境下,事务管理器应该支持这2种情况。EOS6中配置C3P0数据源自动重连方案文章

>

hanning

>

文章详情EOS6中配置C3P0数据源自动重连方案

hanning

发表于9个月前

来自话题

#应用开发平台(EOSPlatform)#

·

116

浏览【适用范围】EOS6.0、Tomcat、Jboss、Oracle【问题描述和定位】在使用EOS6.0的时候,启动了Server后,如果网络出现问题Connectionreset异常,Oracle数据库连接断了后就不能进行操作了,需要重新启动Server。那么,怎样配置可以避免重启Server,特别对于生产环境而言,需要尽可能的避免重启。【解决方案和步骤】1、Tomcat:在EOSGovernor控制台的配置->数据源中,选中某数据源,点击修改,将“连接重试次数”默认值-1修改为1,点击“确定”保存。重启Server。

或者直接修改目录D:\primetonfor3207_platform\eosserver\working\eos-default\config下user-config.xml文件中DataSource的配置:

<configValuekey="Retry-Connect-Count">-1</configValue>修改为

<configValuekey="Retry-Connect-Count">1</configValue>2、JBoss:修改$JBOSS_HOME\server\default\deploy下的EOSProductDataSource-ds.xml,将默认的数据源配置改成如下(与EOS5环境下配置类似):<local-tx-datasource><jndi-name>EOSDefaultDataSource</jndi-name><connection-url>jdbc:oracle:thin:@23:1521:pso</connection-url><driver-class>oracle.jdbc.driver.OracleDriver</driver-class><connection-propertyname="user">eos60</connection-property><connection-propertyname="password">eos60</connection-property><min-pool-size>5</min-pool-size><max-pool-size>100</max-pool-size><blocking-timeout-millis>5000</blocking-timeout-millis><idle-timeout-minutes>15</idle-timeout-minutes><valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name><check-valid-connection-sql>select1fromdual</check-valid-connection-sql><new-connection-sql>select1fromdual</new-connection-sql></local-tx-datasource>【备注】修改这个配置还可以解决如果系统中需要多数据源的话,在这个文件中增加一个local-tx-datasource配置;上面的配置可能对系统访问数据库的性能有影响,有可能每次拿数据库连接的时候都会自动调用这个sql语句;Weblogic、Websphere等应用服务器也应该提供了类似的自动重连机制,可以进到它们的控制台查看。EOS异常处理方法异常获取EOS的异常获取分为两种,一种是在逻辑流中获取异常,另一种是在java代码中获取异常。1.在逻辑流中获取异常如上图所示,开发人员需要在特定的图元上通过添加异常线并添加异常抛出图元(在左侧工具面板中的高级中)的方式来获取特定的异常信息。

异常抛出图元需要开发人员先在构件包的配置文件中加入自定义的异常信息,对图元进行配置是选择相对应的ERRORCODE和ERRORMESSAGE。ERRORMESSAGE可以定义变量,以{0},{1}的方式来进行变量绑定。配置文件路径:配置/resources/exception/perties。该配置支持中文并自动转码,同样在也支持国际化的配置。对于异常处理图元更详细的说明可以在EOSStudio的帮助文档中找到,具体路径:EOS

帮助文档->技术参考->EOS基础参考手册->逻辑流->逻辑流编辑器->异常抛出。

2.在java代码中获取异常EOS提供了默认实现的EOSException。当特定的springbean或者运算逻辑图元需要抛出异常,可以直接在代码中通过newEOSException的方式来抛出异常。该异常提供了多种构造方法,常用的是EOSException(java.lang

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论