Hi Mike
This is the full stack trace.
<openjpa-2.0.1-r422266:989424 nonfatal user error>
org.apache.openjpa.persistence.InvalidStateException: Can only perform
operation while a transaction is active.
at
org.apache.openjpa.kernel.BrokerImpl.assertTransactionOperation(BrokerImpl.java:4595)
at org.apache.openjpa.kernel.BrokerImpl.rollback(BrokerImpl.java:1496)
at
org.apache.openjpa.kernel.DelegatingBroker.rollback(DelegatingBroker.java:933)
at
org.apache.openjpa.persistence.EntityManagerImpl.rollback(EntityManagerImpl.java:589)
at
com.copperarrow.crm.basemodel.jpa.UsersTest.testCommitUser(UsersTest.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod
$1.runReflectiveCall(FrameworkMethod.java:44)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at
org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:24)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at
org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35)
at
org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:115)
at
org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.booter.ProviderFactory
$ClassLoaderProxy.invoke(ProviderFactory.java:103)
at $Proxy0.invoke(Unknown Source)
at
org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:150)
at
org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:91)
at
org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)
com.copperarrow.crm.basemodel.jpa.PersistSuite Time elapsed: 0.091 sec
<<< ERROR!
<openjpa-2.0.1-r422266:989424 fatal user error>
org.apache.openjpa.persistence.InvalidStateException: The context has
been closed. The stack trace at which the context was closed is
available if Runtime=TRACE logging is enabled.
at
org.apache.openjpa.kernel.BrokerImpl.assertOpen(BrokerImpl.java:4573)
at
org.apache.openjpa.kernel.BrokerImpl.beginOperation(BrokerImpl.java:1895)
at org.apache.openjpa.kernel.BrokerImpl.close(BrokerImpl.java:4271)
at
org.apache.openjpa.kernel.DelegatingBroker.close(DelegatingBroker.java:1346)
at
org.apache.openjpa.persistence.EntityManagerImpl.close(EntityManagerImpl.java:1282)
at
com.copperarrow.crm.basemodel.jpa.DatabaseConnection.shutdown(DatabaseConnection.java:72)
at
com.copperarrow.crm.basemodel.jpa.PersistSuite.tearDown(PersistSuite.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod
$1.runReflectiveCall(FrameworkMethod.java:44)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:37)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at
org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35)
at
org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:115)
at
org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.booter.ProviderFactory
$ClassLoaderProxy.invoke(ProviderFactory.java:103)
at $Proxy0.invoke(Unknown Source)
at
org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:150)
at
org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:91)
at
org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)
The full class code is as follows:
@Entity
@Table(name = "t_USERS")
public class Users implements Serializable {
/** Serialisation ID. **/
private static final long serialVersionUID = 1L;
/** Entity id. **/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/** User ID. This will be a user ID starting from 0001. **/
@GeneratedValue(strategy = GenerationType.TABLE, generator =
"UserGen")
@TableGenerator(name = "UserGen", table = "USER_GEN", pkColumnName =
"PK",
valueColumnName = "USERID")
private Long userID;
/** User Name associated with the user used to login with. **/
private String userName;
/** hash of the users password. **/
private String passHash;
/** Role Category is the role of the user e.g. Admin, sales, etc.
**/
@Enumerated(EnumType.STRING)
private RoleCategory roleCategory;
/** ci is the contact information associated with the user. **/
@Embedded
private ContactInformation ci;
/**
* @return id
*/
public Long getId() {
return id;
}
/**
* @param nId the id to set
*/
public void setId(final Long nId) {
this.id = nId;
}
/**
* @return the serialVersionUID
*/
public static long getSerialVersionUID() {
return serialVersionUID;
}
/**
* @return the userID
*/
public Long getUserID() {
return userID;
}
/**
* @param userID the userID to set
*/
public void setUserID(Long userID) {
this.userID = userID;
}
/**
* @return the userName
*/
public String getUserName() {
return userName;
}
/**
* @param userName the userName to set
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* @return the passHash
*/
public String getPassHash() {
return passHash;
}
/**
* @param passHash the passHash to set
*/
public void setPassHash(String passHash) {
this.passHash = passHash;
}
/**
* @return the roleCategory
*/
public RoleCategory getRoleCategory() {
return roleCategory;
}
/**
* @param roleCategory the roleCategory to set
*/
public void setRoleCategory(RoleCategory roleCategory) {
this.roleCategory = roleCategory;
}
/**
* @return the ci
*/
public ContactInformation getCi() {
return ci;
}
/**
* @param ci the ci to set
*/
public void setCi(ContactInformation ci) {
this.ci = ci;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(final Object object) {
// TODO: Warning - this method won't work in the case the id
fields
// are not set
if (!(object instanceof Users)) {
return false;
}
Users other = (Users) object;
if ((this.id == null && other.id != null)
|| (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "com.copperarrow.crm.basemodel.jpa.Users[ id=" + id +
" ]";
}
If you need anything else just ask.
Thanks
David
On Wed, 2011-02-23 at 09:17 -0600, Michael Dick wrote:
> Hi David,
>
> Could you post the stack for the exception you're getting?
>
> GeneratedValues should be obtained by your non-jta-data-source (or
> openjpa.ConnectionFactory2) - and that shouldn't require a
> transaction.
>
> -mike
>
> On Wed, Feb 23, 2011 at 8:30 AM, David Beer
> <[email protected]> wrote:
> Hi all
>
> I am trying to get a value for a field set when commited to
> the db, to
> be auto generated. This field is not an ID for the table. I
> seem to get
> the error message "InvalidStateException: Can only perform
> operation
> while a transaction is active."
>
> My class looks like the following:
>
> @GeneratedValue(strategy = GenerationType.TABLE, generator =
> "UserGen")
> @TableGenerator(name = "UserGen", table = "USER_GEN",
> pkColumnName =
> "PK", valueColumnName = "USERID")
> private Long userID;
>
> Any Thoughts.
>
> Thanks
>
> David
>
>