Re: [JBoss-user] diff in behavior between server-side and client-side

2001-04-18 Thread danch



toby cabot wrote:
 
 Folks,
 
 I just noticed the following behavior and wonder if there are preferred
 patterns for dealing with it.  I've got an entity bean which can
 presumably be accessed by remote client-side code (e.g. in another VM)
 or by session beans running in the jboss server VM.  Let's say the
 entity bean has some code like so:
 
 private Money moola;
 
 /**
 * @remote-method
 */
 Money getMoney() {
   return moola;
 }
 
 I noticed that the remote client code gets a copy of moola but the
 server-side session bean gets a reference to the member itself (and can
 thus change it).  

Turn off optimized invocations in jboss.xml
The EJB spec mandates that the semantics of calls be as you observe for
remote calls, even in-VM. Naturally, all this copying of parameters and
return values takes time, so most (if not all) containers have a
parameter to disable this.
To get spec-compliant behavior, set OptimizedFalse/Optimized in your
bean's container-invoker-conf in jboss.xml.

-danch
Confidential e-mail for addressee only.  Access to this e-mail by anyone else is 
unauthorized.
If you have received this message in error, please notify the sender immediately by 
reply e-mail 
and destroy the original communication.


___
JBoss-user mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-user



Re: [JBoss-user] diff in behavior between server-side and client-side

2001-04-18 Thread Scott M Stark

I'm not sure this is valid behavior, but I can't find anything that applies explicitly
to the method return values. This EJB 1.1 spec section on argument values clearly
states that passing method arguments by reference is not allowed so I don't
know why returning a reference should be valid:

quote
18.2.3 Argument passing semantics
The enterprise bean's home and remote interfaces
are remote interfaces for Java RMI. The Container
must ensure the semantics for passing arguments
conform to Java RMI. Non-remote objects must be
passed by value.

Specifically, the EJB Container is not allowed to
pass non-remote objects by reference on inter-EJB
invocations when the calling and called enterprise
beans are collocated in the same JVM. Doing so
could result in the multiple beans sharing the state
of a Java object, which would break the enterprise.
/quote

- Original Message - 
From: "toby cabot" [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Wednesday, April 18, 2001 8:31 AM
Subject: [JBoss-user] diff in behavior between server-side and client-side


 Folks,
 
 I just noticed the following behavior and wonder if there are preferred
 patterns for dealing with it.  I've got an entity bean which can
 presumably be accessed by remote client-side code (e.g. in another VM)
 or by session beans running in the jboss server VM.  Let's say the
 entity bean has some code like so:
 
 private Money moola;
 
 /**
 * @remote-method
 */
 Money getMoney() {
   return moola;
 }
 
 I noticed that the remote client code gets a copy of moola but the
 server-side session bean gets a reference to the member itself (and can
 thus change it).  This makes sense but it does mean that the behavior is
 different for in-VM client code and remote client code.  Is this
 "standard" EJB behavior?  One approach to trade some efficiency for
 safety would be as follows:
 
 Money getMoney() {
   return new Money( moola);
 }
 
 This way the clients would be unable to modify the private member even
 if they were running in the same VM.  Are there other approaches?
 
 TIA,
 Toby Cabot
 
 
 
 ___
 JBoss-user mailing list
 [EMAIL PROTECTED]
 http://lists.sourceforge.net/lists/listinfo/jboss-user
 


___
JBoss-user mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-user