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. 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.
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
>
>