<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 閱讀(1718) 評論(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
    主站蜘蛛池模板: 国产无人区码卡二卡三卡免费| 亚洲成aⅴ人片在线影院八| 2022国内精品免费福利视频| 免费精品国偷自产在线在线 | 亚洲AV日韩精品久久久久久 | 韩国免费a级作爱片无码| 亚洲AV无码久久| 最新中文字幕电影免费观看| 亚洲黄色免费网址| 国产无遮挡又黄又爽免费视频 | 日日狠狠久久偷偷色综合免费 | 亚洲成aⅴ人在线观看| 亚洲国产成人五月综合网| 精品熟女少妇av免费久久| 亚洲成人精品久久| 日本黄色免费观看| 国产AV无码专区亚洲AV蜜芽| 日本免费的一级v一片| 13小箩利洗澡无码视频网站免费| 亚洲VA成无码人在线观看天堂| 91在线视频免费看| a级毛片免费高清毛片视频| 亚洲色大成网站WWW久久九九| 野花高清在线观看免费3中文| a级毛片毛片免费观看久潮喷| 亚洲日韩亚洲另类激情文学| 久久伊人久久亚洲综合| 亚洲AV蜜桃永久无码精品| 国产午夜亚洲精品不卡免下载 | 黄色免费网站在线看| 亚洲一区二区三区无码影院| 中文字幕无码免费久久9一区9 | 伊人久久综在合线亚洲2019| aⅴ在线免费观看| 久久久久久久久久久免费精品 | g0g0人体全免费高清大胆视频| 亚洲精品综合在线影院| 国产精品久久久久影院免费| 4455永久在线观免费看| 91福利免费网站在线观看| 青娱乐在线视频免费观看|