On Mar 10, 2008, at 4:38 AM, the666pack wrote:




David Blevins wrote:


You could implement serializable on your Entity beans, but it's ill
advised in almost any situation to have the data passivated with your
bean as you wind up with a private, detached, copy of the data that
may be outdated.  The rare case may be that you're collecting data
that has yet to be persisted (never been attached) and therefore
doesn't live in the EntityManager's cache or database yet, but even
then you should really be using a transaction which would prevent your
bean from getting passivated at all so the issue should never arise.

so this means i have to manually "turn off" the passivation of my SFSB via bean managed transactions. but i suppose this means a performance loss :(.

A container or bean managed transaction will work, though a bean managed may be easier for long running transactions.

is this problem another issue of the bug mentioned above and so the only
solution is turning off the passivation mechanism?

No, this is just a warning to be careful of *potential* complications serializing (which is storing) database data somewhere that is not the database for future use. It is fine to do in the right circumstances. Just wanted you to be aware there is an actively maintained cache of entities in the EntityManager itself which never leaves memory. In terms of temporary storage, it's usually the far better place than a serialized stateful bean.

Also know that it is possible to implement serialization api methods in your stateful bean such as writeObject and readObject which gives you more control of what and how your bean is serialized/ deserialized. It is possible to do things like write the primary key data of the entities you're holding during serialization, then in deserialization use the EntityManager and primary keys to grab the live entities again.

further, til now whenever i tried to make some kind of manual transaction in my beans i always got the error that the container is taking care of the transactions and bean managed control (transactions) is not allowed. maybe you can tell me what i have to change to be able to add transactions to my
bean.

You just have to add this to your bean:

@TransactionManagement(TransactionManagementType.BEAN)

The default is TransactionManagementType.CONTAINER as you've noticed.

Just another FYI on a good reference, here's a full list javax.ejb and javax.annotation annotations and their defaults when unspecified: http://openejb.apache.org/3.0/annotations-xml-and-defaults.html

and even further, is there the possibility to turn off the passivation for
SFSB at all in geronimo? like some entry in a deployment descriptor
"passivation=false" ?

Nothing like that. Best you can do is bump your poolSize up much higher. The settings we supply are very conservative and you could likely have a much higher limit depending on the memory limits of your vm.

-David

Reply via email to