![JAR search and dependency download from the Maven repository](/logo.png)
nyla.solutions.global.patterns.command.remote.partitioning.RmiOneRouteAdvice Maven / Gradle / Ivy
package nyla.solutions.global.patterns.command.remote.partitioning;
import java.io.Serializable;
import java.net.URI;
import java.net.URISyntaxException;
import java.rmi.RemoteException;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.concurrent.NotThreadSafe;
import nyla.solutions.global.data.Envelope;
import nyla.solutions.global.exception.CommunicationException;
import nyla.solutions.global.exception.RequiredException;
import nyla.solutions.global.exception.SetupException;
import nyla.solutions.global.net.rmi.RMI;
import nyla.solutions.global.patterns.SetUpable;
import nyla.solutions.global.patterns.aop.Advice;
import nyla.solutions.global.patterns.command.Command;
import nyla.solutions.global.patterns.command.commas.CommandAttribute;
import nyla.solutions.global.patterns.command.commas.CommandFacts;
import nyla.solutions.global.patterns.command.commas.CommasConstants;
import nyla.solutions.global.patterns.command.commas.annotations.Aspect;
import nyla.solutions.global.patterns.command.remote.RemoteCommand;
import nyla.solutions.global.util.JavaBean;
import nyla.solutions.global.util.Organizer;
/**
* Used int Partition Data Services design implementation
* for RMI.
*
* - get lookup Id from payload
- get routing key by lookup Id and commasProperties
- lookup by routingKey URL
- configure routing information in Envelope
- Execute RemoteCommas
- skip over execute
* @author Gregory Green
*
*/
@Aspect(name=RmiOneRouteAdvice.ADVICE_NAME)
@NotThreadSafe
public class RmiOneRouteAdvice implements Advice, SetUpable
{
/**
* ADVICE_NAME = "RmiOneRouteAdvice"
*/
public static final String ADVICE_NAME = "RmiOneRouteAdvice";
/**
* LOOKUP_PROP_ATTRIB_NAME = "lookupPropertyName"
*/
public static final String LOOKUP_PROP_ATTRIB_NAME = "lookupPropertyName";
//initialize CommandFacts
public RmiOneRouteAdvice()
{
}// --------------------------------------------------------
@Override
public synchronized void setUp()
{
if(this.registry != null)
return;
try
{
//this.factory = ServiceFactory.getInstance(this.getClass());
//this.registry = this.factory.create(PartitionCommasRemoteRegistry.class);
this.registry = PartitionCommasRemoteRegistry.getRegistry();
}
catch (RemoteException e)
{
throw new SetupException("Unable to get remote commas registry ",e);
}
}// --------------------------------------------------------
/**
* @return rmiOneRouteCommand
* @see nyla.solutions.global.patterns.aop.Advice#getBeforeCommand()
*/
@Override
public Command, ?> getBeforeCommand()
{
return new RmiOneRouteCommand(this.commandFacts,this.lookupPropertyName);
}// --------------------------------------------------------
/**
* No after processing
* @return null
* @see nyla.solutions.global.patterns.aop.Advice#getAfterCommand()
*/
@Override
public Command, ?> getAfterCommand()
{
return null;
}// --------------------------------------------------------
/**
*
* @see nyla.solutions.global.patterns.aop.Advice#getFacts()
* @return this.commandFacts;
*/
@Override
public CommandFacts getFacts()
{
return this.commandFacts;
}// --------------------------------------------------------
/**
* Add CommasProxyCommand.ADVISED_SKIP_METHOD_INVOKE_CMD_ATTRIB_NAME
* to command attributes
* @see nyla.solutions.global.patterns.aop.Advice#setFacts(nyla.solutions.global.patterns.command.commas.CommandFacts)
*/
@Override
public void setFacts(CommandFacts facts)
{
CommandAttribute advisedSkipMethodInvoke = new CommandAttribute(
CommasConstants.ADVISED_SKIP_METHOD_INVOKE_CMD_ATTRIB_NAME,
Boolean.class.getName(), Boolean.TRUE.toString());
if(facts == null)
{
facts = new CommandFacts();
CommandAttribute[] commandAttributes = { advisedSkipMethodInvoke};
facts.setCommandAttributes(commandAttributes);
}
//process advisedSkipMethodInvoke
CommandAttribute[] commandAttributes = facts.getCommandAttributes();
if(commandAttributes == null)
{
CommandAttribute[] commandAttributesArray = { advisedSkipMethodInvoke};
facts.setCommandAttributes(commandAttributesArray);
}
else
{
//get lookup key
for (int i = 0; i < commandAttributes.length; i++)
{
if(LOOKUP_PROP_ATTRIB_NAME.equals(commandAttributes[i].getName()))
this.lookupPropertyName = commandAttributes[i].getValue();
}
//add advisedSkipMethodInvoke
commandAttributes= Organizer.add(advisedSkipMethodInvoke, commandAttributes);
facts.setCommandAttributes(commandAttributes);
}
this.commandFacts = facts;
}// --------------------------------------------------------
/**
* Before process to make Remote RMI call and
* by pass local processing
* @author Gregory Green
*
*/
class RmiOneRouteCommand implements Command>
{
public RmiOneRouteCommand(CommandFacts facts,String lookupPropertyName)
{
this.commandFacts = facts;
this.lookupPropertyName = lookupPropertyName;
}// --------------------------------------------------------
@Override
public synchronized Serializable execute(Envelope env)
{
if(registry == null)
setUp();
if(this.lookupPropertyName == null || lookupPropertyName.length() == 0)
throw new SetupException("Missing Command Atttribute:"+LOOKUP_PROP_ATTRIB_NAME+" see "+this.getClass().getName()+"LOOKUP_PROP_ATTRIB_NAMEv");
//get lookup Id from payload
String location = null;
String lookupId = null;
try
{
//configure routing information in Envelope
Map
© 2015 - 2025 Weber Informatics LLC | Privacy Policy