I'm having issues with a WAR file I want to deploy to Tomcat server 8. The tomcat server is installed with the default values (only user and password changed). When I deploy the WAR file, I'm getting this output from the Catalina.out log:
Configuring Spring Security Core ...
... finished configuring Spring Security Core
Configuring Spring Security REST ...
... finished configuring Spring Security REST
2015-04-06 13:37:37,345 [http-nio-8080-exec-2] ERROR context.GrailsContextLoaderListener - Error initializing the application: Error creat$
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerPostProcessor': Initialization of$
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve refe$
... 5 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init meth$
... 5 more
Caused by: org.hibernate.MappingException: Missing type or column for column[descripciono_descripciones] on domain[Ejercicios] referencing[$
... 5 more
2015-04-06 13:37:37,348 [http-nio-8080-exec-2] ERROR context.GrailsContextLoaderListener - Error initializing Grails: Error creating bean $
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerPostProcessor': Initialization of$
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve refe$
... 3 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init meth$
... 3 more
Caused by: org.hibernate.MappingException: Missing type or column for column[descripciono_descripciones] on domain[Ejercicios] referencing[$
... 3 more
2015-04-06 13:38:57,516 [http-nio-8080-exec-8] ERROR context.GrailsContextLoaderListener - Error initializing Grails: Error creating bean $
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerPostProcessor': Initialization of$
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve refe$
... 3 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init meth$
... 3 more
Caused by: org.hibernate.MappingException: Missing type or column for column[descripciono_descripciones] on domain[Ejercicios] referencing[$
... 3 more
06-Apr-2015 13:38:57.517 SEVERE [http-nio-8080-exec-8] org.apache.catalina.core.StandardContext.startInternal Error listenerStart
06-Apr-2015 13:38:57.518 SEVERE [http-nio-8080-exec-8] org.apache.catalina.core.StandardContext.startInternal Context [/backend-gimnasio-0.$
06-Apr-2015 13:38:57.540 WARNING [http-nio-8080-exec-8] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web applic$
06-Apr-2015 13:38:57.540 WARNING [http-nio-8080-exec-8] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web app$
java.lang.Object.wait(Native Method)
java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
com.mysql.jdbc.NonRegisteringDriver$1.run(NonRegisteringDriver.java:93)
My guess is that there's a problem with the MySQL connection, but I don't really know where should I specify the connection string or something like that... The database is created on the server, and the DataSource in Grails is pointing to that database.
EDIT:
<?xml version="1.0" encoding="ISO-8859-1"?>
<webapps>
<Context path="/backend-gimnasio" docBase="webapps/backend-gimnasio" debug="0" reloadable="true">
<!-- Replace path and docBase and etc. with your applications settings.
This file assumes that this file is named apps-myapp.xml and is
located under Tomcats configuration directory. It is also assumed that
the application which is going to use MyConnection JDBC connection is
called myapp and is accessed as http://yourdomain.tld/myapp and is
located under Tomcats webapps directory. Database name is assumed
my_database. Replace these with your actual values. -->
<!-- This is a sample XML config file for an Apache Tomcat 5.5 server to
setup MySQL Connector/J 5.1 for JDBC connectivity. Information are
derived from sources available in the Internet. -->
<!-- Resource name and ResourceParams name, must be the same and
The connection pool will be bound into JNDI with that name
Eg: "java:/comp/env/jdbc/MyConnection". Replace MyConnection in both
places with the name you want for the connection. -->
<Resource name="jdbc/MyConnection" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/MyConnection">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<!-- Don't set this higher than max_connections on your MySQL server,
usually this should be a 10 or a few 10's of connections, not
hundreds or thousands -->
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
<!-- Just allow only as many idle connections as you require. Too much
is bad. -->
<parameter>
<name>maxIdle</name>
<value>5</value>
</parameter>
<!-- Don't use autoReconnect=true, it's going away eventually and it's a
crutch for older connection pools that couldn't test connections.
You need to decide whether your application is supposed to deal with
SQLExceptions (hint, it should), and how much of a performance
penalty you're willing to pay to ensure 'freshness' of the connection -->
<parameter>
<name>validationQuery</name>
<value>SELECT 1</value>
</parameter>
<!-- The most conservative approach is to test connections before they're
given to your application. For most applications this is okay, the
query used above is very small and takes no real server resources to
process, other than the time used to traverse the network. If you have
a high-load application you'll need to rely on something else. -->
<parameter>
<name>testOnBorrow</name>
<value>true</value>
</parameter>
<!-- Otherwise, or in addition to testOnBorrow, you can test while
connections are sitting idle -->
<parameter>
<name>testWhileIdle</name>
<value>true</value>
</parameter>
<!-- You have to set this value, otherwise even though you've asked
connections to be tested while idle,the idle evicter thread
will never run -->
<parameter>
<name>timeBetweenEvictionRunsMillis</name>
<value>10000</value>
</parameter>
<!-- Don't set this too high. A few minutes or even fraction of a minute
is sometimes okay here, it depends on your application and how much
spikey load it will see -->
<parameter>
<name>minEvictableIdleTimeMillis</name>
<value>60000</value>
</parameter>
<!-- Username and password used when connecting to MySQL. Replace myuser
and mypassword with your username/password for the database user. -->
<parameter>
<name>"username"</name>
<value>"password"</value>
</parameter>
<parameter>
<name>"username"</name>
<value>"password"</value>
</parameter>
<!-- Class name for the Connector/J driver -->
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<!-- The JDBC connection url for connecting to MySQL, notice that if
you want to pass any other MySQL-specific parameters you should
pass them here in the URL, setting them using the parameter
tags above will have no effect, you will also need to use &
to separate parameter values as the ampersand is a reserved
character in XML. Replace my_database with your database name. -->
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/gimnasioBackend</value>
</parameter>
</ResourceParams>
</Context>
</webapps>
I added this above configuration to Tomcat, but still not able to connect. I'm starting to get a little desperate about this issue.
Extracted from the stacktrace;
Missing type or column for column[descripciono_descripciones] on domain[Ejercicios]
If the column name does not match with the convention used for camelCase to underscore format then one would normally get a MappingException
from Hibernate. If that is the case then the mapping has to be done manully in the mappings
section by using column:
For example, airportCode column: 'AIRPORT_CD'
Fixing that would fix the deployment issue as well (considering there is no other road block).
After a week struggling with this issue, I found the solution, with the help of one of my colleagues, and Tomcat doc.
The config was made in the context.xml file, as follows:
<Resource name="jdbc/turismoBackend" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
username="youruser" password="yourpassword" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/yourdb"/>
It's worth notice that a different user from root has to be created in order for Tomcat to access MySQL, with all privileges and also grant option. Like this:
CREATE USER '[yourUsername]'@'localhost' IDENTIFIED BY '[yourPassword]';
GRANT ALL PRIVILEGES TO [yourUsername]@[yourServer] IDENTIFIED BY [yourPassword] WITH GRANT OPTION;
And that's it! Everything up and running.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.