OpenEjb 3.1.4 standalone
JRE 1.5
I'm trying to demo a simple CMP entity insert on a local workstation without
luck. I have a MySQL entity table to which I am attempting to insert a
fresh item. I get the following client-side stack trace when attempting to
persist a simple entity (please see further below for configuration and
source code detail):
Exception in thread "main" javax.ejb.TransactionRolledbackLocalException:
Transaction was rolled back, presumably because setRollbackOnly was called
during a synchronization
at
org.apache.openejb.client.EJBInvocationHandler.convertException(EJBInvocationHandler.java:195)
at
org.apache.openejb.client.EJBObjectHandler._invoke(EJBObjectHandler.java:168)
at
org.apache.openejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:118)
at
org.apache.openejb.client.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:52)
at $Proxy0.addLibrary(Unknown Source)
at process.CmpTestProcess.run(CmpTestProcess.java:31)
at process.CmpTestProcess.main(CmpTestProcess.java:18)
Caused by: javax.transaction.RollbackException: Unable to commit:
transaction marked for rollback
at
org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:271)
at
org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:245)
at
org.apache.openejb.core.transaction.JtaTransactionPolicy.completeTransaction(JtaTransactionPolicy.java:291)
at
org.apache.openejb.core.transaction.TxRequired.commit(TxRequired.java:75)
at
org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke(EjbTransactionUtil.java:74)
at
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:241)
at
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:174)
at
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:136)
at
org.apache.openejb.server.ejbd.EjbRequestHandler.doEjbObject_BUSINESS_METHOD(EjbRequestHandler.java:238)
at
org.apache.openejb.server.ejbd.EjbRequestHandler.processRequest(EjbRequestHandler.java:129)
at
org.apache.openejb.server.ejbd.EjbDaemon.processEjbRequest(EjbDaemon.java:196)
at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:149)
at org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:71)
at
org.apache.openejb.server.ejbd.KeepAliveServer$Session.service(KeepAliveServer.java:213)
at
org.apache.openejb.server.ejbd.KeepAliveServer.service(KeepAliveServer.java:233)
at org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:66)
at org.apache.openejb.server.ServicePool$2.run(ServicePool.java:91)
at org.apache.openejb.server.ServicePool$3.run(ServicePool.java:120)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
Configuration: persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="cmp" transaction-type="JTA">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>MySQL JTA Data Source</jta-data-source>
<non-jta-data-source>MySQL Unmanaged Data
Source</non-jta-data-source>
<properties>
<property name="openjpa.Log" value="DefaultLevel=TRACE"/>
<property name="openjpa.jdbc.SynchronizeMappings"
value="buildSchema(ForeignKeys=true)" />
<property name="openjpa.jdbc.DBDictionary" value="mysql" />
<property name="openjpa.jdbc.TransactionIsolation"
value="read-uncommitted" />
</properties>
</persistence-unit>
</persistence>
Configuration: openejb.xml
<Resource id="MySQL JTA Managed Data Source" type="javax.sql.DataSource">
JdbcDriver = com.mysql.jdbc.Driver
JdbcUrl = jdbc:mysql://localhost:3306/ejb
UserName = ejb
Password = ejb
JtaManaged = true
</Resource>
MySQL entity schema: ejb.library
CREATE TABLE `ejb`.`library` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(64) NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE = InnoDB;
Entity bean: Library
@Entity
@Table(name="library")
public class Library implements Serializable {
private static final long serialVersionUID = 1L;
@Id()
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
public Library(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Session bean: LibraryManager
@Stateless(name="LibraryManager", mappedName="ejb/session/LibraryManager")
public class LibraryManager implements LibraryManagerInterface {
@PersistenceContext(unitName="cmp",type=PersistenceContextType.TRANSACTION)
EntityManager em;
public void addLibrary(Library library) {
em.persist(library);
// em.close();
//System.out.println("library persisted: " + library.getId());
}
public Collection<Library> getAllLibraries() {
Collection<Library> libraries = em.createQuery("from library
l").getResultList();
return libraries;
}
public Collection<Library> getLibrariesMatching(String startingWith) {
Collection<Library> libraries = em.createQuery("from library l where
l.name like '" + startingWith + "%'").getResultList();
return libraries;
}
public Collection<Library> getLibraryMatching(int id) {
Collection<Library> libraries = em.createQuery("from library l where
l.id = " + id).getResultList();
return libraries;
}
}
@Remote
public interface LibraryManagerInterface {
public void addLibrary(Library library);
}
Client process: CmpTestProcess
public class CmpTestProcess {
public static void main(String[] args) throws NamingException {
CmpTestProcess cmpTestProcess = new CmpTestProcess();
cmpTestProcess.run();
}
private void run() throws NamingException {
Properties properties = new Properties();
properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.RemoteInitialContextFactory");
properties.put(Context.PROVIDER_URL, "ejbd://localhost:4201");
properties.put("openejb.authentication.realmName",
"PropertiesLogin");
properties.put(Context.SECURITY_PRINCIPAL, "tsaker");
properties.put(Context.SECURITY_CREDENTIALS, "pass");
InitialContext ctx = new InitialContext(properties);
LibraryManagerInterface libraryManager =
(LibraryManagerInterface)ctx.lookup("ejb/session/LibraryManager");
Library library = new Library("Best Library In Town");
libraryManager.addLibrary(library);
}
}
--
View this message in context:
http://openejb.979440.n4.nabble.com/Newbie-troubles-attempting-CMP-entity-insert-tp3297911p3297911.html
Sent from the OpenEJB Dev mailing list archive at Nabble.com.