MySQL Plugin中可写String类型Variable的实现细节
为MySQL Plugin新增加一个String类型Variable,且这个Variable是可以被编辑的
为MySQL Plugin新增加一个String类型Variable,且这个Variable是可以被编辑的
问题
* 当一个MySQL存不下全部的数据时,那么分库分表是一种常规的解决方案.但是一旦分库分表之后,关系型数据库对应的关系实际上被弱化了,很多查询不得不转换为类似K-V的查询.一般情况下为了使分库分表的数据尽量的平均都采用去模(mod)的算法来分配数据,这样就导致热门数据也会很离散的分布在各个表的各个区段上,分布很离散. 而Innodb的Buffer Pool则是按Page(默认为16k大小)来进行缓存,那么可能热门数据只占16k中的2k甚至更少(对于辅助索引来说会更少,可能只有几百个字节),那么被载入到Buffer Pool中的数据会被读取的可能就很少了,也就是说Buffer Pool的内存利用率是很低的.
一直不知道怎么使用JaxRpcPortProxyFactoryBean的时候设置timeout,
前段时间仔细看了一下 JaxRpcPortProxyFactoryBean的源码,发现他有个属性是customPropertyMap可以用来设置自定义的一些配置信息.
而就算设置了 customPropertyMap了也不一定有用,因为它是配合portInterface来使用的,没有portInterface的话也不会去执行preparePortStub()方法..
所以记得要设置了 portInterface才行哦
例子如下:
<bean id=”tempConvert”
class=”org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean”>
<property name=”serviceFactoryClass”
value=”org.apache.axis.client.ServiceFactory”/>
<property name=”serviceInterface”
value=”axis.test.TempConvertSoap_PortType”/>
<property name=”wsdlDocumentUrl” value=”http://www.w3schools.com/webservices/tempconvert.asmx?wsdl"/>
<property name=”namespaceUri” value=”http://tempuri.org/"/>
<property name=”serviceName” value=”TempConvert”/>
<property name=”portName” value=”TempConvertSoap”/>
<property name=”portInterface” value=”axis.test.TempConvertSoap_PortType”/>
<property name=”customPropertyMap”>
<map>
<entry key=”axis.connection.timeout”>
<value type=”java.lang.Integer”>10000</value>
</entry>
</map>
</property>
</bean>
这次用Xfire作为客户端来连一个WebService
但诡异的是,总是会随机的抛出
org.codehaus.xfire.fault.XFireFault: Couldn’t send message.
Caused by: java.net.SocketTimeoutException: Read timed out的异常
而且经常是很久没访问,再次访问的时候才会出现
Google了一下,都不能解决问题.诡异
后来netstat了一下,发现连接Webservice的TCP的状态一直是ESTABLISHED,即使请求已经完毕了
应该是HttpClient 还一直保留着这个连接.而这个时候如果网络问题导致这个连接出现问题而HttpClient却还不知道继续用这个连接来发送请求就会出现time out了
知道了问题,修改HttpClient的配置
<entry key=”disable.expect-continue” value=”true”/>
<entry key=”http.timeout” value=”30000”/>
<entry key=”disable-keep-alive” value=”true”/>
取消了 expect-continue和keep-alive 这样一旦请求完,连接便会被Closed.
从而避免了time out的发生
在 主 application 里写入
import mx.managers.IPopUpManager;
private var ipopUpManager:IPopUpManager;
或
加上moduleLoader.applicationDomain = ApplicationDomain.currentDomain;
目的就是为了让主程序载入缺少了类,避免module切换时类的丢失
这属于Module的共享代码问题(shared code),
当Module中使用managers时(如PopUpManager,DragManager, HistoryManager)容易出现这个问题,
manager的方法都是静态方法,整个应用程序中创建了一个该manager接口的singleton,
但module仅在自己的Application domain中使用该singleton, 当多个module使用同一个singleton且main
application没有使用时,就会出现这个空对象引用问题:首先引入某manager的module不能将该manager接口的singleton跟其
他module共享,其他module调用该Manager的方法时,应用程序不会再创建该manager接口的实例,这个module就无法引用到该manager接口的实例,就出现了空对象引用问题,可以参考Flex的源码。
默认情况下,Accordion和TabNavigator的 historyManagementEnabled =
true;而ViewStack的historyManagementEnabled = false;
所以使用TabNavigator和Accordion时要注意HistoryManager的共享代码问题。另,仅一个module使用HistoryManager时,卸载之后又加载该module也会出现该问题,说明第二次加载时相当于一个新的module了。
一个解决办法:
在main application 中引入相关manager,可以通过在main application中申明manager的引用即可,如:
import mx.managers.HistoryManager;
var historyManager:HistoryManager;
其他manager类似。
还可以将共享代码作为module加载到main applicaiton的application domain,具体讲解可以参考Alex
Harui的ppt:
http://blogs.adobe.com/aharui/presentations/ 下面关于module的presentation, 讲得很详细。
上图为PureMVC的结构图
如图PureMVC采用的是双协作方式:
• View由Mediator作调停
• Model由Proxy作代理,并且proxy还是被观察者
• Controller由Command作命令,来对Mediator和Proxy进行管理和信息传递
• 信息传递通过Notification进行
• Facade整个管理Mediator,Proxy,Command,他主要通过注册Command,再通过在command中注册Mediator,Proxy到Facade的方式管理所有的对象.Facade还可以集中定义Notification.所以说Facade保存了PureMVC框架中所有的实例
对比传统MVC
• Mediator类似于控制HTML DOM的javascipt所作的工作
• Command类似于Action+dispatch
• Proxy类似于业务的Facade层
• Facade类似于配置dispatch的配置文件.
以上观点纯属我的想法,如有错误请指正
但是一般的应用中可以通过一个简单的事件定义就可以走完PureMVC所有的步骤.PureMVC为了View和Model的解耦要多写这么多代码真的必要么..感觉有点设计过度了
在Mxml中的<mx:Script>中编写AS,要注意的是这段Script最终是会被严格编译成一个Class的,所以在编写这段代码时,也要严格符合类的编写规范.
如下
<mx:Script>
<![CDATA[
import person.Person;
var person:Person = new Person();
person.age=27;
person.name="Kevin";
]]>
</mx:Script>
这样是不行的.
import person.Person;
var person:Person = new Person();
person.age=27;
person.name="Kevin";
这段中 var person:Person = new Person();定义的是一个类的field
这个时候立马去赋值,就类似于java中的static块了,而AS3是不支持static块的,所以立马会编译出错.
可以通过的写法如下
<mx:Script>
<![CDATA[
import person.Person;
private function createPerson():Person{
var person:Person = new Person();
person.age=27;
person.name="Kevin";
return person;
}
]]>
</mx:Script>
直接取createPerson()来获得Person;
受JavaScript影响太大,ActionScript可没JS那般灵活哦,ActionScript比JavaScript规范多了.