Итак, у меня есть приложение Swing, которое взаимодействует с сервером через RMI. Отлично работает.
Я перевожу это приложение для работы в качестве плагина Rhapsody. все работает нормально, пока я не пришел к привязке к удаленному объекту на сервере. Затем вызывается ClassNotfoundException.
Я уже обеспечил, чтобы реестр вызывался с - Djava.rmi.server.useCodebaseOnly=false
Сервер вызывается, включая переключатель - Djava.rmi.server.codebase="file:/C:/Users/esb/eclipse-workspace/modelHarvester/bin/entryPoint/"
и плагин Rhapsody (клиент) вызывается (через раздел JVM в файле rhapsody.ini) с использованием того же ключа.
Код, вызывающий проблемы в клиенте, - это оператор «lookup»
public class HarvesterConnection {
private static Registry myRegistry = null;
private static HarvesterInterface myHarvester = null;
private static boolean needsConnecting = true;
public static HarvesterInterface connect()
{
if (needsConnecting)
{
try
{
myRegistry = LocateRegistry.getRegistry(null);
myHarvester = (HarvesterInterface) myRegistry.lookup("Harvester");
needsConnecting = false;
}
catch (RemoteException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (NotBoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return myHarvester;
}
}
, и для полноты здесь часть серверной части
public static void main(String[] args)
{
final Options toolOptions = new Options();
try
{
ToolTrace.traceTheTool(TracePhase.Initialising, TraceGranularity.ALWAYS, "Harvester Server initialising");
buildCommandLineOptionsProcessor(toolOptions);
if (detectCryForHelp(args))
{
/*
* Just display the help.
* Do NO processing even if
* source model argument is
* present.
*/
displayToolUsageHelp(toolOptions);
}
else
{
try
{
LocateRegistry.createRegistry(1099);
ToolTrace.traceTheTool(TraceGranularity.INFO, "java RMI registry created");
}
catch (RemoteException e1)
{
// error means that registry already exists
ToolTrace.traceTheTool(TraceGranularity.INFO, "java RMI already exists");
}
try
{
/*
* Main processing thread.
*/
ToolTrace.traceTheTool(TraceGranularity.ALWAYS, "Processing Started");
readComandLineArguments(args, toolOptions);
/*
* Instantiate the Server
*/
HarvesterInterface localServer = new HarvesterServer();
myServer = (HarvesterServer)localServer;
HarvesterInterface stubObject = (HarvesterInterface) UnicastRemoteObject.exportObject(localServer, 0);
/*
* Bind the local Server to the name "Harvester" in the registry
*/
Registry localRegistry = LocateRegistry.getRegistry(1099);
localRegistry.rebind("Harvester", stubObject);
ToolTrace.traceTheTool(TraceGranularity.ALWAYS, "Harvester bound in registry");
}
catch (ToolUsageException e )
{
ToolTrace.traceTheTool(e);
exitCode = 1;
}
catch (RemoteException e)
{
ToolTrace.traceTheTool(TraceGranularity.ERROR, "Registry FAILURE", "Cannot locate registry");
e.printStackTrace();
exitCode = 1;
}
catch (Exception e) {
ToolTrace.traceTheTool(TraceGranularity.ERROR, "Tool FAILURE", "Other unhandled exception");
e.printStackTrace();
exitCode = 1;
}
}
}
catch (ToolUsageException e)
{
ToolTrace.traceTheTool(e);
exitCode = 1;
}
}
Какие-нибудь яркие идеи по этому вопросу ?? Заранее спасибо