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

 

[原创] Adding OSGi support to graniteds v1.1.0

There are sevral steps to OSGify the graniteds v1.1.0

Step1:
 create a adaptor serlvet which is used to register it in the OSGI env.
 

 1
 package org.granite.adaptor;
 2 
 3 import java.io.DataInputStream;
 4 import java.io.DataOutputStream;
 5 import java.io.IOException;
 6 
 7 import javax.servlet.ServletConfig;
 8 import javax.servlet.ServletException;
 9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 
13 import org.granite.config.GraniteConfig;
14 import org.granite.config.flex.ServicesConfig;
15 import org.granite.context.AMFContextImpl;
16 import org.granite.context.GraniteContext;
17 import org.granite.messaging.amf.AMF0Message;
18 import org.granite.messaging.amf.io.AMF0Deserializer;
19 import org.granite.messaging.amf.io.AMF0Serializer;
20 import org.granite.messaging.amf.process.AMF0MessageProcessor;
21 import org.granite.messaging.webapp.HttpGraniteContext;
22 
23 /**
24  * 
25  * @author gembin
26  *
27  */
28 public class AMFServiceAdaptor extends HttpServlet {
29     // for Granite Data Service(GDS)
30     private GraniteConfig graniteConfig = null;
31     private ServicesConfig servicesConfig = null;
32 
33     public void init(ServletConfig config) {
34         try {
35             super.init(config);
36             graniteConfig = GraniteConfig.loadConfig(getServletContext());
37             servicesConfig = ServicesConfig.loadConfig(getServletContext());
38             
39         } catch (ServletException e) {
40             e.printStackTrace();
41         }
42     }
43     
44     public ServicesConfig getServicesConfig(){
45          return servicesConfig;
46     }
47     
48     protected void doPost(HttpServletRequest request,
49             HttpServletResponse response) throws ServletException, IOException {
50         System.out.println("Start Processing AMF Request"+getServicesConfig());
51         try {
52             GraniteContext context = HttpGraniteContext.createThreadIntance(
53                     graniteConfig, servicesConfig, getServletContext(),request,response);
54          
55             if (context == null)
56                 throw new ServletException("GraniteContext not Initialized!!");
57              
58             AMFContextImpl amf = (AMFContextImpl) context.getAMFContext();
59             //Phase1 Deserializing AMF0 request
60             System.out.println(">>>>> Deserializing AMF0 request from"+request.getRequestURI());
61             AMF0Deserializer deserializer = new AMF0Deserializer(
62                     new DataInputStream(request.getInputStream()));
63             AMF0Message amf0Request = deserializer.getAMFMessage();
64             
65             //Phase2 Processing AMF0 request 
66             System.out.println(">>>>> Processing AMF0 request: " + amf0Request);
67             AMF0Message amf0Response = AMF0MessageProcessor.process(amf0Request);
68             System.out.println("<<<<< Returning AMF0 response: " + amf0Response);
69 
70             //Phase3 Send back response to the client
71             response.setContentType(AMF0Message.CONTENT_TYPE);
72             AMF0Serializer serializer = new AMF0Serializer(new DataOutputStream(response.getOutputStream()));
73             serializer.serializeMessage(amf0Response);
74             
75             System.out.println("End of Processing AMF Request");
76         } catch (Exception e) {
77             e.printStackTrace();
78             throw new ServletException(e);
79         }
80     }
81 
82 }
83



Step2:
   register the servlet in OSGi Container
HttpContext commonContext = httpService.createDefaultHttpContext();
Dictionary initparams 
= new Hashtable();
initparams.put(
"servlet-name""AMFMessageServlet");
httpService.registerServlet(
"/WebContent/graniteamf/amf",new AMFServiceAdaptor(), initparams, commonContext);

Step3:
    Ensure the servicesConfigPath(/WEB-INF/flex/services-config.xml) and graniteConfigPath(/WEB-INF/granite/granite-config.xml),otherwise, you need
modify the source code of ServicesConfig.java and GraniteConfig.java to put the good config files in your project!


finally:
   you've made it. it's time to create a testService to test it.
Sample:

  public class UserAuthenticateService{
     public boolean auth(String username,String pwd){
        if (pwd.equals("1234") && username.equals("gembin")) {
                return true;
         } 
       return false;
     }
  }
  put this service in the service-config.xml
   <services>
        <service
            id="granite-service"
            class="flex.messaging.services.RemotingService"
            messageTypes="flex.messaging.messages.RemotingMessage">
            <destination id="authenticateService">
                <channels>
                    <channel ref="my-graniteamf"/>
                </channels>
                <properties>
                    <scope>session</scope>
                    <source>net.blogjava.gembin.domain.services.security.UserAuthenticateService</source>
                </properties>
            </destination>
        </service>
    </services>

For the actionscript part, i just omit it. if you don't know how to use it to communicate to the data service or you have some questions, pls reply.

Next entry Dynamic DataService registration in OSGi Container for Graniteds v1.1.0

Enjoy it!!!

posted on 2008-12-03 23:18 gembin 阅读(1603) 评论(2)  编辑  收藏 所属分类: OSGiFlex

评论

# re: [原创] Adding OSGi support to graniteds v1.1.0 2008-12-05 00:52 Franck Wolff

Hi,

Would you like to contribute your code to GraniteDS? I guess other people would be happy to get builtin OSGi support in GDS.

Regards,
Franck.

PS: you'll find my email on GDS site.  回复  更多评论   

# re: [原创] Adding OSGi support to graniteds v1.1.0 2008-12-05 21:30 gembin

i'm very happy to contribute!
  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(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