Hi,
I deployed openejb.war in tomcat, and tested a web app which used ejb3; it's
very simple: a servlet called a stateless bean, which created an entity as
following:
session bean:
@PersistenceContext(unitName="aUnit",type =
PersistenceContextType.TRANSACTION)
private EntityManager manager;
Person p = new Person(name, address);
manager.persist(p);
manager.flush();
the persistence.xml:
<persistence-unit name="aUnit" transaction-type="JTA">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>myTX</jta-data-source>
<non-jta-data-source>myNOTX</non-jta-data-source>
<class>ejb.Person</class>
...
openejb.xml:
<Resource id="myTX" type="DataSource">
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://localhost:3306/a
UserName root
Password aaa
</Resource>
<Resource id="myNOTX" type="DataSource">
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://localhost:3306/a
UserName root
Password aaa
JtaManaged false
</Resource>
However, I got the following error when executing manager.flush();
org.apache.openjpa.lib.jdbc.ReportingSQLException: Attempt to insert null
into a non-nullable column: column: ID table: PERSON in statement [INSERT
INTO person (person_id, address, name) VALUES (?, ?, ?)] {prepstmnt 6240623
INSERT INTO person (person_id, address, name)
VALUES (?, ?, ?)
[params=(long) 2201, (String) any address, (String) name]} [code=-10,
state=23000]
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700(LoggingConnectionDecorator.java:57)
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:866)
org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1504)
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.executeUpdate(PreparedStatementManagerImpl.java:151)
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushAndUpdate(PreparedStatementManagerImpl.java:120)
org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushAndUpdate(BatchingPreparedStatementManagerImpl.java:82)
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:89)
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:72)
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:543)
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager.flush(BatchingConstraintUpdateManager.java:59)
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:655)
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2010)
org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1908)
org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1679)
org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:989)
org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:592)
org.apache.openejb.persistence.JtaEntityManager.flush(JtaEntityManager.java:130)
ejb.HelloBean.createPerson(HelloBean.java:31)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:158)
org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:141)
org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:122)
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:221)
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:174)
org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:217)
org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:281)
$Proxy46.createPerson(Unknown Source)
test.HelloServlet.doGet(HelloServlet.java:31)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
It's obvious, from
INSERT INTO person (person_id, address, name)
VALUES (?, ?, ?)
[params=(long) 2201, (String) any address, (String) name]} [code=-10,
state=23000]
the parms values were taken, but did not pass/forward to database - this
should not be in ejb3 package.
Can anyone tell how to fix it?
Thanks
--
John
--
View this message in context:
http://n2.nabble.com/did-pass-params---Attempt-to-insert-null-into-a-non-nullable-column-tp3190581p3190581.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.