001 package railo.runtime.net.flex; 002 003 import javax.servlet.ServletException; 004 005 import railo.loader.engine.CFMLEngine; 006 import railo.loader.engine.CFMLEngineFactory; 007 import railo.loader.engine.EngineChangeListener; 008 import railo.runtime.util.BlazeDS; 009 import flex.messaging.FactoryInstance; 010 import flex.messaging.FlexContext; 011 import flex.messaging.config.ConfigMap; 012 import flex.messaging.messages.Message; 013 import flex.messaging.messages.RemotingMessage; 014 import flex.messaging.services.ServiceAdapter; 015 import flex.messaging.services.remoting.RemotingDestination; 016 017 /** 018 * Railo implementation of the ServiceAdapter, forward all BlazeDS Request to the CFMLEngine. 019 */ 020 public class RailoAdapter extends ServiceAdapter implements EngineChangeListener { 021 022 public static final short LOWER_CASE=0; 023 public static final short UPPER_CASE=1; 024 public static final short ORIGINAL_CASE=2; 025 026 027 private CFMLEngine engine; 028 private ConfigMap properties; 029 private BlazeDS util; 030 031 public void initialize(String id, ConfigMap properties) { 032 super.initialize(id, properties); 033 this.properties=properties; 034 try{ 035 // we call this because otherwse they does not exists (bug in BlazeDS) 036 ConfigMap propertyCases = properties.getPropertyAsMap("property-case", null); 037 if(propertyCases!=null){ 038 propertyCases.getPropertyAsBoolean("force-cfc-lowercase", false); 039 propertyCases.getPropertyAsBoolean("force-query-lowercase", false); 040 propertyCases.getPropertyAsBoolean("force-struct-lowercase", false); 041 } 042 ConfigMap access = properties.getPropertyAsMap("access", null); 043 if(access!=null){ 044 access.getPropertyAsBoolean("use-mappings", false); 045 access.getPropertyAsString("method-access-level","remote"); 046 } 047 } 048 catch(Throwable t){} 049 050 } 051 052 053 /** 054 * @see flex.messaging.services.ServiceAdapter#invoke(flex.messaging.messages.Message) 055 */ 056 public Object invoke(Message message){ 057 058 try { 059 060 if(util==null){ 061 util = (BlazeDS)getEngine().getBlazeDSUtil(); 062 util.init(properties); 063 } 064 065 066 RemotingDestination remotingDestination = (RemotingDestination)getDestination(); 067 RemotingMessage remotingMessage = (RemotingMessage)message; 068 FactoryInstance factoryInstance = remotingDestination.getFactoryInstance(); 069 070 071 /* 072 System.out.println("source:"+factoryInstance.getSource()); 073 System.out.println("scope:"+factoryInstance.getScope()); 074 System.out.println("properties:"); 075 System.out.println(factoryInstance.getProperties()); 076 077 System.out.println("dest:"+remotingMessage.getDestination()); 078 System.out.println("src:"+remotingMessage.getSource()); 079 System.out.println("mid:"+remotingMessage.getMessageId()); 080 System.out.println("operation:"+remotingMessage.getOperation()); 081 System.out.println("params:"); 082 System.out.println(remotingMessage.getParameters().toArray()); 083 084 System.out.println("id:"+remotingDestination.getId()); 085 System.out.println("scope:"+remotingDestination.getScope()); 086 System.out.println("src:"+remotingDestination.getSource()); 087 System.out.println("channel:"); 088 System.out.println(remotingDestination.getChannels()); 089 */ 090 091 092 093 094 return util.invoke(this,message); 095 } 096 catch (Exception e) {e.printStackTrace(); 097 throw new RuntimeException(e); 098 } 099 } 100 101 /** 102 * load (if needed) and return the CFMLEngine 103 * @return CFML Engine 104 */ 105 private CFMLEngine getEngine() { 106 if(engine==null){ 107 try {CFMLEngineFactory.getInstance(); 108 //engine=CFMLEngineFactory.getInstance(FlexContext.getServletConfig()); 109 engine=CFMLEngineFactory.getInstance(FlexContext.getServletConfig(),this); 110 } 111 catch (Throwable e) { 112 throw new RuntimeException(e); 113 } 114 } 115 return engine; 116 } 117 118 /** 119 * @see railo.loader.engine.EngineChangeListener#onUpdate(railo.loader.engine.CFMLEngine) 120 */ 121 public void onUpdate(CFMLEngine newEngine) { 122 try { 123 engine=CFMLEngineFactory.getInstance(FlexContext.getServletConfig(),this); 124 } catch (ServletException e) { 125 engine=newEngine; 126 } 127 } 128 }