2012-05-18 40 views
1

我一直在努力創建一個RMI項目樣本一段時間,並且現在幾個小時遇到了以下錯誤。如果你們中的任何人都能指出我的錯誤,我會很感激。我將發佈帶有錯誤的修剪代碼。java RMI - 意外的錯誤

提前感謝您的時間。

PrimeFinder.java

import //irrelevant 

public interface PrimeFinder extends Remote 
{ 
    public List<Integer> findPrime (int startPoint, int endPoint) 
     throws RemoteException; 
} 

PrimeFinderService.java

import //irrelevant 

public class PrimeFinderService extends UnicastRemoteObject 
implements PrimeFinder 
{ 
    public PrimeFinderService() throws RemoteException 
    { 
     super(); 
    } 


    public List<Integer> findPrime(int startPoint, int endPoint) 
      throws RemoteException { 

     // Irrelevant 
    } 

    public static void main (String args[]) throws Exception 
    { 
     if (System.getSecurityManager() == null) 
      System.setSecurityManager (new RMISecurityManager()); 

     PrimeFinderService svr = new PrimeFinderService(); 
     Naming.bind ("PowerService", svr); 

     System.out.println ("Service bound...."); 
    } 
} 

.policy

grant { 
    permission java.security.AllPermission; } 

是殺害我的錯誤:

Exception in thread "main" java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: access to class loader denied 
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:419) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267) 
    at sun.rmi.transport.Transport$1.run(Transport.java:177) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:679) 
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273) 
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251) 
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:377) 
    at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source) 
    at java.rmi.Naming.bind(Naming.java:128) 
    at q7.PrimeFinderService.main(PrimeFinderService.java:69) 
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: access to class loader denied 
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source) 
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:409) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267) 
    at sun.rmi.transport.Transport$1.run(Transport.java:177) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:679) 
Caused by: java.lang.ClassNotFoundException: access to class loader denied 
    at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:445) 
    at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:182) 
    at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:637) 
    at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:264) 
    at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:214) 
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1592) 
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1513) 
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1749) 
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346) 
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368) 
    ... 12 more 
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission /home/cem/workspace/OBSS_q7/bin/q7/- read) 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:393) 
    at java.security.AccessController.checkPermission(AccessController.java:553) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at sun.rmi.server.LoaderHandler$Loader.checkPermissions(LoaderHandler.java:1173) 
    at sun.rmi.server.LoaderHandler$Loader.access$000(LoaderHandler.java:1127) 
    at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:409) 
    ... 21 more 

編輯1:

,我試圖克服錯誤路線是:

Caused by: java.security.AccessControlException: access denied (java.io.FilePermission /home/cem/workspace/OBSS_q7/bin/q7/- read) 

我試圖在我的.policy文件中至少有10種不同的方法 - 所有這些都結束了與同樣的問題。我已經嘗試了我找到的教程中的任何內容,並且我相信可以安全地說,問題不在於.policy文件。

我也干預了代碼庫,給代碼錯誤結束了不同的錯誤,所以不能這樣做。

仍在尋找創意^^

乾杯!

+0

您應粘貼您用於啓動服務的命令行調用。我假設它包含代碼庫和策略文件路徑? –

+0

我最初使用eclipse和genady.net的插件,其中WM屬性中的UI使您可以:設置代碼庫,設置策略,啓動註冊表等。 – Pumpkin

+0

但我也試着手動啓動所有東西,如下所示:javac filename.java,javac filenameServer.java,rmic filenameServer,rmiregistry portnumber&,java filenameServer(+指出其.policy文件位置不記得如何調用它現在),結束與完全相同的錯誤跟蹤 – Pumpkin

回答

0

問題是關於linux文件系統權限,修改權限修復了這個問題。

0

擺脫SecurityManager,或者自己寫一個授予該權限的安全策略文件。