From: pilhuhn <nu...@jb...> - 2004-02-23 20:47:24
|
The error you see pretty much tells all. What you probably do is something in your servlet: a = getOneSideOfCmr(); b = a.getOtherSide(); There ist no transaction around it, so b is invalid. Either surround this by a user transaction or do the two calls within a method in a session bean. View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3822589#3822589 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3822589 |
[JBoss-user] [Persistence & CMP/JBoss] - Re: A CMR collection may only be used within the transction
From: peterhawkins <nu...@jb...> - 2004-02-26 01:16:11
|
"I try not to write java code in my jsp pages"? Bahaha! Tags are for fags. :0 View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3823004#3823004 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3823004 |
From: cvandyck <nu...@jb...> - 2004-08-26 16:04:05
|
This is caused by, well, usually, executing some method that obtains a collection of entities within the context of a transaction, and then another method (possibly the calling method) using that collection within * a transaction (if the collection was obtained without a transaction) * no transaction (if the collection was obtained with a transaction) * a transaction (if the collection was obtained with a different transaction) What you need to do is first to figure out where exactly in your code that this is happening. Then, you need to figure out, right before your error, what your transactional status is. You can use this helper class to aid you: | import javax.naming.InitialContext; | import javax.transaction.Status; | import javax.transaction.TransactionManager; | | | /** | * @author Collin VanDyck | * | */ | public class TransactionInfo { | | public static final boolean inActiveTransaction() | { | try | { | TransactionManager tm = (TransactionManager) new InitialContext().lookup("java:/TransactionManager"); | int status = tm.getStatus(); | if (status == Status.STATUS_ACTIVE) | { | return true; | } | } | catch (Exception e) | { | e.printStackTrace(); | } | return false; | } | | public static final int getTransactionStatus() | { | try | { | TransactionManager tm = (TransactionManager) new InitialContext().lookup("java:/TransactionManager"); | int status = tm.getStatus(); | return status; | } | catch (Exception e) | { | e.printStackTrace(); | return -1; | } | } | | public static final String getTransactionInformation() | { | String result = ""; | | try | { | TransactionManager tm = (TransactionManager) new InitialContext().lookup("java:/TransactionManager"); | int status = tm.getStatus(); | | switch (status) | { | case Status.STATUS_ACTIVE: | result = "ACTIVE"; | break; | case Status.STATUS_COMMITTED: | result = "COMMITTED"; | break; | case Status.STATUS_COMMITTING: | result = "COMMITTING"; | break; | case Status.STATUS_MARKED_ROLLBACK: | result = "MARKED_ROLLBACK"; | break; | case Status.STATUS_NO_TRANSACTION: | result = "NO_TRANSACTION"; | break; | case Status.STATUS_PREPARED: | result = "PREPARED"; | break; | case Status.STATUS_PREPARING: | result = "PREPARING"; | break; | case Status.STATUS_ROLLEDBACK: | result = "ROLLEDBACK"; | break; | case Status.STATUS_ROLLING_BACK: | result = "ROLLING_BACK"; | break; | case Status.STATUS_UNKNOWN: | result = "UNKNOWN"; | break; | default: | result = "UNDEFINED"; | } | } | catch (Exception e) | { | result = "ERROR: could not get tx status: " + e.getMessage(); | } | | return result; | } | | } | Using this class, you should be able to figure out more about what's going on.l View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3846323#3846323 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3846323 |
From: jcr <nu...@jb...> - 2004-08-30 23:03:10
|
You can actually see this problem from one line of code to the next if you are not in a transaction. For instance, if you have a BeanManaged SessionBean and forgot to grate a transaction and have a method that calls: . . . Collection c = myEntity.getCMREntities(); Iterator i = c.iterator(); . . . You will get the exception. Be sure your session beans are either container managed or that you are definately establishing a transaction before calling entitybeans. A good way to track down these problems is to set your entity beans to have "Mandatory" as the transaction attribute. Then you will know for sure where they are being accessed outside of a transaction :) Jared View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3846698#3846698 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3846698 |
From: balteo <nu...@jb...> - 2004-09-02 18:32:09
|
Hello Collin, Thanks for the reply. Can you give a hint as to how to use your class please? Julien. View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3847058#3847058 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3847058 |
From: cvandyck <nu...@jb...> - 2004-09-02 18:37:32
|
Sure, just use the getTransactionInformation() method right before you obtain your CMR collection to determine whether or not you are in a transaction. View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3847060#3847060 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3847060 |
From: balteo <nu...@jb...> - 2004-09-02 19:38:27
|
Hello Collin, I added the following line in my session facade's method: | logger.info(TransactionInfo.getTransactionInformation()); | and it says "ACTIVE" which means that my session facade runs within a transaction. Right? The source for my session facade bean is here: http://www.parispano.com/test_guide/ejb_tier/src/com/softwareag/test_guide/sessionFacadeEJB/ From your post I understand that the problem is either -I obtain the collection WITHIN a transaction and use it WITHOUT a transaction -I obtain the collection WITHOUT a transaction and use it WITHIN a transaction Right? What do you suggest I do to solve the problem? Julien. View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3847064#3847064 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3847064 |
From: loubyansky <nu...@jb...> - 2004-09-03 06:47:28
|
You should always access entity beans in a transaction. And then make sure that you get a CMR collection and work on it in the same tx. View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3847128#3847128 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3847128 |
[JBoss-user] [Persistence & CMP/JBoss] - Re: A CMR collection may only be used within the transction
From: schmidts <nu...@jb...> - 2005-06-03 20:34:07
|
In the deployment-descriptor of your SessionBean you either declare wether to use container managed or bean managed transaction demarcation. In case of container managed transaction, check if the trans-attribute is e.g. "Required". In case of bean managed TX, programmatically obtain the UserTransaction object and start the transaction. View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3880218#3880218 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3880218 |
[JBoss-user] [Persistence & CMP/JBoss] - Re: A CMR collection may only be used within the transction
From: thepriz <nu...@jb...> - 2005-06-29 18:08:58
|
I am using CMP. I use ant to create the descriptors. I found that * @ejb.transaction * type="Required" * this is in the declaration. I believe this is like this because we are using a Oracle database. How can I get this to work? View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3883122#3883122 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3883122 |
From: blackandwhite <nu...@jb...> - 2005-07-28 14:45:34
|
Any ideas? Who can help me? Thx! View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3887075#3887075 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3887075 |
From: blackandwhite <nu...@jb...> - 2005-07-30 01:19:54
|
Hello thepriz, Have you resolved this problem? I meet the same problem. View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3887405#3887405 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3887405 |
From: schrouf <nu...@jb...> - 2005-08-01 07:29:41
|
Make sure that both beans ( the session bean and the entity bean) declare that a transaction is "required". Then all of the 'internal' CMP entity bean operations should run in the same transaction of the 'outer' session bean. The container will create a transaction before invokation of your session bean method and will reuse this transaction for all embeded entity operations. Regards Ulf View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3887642#3887642 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3887642 |
From: blackandwhite <nu...@jb...> - 2005-08-02 05:30:57
|
Thanks Ulf. I will upgrade to JBoss 3.2.7 View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3887851#3887851 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3887851 |
From: erich_lol <do-...@jb...> - 2006-01-23 17:49:00
|
@alex I am sorry but does not the J2EE spec say that transaction handling for CMP is the job of the Container? By stating the desired Transactional behaviour in the deployment descriptor the container should take care of this matter. anonymous wrote : As previously mentioned, entity beans that use EJB 2.0 container-managed persistence can only use Required, RequiresNew, or Mandatory transaction attributes for most business methods and methods on the home interface. Because accessing the container-managed persistence (CMP) and container-managed relationship (CMR) fields of an entity bean requires transactions, the Mandatory transaction attribute should be used for all get and set methods of an entity bean's CMP and CMR fields View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3919165#3919165 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3919165 |
From: redBeard15 <do-...@jb...> - 2006-03-23 20:16:30
|
See my post at http://www.jboss.com/index.html?module=bb&op=viewtopic&t=59240 View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3932242#3932242 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3932242 |