package org.drools.grid.distributed.connectors; import java.io.IOException; import java.net.SocketAddress; import java.rmi.RemoteException; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; import org.drools.KnowledgeBase; import org.drools.SystemEventListener; import org.drools.distributed.directory.impl.DistributedConnectionDirectory; import org.drools.grid.ConnectorException; import org.drools.grid.ConnectorType; import org.drools.grid.DirectoryNodeService; import org.drools.grid.GenericConnection; import org.drools.grid.NodeConnectionType; import org.drools.grid.internal.Message; import org.drools.grid.internal.MessageResponseHandler; import org.drools.grid.GenericNodeConnector; import org.drools.grid.GridConnection; import org.drools.grid.distributed.util.RioResourceLocator; public class DistributedRioDirectoryConnector implements GenericNodeConnector, DirectoryNodeService { protected final String name; protected AtomicInteger counter; protected DirectoryNodeService directoryNodeService; protected SocketAddress address; protected SystemEventListener eventListener; protected GenericConnection connection; private String directoryNodeServiceId; public DistributedRioDirectoryConnector(String name, SystemEventListener eventListener) { if (name == null) { throw new IllegalArgumentException("Name can not be null"); } this.name = name; this.counter = new AtomicInteger(); this.eventListener = eventListener; this.connection = new GridConnection(); } public DistributedRioDirectoryConnector(String name, SystemEventListener eventListener, DirectoryNodeService directoryNode) { if (name == null) { throw new IllegalArgumentException("Name can not be null"); } this.name = name; this.counter = new AtomicInteger(); this.eventListener = eventListener; this.directoryNodeService = directoryNode; this.connection = new GridConnection(); } public DistributedRioDirectoryConnector(String name, SystemEventListener eventListener, String directoryNodeServiceId) { if (name == null) { throw new IllegalArgumentException("Name can not be null"); } this.name = name; this.counter = new AtomicInteger(); this.eventListener = eventListener; this.directoryNodeServiceId = directoryNodeServiceId; this.connection = new GridConnection(); } @Override public Message write(Message msg) throws ConnectorException, RemoteException { // if (directoryNodeService != null) { // // // Message returnMessage = this.directoryNodeService.write(msg); // return returnMessage; // // // } // throw new IllegalStateException("directoryService should not be null"); throw new UnsupportedOperationException("Not supported yet."); } @Override public void write(Message msg, MessageResponseHandler responseHandler) { throw new UnsupportedOperationException(); } @Override public String getId() throws ConnectorException, RemoteException { return directoryNodeService.getId(); } public void setDirectoryNodeService(DirectoryNodeService directoryNodeService) { this.directoryNodeService = directoryNodeService; } public DirectoryNodeService getDirectoryNodeService() { return directoryNodeService; } public void connect() throws ConnectorException { if(this.directoryNodeService == null && this.directoryNodeServiceId != null && !"".equals(this.directoryNodeServiceId)){ try { this.directoryNodeService = RioResourceLocator.locateDirectoryNodeById(this.directoryNodeServiceId); } catch (IOException ex) { Logger.getLogger(DistributedRioDirectoryConnector.class.getName()).log(Level.SEVERE, null, ex); } catch (InterruptedException ex) { Logger.getLogger(DistributedRioDirectoryConnector.class.getName()).log(Level.SEVERE, null, ex); } }else{ try { this.directoryNodeService = RioResourceLocator.locateDirectoryNodes().get(0); } catch (IOException ex) { Logger.getLogger(DistributedRioDirectoryConnector.class.getName()).log(Level.SEVERE, null, ex); } catch (InterruptedException ex) { Logger.getLogger(DistributedRioDirectoryConnector.class.getName()).log(Level.SEVERE, null, ex); } } } public void disconnect() throws ConnectorException { //I don't need to be disconected } public GenericConnection getConnection() { return this.connection; } public NodeConnectionType getNodeConnectionType() throws ConnectorException { return new DistributedConnectionDirectory(); } public ConnectorType getConnectorType() { return ConnectorType.DISTRIBUTED; } public int getSessionId() { throw new UnsupportedOperationException("Not supported yet."); } public AtomicInteger getCounter() { throw new UnsupportedOperationException("Not supported yet."); } public void register(String executorId, String resourceId) throws ConnectorException, RemoteException { this.directoryNodeService.register(executorId, resourceId); } public void register(String executorId, GenericNodeConnector resourceConnector) throws ConnectorException, RemoteException { this.directoryNodeService.register(executorId, resourceConnector); } public void unregister(String executorId) throws ConnectorException, RemoteException { throw new UnsupportedOperationException("Not supported yet."); } public GenericNodeConnector lookup(String resourceId) throws ConnectorException, RemoteException { return this.directoryNodeService.lookup(resourceId); } public String lookupId(String resourceId) throws ConnectorException, RemoteException { return this.directoryNodeService.lookupId(resourceId); } public void registerKBase(String kbaseId, String resourceId) throws ConnectorException, RemoteException { this.directoryNodeService.registerKBase(kbaseId, resourceId); } public void registerKBase(String kbaseId, KnowledgeBase kbase) throws ConnectorException, RemoteException { this.directoryNodeService.registerKBase(kbaseId, kbase); } public void unregisterKBase(String kbaseId) throws ConnectorException, RemoteException { throw new UnsupportedOperationException("Not supported yet."); } public KnowledgeBase lookupKBase(String kbaseId) throws ConnectorException, RemoteException { return this.directoryNodeService.lookupKBase(kbaseId); } public Map<String, String> getExecutorsMap() throws ConnectorException, RemoteException { return this.directoryNodeService.getExecutorsMap(); } public Map<String, String> getKBasesMap() throws ConnectorException, RemoteException { return this.directoryNodeService.getKBasesMap(); } public void dispose() throws ConnectorException, RemoteException { this.directoryNodeService.dispose(); } @Override public ServiceType getServiceType() throws ConnectorException, RemoteException { return ServiceType.DISTRIBUTED; } public String lookupKBaseLocationId(String kbaseId) throws ConnectorException, RemoteException { return this.directoryNodeService.lookupKBaseLocationId(kbaseId); } }