On 2 Nov 2012, at 00:45, Leon Wu wrote: > Hi Scott, > > You are exactly right. By step by step debugging, I found that my > context.xml is configured with derby db stuff and it found the datasource > after I changed it to mysql parameters. > However, it hits another problem. The Tomcat is hang on over there for a > while and throws almost the same exceptions. > By tracing down to the problem, it happens in JPAPersistenceManager (line > 293) when it tries to create the entity manager. > entityManager = entityManagerFactory.createEntityManager(); > > and the actual exception is thrown by DataSourceFactory of openjpa package > (line 239) > if (!factory2) > conn = ds.getConnection(conf.getConnectionUserName(), conf > .getConnectionPassword()); > else > > conf.getConnectionUserName and getConnectionPassword return null. I may not > know if it is correct or not.
The main thing to check is that your database name, database user name and database password set in your conf/wookie.xml match your actual MySQL set up. > But after a step further, it hangs on there > and runtime exception stack is below. It might be the issue with openjpa > config but I don't know how to do that. > Actually this looks more like a driver problem. Do you have more than one MySQL connector jar on your classpath? > Thank you for the help. > > > > java.lang.RuntimeException: There were errors initializing your > configuration: <openjpa-2.0.0-r422266:935683 fatal user error> > org.apache.openjpa.util.UserException: A connection could not be obtained > for driver class "null" and URL "null". You may have specified an invalid > URL. > > at > org.apache.openjpa.jdbc.schema.DataSourceFactory.newConnectException(DataSourceFactory.java:261) > > at > org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(DataSourceFactory.java:247) > > at > org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getConnectionFactory(JDBCConfigurationImpl.java:725) > > 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.openjpa.lib.conf.ConfigurationImpl.instantiateAll(ConfigurationImpl.java:294) > > at > org.apache.openjpa.conf.OpenJPAConfigurationImpl.instantiateAll(OpenJPAConfigurationImpl.java:1602) > > at > org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:634) > > at > org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:193) > > at > org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156) > > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:213) > > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:151) > > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:57) > > at > org.apache.wookie.beans.jpa.JPAPersistenceManager.begin(JPAPersistenceManager.java:293) > > at > org.apache.wookie.beans.util.PersistenceManagerFactory.initialize(PersistenceManagerFactory.java:81) > > at > org.apache.wookie.server.ContextListener.contextInitialized(ContextListener.java:110) > > at > org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791) > > at > org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285) > > at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) > > at > org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) > > at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) > > at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618) > > at > org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:650) > > at > org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1582) > > at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) > > at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) > > at java.util.concurrent.FutureTask.run(FutureTask.java:138) > > at > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) > > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) > > at java.lang.Thread.run(Thread.java:680) > > Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create > PoolableConnectionFactory (Communications link failure > > > The last packet sent successfully to the server was 0 milliseconds ago. The > driver has not received any packets from the server.) > > at > org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549) > > at > org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) > > at > org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) > > at > org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:137) > > at > org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:112) > > at > org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(DataSourceFactory.java:239) > > ... 30 more > > Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: > Communications link failure > > > The last packet sent successfully to the server was 0 milliseconds ago. The > driver has not received any packets from the server. > > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) > > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) > > at java.lang.reflect.Constructor.newInstance(Constructor.java:513) > > at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) > > at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117) > > at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:350) > > at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2408) > > at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445) > > at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230) > > at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813) > > at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) > > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) > > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) > > at java.lang.reflect.Constructor.newInstance(Constructor.java:513) > > at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) > > at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399) > > at > com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334) > > at > org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) > > at > org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) > > at > org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) > > at > org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) > > ... 35 more > > Caused by: java.net.ConnectException: Operation timed out > > at java.net.PlainSocketImpl.socketConnect(Native Method) > > at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) > > at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) > > at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) > > at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432) > > at java.net.Socket.connect(Socket.java:529) > > at java.net.Socket.connect(Socket.java:478) > > at java.net.Socket.<init>(Socket.java:375) > > at java.net.Socket.<init>(Socket.java:218) > > at > com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:259) > > at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300) > > ... 51 more > > > <openjpa-2.0.0-r422266:935683 fatal user error> > org.apache.openjpa.util.UserException: A connection could not be obtained > for driver class "null" and URL "null". You may have specified an invalid > URL. > > at > org.apache.openjpa.jdbc.schema.DataSourceFactory.newConnectException(DataSourceFactory.java:261) > > at > org.apache.openjpa.jdbc.schema.DataSourceFactory.installDBDictionary(DataSourceFactory.java:247) > > at > org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getConnectionFactory(JDBCConfigurationImpl.java:725) > > at > org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDataSource(JDBCConfigurationImpl.java:845) > > at > org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDataSource2(JDBCConfigurationImpl.java:852) > > at > org.apache.openjpa.jdbc.schema.SchemaGenerator.<init>(SchemaGenerator.java:83) > > at > org.apache.openjpa.jdbc.schema.LazySchemaFactory.setConfiguration(LazySchemaFactory.java:206) > > at > org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:475) > > at > org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:432) > > at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:104) > > at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83) > > at > org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getSchemaFactoryInstance(JDBCConfigurationImpl.java:649) > > 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.openjpa.lib.conf.ConfigurationImpl.instantiateAll(ConfigurationImpl.java:294) > > at > org.apache.openjpa.conf.OpenJPAConfigurationImpl.instantiateAll(OpenJPAConfigurationImpl.java:1602) > > at > org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:634) > > at > org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:193) > > at > org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156) > > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:213) > > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:151) > > at > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:57) > > at > org.apache.wookie.beans.jpa.JPAPersistenceManager.begin(JPAPersistenceManager.java:293) > > at > org.apache.wookie.beans.util.PersistenceManagerFactory.initialize(PersistenceManagerFactory.java:81) > > at > org.apache.wookie.server.ContextListener.contextInitialized(ContextListener.java:110) > > at > org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791) > > at > org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285) > > at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) > > at > org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) > > at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) > > at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618) > > at org.apache.catalina.startup.HostConfig.deployDe... > > > > ========================================================================= > > > > > > > > > On Thu, Nov 1, 2012 at 5:26 AM, Scott Wilson <[email protected] >> wrote: > >> Hi Leon, >> >> This definitely seems to be a problem with the database connector; the >> error messages you get are typically the sort you get when JPA can't >> connect to the database properly. >> >> Sometimes - depending on the version of Tomcat - it seems necessary to >> create your context info into a "wookie.xml" file and place into /conf, >> e.g.: >> >> <Context crossContext="true"> >> >> <Resource name="jdbc/widgetdb" >> auth="Container" >> type="javax.sql.DataSource" >> maxActive="80" >> maxIdle="5" >> username="java" >> password="java" >> driverClassName="com.mysql.jdbc.Driver" >> url="jdbc:mysql://localhost:3306/widgetdb"/> >> >> </Context> >> >> Also make sure you have the MySQL driver jar in the classpath. E.g. that >> you have mysql-connector-java-5.0.7-bin.jar in /lib. >> >> Hope this helps, also see instructions here: >> >> http://incubator.apache.org/wookie/docs/developer/running.html >> >> S >> >> >> On 31 Oct 2012, at 23:54, Leon Wu wrote: >> >>> Hello, >>> >>> I've import the Wookie in Eclipse, but I cannot make it work for me? >>> >>> I've created JNDI for the DataSource in META-INF/context.xml, settings in >>> web.xml, widget.persistence.manager.dbtype=mysql in >>> widgetserver.properties, and tables in MySQL. However, I am persistently >>> getting two exceptions when Tomcat is starting. Please help me to fix the >>> problems. Thank you very much. >>> >>> Here are the exceptions: >>> >>> 28.10.2012 22:31:14 INFO >>> [org.apache.wookie.beans.jpa.JPAPersistenceManager.initialize():248] >>> Initialized >>> >>> 28.10.2012 22:31:14 INFO >>> [org.apache.openjpa.lib.log.Log4JLogFactory$LogAdapter.info():81] >> Starting >>> OpenJPA 2.0.0 >>> >>> 28.10.2012 22:31:14 INFO >>> [org.apache.openjpa.lib.log.Log4JLogFactory$LogAdapter.info():81] Using >>> dictionary class "org.apache.openjpa.jdbc.sql.MySQLDictionary". >>> >>> Oct 28, 2012 10:31:14 PM org.apache.catalina.core.StandardContext >>> listenerStart >>> >>> SEVERE: Exception sending context initialized event to listener instance >> of >>> class org.apache.wookie.server.ContextListener >>> >>> java.lang.IllegalStateException: Transaction not initiated or already >>> closed >>> >>> at org.apache.wookie.beans.jpa.JPAPersistenceManager.close( >>> JPAPersistenceManager.java:309) >>> >>> at >>> >> org.apache.wookie.beans.util.PersistenceManagerFactory.closePersistenceManager( >>> PersistenceManagerFactory.java:213) >>> >>> at org.apache.wookie.beans.util.PersistenceManagerFactory.initialize( >>> PersistenceManagerFactory.java:157) >>> >>> at org.apache.wookie.server.ContextListener.contextInitialized( >>> ContextListener.java:110) >>> >>> at org.apache.catalina.core.StandardContext.listenerStart( >>> StandardContext.java:4791) >>> >>> at org.apache.catalina.core.StandardContext.startInternal( >>> StandardContext.java:5285) >>> >>> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) >>> >>> at org.apache.catalina.core.ContainerBase.addChildInternal( >>> ContainerBase.java:901) >>> >>> at >> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) >>> >>> at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618) >>> >>> at org.apache.catalina.startup.HostConfig.deployDescriptor( >>> HostConfig.java:650) >>> >>> at org.apache.catalina.startup.HostConfig$DeployDescriptor.run( >>> HostConfig.java:1582) >>> >>> at >> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) >>> >>> at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) >>> >>> at java.util.concurrent.FutureTask.run(FutureTask.java:138) >>> >>> at java.util.concurrent.ThreadPoolExecutor$Worker.runTask( >>> ThreadPoolExecutor.java:886) >>> >>> at java.util.concurrent.ThreadPoolExecutor$Worker.run( >>> ThreadPoolExecutor.java:908) >>> >>> at java.lang.Thread.run(Thread.java:680) >>> >>> Oct 28, 2012 10:31:14 PM org.apache.catalina.core.StandardContext >>> startInternal >>> >>> SEVERE: Error listenerStart >>> >>> Oct 28, 2012 10:31:14 PM org.apache.catalina.core.StandardContext >>> startInternal >>> >>> SEVERE: Context [/woookie] startup failed due to previous errors >>> >>> 28.10.2012 22:31:14 INFO >>> [org.apache.wookie.beans.jpa.JPAPersistenceManager.terminate():273] >>> Terminated >>> >>> 28.10.2012 22:31:14 INFO >>> [org.apache.wookie.beans.util.PersistenceManagerFactory.terminate():247] >>> Terminated >>> >>> Oct 28, 2012 10:31:14 PM org.apache.catalina.loader.WebappClassLoader >>> checkThreadLocalMapForLeaks >>> >>> SEVERE: The web application [/woookie] created a ThreadLocal with key of >>> type [java.lang.ThreadLocal] (value [java.lang.ThreadLocal@65988886]) >> and a >>> value of type [org.apache.wookie.beans.jpa.JPAPersistenceManager] (value >>> [org.apache.wookie.beans.jpa.JPAPersistenceManager@12b4986]) but failed >> to >>> remove it when the web application was stopped. Threads are going to be >>> renewed over time to try and avoid a probable memory leak. >>> >>> Oct 28, 2012 10:31:14 PM org.apache.catalina.startup.HostConfig >>> deployDirectory >>> >>> INFO: Deploying web application directory >>> /Library/Tomcat/apache-tomcat-7.0.29/webapps/docs >>> >>> Oct 28, 2012 10:31:14 PM org.apache.catalina.startup.HostConfig >>> deployDirectory >>> >>> INFO: Deploying web application directory >>> /Library/Tomcat/apache-tomcat-7.0.29/webapps/examples >>> >>> Oct 28, 2012 10:31:14 PM org.apache.catalina.core.ApplicationContext log >>> >>> INFO: ContextListener: contextInitialized() >>> >>> Oct 28, 2012 10:31:14 PM org.apache.catalina.core.ApplicationContext log >>> >>> INFO: SessionListener: contextInitialized() >>> >>> Oct 28, 2012 10:31:14 PM org.apache.catalina.core.ApplicationContext log >>> >>> INFO: ContextListener: >>> attributeAdded('org.apache.jasper.compiler.TldLocationsCache', >>> 'org.apache.jasper.compiler.TldLocationsCache@dc44a6d') >>> >>> Oct 28, 2012 10:31:14 PM org.apache.catalina.startup.HostConfig >>> deployDirectory >>> >>> INFO: Deploying web application directory >>> /Library/Tomcat/apache-tomcat-7.0.29/webapps/host-manager >>> >>> Oct 28, 2012 10:31:14 PM org.apache.catalina.loader.WebappClassLoader >>> loadClass >>> >>> INFO: Illegal access: this web application instance has been stopped >>> already. Could not load org.apache.openjpa.kernel.ManagedCache. The >>> eventual following stack trace is caused by an error thrown for debugging >>> purposes as well as to attempt to terminate the thread which caused the >>> illegal access, and has no functional impact. >>> >>> java.lang.IllegalStateException >>> >>> at org.apache.catalina.loader.WebappClassLoader.loadClass( >>> WebappClassLoader.java:1597) >>> >>> at org.apache.catalina.loader.WebappClassLoader.loadClass( >>> WebappClassLoader.java:1556) >>> >>> at org.apache.openjpa.kernel.BrokerImpl.free(BrokerImpl.java:4303) >>> >>> at org.apache.openjpa.kernel.FinalizingBrokerImpl.finalize( >>> FinalizingBrokerImpl.java:39) >>> >>> at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method) >>> >>> at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83) >>> >>> at java.lang.ref.Finalizer.access$100(Finalizer.java:14) >>> >>> at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160) >>> >>> Oct 28, 2012 10:31:14 PM org.apache.catalina.startup.HostConfig >>> deployDirectory >>> >>> INFO: Deploying web application directory >>> /Library/Tomcat/apache-tomcat-7.0.29/webapps/manager >>> >>> Oct 28, 2012 10:31:15 PM org.apache.catalina.startup.HostConfig >>> deployDirectory >>> >>> INFO: Deploying web application directory >>> /Library/Tomcat/apache-tomcat-7.0.29/webapps/ROOT >>> >>> Oct 28, 2012 10:31:15 PM org.apache.coyote.AbstractProtocol start >> >>
