IllegalAccessError passing object with RMI
Hi,
I am playing with RMI at the moment.
I have a Remote class that implements a Remote interface
The interface has one method which the class implements and this is to get a TestSerial object.
If I run without using a Securitymanager then there are no problems.
When I do use the SecurityManager then there is an error.
This error remains even if set the permissions in the policy file to java.security.AllPermissions
Does anyone know why this is?
thanks in advance,
J
//Start the server....
java -Djava.security.policy=policy HelloServer
In main....
HelloImpl bound in registry....
//Run the client
java -Djava.security.policy=policy HelloClient
Exception in thread "main" java.lang.IllegalAccessError: tried to access TestSerial from class $Proxy0
at $Proxy.getTestSerial(Unknown Source)
at HelloClient.main(HelloClient.jav:23)
* Remote interface
public interface Hello extends java.rmi.Remote {
TestSerial getTestSerial() throws java.rmi.RemoteException;
* Remote class
public class HelloImpl implements Hello {
public HelloImpl() {
public TestSerial getTestSerial(){
return new TestSerial();
* Server class
import java.io.*;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
public class HelloServer {
public HelloServer() {
public static void main(String args[]) {
System.out.println("In main....");
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
try {
HelloImpl obj = new HelloImpl();
Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);
Registry registry = LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
registry.bind("Hello", stub);
System.out.println("HelloImpl bound in registry....");
catch (Exception e) {
System.out.println("HelloImpl exception: " + e.getMessage());
e.printStackTrace();
* Client class
import java.rmi.*;
import java.rmi.registry.*;
import java.io.*;
public class HelloClient {
public static void main(String args[]) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
try {
Registry registry = LocateRegistry.getRegistry();
Hello obj = (Hello) registry.lookup("Hello");
TestSerial x = obj.getTestSerial();
System.out.println(x.getName());
catch (Exception e) {
System.out.println("HelloClient exception: " + e.printStackTrace();
* TestSerial class
class TestSerial implements java.io.Serializable {
public TestSerial(){
public String getName(){
return "TestSerial";
* Policy file
grant codeBase "file:." {
permission java.net.SocketPermission "*:1024-", "accept,connect";
};
class TestSerial implements java.io.Serializable {
public class TestSerial implements java.io.Serializable {
Similar Messages
-
Use JFreeChart or Component object with RMI
I am trying to pass a JFreeChart object or a java.awt.Component object from a server to a client. I thought RMI would be the solution, but I get a "java.lang.NoClassDefFoundError: org/jfree/chart/JFreeChart" error when trying to run the server. I believe the problem is that the JFreeChart is not an Interface and so can not be used in a Remote Invocation. So, the problem would be the same with a Component Object.
JFreeChart and Component are Serializable object, so I thought there may be a way to remotely use them or pass and recreate them from a server to a client.
Does someone can help me here to figure out what I could do?sure you can pass instances through RMI, but that doesn't prevent you from needing the required jars for the product on both client and server.
So make sure both client and server have the jfree jars installed in the classpath of their applications when you run the application. -
HI All
I am trying to figure out if we can pass objects when using NIO.
If anyone has any idea about this please let me know
Thanks and Regards
Pankaj TiwariVery tricky. If you are in non-blocking mode you will have to prepend a length word. Generally the idea is to serialize the object to a ByteArrayOutputStream, then write its length and its data to the channel. At the other end, read the length word, then read that many bytes into a byte array, wrap that in a ByteArrayInputStream, then deserialize from that.
-
I've successfully (well, almost) programmed an RMI client and server...and amazing they work (happy chappy) ... most of the time. The problem is of the 8 methods I've defined in interfaces 6 of them are of return type String, the other two are objects I've defined. The problem is these objects don't transfer through the system - just throw a RemoteException every time either one of these methods is invoked. The first , and well, only, thing I could think of was to make sure these objects were Serializable but that didn't have an effect...so what's the solution?
tiapackage messenger.coreMessenger.contact;
import java.io.Serializable;
public class Contact implements Serializable {
private final String email;
private String displayName;
private boolean status;
private int displayIcon;
public Contact(String email, String displayName, int displayIcon) {
this.email = email;
this.displayName = displayName;
this.status = false;
this.displayIcon = displayIcon;
public String getEmail(){
return email;
public String getName(){
return displayName;
public int getDisplayIcon(){
return displayIcon;
public boolean isOnline(){
return status;
public void setName(String displayName){
this.displayName = displayName;
public void setDisplayIcon(int displayIcon){
this.displayIcon = displayIcon;
public void logOn(){
this.status = true;
public void logOff(){
this.status = false;
}this is one of the return classes - the other one is not too disimilar so to save space I wont bother posting that... -
"Transfering objects" with RMI
Hi!
I have a general question concerning the capabilities of RMI. The server provides a interface that creates instances of certain classes and returns it to the client.
the corresponding method in the interface looks like this
public Service getService () throws RMIException
So calling the method via RMI works fine. Then I tried to make a subclass of Service called ExtService and changed the implementation of the getService method in that way, that I create an instance of ExtService and return it. The problem then was, that at the client the ExtService class is not available and the call failed.
Now my question: is it also possible to pass such subclasses via the rmi mechanism in that way, that the client only knows the base class (here Service) but can receive subclasses via the RMI call??
thanx, IngoSounds like you changed the return value from public Service getService();to public ExtService getService();right?
Wrong. in getService() you simply return the ExtService instance (as Service - the base class).
You can't change the implementation to return the ExtService, because, as you found out,
the client side has no idea what ExtService is. It can BE an ExtService, but the client
has to "see" Service. ExtService is still then free to override behaviour of any methods. -
Passing vector of object with multiple datatype
Hi
I want to pass vector of objects to stored procedure and I am facing some problem
please suggest is it possible or I need to follow some other way.
I have one class detail with two attributes i.e int ID and string course
In main I have created 1000 objects of different ID and course and pushed back the objects to avector of detail and passed to a function my function is
void bulkdatainsert(vector<detail>rec)
stmt = conn->createStatement ("begin storeBulk(:1);end;");
stmt->setMaxIterations(rec.size());
stmt->setMaxParamSize(1,1024);
setVector(stmt,1,rec,"course"); // The error coming here
The error is due to the type rec .
I want to know can we pass objects of multiple data to stored procedure through OCCI ?
If not do we need to break every attribute and make vector of corresponding attributes and pass to stored procedure?
please suggest me
ThanksI think Custom objects are not supported directly.
Following are the normal ones which you can use
void setVector(
Statement *stmt,
unsigned int paramIndex,
const vector< T > &vect,
const string &schemaName,
const string &typeName);
Intended for use on platforms
where partial ordering of function
templates is not supported, such
as Windows NT. Multibyte
support.
void setVector(
Statement *stmt,
unsigned int paramIndex,
const vector<T* > &vect,
const string &schemaName,
const string &typeName);
Intended for use on platforms
where partial ordering of function
templates is supported. Multibyte
support.
void setVector(
Statement *stmt,
unsigned int paramIndex,
const vector<BDouble> &vect
const string &sqltype);
void setVector(
Statement *stmt,
unsigned int paramIndex,
const vector<Bfile> &vect,
const string &schemaName,
const string &typeName);
void setVector(
Statement *stmt,
unsigned int paramIndex,
const vector<BFloat> &vect
const string &sqltype);
void setVector(
Statement *stmt,
unsigned int paramIndex,
const vector<Blob> &vect,
const string &schemaName,
const string &typeName);
void setVector(
Statement *stmt,
unsigned int paramIndex,
const vector<Blob> &vect,
const UString &schemaName,
const UString &typeName);
Sets a const Blob vector; UTF16
support.
void setVector(
Statement *stmt,
unsigned int paramIndex,
const vector<Clob> &vect,
const string &schemaName,
const string &typeName);
Sets a const Clob vector;
multibyte support.
void setVector(
Statement *stmt,
unsigned int paramIndex,
const vector<Clob> &vect,
const UString &schemaName,
const UString &typeName);
Sets a const Clob vector; UTF16
support.
void setVector(
Statement *stmt,
unsigned int paramIndex,
const vector<Date> &vect,
const string &schemaName,
const string &typeName);
Sets a const Date vector;
multibyte support. -
Regular RMI server object with WebLogic JNDI
Is that possible to register a regular RMI object with WebLogic JNDI
tree? I was building a simple program (using javac and rmic only) based
on the java.rmi.* (without changing the import statements to
weblogic.rmi.*) and using the weblogic.jndi to register the server
object. Below is some piece of code,
Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, "t3://172.20.20.20:7001");
ctx = new InitialContext(ht);
ctx.bind("HelloServer", obj);
The code failed for the following reason,
javax.naming.NamingException. Root exception is
java.rmi.MarshalException: failed to marshal public abstract void
weblogic.jndi.internal.NamingNode.bind(java.lang.String,java.lang.Object,java.util.Hashtable)
throws javax.naming.NamingException,java.rmi.RemoteException; nested
exception is:
java.rmi.server.ExportException: A description for
examples.rmi.hello.HelloImpl was found but it could not be read due to:
[Failed to find examples.rmi.hello.HelloImpl_WLStub or
examples.rmi.hello.Hello_WLStub for class examples.rmi.hello.HelloImpl]
java.rmi.StubNotFoundException: Failed to find
examples.rmi.hello.HelloImpl_WLStub or examples.rmi.hello.Hello_WLStub
for class examples.rmi.hello.HelloImpl
at
weblogic.rmi.internal.BasicDescriptor.<init>(BasicDescriptor.java:101)
at
weblogic.rmi.internal.BasicRuntimeDescriptor.<init>(BasicRuntimeDescriptor.java:50)
at
weblogic.rmi.internal.DescriptorManager.resolveClass(DescriptorManager.java:55)
at
weblogic.rmi.internal.DescriptorManager.getDescriptor(DescriptorManager.java:39)
at
weblogic.rmi.internal.DescriptorManager.getDescriptor(DescriptorManager.java:30)
at
weblogic.rmi.internal.OIDManager.getRequestDispatcher(OIDManager.java:281)
at
weblogic.rmi.internal.OIDManager.getReplacement(OIDManager.java:270)
at
weblogic.rmi.internal.OIDManager.replaceObject(OIDManager.java:98)
at
weblogic.common.internal.ChunkedObjectOutputStream.replaceObject(ChunkedObjectOutputStream.java:55)
at
weblogic.common.internal.ChunkedObjectOutputStream$NestedObjectOutputStream.replaceObject(ChunkedObjectOutputStream.java:239)
Any idea?
- SteveC"Pyung Yoon" <[email protected]> writes:
MediatorInterface mediator = (MediatorInterface) java.rmi.Naming.lookup("rmi://localhost:7001/TestMediator);This implies JRMP which the server does not support. You need to use t3 or iiop.
andy -
Create an object with the name passed in as a string argument to a method
Hi,
I am sorry if it's too trivial for this forum , but I am stuck with the following requirements.
I have a method
void abc(String object_name, String key, String value)
method abc should first check if there exists in memory a hashmap object with the name passed in as argument object_name.
If yes ..just put the key and value there.
if not , then create the hashmap object called <object_name> and insert the key/value there.
Can anybody help me in the first step i.e, how to check if an object exists with the name passed in and if not then create it.
Will getInstance method be of any help?
Thanks in advance for your response.
-Sub-javaDear Cotton.m,
Thanks for your suggesstion. I will remember that.
But somehow I have a strong belief that you still need to consult dictionary for exact meaning of the words like "upset" , "frustration" etc. Not knowing something in a language , that too as a beginner, does not yield frustration, but increases curiosity. And people like petes1234 are there to diminish that appetite.
To clarify above, let me compare jverd's reply to my doubt with petes1234's.
jverd said it cannot be done and suggested a work around (It was perfect and worked for me) While petes1234 , having no work in hand probably, started analysis of newbies mistakes.
jverd solved my problem by saying that it cannot be done. petes1234 acted as a worthless critic in my opinion and now joined cotton.m.
Finally, this is a java forum and I do not want to discuss human characteristics here for sure.
My apologies if I had a wrong concept or if I chose a wrong forum to ask, where people like petes1234 or Cotton.m show their geekdom by pointing out "shortfalls" rather than clearing that by perfect examples and words.
Again take it easy and Cotton.m , please do not use this forum to figure out others' frustration but be a little more focussed on solving others "Java related" problems :)
-Sub-java -
Hi,
I have a question on using EJB / or RMI servers with CORBA clients using
RMI-IIOP transport, which in theory should work, but in practice has few
glitches.
Basically, I have implemented a very simple server, StockTreader, which
looks up for a symbol and returns a 'Stock' object. In the first example, I
simplified the 'Stock' object to be a mere java.lang.String, so that lookup
would simply return the 'synbol'.
Then I have implemented the above, as an RMI-IIOP server (case 1) and a
CORBA server (case 2) with respective clients, and the pair of
client-servers work fine as long as they are CORBA-to-CORBA and RMI-to-RMI.
But the problem arises when I tried using the RMI server (via IIOP) with the
CORBA client, when the client tries to narrow the object ref obtained from
the naming service into the CORBA idl defined type (StockTrader) it ends up
with a class cast exception.
This is what I did to achieve the above results:
[1] Define an RMI interface StockTrader.java (extending java.rmi.Remote)
with the method,
public String lookup( String symbol) throws RMIException;
[2] Implement the StorckTrader interface (on a PortableRemoteObject derived
class, to make it IIOP compliant), and then the server to register the stock
trader with COS Naming service as follows:
String homeName =....
StockTraderImpl trader =new StockTraderImpl();
System.out.println("binding obj <" homeName ">...");
java.util.Hashtable ht =new java.util.Hashtable();
ht.put("java.naming.factory.initial", args[2]);
ht.put("java.naming.provider.url", args[3]);
Context ctx =new InitialContext(ht);
ctx.rebind(homeName, trader);
[3] Generate the RMI-IIOP skeletons for the Implementation class,
rmic -iiop stock.StockTraderImpl
[4] generate the IDL for the RMI interface,
rmic -idl stock.StockTraderImpl
[5] Generate IDL stubs for the CORBA client,
idlj -v -fclient -emitAll StockTraderImpl.idl
[6] Write the client to use the IDL-defined stock trader,
String serverName =args[0];
String symList =args[1];
StockClient client =new StockClient();
System.out.println("init orb...");
ORB orb =ORB.init(args, null);
System.out.println("resolve init name service...");
org.omg.CORBA.Object objRef
=orb.resolve_initial_references("NameService");
NamingContext naming =NamingContextHelper.narrow(objRef);
... define a naming component etc...
org.omg.CORBA.Object obj =naming.resolve(...);
System.out.println("narrow objRef: " obj.getClass() ": " +obj);
StockTrader trader =StockTraderHelper.narrow(obj);
[7] Compile all the classes using Java 1.2.2
[8] start tnameserv (naming service), then the server to register the RMI
server obj
[9] Run the CORBA client, passing it the COSNaming service ref name (with
which the server obj is registered)
The CORBA client successfully finds the server obj ref in the naming
service, the operation StockTraderHelper.narrow() fails in the segment
below, with a class cast exception:
org.omg.CORBA.Object obj =naming.resolve(...);
StockTrader trader =StockTraderHelper.narrow(obj);
The <obj> returned by naming service turns out to be of the type;
class com.sun.rmi.iiop.CDRInputStream$1
This is of the same type when stock trader object is registered in a CORBA
server (as opposed to an RMI server), but works correctly with no casting
excpetions..
Any ideas / hints very welcome.
thanks in advance,
-hariOn the contrary... all that is being said is that we needed to provide clearer examples/documentation in the 5.1.0 release. There will be no difference between the product as found in the service pack and the product found in the 5.1.1. That is, the only substantive will be that 5.1.1 will also
include the examples.
"<=one way=>" wrote:
With reference to your and other messages, it appears that one should not
expect that WLS RMI-IIOP will work in a complex real-life system, at least
not now. In other words, support for real-life CORBA clients is not an
option in the current release of WLS.
TIA
"Eduardo Ceballos" <[email protected]> wrote in message
news:[email protected]...
We currently publish an IDL example, even though the IDL programmingmodel in Java is completely non-functional, in anticipation of the support
needs for uses who need to use IDL to talk to the Weblogic server,
generically. This example illustrates the simplest connectivity; it does not
address how
to integrate CORBA and EJB, a broad topic, fraught with peril, imo. I'llnote in passing that, to my knowledge, none of the other vendors attempt
this topic either, a point which is telling if all the less happy to hear.
For the record then, what is missing from our distribution wrt RMI-IIOPare a RMI-IIOP example, an EJB-IIOP example, an EJB-C++. In this you are
correct; better examples are forth coming.
Still, I would not call our RMI-IIOP implementation fragile. I would saythat customers have an understandably hard time accepting that the IDL
programming model is busted; busted in the sense that there are no C++
libraries to support the EJB model, and busted in the sense that there is
simply no
support in Java for an IDL interface to an EJB. Weblogic has nothing to doit being busted, although we are trying to help our customers deal with it
in productive ways.
For the moment, what there is is a RMI (over IIOP) programming model, aninherently Java to Java programming model, and true to that, we accept and
dispatch IIOP request into RMI server objects. The way I look at it is this:
it's just a protocol, like HTTP, or JRMP; it's not IDL and it has
practically nothing to do with CORBA.
ST wrote:
Eduardo,
Can you give us more details about the comment below:
I fear that as soon as the call to narrow succeeds, the remainingapplication will fail to work correctly because it is too difficult ot
use an idl client in java to work.It seems to me that Weblogic's RMI-IIOP is a very fragile
implementation. We
don't need a "HelloWorld" example, we need a concrete serious example(fully
tested and seriously documented) that works so that we can get a betteridea
on how to integrate CORBA and EJB.
Thanks,
Said
"Eduardo Ceballos" <[email protected]> wrote in message
news:[email protected]...
Please post request to the news group...
As I said, you must separate the idl related classes (class files and
java
files) from the rmi classes... in the rmic step, you must set a newtarget
(as you did), emit the java files into that directory (it's not clearyou
did this), then remove all the rmi class files from the class path... ifyou
need to compile more classes at that point, copy the java files to theidl
directly is you must, but you can not share the types in any way.
I fear that as soon as the call to narrow succeeds, the remainingapplication will fail to work correctly because it is too difficult otuse
an idl client in java to work.
Harindra Rajapakshe wrote:
Hi Eduardo,
Thanks for the help. That is the way I compiled my CORBA client, by
separating the IDL-generated stubs from the RMI ones, but still I
get a
CORBA.BAD_PARAM upon narrowing the client proxy to the interfacetype.
Here's what I did;
+ Define the RMI interfaces, in this case a StockTrader interface.
+ Implement RMI interface by extendingjavax.rmi.PortableRemoteObject
making
it IIOP compliant
+ Implemnnt an RMI server, and compile using JDK1.2.2
+ use the RMI implementation to generate CORBA idl, using RMI-IIOPplugin
utility rmic;
rmic -idl -noValueMethods -always -d idl stock.StockTraderImpl
+ generate Java mappings to the IDL generated above, using RMI-IIOPplugin
util,
idlj -v -fclient -emitAll -tf src stocks\StockTrader.idl
This creates source for the package stock and also
org.omg.CORBA.*
package, presumably IIOP type marshalling
+ compile all classes generated above using JDK1.2.2
+ Implement client (CORBA) using the classes generated above, NOTthe
RMI
proxies.
+ start RMI server, with stockTrader server obj
+ start tnameserv
+ start CORBA client
Then the client errors when trying to narrow the obj ref from the
naming
service, into the CORBA IDL defined interface using,
org.omg.CORBA.Object obj =naming.resolve(nn);
StockTrader trader =StockTraderHelper.narrow(obj); // THIS
ERRORS..!!!
throwing a CORBA.BAD_PARAM exception.
any ideas..?
Thanks in advance,
-hari
----- Original Message -----
From: Eduardo Ceballos <[email protected]>
Newsgroups: weblogic.developer.interest.rmi-iiop
To: Hari Rajapakshe <[email protected]>
Sent: Wednesday, July 26, 2000 4:38 AM
Subject: Re: problem using CORBA clients with RMI/EJBservers..!!!???
Please see the post on june 26, re Errors compiling... somewherein
there,
I suspect, you are referring to the rmi class file when you are
obliged
to
completely segregate these from the idl class files.
Hari Rajapakshe wrote:
Hi,
I have a question on using EJB / or RMI servers with CORBA
clients
using
RMI-IIOP transport, which in theory should work, but in practice
has
few
glitches.
Basically, I have implemented a very simple server,
StockTreader,
which
looks up for a symbol and returns a 'Stock' object. In the firstexample, I
simplified the 'Stock' object to be a mere java.lang.String, so
that
lookup
would simply return the 'synbol'.
Then I have implemented the above, as an RMI-IIOP server (case
1)
and a
CORBA server (case 2) with respective clients, and the pair of
client-servers work fine as long as they are CORBA-to-CORBA andRMI-to-RMI.
But the problem arises when I tried using the RMI server (via
IIOP)
with
the
CORBA client, when the client tries to narrow the object ref
obtained
from
the naming service into the CORBA idl defined type (StockTrader)
it
ends
up
with a class cast exception.
This is what I did to achieve the above results:
[1] Define an RMI interface StockTrader.java (extending
java.rmi.Remote)
with the method,
public String lookup( String symbol) throws RMIException;
[2] Implement the StorckTrader interface (on a
PortableRemoteObject
derived
class, to make it IIOP compliant), and then the server to
register
the
stock
trader with COS Naming service as follows:
String homeName =....
StockTraderImpl trader =new StockTraderImpl();
System.out.println("binding obj <" homeName ">...");
java.util.Hashtable ht =new java.util.Hashtable();
ht.put("java.naming.factory.initial", args[2]);
ht.put("java.naming.provider.url", args[3]);
Context ctx =new InitialContext(ht);
ctx.rebind(homeName, trader);
[3] Generate the RMI-IIOP skeletons for the Implementation
class,
rmic -iiop stock.StockTraderImpl
[4] generate the IDL for the RMI interface,
rmic -idl stock.StockTraderImpl
[5] Generate IDL stubs for the CORBA client,
idlj -v -fclient -emitAll StockTraderImpl.idl
[6] Write the client to use the IDL-defined stock trader,
String serverName =args[0];
String symList =args[1];
StockClient client =new StockClient();
System.out.println("init orb...");
ORB orb =ORB.init(args, null);
System.out.println("resolve init name service...");
org.omg.CORBA.Object objRef
=orb.resolve_initial_references("NameService");
NamingContext naming=NamingContextHelper.narrow(objRef);
... define a naming component etc...
org.omg.CORBA.Object obj =naming.resolve(...);
System.out.println("narrow objRef: " obj.getClass() ":"
+obj);
StockTrader trader =StockTraderHelper.narrow(obj);
[7] Compile all the classes using Java 1.2.2
[8] start tnameserv (naming service), then the server to
register
the
RMI
server obj
[9] Run the CORBA client, passing it the COSNaming service ref
name
(with
which the server obj is registered)
The CORBA client successfully finds the server obj ref in the
naming
service, the operation StockTraderHelper.narrow() fails in thesegment
below, with a class cast exception:
org.omg.CORBA.Object obj =naming.resolve(...);
StockTrader trader =StockTraderHelper.narrow(obj);
The <obj> returned by naming service turns out to be of the
type;
class com.sun.rmi.iiop.CDRInputStream$1
This is of the same type when stock trader object is registeredin a
CORBA
server (as opposed to an RMI server), but works correctly with
no
casting
excpetions..
Any ideas / hints very welcome.
thanks in advance,
-hari -
Any example of dynamic proxy with RMI?
Hi, are there any good example of dynamic proxy with RMI, using the new RemoteObjectInvocationHandler class?
I am currently implementing a Registry, and want to use dynamic proxy to wrap around the registry stub, to pass extra information to the client.
I've tried it, but the program will hang and get this exception:
Exception in thread "RMI TCP Connection(1616)-192.168.1.23" java.lang.OutOfMemoryError: Java heap space
My implementation looks like this:
public RegistryImpl extends RemoteServer Implements Registry {
public RegistryImpl(int port, Properties... properties) throws RemoteException, ChannelException {
// Create a reference for the registry.
LiveRef liveref = new LiveRef(id, port);
ref = new UnicastServerRef(liveref);
Registry proxy = (Registry)RegistryProxy.newProxyInstance(
this.getClass().getClassLoader(),
this.getClass().getInterfaces(),
new RemoteObjectInvocationHandler(this.getRef()));
/* Using dynamic proxy */
usref.exportObject(proxy, null, true);
public class RegistryProxy extends Proxy implements Registry {
private InvocationHandler handler;
public RegistryProxy(InvocationHandler handler) {
super(handler);
this.handler = handler;
public Remote lookup(String name) throws RemoteException, NotBoundException, AccessException {
Remote result;
try {
Method m = Registry.class.getMethod("lookup", new Class[]{String.class});
result = (Remote)handler.invoke(this, m, new Object[]{name});
} catch (SecurityException e) {
throw new UndeclaredThrowableException(e);
} catch (NoSuchMethodException e) {
throw new UndeclaredThrowableException(e);
} catch (Throwable e) {
throw new UndeclaredThrowableException(e);
return result;
public void bind(String name, Remote remoteObj) throws RemoteException, AlreadyBoundException, AccessException {
public void unbind(String name) throws RemoteException, NotBoundException, AccessException {
public void rebind(String name, Remote remoteObj) throws RemoteException, AccessException {
public String[] list() throws RemoteException, AccessException {
}I am new to Java programming, any help is appriciated.
Regards
EddieHi Eddie,
Perhaps you might like this one:
http://wiki.java.net/bin/view/Communications/TransparentProxy
it uses dynamic proxies to achieve complete RMI transparency.
Something to consider, good luck.
John -
Hi,
I tried to send a file from client to server with RMI as follow:
upload(String filename, InputStream in);
however the InputStream is not a Serializable.
1. Is it a correct method to send the file in RMI ? if not, what should be used?
2. How to "Serialize" the InputStream, I have tried to pass the "SerailInputStream" extends from InupStream object implements Serializable as a byte array by the ObjectOutputStream and retrieve it in server successfully, but the inputstream seems cannot be used.
Many thanks
GeorgePipedIn/OutStreams used to commnicate inter-thread transfer. I guess bschauwe are guiding the way how to smoothly handle the file transfer inside the server. The communication to server seems not through the java streams classes.
if what you want to do is to copy a file in whole. You may send a byte array in a serializable wrapper class. You can create a byte array of a file by using ByteArrayOutputStream and call toByteArray(). Finally in the server side, with the raw byte array, you can create a new ByteArrayInputStream(byte[]). You know the rest of story.
Or you can create a serializable class that extends InputStream and similary behaves like ByteArrayIn/OutStream. In this case, you have to know how to make a sub-class of non-serializable super class serializable. There is tutorial in the SUN site covering this subject. If you also look at the source codes of both InputStream and ByteArrayInputStream, there is no rocket-science there.
Frankly, I have not tried myself yet. I am also looking forward to hearing the better suggestion.
Hope it helped. -
Passing objects by reference in PL/SQL
Hi,
I have come across an unexpected problem using object types in PL/SQL that is causing me some grief. I'm from a Java background and am relatively new to Oracle Objects but what I'm trying to do is fairly trivial, I think. The code below illustrates the problem.
--- cut here ---
CREATE OR REPLACE TYPE test_obj_t AS OBJECT
num INTEGER,
CONSTRUCTOR FUNCTION test_obj_t RETURN SELF AS RESULT
CREATE OR REPLACE TYPE BODY test_obj_t IS
CONSTRUCTOR FUNCTION test_obj_t RETURN SELF AS RESULT IS
BEGIN
num := 0;
RETURN;
END;
END;
CREATE OR REPLACE PACKAGE test_obj_ref AS
PROCEDURE init(o IN test_obj_t);
PROCEDURE inc;
FUNCTION get_num RETURN INTEGER;
END;
CREATE OR REPLACE PACKAGE BODY test_obj_ref IS
obj test_obj_t;
PROCEDURE init(o IN test_obj_t) IS
BEGIN
obj := o;
END;
PROCEDURE inc IS
BEGIN
obj.num := obj.num + 1;
END;
FUNCTION get_num RETURN INTEGER IS
BEGIN
RETURN obj.num;
END;
END;
--- cut here ---
The object type test_obj_t holds a integer and the test_obj_ref package holds a 'reference' to an instance of the object.
To test the above code I run this PL/SQL block:
declare
obj test_obj_t;
begin
obj := test_obj_t;
test_obj_ref.init(obj);
dbms_output.put_line('obj.num='||obj.num);
dbms_output.put_line('test_obj_ref.get_num='||test_obj_ref.get_num);
test_obj_ref.inc;
dbms_output.put_line('obj.num='||obj.num);
dbms_output.put_line('test_obj_ref.get_num='||test_obj_ref.get_num);
test_obj_ref.inc;
dbms_output.put_line('obj.num='||obj.num);
dbms_output.put_line('test_obj_ref.get_num='||test_obj_ref.get_num);
end;
giving the output:
obj.num=0
test_obj_ref.get_num=0
obj.num=0
test_obj_ref.get_num=1
obj.num=0
test_obj_ref.get_num=2
It appears that the object held by the test_obj_ref package is being incremented as expected, but I would have expected the object declared in the PL/SQL block to be pointing to the same object and so should report the same incremented values.
I suspect that the object is copied in the call to test_obj_ref.init() so I end up with two object instances, one that is held by the test_obj_ref package and one in the anonymous block. Although, I thought that all IN parameters in PL/SQL are passed by reference and not copied!
Am I right?
Is passing objects by reference possible in PL/SQL, if so how?
I'm using Oracle 10.2.0.3.
Cheers,
Andy.the object being passed to the test_obj_ref.init+ procedure is passed by reference; however, when you assign it to your package variable obj it is being copied to a new instance. you can pass object instances as parameters to procedures using the +IN OUT [NOCOPY]+ *calling mode, in which case modifications to the attributes of the passed object will be reflected in the calling scope's instance variable.
oracle's only other notion of an object reference is the +"REF <object-type>"+ datatype, which holds a reference to an object instance stored in an object table or constructed by an object view.
hope this helps...
gerard -
Passing object as parameter in JSF using h:commandLink tag
Hi ,
I have a scenario in which i need to pass objects from one jsp to another using h:commandLink. i read balusC article "Communication in JSF" and found a basic idea of achieving it. Thanks to BalusC for the wonderful article. But i am not fully clear on the concepts and the code is giving some error. The code i have is
My JSP:
This commandlink is inside a <h:column> tag of <h:dataTable>
<h:commandLink id="ol3"action="ManageAccount" actionListener="#{admincontroller.action}" >
<f:param id="ag" name="account" value="#{admincontroller.account}" />
<h:outputText id="ot3" value="Manage Account" rendered="#{adminbean.productList!=null}" />
</h:commandLink>
Also a binding in h:dataTable tag with the binding="#{admincontroller.dataTable}"
My Backing Bean:
public class CompanyAdminController {
private HtmlDataTable dataTable;
private Account account=new Account();
public HtmlDataTable getDataTable() {
return dataTable;
public Account getAccount() {
return this.account;
public void setAccount(Account account) {
this.account = account;
public void action(){
account= (Account)this.getDataTable().getRowData();
} faces-config.xml
<navigation-rule>
<from-view-id>/compadmin.jsp</from-view-id>
<navigation-case>
<from-outcome>ManageAccount</from-outcome>
<to-view-id>/manageAccount.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<managed-bean>
<managed-bean-name>admincontroller</managed-bean-name>
<managed-bean-class>com.forrester.AdminController</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>account</property-name>
<property-class>com.model.Account</property-class>
<value>#{param.account}</value>
</managed-property>
</managed-bean>My account object:
public class Account {
string name;
public String getName()
return this.name;
public void setName(String name)
this.name=name;
}I need to display #{admincontroller.account.name} in my forwarded jsp. But I am not sure whether the code i wrote in commandlink is correct. I get an error if i use <f:setActionListener> . No tag "setPropertyActionListener" defined in tag library imported with prefix "f"
Please advise.
Edited by: twisai on Oct 18, 2009 11:46 AM
Edited by: twisai on Oct 18, 2009 11:47 AM
Edited by: twisai on Oct 18, 2009 11:48 AMYes.. iam removed the managedproperty from faces-config. But still i get the null pointer exception on main jsp itself and i am taken to second jsp manageaccount.jsp. Did you find anything wrong in my navigation case in the action method??
public String loadAccount(){
Account account = (Account)this.getDataTable().getRowData();
return "ManageAcct";And also can you please answer this question i have
The AdminController is the backing bean of 1st JSP and manageAccontController is the backing bean of forwarded JSP .
Can i put this action method and dataTable binding in a 2nd manageAccontController backing bean instead of AdminController. But if i do that way dataList binding in h:dataTable tag will be in first JSP backing bean and dataTable binding to 2nd JSP. Not sure how to deal with this.
{ -
RE: multiple named objects with the same name andinterface
David,
First I will start by saying that this can be done by using named anchored
objects and registering them yourself in the name service. There is
documentation on how to do this. And by default you will get most of the
behavior you desire. When you do a lookup in the name service (BindObject
method) it will first look in the local partition and see if there is a
local copy and give you that copy. By anchoring the object and manually
registering it in the name service you are programmatically creating your
own SO without defining it as such in the development environment. BTW in
response to your item number 1. This should be the case there as well. If
your "mobile" object is in the same partition where the service object he is
calling resides, you should get a handle to the local instance of the
service object.
Here is the catch, if you make a bind object call and there is no local copy
you will get a handle to a remote copy but you can not be sure which one!
It end ups as more or less a random selection. Off the top of my head and
without going to the doc, I am pretty sure that when you register an
anchored object you can not limit it's visibility to "User".
Sean
-----Original Message-----
From: [email protected]
[<a href="mailto:[email protected]">mailto:[email protected]]On</a> Behalf Of David Foote
Sent: Monday, June 22, 1998 4:51 PM
To: [email protected]
Subject: multiple named objects with the same name and interface
All,
More than once, I have wished that Forte allowed you to place named
objects with the same name in more than one partition. There are two
situations in which this seems desirable:
1) Objects that are not distributed, but are mobile (passed by value to
remote objects), cannot safely reference a Service Object unless it has
environment visibility, but this forces the overhead of a remote method
call when it might not otherwise be necessary. If it were possible to
place a copy of the same Service Object (with user visibility) in each
partition, the overhead of a remote method call could be avoided. This
would only be useful for a service object whose state could be safely
replicated.
2) My second scenario also involves mobile objects referencing a Service
Object, but this time I would like the behavior of the called Service
Object to differ with the partition from which it is called.
This could be accomplished by placing Service Objects with the same name
and the same interface in each partition, but varying the implementation
with the partition.
Does anyone have any thoughts about why this would be a good thing or a
bad thing?
David N. Foote
Consultant
Get Your Private, Free Email at <a href=
"http://www.hotmail.com">http://www.hotmail.com</a>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:<a href=
"http://pinehurst.sageit.com/listarchive/">http://pinehurst.sageit.com/listarchive/</a>>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:<a href=
"http://pinehurst.sageit.com/listarchive/">http://pinehurst.sageit.com/listarchive/</a>>David,
First I will start by saying that this can be done by using named anchored
objects and registering them yourself in the name service. There is
documentation on how to do this. And by default you will get most of the
behavior you desire. When you do a lookup in the name service (BindObject
method) it will first look in the local partition and see if there is a
local copy and give you that copy. By anchoring the object and manually
registering it in the name service you are programmatically creating your
own SO without defining it as such in the development environment. BTW in
response to your item number 1. This should be the case there as well. If
your "mobile" object is in the same partition where the service object he is
calling resides, you should get a handle to the local instance of the
service object.
Here is the catch, if you make a bind object call and there is no local copy
you will get a handle to a remote copy but you can not be sure which one!
It end ups as more or less a random selection. Off the top of my head and
without going to the doc, I am pretty sure that when you register an
anchored object you can not limit it's visibility to "User".
Sean
-----Original Message-----
From: [email protected]
[<a href="mailto:[email protected]">mailto:[email protected]]On</a> Behalf Of David Foote
Sent: Monday, June 22, 1998 4:51 PM
To: [email protected]
Subject: multiple named objects with the same name and interface
All,
More than once, I have wished that Forte allowed you to place named
objects with the same name in more than one partition. There are two
situations in which this seems desirable:
1) Objects that are not distributed, but are mobile (passed by value to
remote objects), cannot safely reference a Service Object unless it has
environment visibility, but this forces the overhead of a remote method
call when it might not otherwise be necessary. If it were possible to
place a copy of the same Service Object (with user visibility) in each
partition, the overhead of a remote method call could be avoided. This
would only be useful for a service object whose state could be safely
replicated.
2) My second scenario also involves mobile objects referencing a Service
Object, but this time I would like the behavior of the called Service
Object to differ with the partition from which it is called.
This could be accomplished by placing Service Objects with the same name
and the same interface in each partition, but varying the implementation
with the partition.
Does anyone have any thoughts about why this would be a good thing or a
bad thing?
David N. Foote
Consultant
Get Your Private, Free Email at <a href=
"http://www.hotmail.com">http://www.hotmail.com</a>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:<a href=
"http://pinehurst.sageit.com/listarchive/">http://pinehurst.sageit.com/listarchive/</a>>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:<a href=
"http://pinehurst.sageit.com/listarchive/">http://pinehurst.sageit.com/listarchive/</a>> -
View Object with User Defined Type input
I am trying to use a View Object with a query that requires a user defined object as an input parameter.
I have the query working with a PreparedStatement, but would like to use a View Object.
When I use the PreparedStatement, I prepare the user defined type data like this:
// get the data into an object array
Object[] wSRecObjArr = wSRec.getObjectArray();
// set up rec descriptor
StructDescriptor WSRecDescriptor = StructDescriptor.createDescriptor("WS_REC",conn);
// populate the record struct
STRUCT wSRecStruct = new STRUCT(WSRecDescriptor,conn,wSRecObjArr);
Then I can use this in the PreparedStatement like this:
OraclePreparedStatement stat = null;
ResultSet rs = null;
stat = (OraclePreparedStatement)conn.prepareStatement("Select test_pkg.test_function(?) FROM DUAL");
stat.setSTRUCT(1, wSRecStruct);
rs = stat.executeQuery();
I would like to do the same process with a View Object instead of the PreparedStatement.
My question is "How do I create the input objects"?
I obtain the View Object from the Application Module using findViewObject(). I don't actually have a connection object to pass into the StructDescriptor.createDescriptor method.
I have tried just using Java Object Arrays (Object[]) to pass the data, but that gave an error:
oracle.jbo.SQLStmtException: JBO-27122: SQL error during statement preparation.
Any help or pointers are greatly appreciated.
Thank you.
Edited by: 942120 on May 1, 2013 8:45 AM
Edited by: 942120 on May 1, 2013 8:46 AM
Edited by: 942120 on May 1, 2013 9:05 AM
Edited by: 942120 on May 1, 2013 9:06 AMCustom domains are the way to go.
When I try to pass custom domains that represent my user defined types - it works.
However, one of the functions requires a table of a user defined type be passed in.
I tried creating a domain of the table type. It forces me to add a field during creation (in JDEV), so I tried adding a field of type Array of Element of the domain representing the user defined type.
I populate the table by setting the field I created, but the table is empty in PL/SQL (TEST_TAB.COUNT = 0).
I also tried passing the oracle.jbo.domain.Array object, but that produced an error:
java.sql.SQLException: ORA-06553: PLS-306: wrong number or types of arguments in call
I also tried passing Object[], but that produced an error:
oracle.jbo.SQLStmtException: JBO-27122: SQL error during statement preparation.
How do I properly create, and pass an domain that represents a table of a user defined type?
When I use a OraclePreparedStatement, I can pass a oracle.sql.ARRAY using stat.setARRAY.
Thank you for the help you have provided, and any future advice.
JDEV 10.1.2.3
JDBC 10.2.0.5
Edited by: 942120 on May 13, 2013 7:13 AM
Edited by: 942120 on May 13, 2013 7:16 AM
Maybe you are looking for
-
Open and Close Posting Periods According to G/L Account Assignment Objects
Hi, Can anybody please explain me how configurations related to " Open and Close Posting Periods According to G/L Account Assignment Objects " works in SAP FICO? I am confused about this config. Regards, Mandeep
-
Workflows not triggered when documents are created in Doc Set via Content Organizer
The following is my scenario: A document set (containing several documents) is created in Library A on Site A Using Send To, the Document Set is sent to the Drop Off Library on Site B (a different Site Collection) A Content Organizer rule then moves
-
How do I get previously purchased songs to upload onto my new computer itunes?
Hi there, my old Windows Desktop crashed and since then my husband purchased a new windows 8 laptop which is awful. Anyways, were trying to get all our music to be in our new itunes and we had almost 700+ songs that we have purchased throughout the y
-
Can I CALL FUNCTION 'SPBT_INITIALIZE' many times ?
Hi ABAP Expert, I need your advise whether is recommended to calling FUNCTION 'SPBT_INITIALIZE' to get updated information regarding available background process for parallel processing in ABAP. Because if i just call this program 1 time at the begin
-
Placed a DCS2 document image in a new Illustrator document. Tried to change the Output Mode in the Output Dialog but could not select "Separations Mode".