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.

Reply via email to