<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    gembin

    OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

    HBase, Hadoop, ZooKeeper, Cassandra

    Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

    There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

    About Me

     

    [原創] Dynamic DataService registration in OSGi Container for Graniteds v1.1.0

    In last entry(Adding OSGi support to graniteds v1.1.0), i talk about the OSGifition of Graniteds. Now i would like to add dynamic registration of Granite DataService by using annotation (@RemoteDestination).


    Step1:
       Define two constants:
      
       public static final String TOPIC_GDS_ADD_SERVICE ="org/granite/ds/add/serviceClass";
       
    public static final String SERVICE_CLASS="serviceClass";
       Then,we modify the org.granite.config.flex.ServicesConfig.java
      
      
    import org.osgi.service.event.Event;
    import org.osgi.service.event.EventHandler;
    public
     class ServicesConfig implements ScannedItemHandler,EventHandler{
         
    //
         
    //
         public void handleEvent(Event event) {
            
    if(event.getTopic().equals(TOPIC_GDS_ADD_SERVICE)){
              Class c
    =(Class) event.getProperty(SERVICE_CLASS);
              
    if(c!=null)
                handleClass(c);
    //this method is already provided by this Class, we just call it
              else
               System.out.println(
    "Class NOT Found!!");
            }
        }
     
      }

    Step2:

       in the AMFServiceAdaptor.java I mentioned in the last entry
      
      
        BundleContext context;
        
    public AMFServiceAdaptor(BundleContext context){
            
    this.context=context;
        }
       
    public void init(ServletConfig config) {
            
    try {
                
    super.init(config);
                graniteConfig 
    = GraniteConfig.loadConfig(getServletContext());
                servicesConfig 
    = ServicesConfig.loadConfig(getServletContext());
                Dictionary
    <String, Object> properties = new Hashtable<String, Object>();
                String[] topics 
    = new String[] { TOPIC_GDS_ADD_SERVICE};
                properties.put(EventConstants.EVENT_TOPIC, topics);
                context.registerService(EventHandler.
    class.getName(), servicesConfig, properties);
            } 
    catch (ServletException e) {
                e.printStackTrace();
            }
        }
      
      
    Step3:
       In the Activator we add:

    Activator.java  
     
      Dictionary<String, Object> properties = new Hashtable<String, Object>();
       properties.put(SERVICE_CLASS, TestService.
    class);
       ServiceReference eventAdminRef 
    = context.getServiceReference(EventAdmin.class.getName());
       
    if (eventAdminRef != null){
           EventAdmin admin
    =context.getService(eventAdminRef);
            
    if(admin!=null){
                admin.sendEvent(
    new Event(TOPIC_GDS_ADD_SERVICE,properties));    
       }
      
    TestService.java

     1 package net.blogjava.gembin.domain.services.test;
     2 
     3 import org.granite.messaging.service.annotations.RemoteDestination;
     4 
     5 
     6 @RemoteDestination(id="testService", service="granite-service",channel="my-graniteamf", scope="session")
     7 public class TestService {
     8    
     9     public void test(){
    10         System.out.println("test it!!!");
    11     }
    12 
    13 }


    Step4:
      Flex Part
     
                    [Bindable]
                    
    private var srv:RemoteObject = null;
                    
    import mx.messaging.ChannelSet;
                    
    import mx.messaging.config.ServerConfig;
                    
    import mx.rpc.remoting.mxml.Operation;
                    
    private function testSend():void{
                        srv 
    = new RemoteObject();
                        srv.endpoint 
    = ServerConfig.getChannel("my-graniteamf").endpoint;
                        srv.destination 
    = "testService"
                        srv.channelSet 
    = new  ChannelSet(); 
                        srv.channelSet.addChannel(ServerConfig.getChannel(
    "my-graniteamf"));
                         var operation:Operation 
    = new Operation();
                         operation.name 
    = "test";
                         operation.addEventListener(FaultEvent.FAULT,handleFault);
                         operation.addEventListener(ResultEvent.RESULT,handleRs);
                         srv.operations 
    = {test: operation};
                         srv.test();
                    }
                    private function handleFault(e:FaultEvent):void{
                        Alert.show(e.toString());
                    }
                    private function handleRs(e:ResultEvent):void{
                        Alert.show(e.toString());
                    }
                    <mx:Button id="Test" label="TestIt" click="
    testSend();"/>

    Screen shot


     
    Conclusion
      
       from this example, you can see it's very easy to add osgi dynamic feathure support in Graniteds.

    Enjoy it!!!


    Next entry Example for GraniteDS v1.2.0 OSGi bundle 

    posted on 2008-12-04 14:51 gembin 閱讀(1693) 評論(0)  編輯  收藏 所屬分類: OSGiFlexActionScript3

    導航

    統計

    常用鏈接

    留言簿(6)

    隨筆分類(440)

    隨筆檔案(378)

    文章檔案(6)

    新聞檔案(1)

    相冊

    收藏夾(9)

    Adobe

    Android

    AS3

    Blog-Links

    Build

    Design Pattern

    Eclipse

    Favorite Links

    Flickr

    Game Dev

    HBase

    Identity Management

    IT resources

    JEE

    Language

    OpenID

    OSGi

    SOA

    Version Control

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    free counters
    主站蜘蛛池模板: 亚洲永久无码3D动漫一区| 国产无遮挡色视频免费视频| 亚洲成A∨人片在线观看不卡| 一级毛片在线免费视频| 亚洲国产一区二区三区| 一级女人18片毛片免费视频| 久久久久亚洲精品男人的天堂| 日本视频免费观看| 久久影院亚洲一区| 国产精品免费大片| 亚洲成在人线中文字幕| 女人被男人躁的女爽免费视频| 亚洲精品国产suv一区88| 亚洲日韩国产精品乱| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 中文字幕无码亚洲欧洲日韩| 在线中文高清资源免费观看| 国产精品亚洲专区一区| 无码国产精品一区二区免费16 | 啦啦啦在线免费视频| 色噜噜狠狠色综合免费视频| 狠狠色婷婷狠狠狠亚洲综合| 日本黄色动图免费在线观看| 亚洲国产高清在线精品一区| 国产美女被遭强高潮免费网站| 一本一道dvd在线观看免费视频| 亚洲AV第一页国产精品| 男人的好看免费观看在线视频| 国产精品亚洲综合网站| 国产亚洲精品无码成人| 国产成人免费在线| 美女免费视频一区二区| 亚洲av无码一区二区三区乱子伦| 国产在线观看片a免费观看| 黄色免费网址在线观看| 亚洲网站在线观看| 国产一区二区三区免费看| 久9热免费精品视频在线观看| 天天爽亚洲中文字幕| 国产成人综合亚洲亚洲国产第一页| 67pao强力打造高清免费|