RMI- Callback NoClassDefFound error

Hello all,
i have a client server application, where the client needs to register to the server for obtaining notifications:
When i start the server, i get the following exception:
Error occurred in server thread; nested exception is:
NoClassDefFoundError: rpe/RpsRpeRMI
The "pe/RpsRpeRMI" ist the client interface.
Must the rmiregistry.exe also starts at the client side? If yes, how to do this when both the client and server are running on the same machine?
many thanks

here is the complete trace :
Exception in thread "Thread-2" java.lang.NoClassDefFoundError: rpe/RpeRemoteInterface
     at java.lang.Class.getDeclaredMethods0(Native Method)
     at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
     at java.lang.Class.privateGetPublicMethods(Unknown Source)
     at java.lang.Class.getMethods(Unknown Source)
     at sun.misc.ProxyGenerator.generateClassFile(Unknown Source)
     at sun.misc.ProxyGenerator.generateProxyClass(Unknown Source)
     at java.lang.reflect.Proxy.getProxyClass(Unknown Source)
     at sun.rmi.server.LoaderHandler.loadProxyClass(Unknown Source)
     at sun.rmi.server.LoaderHandler.loadProxyClass(Unknown Source)
     at sun.rmi.server.LoaderHandler.loadProxyClass(Unknown Source)
     at java.rmi.server.RMIClassLoader$2.loadProxyClass(Unknown Source)
     at java.rmi.server.RMIClassLoader.loadProxyClass(Unknown Source)
     at sun.rmi.server.MarshalInputStream.resolveProxyClass(Unknown Source)
     at java.io.ObjectInputStream.readProxyDesc(Unknown Source)
     at java.io.ObjectInputStream.readClassDesc(Unknown Source)
     at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
     at java.io.ObjectInputStream.readObject0(Unknown Source)
     at java.io.ObjectInputStream.readObject(Unknown Source)
     at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
     at rpe.RpeServerFinder.connect(RpeServerFinder.java:98)
     at rpe.RpeServerFinder.run(RpeServerFinder.java:52)
     at java.lang.Thread.run(Unknown Source)
Notes:
the both remote objects (client callback + server interface) are created as plugin-projects from jar-files.
The remote object of the server (plugin) is added to the RCP-Client application as a dependency.

Similar Messages

  • RMI callbacks with no replica aware stubs in a cluster?

    We would like to use either an RMI ping mechanism or an RMI callback in an upcoming project but are limited to 1.1 and 1.2 JRE's. I don't believe generating a replica aware proxy is an option for us given those constraints, no support for dynamic proxies. So we have a remote server object that we would ideally like to be clusterable that we can register a callback interface with. How can we accomplish this given our client limitations with weblogic 8.1 RMI? Any options?

    Yep you speak no lies. Of course once I thought about it some more I realized the error of assuming one could register a jdk rmi object with a weblogic rmi object. JRMP vs T3?. Not good.
    We still like using plain jane RMI w/in weblogic. I can register my UnicastRemoteObject stub with a normal RMI object on the server and it can callback and deliver messages. It will also send heartbeats periodically. If the heartbeat isn't heard from in awhile we re-register through http. The advantage of this is that the http session has failed over to another box and the web tier manages the rmi registration for me. The client can remain ignorant of any RMI lookups, which are tedious when not using JNDI or the cluster aware proxy.
    All of this to get back a few seconds and keep a few thousand clients from polling through a servlet every second. Argh JDK 1.1.
    Thanks for hammering that final point in.

  • RMI callback with JAVA1.5

    Since the version 1.5 we have no need to distribute the stub to all the clients.
    It's a great feature, but I need to perform a callback from the server to the client, in this case I need to perform a call to UnicastRemoteObject.exportObject() client-side before calling the registration method exposed by the server, and the stub of the class implementing the callback interface must be placed in the classpath of the server, is it true? Is there any other methos to perform an RMI-callback?
    To be clear as much as possible I have this interface exposed by the server
    public interface Services extends Remote
      public Map<String, ApplicationStatus> applicationsList () throws RemoteException;
       public ApplicationStatus startApplication (String identifier) throws RemoteException;
      public ApplicationStatus stopApplication (String identifier) throws RemoteException;
      public int exitCode (String identifier) throws RemoteException;
       * This method, as the name says, is used by the client to register the listener to some server-side event.
       * @param callback
       * @throws RemoteException
      public void registerForNotification (ExitCodeCallback callback) throws RemoteException;
    }and the interface of the callback is
    public interface ExitCodeCallback extends Remote
      public void notifyExitCode (ExitCodeEvent event) throws RemoteException;
    }On the server side I export the services in the registry
    Services servicesServerSide = new MyServices();
    Services services = (Services) UnicastRemoteObject.exportObject(servicesServerSide , 0);and on the client I perform a lookup of the services
    Registry registry = LocateRegistry.getRegistry("192.168.0.1", 1099);
    Services services = (Services) registry.lookup("SERVICES");I export my implementation of the interface
    public class ClientExitCodeCallback implements ExitCodeCallback
      public void notifyExitCode (ExitCodeEvent event)
        System.out.println(event.asString());
    }through the code
    services.registerForNotification(remoteCallback);but on the calling of this method I obtain a ServerSideException
    java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
         java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
         java.lang.ClassNotFoundException: it.sogei.jscheduler.rmi.client.ClientExitCodeCallback_Stub
         at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:325)
         at sun.rmi.transport.Transport$1.run(Transport.java:153)
         at java.security.AccessController.doPrivileged(Native Method)
         at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
         at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
         at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
         at java.lang.Thread.run(Thread.java:595)
         at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
         at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
         at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)
         at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:179)
         at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
         at $Proxy0.registerForNotification(Unknown Source)
         at it.sogei.jscheduler.rmi.client.StartClient.main(StartClient.java:45)
    Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
         java.lang.ClassNotFoundException: it.sogei.jscheduler.rmi.client.ClientExitCodeCallback_Stub
         at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:285)
         at sun.rmi.transport.Transport$1.run(Transport.java:153)
         at java.security.AccessController.doPrivileged(Native Method)
         at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
         at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
         at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
         at java.lang.Thread.run(Thread.java:595)
    Caused by: java.lang.ClassNotFoundException: it.sogei.jscheduler.rmi.client.ClientExitCodeCallback_Stub
         at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
         at java.security.AccessController.doPrivileged(Native Method)
         at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
         at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
         at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
         at java.lang.Class.forName0(Native Method)
         at java.lang.Class.forName(Class.java:246)
         at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:430)
         at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
         at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
         at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
         at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
         at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1544)
         at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1466)
         at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1699)
         at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
         at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
         at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:290)
         at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:279)
         ... 6 moreIs it true all of the above?

    If the server gets that exception, it's because the client found and used the stub when it exported its callback, or else the server is running < 1.5.
    If the client explicitly cites a port number or zero and it is running >= 1.5 and there is no stub class, it won't use it; it will create a dynamic stub class; and it will send an object of that class to the server as a parameter to the registration call. If the server is running >= 1.5, it will succesfully deserialize that object, reconstruct the dynamic stub from information in the serialization stream, and execute the registration method implementation.
    If the client exports by using a stub class instead of the above, it will create an object of that class and send it to the server as a parameter to the registration call; the server will try to deserialize it; and if it doesn't have the stub class available it will throw that exception.
    This is how it works.

  • RMI Callback with Applet

    Hi,
    I have a simple RMI Callback Client/Sever Application, where the client-side is inplemented in a JApplet. All works fine by local tests (client and server on my machine), but when the client is on remote machine I got an security exception or error (ClassFormatError(Bad magic number)).
    How can I make my client/server work?

    No, I'm testing inside LAN, no firewalls, no proxys, no nothing. Just a server and the client (applet).
    And this strange error, I'll paste the entire stack trace:
    java.lang.ClassFormatError: Client (Bad magic number)
    at java.lang.ClassLoader.defineClass0(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at sun.applet.AppletClassLoader.findClass(Unknown Source)
    at sun.plugin.security.PluginClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.applet.AppletClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.applet.AppletClassLoader.loadCode(Unknown Source)
    at sun.applet.AppletPanel.createApplet(Unknown Source)
    at sun.plugin.AppletViewer.createApplet(Unknown Source)
    at sun.applet.AppletPanel.runLoader(Unknown Source)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    On my local machine oll works fine... is the problem the applet's "sandbox"? Or...?
    Any ideas are welcome
    Thanks

  • RMI Callback ConnectException

    Hi,
    I'm trying to get a RMI Callback running on 2 different machines. The client registers itself at the server who then calls a method on the client. Locally everything works fine, but when running the server on a different PC I get a ConnectException when trying to call the callback method on the client. Funnily enough, the IP to which the connection is refused is that of the server! Why does it try to connect to itself? No firewalls involved, policies okay, registry running... Tested already with two machines running the same OS and Java version.
    What am I missing?
    Thanks a lot!

    I'm also facing the same problem. The application without callbacks runs without problem in one machine AND two different machines. but when i run those on different machines the app with callbacks fails. In this case the client program gives error. The IP address it looks to connect is correct in my case.
    Lookup completed
    Server said hello
    Exception in CallbackClient: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
         java.rmi.ConnectException: Connection refused to host: 192.168.0.199; nested exception is:
         java.net.ConnectException: Connection refused

  • NoClassDefFound error oracle/sql/opaque

    Hi There,
    [Using Java 1.4.2, BEA WebLogic 8.1, Oracle 9i Db]
    We're having a bit of trouble with the above error.
    In our java code, we are referencing xdb.jar and odbc14.jar but when we try to create an XMLTYPE object from an OPAQUE object we receive the NoClassDefFound error.
    Anyone with any ideas on how to get around this please?
    Many thanks,
    Neil

    Hi,
    I had the same problem...
    Put the xsu12_817.jar or xsu12_816.jar (depends on RDBMS version) in your CLASSPATH instead of xsu12.jar. (you can find xsu12_817.jar and xsu12_816.jar files in Oracle XDK).
    It should work.
    Regards
    Sash

  • NAPT Firewall, RMI Callbacks and JRMP MultiplexProtocol

    Hi All,
    I am looking at having an RMI client behind a Network Address Port Translation firewall receive RMI calls back from an RMI server. NAPT makes it impossible for the client to listen for connection coming from the server through the NAPT firewall.
    This is discussed at http://www.rmiproxy.com and http://cssassociates.com/rmifirewall.html but the proposed solutions do not appear to use the MultiplexProtocol protocol defined by JRMP (http://java.sun.com/j2se/1.4.2/docs/guide/rmi/spec/rmi-protocol3.html).
    The RMI FAQ
    "How can I receive incoming RMI calls through a local firewall"?
    (http://java.sun.com/j2se/1.3/docs/guide/rmi/faq.html#firewallIn) had a section for JSSE 1.3 that explained how to use the multiplex protocol (option 4). It sounds like this option referred to the JRMP MultiplexProtocol protocol.
    The multiplex protocol option has been removed from the 1.4 FAQ
    (http://java.sun.com/j2se/1.4.2/docs/guide/rmi/faq.html#firewallIn).
    Tried the "checkListen" and "socket factory" techniques mentioned in the 1.3 FAQ without success with 1.4.2. The RMI client behind the NAPT firewall runs in a signed Applet.
    Is the ability of using the JRMP MultiplexProtocol protocol available in the JRE in order to receive incoming RMI calls through a local firewall? If yes, what do you do in order to use it?
    What is the best way to have RMI callbacks work behind NAPT?
    Thanks a lot in advance!
    Cheers
    Bertrand

    As of about JDK 1.2.2, the ability of RMI clients to negotiate the multiplex protocol was
    removed, but the server-side support remains.
    Your best answer for negotiating NAT filrewalls may be the RMI Proxy http://www.rmiproxy.com, although I could be biased as I wrote it.
    EJP

  • RMI Callbacks with Highavailability

    Hi,
    I would like to use the RMI Callbacks mechanism. The only problem I got is that I need to also implement highavailability, meaning that I will have more than one server. How can this be implement? Do I need to pass the callback reference to all the other servers? Is it possible to keep the reference in a data base?
    Thanks!

    I resent your remark.
    A client can connect to one server. Now, this server has the refernce to later be used by RMI Callback. In order for other servers to use it as well, the server can serialize the reference and save it in the DB (that was my question - if saving it in the database is possible). A server that gets a request from a client and wants to forward it to another client, checks to see if it has its reference. If not, it reads it from the database and uses it.

  • RMI callback

    Hello everyone!
    I have problem with RMI callbacks. I have on server function "connect" which is adding a client to host lists. Then if necessary I send something to people from that list. Everything is working, client can send info to server which is next resend to clients from host list. But problem is at start-up. Sending to a server a reference to a client object is very, very slow. It takes about 10-20 sec.
    Then everything is fine, every method gives me an answer within parts of seconds.
    How can I eliminate this startup problem?
    Thanks in advance,
    Daniel

    It seems that I resolve the problem first :) Hopfully.
    Here is the answer for those of You who has or will have same problem:
    If you want to pass the object by reference to server you need to implement Remote interface. Of course this is implemented by class UnicastRemoteObject, which you have to extend, but you must remember to implement it in every object which is called by class as well. I have forgoten about this and insted passing by reference it copied object, which is horrible SLOW!!

  • RMI Callback messages can not be sent to all clients

    we I send a message to all clients using RMI Callback the message dont arrive to all clients when one or more clients is disconnected without removing themselves from the hashtable at the server side .
    how i can know if the client is disconnected before sending the message to him using RMI callback taking into account that the client dosnt tell the server when he has disconnected.
    please i want a solution to this problem.
    thanks

    You seem to be making this a little complicated. During the login (or sometime) have one of the parms that are passed back to the server be a remote object on the client. It can have a nice interface like
    public void callMe(Object obj) throws .... or you could get cute and add
    pubic void shutDown() throws.... but this could be handled in the other method.
    During the call the client becomes the server and the server the client. The callMe method has no clue as to what thread it is on so it should just quickly queue up whatever it has gotten and return. It should not be doing work that will effect the Awt thread. If the client is no longer there then you should be able to catch this on the server, and continue posting other clients.
    Howie
    Your question is very similar to what I'm currently
    researching. I've got the additional complication of
    detecting when clients crash without unregistering (in
    my case unlocking) a resource. I haven't written any
    test code yet, so don't shoot me if I'm wrong, but
    here is my general strategy.
    In order to implementing RMI callbacks, it looks like
    you must make both the clients and the server register
    themselves in the RMI Registry. Parameters sent
    through RMI method calls are done by value so
    you can't simply add a listener as you normally do.
    The server will put itself in the registry using a
    well known ID. The clients will get this reference
    and ask the server for a unique ID. They will then
    register themselves in the RMI registry using this
    value. The client will then tell the server that it
    is registered. I believe if the client object is
    wrapped in a WeakReference, then when the client dies
    or ends, the reference contained in the WeakReference
    will be null. The server will perform this check on
    all registered clients to determine which clients are
    still alive.
    ,Marcus

  • Java.rmi.RemoteException: Protocol error reported by the card! why?

    Hello,
    I am currently trying to run the JCK 2.2.1 SecureRMIDemo using SmartCardIO instead of OCF, but getting an error:
    java.rmi.RemoteException: Protocol error reported by the card
    (in my last post I succesfully ran the RMIDemo using my SmartCardIO implementation, see http://forums.sun.com/thread.jspa?threadID=5405634&tstart=15)
    So here is what I did:
    - I succesfully loaded the server app (com.sun.javacard.samples.SecureRMIDemo) on the card without changes.
    - I created an new accessor class: public class PINCardAccessor extends SmartCardIOAccessor (I wrote SmartCardIOAccessor for the RMIDemo, it should work fine as an accessor)
    - The contents of PINCardAccessor class and SecureOCFCardAccessor are the same, just the class declration makes the difference
    - Here is the most important part of my main method:
                   ca = new PINCardAccessor(false);
                   JavaCardRMIConnect  jcRMI = new JavaCardRMIConnect(ca);                         
                   jcRMI.selectApplet(appAID);
                   // send PIN
                   System.out.println("Sending PIN...");
                if (! ((PINCardAccessor) ca).authenticateUser( PRINCIPAL_APP_PROVIDER_ID ))
                     System.out.println("Wrong PIN!");
                     System.exit(0);
                   Purse myServ = (Purse) jcRMI.getInitialReference();
                   if(myServ == null)
                      throw new Exception("Received null instead of the initial ref");
                   // print balance
                   System.out.println("Balance: "+myServ.getBalance());And finally here is the debug output:
    accessor: select command
    0 a4 4 0 a a0 0 0 0 62 3 1 c a 1 7f
    90 0 6f 42 6e 40 5e 3e 2 2 38 81 33 f1 0 26 63 6f 6d 2f 73 75 6e 2f 6a 61 76 61 63 61 72 64 2f 73 61 6d 70 6c 65 73 2f 53 65 63 75 72 65 52 4d 49 44 65 6d 6f f 53 65 63 75 72 65 50 75 72 73 65 49 6d 70 6c
    90 0 6f 42 6e 40 5e 3e 2 2 38 81 33 f1 0 26 63 6f 6d 2f 73 75 6e 2f 6a 61 76 61 63 61 72 64 2f 73 61 6d 70 6c 65 73 2f 53 65 63 75 72 65 52 4d 49 44 65 6d 6f f 53 65 63 75 72 65 50 75 72 73 65 49 6d 70 6c
    Sending PIN...
    80 39 0 0 4 12 34 0 46 7f
    90 0 0 0
    Le=2
    csum1=0
    csum2=0
    90 0
    80 38 2 2 6 33 f1 ec a8 ff b8 7f
    90 0 99 0 6 ff 9f
    Le=5
    csum1=-97
    csum2=-97
    90 0 99 0 6
    java.rmi.RemoteException: Protocol error reported by the card
         at com.sun.javacard.javax.smartcard.rmiclient.CardObjectFactory.throwError(Unknown Source)
         at com.sun.javacard.javax.smartcard.rmiclient.CardObjectFactory.throwException(Unknown Source)
         at com.sun.javacard.javax.smartcard.rmiclient.CardObjectFactory.getObject(Unknown Source)
         at com.sun.javacard.ocfrmiclientimpl.JCRemoteRefImpl.parseAPDU(Unknown Source)
         at com.sun.javacard.ocfrmiclientimpl.JCRemoteRefImpl.invoke(Unknown Source)
         at com.sun.javacard.samples.SecureRMIDemo.SecurePurseImpl_Stub.getBalance(Unknown Source)
         at SecureClient.main(SecureClient.java:60)Please help me, I cant find the reason for this exception.
    thank you
    sebastaian

    Oh, thanks for pointing at the JCRE Spec, it is very informative, but i still have not found the problem yet.
    If i understand everything right, the communication's flow is
    SecureClient <-> PINCardAccessor <-> SmartCardIOAccessor <-> MySecurityService <-> SecurePurseImpl (with help of SecurePurseApplet)
    probably i made a mistake in a protocol of one or more layers.
    - MySecurityService, SecurePurseImpl and SecurePurseApplet are EXACTLY the one's from com.sun.javacard.samples.SecureRMIDemo of JCDK 2.2.1, so there cant be any mistake (?).
    - SmartCardIOAccessor worked fine in my RMIDemo tests, see http://forums.sun.com/thread.jspa?threadID=5405634&tstart=15 - there is also the implementation)
    - SecureClient must be obviously correctly
    so maybe it's something about PINCardAccessor? hmm...i havent found anything, but here is the complete code:
    import javax.smartcardio.CardException;
    * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
    * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
    * @(#)SecureOCFCardAccessor.java     1.11 03/07/08
    public class PINCardAccessor extends SmartCardIOAccessor {
        public PINCardAccessor(boolean debug) throws CardException {
              super(debug);
         private static final byte INS_SELECT   = (byte)0xA4;
        private static final byte APDU_CMD_MASK = (byte)0xFC;
        private static final byte CLA_ISO7816 = (byte)0x00;
        private static final byte CLA_AUTH = (byte)0x80;
        private static final byte INS_AUTH = (byte)0x39;
        private static final boolean debug2 = false;
        /** Modifies the data and calls super.sendCommandAPDU to perform the actual send.
         * The data returned from the smart card is returned by this method within
         * the <CODE>ResponseAPDU</CODE> object
         * @param apdu The command APDU to be sent to the smart card
         * @return The response APDU returned from the card. <CODE>null</CODE> if none available.
         * @throws Exception if a communication error or timeout occurred
        public byte[] exchangeAPDU( byte[] sendData ) throws java.io.IOException{
            System.out.println("Send Data:"+SmartCardIOAccessor.getHexString(sendData));
            final boolean select = isSelect(sendData);
            byte[] dataWithChecksum;
            if(select) {
                dataWithChecksum = new byte[ sendData.length ];
                System.arraycopy(sendData, 0, dataWithChecksum, 0, sendData.length);
            else {
                dataWithChecksum = new byte[ sendData.length + 2];
                System.arraycopy(sendData, 0, dataWithChecksum, 0, sendData.length-1);
                dataWithChecksum[dataWithChecksum.length-1] = sendData[sendData.length-1];
                int Lc = dataWithChecksum[4];
                short csum = 0;
                for(short n = 5; n<Lc+5; ++n) {
                    csum += sendData[n];
                dataWithChecksum[Lc+5] = (byte) (csum>>8);
                dataWithChecksum[Lc+6] = (byte) (csum);
                dataWithChecksum[4] += 2;  // increase Lc
            if(debug2) {
                for(int i=0; i<dataWithChecksum.length;++i) {
                    System.out.print(Integer.toHexString(dataWithChecksum[i] & 0x00FF) + " ");
                System.out.println();
            byte[] receiveDataWithChecksum =  super.exchangeAPDU( dataWithChecksum );
            byte[] receiveData;
            if(debug2) {
                for(int i=0; i<receiveDataWithChecksum.length;++i) {
                    System.out.print(Integer.toHexString(receiveDataWithChecksum[i] & 0x00FF) + " ");
                System.out.println();
                System.out.println();
            if(!select)  // verify the checksum
                int Le = receiveDataWithChecksum.length - 2;   // 2 bytes reserved for SW
                if(debug2) {
                    System.out.println("Le=" + Le);
                short csum1 = 0;
                for(short n = 2; n<Le; ++n) {
                    csum1 += receiveDataWithChecksum[n];
                short csum2 = (short)
                (receiveDataWithChecksum[receiveDataWithChecksum.length - 2]<<8)
                |
                (receiveDataWithChecksum[receiveDataWithChecksum.length - 1] & 0x00FF)
                if(debug2) {
                    System.out.println("csum1=" + csum1);
                    System.out.println("csum2=" + csum2);
                System.out.println("csum1=" + Integer.toHexString(csum1));
                System.out.println("csum2=" + Integer.toHexString(csum2));
                if(csum1 != csum2) throw new java.io.IOException("Wrong checksum on returned data");
                receiveData = new byte[receiveDataWithChecksum.length-2];
                System.arraycopy(receiveDataWithChecksum, 0, receiveData, 0, receiveData.length);
            else {
                receiveData = new byte[receiveDataWithChecksum.length];
                System.arraycopy(receiveDataWithChecksum, 0, receiveData, 0, receiveData.length);
            if(debug2) {
                for(int i=0; i<receiveData.length;++i) {
                    System.out.print(Integer.toHexString(receiveData[i] & 0x00FF) + " ");
                System.out.println();
                System.out.println();
            System.out.println("Receive Data:"+SmartCardIOAccessor.getHexString(receiveData));
            return receiveData;
        boolean authenticateUser( short ID ){
            byte[] externalAuthCommand = new byte[8];
            externalAuthCommand[0] = CLA_AUTH;
            externalAuthCommand[1] = INS_AUTH;
            externalAuthCommand[4] = 2;  // Lc
            externalAuthCommand[5] = (byte)(ID>>8);
            externalAuthCommand[6] = (byte)ID;
            externalAuthCommand[7] = 0x7F;
            try {
                byte[] response = this.exchangeAPDU( externalAuthCommand );
                if(response[0] != (byte)0x90 || response[1] != 0x00) return false;
                else return true;
            }catch (Exception e){
                return false;
        private boolean isSelect(byte[] buffer) {
            if(buffer.length < 2) return false;
            if((buffer[0]&APDU_CMD_MASK)==CLA_ISO7816 && buffer[1]==INS_SELECT) {
                if(debug2) {
                    System.out.println("accessor: select command");
                return true;
            else {
                return false;
    }

  • Java.rmi.ServerError: A error occurred the server; nested exception is:

    Hello Guys,
    I'm getting the following error when calling a method of a normally
    deployed facade session bean.
    java.rmi.ServerError: A error occurred the server; nested exception is:
    java.lang.AbstractMethodError
    It's very confusing, it sometimes appear and sometimes the method is
    invoked normally.
    Thanks in advance for ur help.
    Itani
    [att1.html]

    That error means your are not running xserver process. Or, your ssh connection is not set-up to forward X-11 data.

  • "DEADLOCK" when showing dialog from RMI-callback.

    Hi!
    Today is the 10th day (full time) that I've been searching for a solution in Java Forums and Internet, but I couldn't find anything that helps me. Help is extremely appreciated, otherwise I'll go crazy! :-)
    The problem is that RMI-callback thread "somehow blocks" the Event Dispatch Thread.
    I want to do following:
    1) I push the button in the client (btDoSomething)
    (MOUSE_RELEASED,(39,14),button=1,modifiers=Button1,clickCount=1 is automatically pushed onto EventQueue)
    2) btDoSomethingActionPerformed is invoked
    3) inside of it I make a call to RMI-server (server.doSomething())
    4) from this server method I invoke RMI-callback back to the client (client.askUser())
    5) in the callback I want to display a question to the user (JOptionPane.showConfirmDialog)
    6) user should answers the question
    7) callback returns to server
    8) client call to the server returns
    9) btDoSomethingActionPerformed returns and everybody is happy :-)
    This works normally in normal Client, that means, while a button is pushed, you can show Dialogs, but with RMI callback I get problems.
    I just made a small client-server sample to simulate real project. What I want to achieve is that client invokes server method, server method does something, but if server method doesn't have enough information to make the decision it needs to do call back to the client and wait for input, so the user gets an JOptionPane.
    Here is my callback method:
        /** this is the remote callback method, which is invoked from the sevrer */
        public synchronized String askUser() throws java.rmi.RemoteException {
            System.out.println("askUser() thread group: " + Thread.currentThread().getThreadGroup());
            System.out.println("callback started...");
            try {
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        System.out.println("My event started...");
                        JOptionPane.showConfirmDialog(parentFrame, "Are you OK?", "Question", JOptionPane.YES_NO_OPTION);
                        System.out.println("My event finished.");
            }catch (Exception e) {
                e.printStackTrace();
            try {
                Thread.currentThread().sleep(10000);
            }catch (Exception e) {
                e.printStackTrace();
            System.out.println("callback finished.");
            return "Yo!"; // just return anything
        }Here in this sample I let the callback thread sleep for 10 seconds, but in real project I let it sleep infinitely and I want to wake it up after the user has answered JOptionPane. But I have the DEADLOCK, because event queue is waiting for callback to finish and doesn't schedule the "showing dialog" event which contains the command for waking up the callback thread.
    I looked very precisely when the event queue starts again to process events: it is precisely then when btDoSomethingActionPerformed is finished.
    When I'm not accessing GUI inside of the callback, this callback mechanism works perfectly, but as soon as I want to show the dialog from inside of the RMI-callback method, the "AWT Event Dispatch Queue" is somehow frozen until RMI-callback thread is finished (and in turn btDoSomethingActionPerformed terminates) . I cannot explain this weird behaviour!!!
    If I don't use SwingUtilities.invokeLater (I know this shoudn't be done outside of Event Dispatch Thread), but access the GUI directy, my JOptionPane is shown, but is not painted (it is blank gray) until callback thread returns.
    Why showing (or painting) of dialog is not done until btDoSomethingActionPerformed is finished?
    I also tried to spawn a new Thread inside of main RMI-callback thread, but nothing changed.
    I also tried the workaround from some older posting to use myInvokeLater:
        private final static ThreadGroup _applicationThreadGroup = Thread.currentThread().getThreadGroup();
        public void myInvokeLater(final Runnable code) {
            (new Thread(_applicationThreadGroup, new Runnable() {
                public void run() { SwingUtilities.invokeLater(code); }
            ).start();
        }but this didn't help either.
    Then I tried to spawn a new Thread directly from the Client's constructor, so that I'm sure that it belongs to the main appplication thread group. I even started that thread there in the constructor and made it wait for the callback. When callback came in, it would wake up that sleeping thread which should then show the dialog. But this did't help either.
    Now I think that it is IMPOSSIBLE to solve this problem this way.
    Spawning a new Process could work I think, but I'm not really sure if I want do to that.
    I know I could make a solution where server method is invoked and if some information is missing I can raise custom exception, provide the input on client side and call the same server mathod again with this additional data, but for that I need to change server RMI interfaces, etc... to fit in this concept. I thought callback would much easier, but after almost 10 days of trying the callback...I almost regreted it :-(
    Is anyone able to help?
    Thank you very much!
    Please scroll down for the complete sample (with build and run batch files), in case someone wants to try it. Or for the time being for your convenience you can download the whole sample from
    http://www.onlineloop.com/~tornado/download/rmi_callback_blocks_gui.zip
    ######### BEGIN CODE ####################################
    package callbackdialog;
    public interface ICallback extends java.rmi.Remote {
        public String askUser() throws java.rmi.RemoteException;
    package callbackdialog;
    public interface IServer extends java.rmi.Remote {
        public void doSomething() throws java.rmi.RemoteException;
    package callbackdialog;
    import java.rmi.Naming;
    public class Server {
        public Server() {
            try {
                IServer s = new ServerImpl();
                Naming.rebind("rmi://localhost:1099/ServerService", s);
            } catch (Exception e) {
                System.out.println("Trouble: " + e);
        public static void main(String args[]) {
            new Server();
    package callbackdialog;
    import java.rmi.Naming;
    public class ServerImpl extends java.rmi.server.UnicastRemoteObject implements IServer {
        // Implementations must have an explicit constructor
        // in order to declare the RemoteException exception
        public ServerImpl() throws java.rmi.RemoteException {
            super();
        public void doSomething() throws java.rmi.RemoteException {
            System.out.println("doSomething started...");
            try {
                // ask the client for the "missing" value via RMI callback
                ICallback client = (ICallback)Naming.lookup("rmi://localhost/ICallback");
                String clientValue = client.askUser();
                System.out.println("Got value from callback: " + clientValue);
            }catch (Exception e) {
                e.printStackTrace();
            System.out.println("doSomething finished.");
    package callbackdialog;
    import java.rmi.server.RemoteStub;
    import java.rmi.server.UnicastRemoteObject;
    import java.rmi.registry.Registry;
    import java.rmi.registry.LocateRegistry;
    import java.rmi.Naming;
    import javax.swing.JOptionPane;
    import javax.swing.SwingUtilities;
    import javax.swing.JFrame;
    public class Client extends javax.swing.JFrame implements ICallback {
        private final JFrame parentFrame = this;
        private Registry mRegistry = null;
        private RemoteStub remoteStub = null;
        private IServer server = null;
        private final static ThreadGroup _applicationThreadGroup = Thread.currentThread().getThreadGroup();
        /** Creates new form Client */
        public Client() {
            initComponents();
            System.out.println("Client constructor thread group: " + Thread.currentThread().getThreadGroup());
            try {
                server = (IServer)Naming.lookup("rmi://localhost/ServerService");
                // register client to the registry, so the server can invoke callback on it
                mRegistry = LocateRegistry.getRegistry("localhost", 1099);
                remoteStub = (RemoteStub)UnicastRemoteObject.exportObject((ICallback)this);
                Registry mRegistry = LocateRegistry.getRegistry("localhost", 1099);
                mRegistry.bind("ICallback", remoteStub);
            }catch (java.rmi.AlreadyBoundException e) {
                try {
                    mRegistry.unbind("ICallback");
                    mRegistry.bind("ICallback", remoteStub);
                }catch (Exception ex) {
                    // ignore it
            }catch (Exception e) {
                e.printStackTrace();
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
        private void initComponents() {
            java.awt.GridBagConstraints gridBagConstraints;
            secondTestPanel = new javax.swing.JPanel();
            btDoSomething = new javax.swing.JButton();
            getContentPane().setLayout(new java.awt.GridBagLayout());
            setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
            setTitle("RMI-Callback-GUI-problem sample");
            addWindowListener(new java.awt.event.WindowAdapter() {
                public void windowClosing(java.awt.event.WindowEvent evt) {
                    formWindowClosing(evt);
            secondTestPanel.setLayout(new java.awt.GridBagLayout());
            btDoSomething.setText("show dialog");
            btDoSomething.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    btDoSomethingActionPerformed(evt);
            gridBagConstraints = new java.awt.GridBagConstraints();
            gridBagConstraints.gridx = 0;
            gridBagConstraints.gridy = 3;
            gridBagConstraints.insets = new java.awt.Insets(10, 0, 0, 0);
            secondTestPanel.add(btDoSomething, gridBagConstraints);
            gridBagConstraints = new java.awt.GridBagConstraints();
            gridBagConstraints.gridx = 0;
            gridBagConstraints.gridy = 1;
            gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
            gridBagConstraints.weightx = 1.0;
            gridBagConstraints.weighty = 1.0;
            getContentPane().add(secondTestPanel, gridBagConstraints);
            pack();
        private void btDoSomethingActionPerformed(java.awt.event.ActionEvent evt) {                                             
            System.out.println(java.awt.EventQueue.getCurrentEvent().paramString());
            try {
                server.doSomething(); // invoke server RMI method, which will do the client RMI-Callback
                                      // in order to show the dialog
            }catch (Exception e) {
                e.printStackTrace();
        private void formWindowClosing(java.awt.event.WindowEvent evt) {                                  
            try {
                mRegistry.unbind("ICallback");
            }catch (Exception e) {
                e.printStackTrace();
            setVisible(false);
            dispose();
            System.exit(0);
        /** this is the remote callback method, which is invoked from the sevrer */
        public synchronized String askUser() throws java.rmi.RemoteException {
            System.out.println("askUser() thread group: " + Thread.currentThread().getThreadGroup());
            System.out.println("callback started...");
            try {
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        System.out.println("My event started...");
                        JOptionPane.showConfirmDialog(parentFrame, "Are you OK?", "Question", JOptionPane.YES_NO_OPTION);
                        System.out.println("My event finished.");
            }catch (Exception e) {
                e.printStackTrace();
            try {
                Thread.currentThread().sleep(10000);
            }catch (Exception e) {
                e.printStackTrace();
            System.out.println("callback finished.");
            return "Yo!"; // just return anything
         * @param args the command line arguments
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    Client client = new Client();
                    client.setSize(500,300);
                    client.setVisible(true);
        // Variables declaration - do not modify
        private javax.swing.JButton btDoSomething;
        private javax.swing.JPanel secondTestPanel;
        // End of variables declaration
    1_build.bat
    javac -cp . -d . *.java
    rmic callbackdialog.ServerImpl
    rmic callbackdialog.Client
    pause
    2_RunRmiRegistry.bat
    rmiregistry
    pause
    3_RunServer.bat
    rem java -classpath .\ Server
    java callbackdialog.Server
    pause
    4_RunClient.bat
    java callbackdialog.Client
    pause
    ######### END CODE ####################################

    I can understand that only partially, because SwingUtilities.invokeLater puts(redirects) my runnable object directly into AWT thread. The only conclusion I can draw from all things that I have tried until now , is that SwingUtilities.invokeLater(<showing the dialog>) invoked from a RMI thread somehow have lower "priority" than events coming directly from the AWT-thread and therefore it is held back until normal awt event completes (in this case BUTTON_RELEASED).
    But what I don't understand is the fact that the dialog is not shown even If I create and start a new thread from the client's constructor. This thread has nothing to do with RMI as it is in the main thread group:
        private BlockingObject dialogBlocker = new BlockingObject();
        private BlockingObject blocker = new BlockingObject();
        public Client() {
            initComponents();
            (new Thread() {
                public void run() {
                    try {
                        dialogBlocker.sleep(0);
                        System.out.println("My event started...");
                        JOptionPane.showConfirmDialog(parentFrame, "Are you OK?", "Question", JOptionPane.YES_NO_OPTION);
                        blocker.wake();
                        System.out.println("My event finished.");
                    }catch (Exception e) {
                        e.printStackTrace();
            }).start();
            ...Callback is then only used to wake up this thread which should display the dialog:
        public Object askUser() throws java.rmi.RemoteException {
            System.out.println("callback started...");
            dialogBlocker.wake();
            blocker.sleep(0);
            System.out.println("callback finished.");
            return userChoice; // return anything I don't care for now
    class BlockingObject {
        public void sleep(long timeout) {
            synchronized(this){
                try {
                    wait(timeout);
                }catch (InterruptedException e) {}
        public void wake() {
            synchronized(this){
                notifyAll();
        }In this case the dialog is shown, but it is NOT painted, so I have deadlock again. Why it is not painted?!?
    Haven't I uncouple it from RMI-Thread?
    But perhaps I'm looking at the wrong side of the whole thing.
    If I invoke server.doSomething (as ejp proposed) in a separate thread, then everything is fine (except that I cannot use this solution in my project :-( ).
    It seems that the whole problem is NOT AT ALL related to callback itself, but rather to the fact that if client invokes remote call, even dialogs can't be shown until the rmi call returns to the client.
    Thank you, Drindilica

  • "Exception in thread "main" java.lang.NoClassDefFound Error" in XP

    I was creating programs just fine for awhile. Then, for some unknown reason, I start getting the runtime error message, "Exception in thread "main" java.lang.NoClassDefFound Error." I set my PATH in the following manner:
    Start | Control Panel | Performance and Maintenance | System | Advanced | Environment Variables | Use Variables for Owner | PATH | Edit | C:\j2sdk1.4.2_04;C:\j2sdk1.4.2_04\bin;C:\j2sdk1.4.2_04\jre\bin | Ok | Ok | Ok
    I then closed the dialog boxes and restarted my computer. I then tried to run a program that ran before, only to get the same runtime error! Can someone please help me???

    NoClassDefFoundError happens because the JVM cannot find some class from your program, not because the OS cannot find your JVM (PATH regulates the latter, but not the former). JVM looks up classes in directories (or JAR files) specified through the -classpath option, like "java -classpath c:\myclasses MyMainClass". Read the online doc for the "java" launcher for more info.

  • Error:"exception in thread main:java.lang.noclassdeffound error.

    Hi,
    I am new to this java tech and programming. I just started learning and installed j2sdk1.4.0_03. I wrote a small hello world program and compiled it without any errors. When I execute the same using java hello command, I am getting an error like this: exception in thread "main" java.lang.noclassdeffound error. I am not able to resolve this issue. Please let me know the sol.
    thanks
    venkatraman

    send the program u have typedUmm... Why?
    Anyway @NovaKane: Welcome. Together with seifist and sunny we have at
    least three new posters who show enough intelligence to find chuck's
    solution (or one of the many hundreds of others like it) and the politeness
    to thank him for it. What's the forum coming to?
    If you need it there is a description of the classpath here:
    http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/classpath.html
    Again, welcome. And thanks for raising the intelligence level (and politeness
    quotient) of the fora.

Maybe you are looking for

  • SRM Invoice and Confirmation fields not populated in Standard content DSO

    We are implementing an extended classic SRM Scenario in our company, along with SAP recommended standard solution for BI. While activating the PO DSO (0SRPO_D1) confirmation quantity (SR_CFQBU) and amount (SR_CFVOC) along with Invoice quantity (SR_IV

  • How sales and distribution and customer service are related

    Respected,   I am sales and distribution consultant but at present I am working on customer service and sales and distribution simultaneously and I use to  face the problems in customer service part of CRM so do they co relate with each other  .

  • Decentralized Content Server

    Hello, We are trying to configure a system where the R/3 system is on the West Coast of the US and the CAD systems are in Florida. If I position the Content Server in Florida, is there a way to access the Content Server directly without sending large

  • KDE 5 default

    When kde 5 components will replace plasma and apps (4.x version)? it will be natural (I mean pacman -Syu) or all the time that will be different packages? will kde 14.12 apps land in Arch official repo? Last edited by ktatar156 (2014-12-30 10:03:47)

  • DR writtable secondary

    For log shipping you can use a standby for querying, right? For mirroring the same? And for replication? Any of the above support changing the data on the secondary, mirror, subscriber? If data is changed, then for log shipping I'd have to restart fr