`
b051
  • 浏览: 10301 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论
阅读更多
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_For Real_java adapter

    在这个特定的场景中,我们讨论的是"Java_Adapter_for_Mobile_2.2.zip",这是一个针对移动设备的Java适配器的新版本2.03。这个压缩包文件包含了"Java_Adapter_for_Mobile_2.2.exe",这很可能是该适配器的安装程序。 ...

    Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比

    例如,如果有一个`Person`类只能说英语,而`Target_Person`接口要求会说英语、法语和日语,那么`Adapter_Person`类适配器可以通过继承`Person`类并实现`Target_Person`接口来添加法语和日语的说辞功能,使得`Person`...

    Android-多列表的项目(Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装)

    主要是之前要奋战完成一个外包项目,也因为是第一次外包,很多东西要处理,当然也学到很多东西,在这个系列,我会把这次外包的一些代码分享给大家,一起学习。 也可到我的主页www.fuzhufuzhu.com ...去拿!

    goldengate for java

    还需要配置GoldenGate的Java Adapter,它允许GoldenGate与Java代码交互。这通常涉及到编写Java代码,实现特定接口以处理GoldenGate事件,如数据变更。Java代码将处理这些事件并生成XML文档。 3. **启动和监控** ...

    易用高效的adapter库.zip

    《易用高效的Adapter库——FastAdapter深度解析》 在Android应用开发中,Adapter是一个不可或缺的组件,它连接数据源与视图,使数据能够展示在ListView、RecyclerView等控件上。而FastAdapter库,作为一款防弹、...

    Flex前端与Java服务端交互反射机制.doc

    例如,`<adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>` 这行代码表明了使用JavaAdapter来处理Java对象的远程调用。而 `<destination>` ...

    常用Adapter配合ListView使用实例

    在实际应用中,我们通常会结合Adapter来使用ListView,Adapter扮演着数据源和ListView之间的桥梁角色,将数据转化为ListView可识别的视图元素。本教程将通过一个名为“Demo_ListView”的实例详细介绍如何在Android中...

    java如何与脚本(javaScript)之间相互调用二

    另一方面,JavaScript可以通过Java的JavaAdapter类或Java的Java全局接口(Java Global Interface,JGIP)来调用Java对象。例如,JavaScript可以调用Java中的方法,如下所示: ```javascript var javaObject = ...

    flex+java+remoteObject

    <class>flex.messaging.adapters.java.JavaAdapter </adapter> ``` 完成上述步骤后,当Flex客户端调用`remoteService.javaMethod()`时,就会通过AMF协议向Java服务器发送请求,服务器接收到请求后执行`...

    flex访问java对象

    <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/> <source>org.common.FlexCallJava ``` 这里的关键是`<destination>`...

    动态添加、删除ListView列表项

    可能包括了自定义Adapter的Java代码、布局XML文件,以及主Activity如何使用Adapter的代码片段。研究这个示例可以帮助你更好地理解和实践上述概念。 总之,动态添加和删除ListView列表项主要依赖自定义Adapter的使用...

    java设计模式之适配器模式(Adapter)

    适配器模式(Adapter Pattern)是软件设计模式中的一种,其主要目的是解决接口不兼容问题,使得原本因为接口差异无法协同工作的类能够协同工作。在Java中,适配器模式通常分为类的适配器模式和对象的适配器模式。 ...

    listView长按

    ListView通过Adapter来填充数据,Adapter是连接ListView与数据源的桥梁。 二、实现长按事件 1. 设置OnItemLongClickListener 要监听ListView的长按事件,我们需要为ListView设置一个OnItemLongClickListener。这个...

    RecyclerView

    RecyclerView实例是视图容器,LayoutManager负责布局管理,如线性布局(LinearLayoutManager)或网格布局(GridLayoutManager),而Adapter则负责数据绑定和视图创建。 BaseRecyclerViewAdapterHelper是开源库...

    BaseRecyclerViewAdapterHelper

    在实际开发中,我们常常需要自定义Adapter来处理复杂的数据显示,而BaseRecyclerViewAdapterHelper则帮助我们减少了这部分工作量。 首先,BaseRecyclerViewAdapterHelper的核心功能是提供了一种模板化的方式来创建...

    Flex通过BlazeDS与JAVA通信之HelloWord(图解)

    class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/> <!-- 配置HelloWorld方法 --> <source>com.test.HelloJavaFlex</source> ``` 这里,`destination`标签...

    java 中Flex开发RemoteOject 配置详解

    <class>flex.messaging.services.remoting.adapters.JavaAdapter </adapter> <destination-id>myDestination ``` 服务器端还需要一个对应的服务类,例如`com.example.MyService`,这个类需要使用`@...

    Java优良的Adapter模式:适配器模式

    网上关于JAVA的适配器模式例子有很多,但真的有少实在不怎么样,看也不懂。自己总结了一个在性能和结构上都很容易理解的Adapter模式。  Adapter模式也叫适配器模式,是由GoF提出的23种设计模式的一种。Adapter...

    flex remoteObject封装后和java通信

    <adapter-definition id="java" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/> <source>com.example.MyJavaClass</source> ``` ### 5. Demo实例 `...

    Flex与Java通信采用blazeDS的方式的例子helloworld

    <adapter-definition id="java-object" class="flex.messaging.adapters.JavaAdapter"/> <source>com.example.HelloWorldServiceImpl</source> ``` **5. 测试与运行** 完成以上步骤后,编译并运行...

Global site tag (gtag.js) - Google Analytics