[英]amazon aws ubuntu java mysql webservice “Error calling Driver#connect”
我们在tomcat 7 / java7 / hibernate / mysql5上运行了一些Web服务。 一切都在我的电脑上的localhost tomcat服务器上运行完美,但是当我们在AWS Ubuntu服务器上部署应用程序时,我们收到以下错误消息:
2014年3月25日下午9:59:52 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl配置WARN:HHH000402:使用Hibernate内置连接池(不供生产使用!)2014年3月25日9:59: 52 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO:HHH000401:在URL [jdbc:mysql:// ec2-54-197-214-209]使用驱动程序[com.mysql.jdbc.Driver]。 compute-1.amazonaws.com:3306/ChronoMetriq] 2014年3月25日下午9:59:52 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO:HHH000046:连接属性:{user = root,password = **} Mar 25,2014 9:59:52 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO:HHH000006:Autocommit mode:false Mar 25,2014 9:59:52 PM org.hibernate.engine .jdbc.connections.internal.DriverManagerConnectionProviderImpl配置INFO:HHH000115:Hibernate连接池大小:10(min = 1)创建Sess时出错 ionFactory:**错误调用驱动程序#connect null 2014年3月25日下午9:59:52 com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException严重:无法将RuntimeException映射到响应,重新抛向HTTP位于sun.reflect.NativeMethodAccessorImpl.invoke的Sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)中的ca.chronometriq.webterm.restapi.Process.getQueueName(Process.java:132)上的容器java.lang.NullPointerException (NativeMethodAccessorImpl.java: 57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:606)at com.sun.jersey.spi.container.JavaMethodInvokerFactory $ 1.invoke( JavaMethodInvokerFactory.java:60)at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider $ TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)at com.sun.jersey.server.impl.model.method。 dispatch.ResourceJavaMethodDispatcher.dispatch(资源 JavaMethodDispatcher.java:75)at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(右侧HandPathRule.java:147)com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(右侧HandPathRule.java:147)com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl。 java:1469)at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java) :416)com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)at at位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)的javax.servlet.http.HttpServlet.service(HttpServlet.java:728)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain。 java:210)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)org.apache.catalina.authenticator .AuthenticatorBase.invoke(AuthenticatorBase.java:502)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)atg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)at Org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)org.apache.catalina.core.StandardEngineValve.in vg(StandardEngineValve.java:118)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1024)atg.apache .coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589)atg.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1686)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:744)
这是我的hibernate.cfg.xml文件内容:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://myaddress.compute-1.amazonaws.com:3306/ChronoMetriq</property>
<property name="hibernate.connection.release_mode">auto</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">********</property>
<property name="hibernate.connection.pool_size">10</property>
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="show_sql">true</property>
<mapping class="ca.chronometriq.webterm.model.Clinic" />
...
</session-factory>
</hibernate-configuration>
这是我们的会话工厂代码:
public class DataObjectFactory {
@SuppressWarnings({ "rawtypes" })
private static final ThreadLocal threadLocal = new ThreadLocal();
private static ServiceRegistry serviceRegistry;
private static SessionFactory sessionFactory;
private static Configuration configuration;
private static final Logger logger = Logger.getLogger(DataAccessInterface.class.getName());
static {
try {
configuration = new Configuration().addResource("hibernate.cfg.xml");
configuration.configure();
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
System.err.println("Failed to create sessionFactory object." + e);
}
}
private DataObjectFactory(){
}
@SuppressWarnings("unchecked")
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession() : null;
threadLocal.set(session);
}
return session;
}
public static void rebuildSessionFactory() {
try {
configuration = new Configuration().addResource("hibernate.cfg.xml");
configuration.configure();
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (HibernateException e) {
System.err.println("Error Creating SessionFactory: " + e.getMessage());
}
}
@SuppressWarnings("unchecked")
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.flush();
session.close();
}
}
public static SessionFactory getSessionFactory() {
configuration = new Configuration().addResource("hibernate.cfg.xml");
configuration.configure();
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
return sessionFactory;
}
public static Configuration getConfiguration() {
return configuration;
}
public static void closeRegistry() throws Exception{
if(serviceRegistry!= null) {
StandardServiceRegistryBuilder.destroy(serviceRegistry);
}
}
}
知道为什么会这样吗?
' 调用Driver#connect时出错通常是Tomcat无法访问您的数据库时出现的错误。 这可能是因为您提供了错误的用户名/密码组合,或者因为您的数据库(或那种情况下的亚马逊)可能阻止了与源IP的连接。
我建议您从发出请求的位置找到源IP和端口,并将其添加到mysql中的用户权限。 使用IP授予“root”用户的所有权限。
您可以致电:
授予所有特权。 ''''''''''''''''''''''''''''''''''''''''''''''''''''''
其中xxxx是源IP(如果mysql和tomcat在同一台服务器上,并且它是Amazon EC2实例,请确保使用您的EC2实例的私有IP以及私有DNS(如ip-xxxx)执行该查询。 ec2.internal)。
最后,MySQL数据库中的授权用户应该是来自主机的“root”:127.0.0.1 / localhost / :: 1 /您的EC2私有IP /您的EC2私有DNS(以及其他外部IP,如果您打算从中调用它)在localhost之外)。
希望能帮助到你。 马克斯
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.