rhimoo这个项目旨在用javascript来写服务器端,有点rhino on rails的意思。目前看来它还是一个刚初始的项目,但是已经可以正常运行demo了。demo包括用javascript配置并启动的jetty,和一个jjsp分析器。
我的兴趣只在研究它的源代码。
关于rhino的性能,我通过这几天研究把一部分动态配置部分用rhino实现,发现只要调整jvm参数Xmx=Xms,其整体性能约为纯java的75%,我没有拿N皇后问题来测试,那个并不客观。
我应用rhino的部分并不像rhimoo这样,让javascript来做所有事情,我只是让它做一些资源配置,让用户实现我的api,而api中你可以去写javascript的方法。就好像Facebook F8那样。
这样做的目的是减少javascript带来的性能损失,代价是我需要在javascript中创建很多种java对象。我的做法是这样:
Context cx = Context.enter();
Scriptable scope = new ImporterTopLevel(cx);
cx.evaluateReader(scope, getResource("mootools/mootools-server-1.2-1331.js"), "mootools-server", 1, null);
cx.evaluateReader(scope, getResource(context + ".js"), context, 1, null);
cx.evaluateReader(scope, getResource("bootstrap.js"), "bootstrap", 1, null);
...
用bootstrap来做一些翻译工作。
前几天因为这个不是主要矛盾,我就图省事把这些bean的getter,setter去掉,直接上public的字段。这样$extend(new klass(), options)就可以了。
后来,需要方法注入了,就把options遍历一下,从中map出$type=='function'的,然后再把class改成abstract的,最后用new klass({})就是了。
今天发现要这么乱改的类还真不少,而且这样做实在是丑陋哇
好吧,研究一下rhimoo,才发现它是用
new JavaAdapter(ServletHolder, {
newInstance: function () {
var servlet = new JavaAdapter(MooServletTemplate, methods);
servlet.initialize();
return servlet;
}
});
来新建ServletHolder的,查了一下什么是JavaAdapter,好么,我后来做的遍历注入abstract就算白做了。一气做好了setter,把它们再改回正常面目。
最后发现c3p0的ComboPooledDataSource不能用JavaAdapter,原因嘛,它是final的。java可真是安全
咋办涅,计算它是不是final类有点过分了,干脆给一个参数得啦。
var $adapt = function(klass, options, f) {
var instance = $chk(f) ? new klass() : new JavaAdapter(klass, options);
for (var k in options) {
var value = options[k];
if ($type(value) == 'function') continue;
try {
instance[k] = value;
} catch(e1) {
try {
var setter = 'set' + k.capitalize();
instance[setter](value);
} catch(e2) {
}
}
}
return instance;
}
分享到:
相关推荐
在这个特定的场景中,我们讨论的是"Java_Adapter_for_Mobile_2.2.zip",这是一个针对移动设备的Java适配器的新版本2.03。这个压缩包文件包含了"Java_Adapter_for_Mobile_2.2.exe",这很可能是该适配器的安装程序。 ...
例如,如果有一个`Person`类只能说英语,而`Target_Person`接口要求会说英语、法语和日语,那么`Adapter_Person`类适配器可以通过继承`Person`类并实现`Target_Person`接口来添加法语和日语的说辞功能,使得`Person`...
主要是之前要奋战完成一个外包项目,也因为是第一次外包,很多东西要处理,当然也学到很多东西,在这个系列,我会把这次外包的一些代码分享给大家,一起学习。 也可到我的主页www.fuzhufuzhu.com ...去拿!
还需要配置GoldenGate的Java Adapter,它允许GoldenGate与Java代码交互。这通常涉及到编写Java代码,实现特定接口以处理GoldenGate事件,如数据变更。Java代码将处理这些事件并生成XML文档。 3. **启动和监控** ...
《易用高效的Adapter库——FastAdapter深度解析》 在Android应用开发中,Adapter是一个不可或缺的组件,它连接数据源与视图,使数据能够展示在ListView、RecyclerView等控件上。而FastAdapter库,作为一款防弹、...
例如,`<adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>` 这行代码表明了使用JavaAdapter来处理Java对象的远程调用。而 `<destination>` ...
在实际应用中,我们通常会结合Adapter来使用ListView,Adapter扮演着数据源和ListView之间的桥梁角色,将数据转化为ListView可识别的视图元素。本教程将通过一个名为“Demo_ListView”的实例详细介绍如何在Android中...
另一方面,JavaScript可以通过Java的JavaAdapter类或Java的Java全局接口(Java Global Interface,JGIP)来调用Java对象。例如,JavaScript可以调用Java中的方法,如下所示: ```javascript var javaObject = ...
<class>flex.messaging.adapters.java.JavaAdapter </adapter> ``` 完成上述步骤后,当Flex客户端调用`remoteService.javaMethod()`时,就会通过AMF协议向Java服务器发送请求,服务器接收到请求后执行`...
<adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/> <source>org.common.FlexCallJava ``` 这里的关键是`<destination>`...
可能包括了自定义Adapter的Java代码、布局XML文件,以及主Activity如何使用Adapter的代码片段。研究这个示例可以帮助你更好地理解和实践上述概念。 总之,动态添加和删除ListView列表项主要依赖自定义Adapter的使用...
适配器模式(Adapter Pattern)是软件设计模式中的一种,其主要目的是解决接口不兼容问题,使得原本因为接口差异无法协同工作的类能够协同工作。在Java中,适配器模式通常分为类的适配器模式和对象的适配器模式。 ...
ListView通过Adapter来填充数据,Adapter是连接ListView与数据源的桥梁。 二、实现长按事件 1. 设置OnItemLongClickListener 要监听ListView的长按事件,我们需要为ListView设置一个OnItemLongClickListener。这个...
RecyclerView实例是视图容器,LayoutManager负责布局管理,如线性布局(LinearLayoutManager)或网格布局(GridLayoutManager),而Adapter则负责数据绑定和视图创建。 BaseRecyclerViewAdapterHelper是开源库...
在实际开发中,我们常常需要自定义Adapter来处理复杂的数据显示,而BaseRecyclerViewAdapterHelper则帮助我们减少了这部分工作量。 首先,BaseRecyclerViewAdapterHelper的核心功能是提供了一种模板化的方式来创建...
class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/> <!-- 配置HelloWorld方法 --> <source>com.test.HelloJavaFlex</source> ``` 这里,`destination`标签...
<class>flex.messaging.services.remoting.adapters.JavaAdapter </adapter> <destination-id>myDestination ``` 服务器端还需要一个对应的服务类,例如`com.example.MyService`,这个类需要使用`@...
网上关于JAVA的适配器模式例子有很多,但真的有少实在不怎么样,看也不懂。自己总结了一个在性能和结构上都很容易理解的Adapter模式。 Adapter模式也叫适配器模式,是由GoF提出的23种设计模式的一种。Adapter...
<adapter-definition id="java" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/> <source>com.example.MyJavaClass</source> ``` ### 5. Demo实例 `...
<adapter-definition id="java-object" class="flex.messaging.adapters.JavaAdapter"/> <source>com.example.HelloWorldServiceImpl</source> ``` **5. 测试与运行** 完成以上步骤后,编译并运行...