openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Dick <michael.d.d...@gmail.com>
Subject Re: did pass params - Attempt to insert null into a non-nullable column
Date Thu, 02 Jul 2009 01:51:07 GMT
At least some of this will be better handled by the OpenEJB / Tomcat folks
and we can certainly cross post the question on their mailing list(s) if
needed.

>From an OpenJPA point of view you should be able to specify the connection
properties (openjpa.ConnectionURL, openjpa.ConnectionDriverName, etc.) or
use a jta-data-source in persistence.xml. If you use a jta-data-source then
the only requirement is that the value you provide (ie contextDS) is
available in JNDI. Usually a datasource will be bound to a location like
jdbc/${my datasource name} (coming from a WebSphere background, but I
believe this is fairly common), Tomcat might expect a similar context root -
would have to check Tomcat's doc to be sure.

The error you're getting can indicate a lot of things though :
1. The ConnectionURL is incorrect
2. The UserID & Password aren't correct
3. There's a firewall blocking port 3306
4. MySQL is configured to only accept remote connections to the ejb database
(pretty unlikely, but you could do this).

To eliminate those as possibilities, can you try connecting directly to the
database (ie no JPA / Tomcat / etc)? If you can connect then it's likely
that something is getting in the way.

If you'd rather pursue the JNDI path (ie your questions about openejb.xml
and datasource configuration) then you / we will have to re-post on
users@openejb for expert advice.

-mike

On Wed, Jul 1, 2009 at 4:14 PM, John_canada <john_woo@canada.com> wrote:

>
> Thanks for the quick reply, Rick.
>
> Eventually I found out it was about the datasource config:
>
> in such case(using Tomcat), the
> my.war/WEB-INF/classes/META-INF/persistence.xml
> 1. should not specify any database info but the datasource id (specified in
> /tomcat/conf/openejb.xml), as
>
>  <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
>         <jta-data-source>contextDS</jta-data-source>
>
> if specifying the database info, like
> <property name="openjpa.ConnectionURL"
>                value="jdbc:mysql://localhost:3306/ejb"/>
>            <property name="openjpa.ConnectionDriverName"
>          ...
> then the following error found:
>
> <openjpa-1.2.1-r752877:753278 fatal user error>
> org.apache.openjpa.persistence.ArgumentException: A connection could not be
> obtained for driver class "com.mysql.jdbc.Driver" and URL
> "jdbc:mysql://localhost:3306/ejb".  You may have specified an invalid URL.
>
>
> org.apache.openjpa.jdbc.schema.DataSourceFactory.newConnectException(DataSourceFactory.java:256)
>
>
> org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(DataSourceFactory.java:242)
>
>
> org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getConnectionFactory(JDBCConfigurationImpl.java:692)
>
>
> org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDataSource(JDBCConfigurationImpl.java:790)
>
>
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.setContext(JDBCStoreManager.java:136)
>
>
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.setContext(JDBCStoreManager.java:120)
>
>
> org.apache.openjpa.kernel.DelegatingStoreManager.setContext(DelegatingStoreManager.java:78)
>        org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:309)
>
>
> org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:216)
>
>
> org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:190)
>
>
> org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>
>
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
>
>
> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
>
>
> org.apache.openejb.persistence.JtaEntityManagerRegistry.getEntityManager(JtaEntityManagerRegistry.java:105)
>
>
> org.apache.openejb.persistence.JtaEntityManager.getEntityManager(JtaEntityManager.java:61)
>
>
> org.apache.openejb.persistence.JtaEntityManager.persist(JtaEntityManager.java:97)
> ...
>
> 2. create and place up openejb.xml and open-ejb-jar.xml in the same
> METTA-INF folder, companied with persistence.xml, then the created entity
> bean and its data can be found/accessed in run time (in debug), but it's
> not
> persisted in database.
>
> openejb-jar.xml
>    <dep:environment>
>        <dep:moduleId>
>            <dep:groupId>myEJB</dep:groupId>
>            <dep:artifactId>EJB</dep:artifactId>
>            <dep:version>2.0</dep:version>
>            <dep:type>car</dep:type>
>        </dep:moduleId>
>    </dep:environment>
>    <name:cmp-connection-factory>
>        <name:pattern>
>            <name:groupId>console.myTX</name:groupId>
>            <name:artifactId>myTX</name:artifactId>
>        </name:pattern>
>    </name:cmp-connection-factory>
>
> data info in openejb.xml as:
>         <Resource id="myTX" type="DataSource">
>                JdbcDriver com.mysql.jdbc.Driver
>                 ...
>         </Resource>
>        <Resource id="myNOTX" type="DataSource">
>                JdbcDriver com.mysql.jdbc.Driver
>                 ....
>        </Resource>
>
> the persistence.xml:
> <persistence-unit name="aUnit" >
>         <jta-data-source>myTX</jta-data-source>
>        <non-jta-data-source>myNOTX</non-jta-data-source>
> ...
>
> so, my question became, how to specify the datasource out of /tomcat/conf/?
>
> Thanks in advance.
>
> --
> John
>
>
>
> Rick Curtis wrote:
> >
> > John -
> >
> > It looks like you annotated your Person.id to be unique, but you didn't
> > specify a value... I'm assuming that you're using an AI column for your
> > id.
> > I see you're running on MySQL, so try adding the annotation
> > @GeneratedValue(strategy=GenerationType.IDENTITY) to your id column. If
> > that
> > doesn't work, please post a snippet of your Entity/mapping file(s).
> >
> > -Rick
> >
> > On Wed, Jul 1, 2009 at 12:44 PM, John_canada <john_woo@canada.com>
> wrote:
> >
> >>
> >> 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.
> >>
> >>
> >
> >
>
> --
> View this message in context:
> http://n2.nabble.com/did-pass-params---Attempt-to-insert-null-into-a-non-nullable-column-tp3190581p3191855.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message