Minimal RMI server fails at in UnicastRemoteObject constructor

Tom O'Reilly oreilly@mbari.org
Wed Apr 13 23:35:00 GMT 2005


Hello,
I'm new to gcj, and trying to compile an RMI server to native code on my
Linux (Fedora) workstation. Any help would be greatly appreciated! I am
running gcj version 3.4.2.
My server ("BenchServer") is quite minimal; it extends
UnicastRemoteObject, and implements an interface ("Benchmark") that
contains just one method. The server's constructor first invokes
"super()", which generates an ExceptionInInitializerError, with message
"Operation not allowed".
Here are my build steps:
Compile the BenchServer class with javac, so that we can use gjc to
generate stub/skeleton
 javac BenchServer.java
Generate stub:
 rmic -v1.2 -d . BenchServer
Convert stub to native code:
 gcj -c BenchServer_Stub.class
Compile .java source files to native code:
 gcj -c Benchmark.java BenchServer.java
Next, link the objects, specify "main" and "policy" file:
 gcj Benchmark.o BenchServer.o 
BenchServer_Stub.o --main=BenchServer -Djava.security.policy=policy
The policy file looks like this:
 grant {
 // Allow everyone access to everything
 permission java.security.AllPermission;
 };
Now I run the a.out executable, which takes one argument (the host
name):
 a.out etna
 Setting security manager
 Constructing server...
 Got Exception: Operation not allowed
 Exception in thread "main" java.lang.ExceptionInInitializerError
 *** Got java.lang.NoClassDefFoundError: gnu.gcj.runtime.NameFinder
while trying
 to print stack trace.
 Aborted
Anyone know what is going on? Following is my source code:
// Benchmark.java
import java.rmi.Remote;
import java.rmi.RemoteException;
/** Minimal RMI interface. */
public interface Benchmark extends Remote {
 void emptyTest() throws RemoteException;
}
// BenchServer.java
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.Naming;
import java.rmi.server.UnicastRemoteObject;
/** Implementation of minimal RMI server. */
public class BenchServer extends UnicastRemoteObject
 implements Benchmark {
 public BenchServer() throws RemoteException {
 super();
 System.out.println("Done with constructor.");
 }
 public void emptyTest() {
 System.out.println("emptyTest()");
 }
 public static void main(String args[]) {
 if (args.length != 1) {
 System.err.println("Usage: BenchServer hostname");
 return;
 }
 if (System.getSecurityManager() == null) {
 System.out.println("Setting security manager");
 System.setSecurityManager(new RMISecurityManager());
 }
 try {
 System.out.println("Constructing server...");
 BenchServer server = new BenchServer();
 System.out.println("server: " + server);
 String url = "//localhost/benchmark1";
 System.out.println("Binding server to " + url + "...");
 Naming.rebind(url, server);
 System.out.println("Benchmark1Impl is bound to " + url);
 }
 catch (Exception e) {
 System.err.println("Got Exception: " + e.getMessage());
 e.printStackTrace();
 }
 }
}
----------------------------------------------
Thomas C. O'Reilly
Monterey Bay Aquarium Research Institute
7700 Sandholdt Road
Moss Landing, California 95039-9644
831-775-1766 (voice)
831-775-1620 (FAX)
oreilly@mbari.org (email)
http://www.mbari.org (World-wide Web)
"The machine does not isolate man from the great mysteries
 of nature, but plunges him more deeply into them."
 - ANTOINE DE SAINT-EXUPERY
 "Wind, Sand, and Stars" (1939)


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /