View Javadoc

1   package net.sf.crispy.impl.jboss;
2   
3   import java.net.BindException;
4   import java.util.HashMap;
5   import java.util.Iterator;
6   import java.util.Map;
7   
8   import net.sf.crispy.impl.MiniServer;
9   import net.sf.crispy.impl.ServiceManager;
10  import net.sf.crispy.util.Util;
11  
12  import org.apache.commons.logging.Log;
13  import org.apache.commons.logging.LogFactory;
14  import org.jboss.remoting.InvokerLocator;
15  import org.jboss.remoting.transport.Connector;
16  
17  /**
18   * Mini server for JBoss remoting to answer to client requests.
19   *  
20   * @author Linke
21   *
22   */
23  public class MiniJBossRemotingServer implements MiniServer {
24  	
25  	protected static final Log log = LogFactory.getLog (MiniJBossRemotingServer.class);
26  	public static final String DEFAULT_URL_AND_PORT = "socket://localhost:5411/?" + InvokerLocator.BYVALUE + "=true";	
27  
28  	private String url = DEFAULT_URL_AND_PORT;
29  	private Connector connector = null;
30  	private Map services = new HashMap();
31  	
32  	public MiniJBossRemotingServer() { }
33  	public MiniJBossRemotingServer(String pvUrl) { 
34  		url = pvUrl;
35  	}
36  	
37  	public void addService (String pvServiceInterface, String pvServiceObject) {
38  		services.put(pvServiceInterface, pvServiceObject);
39  	}
40  
41  	public void addService (String pvServiceInterface, Object pvServiceObject) {
42  		services.put(pvServiceInterface, pvServiceObject);
43  	}
44  
45  	public void start() {
46  		try {
47  			connector = new Connector();
48  			boolean isPortFree = Util.isPortFree(5411);
49  			if (isPortFree == true) {
50  				InvokerLocator locator = new InvokerLocator(url);
51  				connector.setInvokerLocator(locator.getLocatorURI());
52  			    connector.create();
53  			    
54  			    JBossRemotingInvocationHandler lvInvocationHandler = new JBossRemotingInvocationHandler();
55  			    
56  			    Iterator it = services.keySet().iterator();
57  			    while (it.hasNext()) {
58  					String lvKey = (String) it.next();
59  					Object lvServiceObject = services.get(lvKey);
60  					if (lvServiceObject instanceof String) { 
61  						String lvValue = (String) services.get(lvKey);
62  						lvServiceObject = Util.createObject(lvValue);
63  					}
64  					lvInvocationHandler.addService(lvKey, lvServiceObject);
65  				}
66  			    
67  			    connector.addInvocationHandler("CrispyInvocationHandler", lvInvocationHandler);
68  			    try {
69  			    	connector.start();
70  			    } catch (BindException e) {
71  			    	if (log.isDebugEnabled()) {
72  			    		log.debug("Problem by starting the MiniJBossRemotingServer: " + e);
73  			    	}
74  			    }
75  			    log.debug("MiniJBossRemotingServrer is started ...");
76  			}
77  		} catch (Exception e) {
78  			if (ServiceManager.DEBUG_MODE_ON) {
79  				e.printStackTrace();
80  			}
81  			if (log.isErrorEnabled()) {
82  				log.error("Error by starting MiniJBossRemotingServer: " + e);
83  			}
84  		}
85  		
86  
87  	}
88  
89  	public void stop() {
90  		connector.stop();
91  		connector.destroy();
92  		connector = null;
93  	}
94  	
95  	public static void main(String[] args) {
96  		Util.initJdkLogger();
97  		
98  		MiniJBossRemotingServer server = new MiniJBossRemotingServer();
99  		server.start();
100 	}
101 
102 }