【问题标题】:Uploading Webapp to CloudBees将 Webapp 上传到 CloudBees
【发布时间】:2014-01-09 14:42:16
【问题描述】:

我正在尝试将我的 web 应用程序和数据库上传到 CloudBees,但我的数据库似乎没有响应应用程序。我关注this 视频上传我的数据库和this 视频上传我的网络应用程序。但是还是不行。

更新我发现了这个堆栈跟踪:

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL 'ec2-23-21-211-172.compute-1.amazonaws.com'
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
    at com.neu.als.thesis.utilities.DefaultValuesUtility.getQuestionsCount(DefaultValuesUtility.java:2069)
    at com.neu.als.thesis.utilities.DefaultValuesUtility.checkDataBase(DefaultValuesUtility.java:2240)
    at com.neu.als.thesis.web.controllers.DefaultController.index(DefaultController.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:444)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:432)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:946)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:837)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:822)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:680)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: No suitable driver
    at java.sql.DriverManager.getDriver(Unknown Source)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437)
    ... 38 more

这是我在 CloudBees 中的应用配置:

这是我在 CloudBees 中的数据库配置:

我的web.xml

<!-- Database resources -->
<resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/testd</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>

我的context.xml

<Context>
  <Loader delegate="true" />
  <Resource name="jdbc/testd" auth="Container" type="javax.sql.DataSource" 
    maxActive="100" maxIdle="30" maxWait="10000" 
    username="testus" password="password"
    url="ec2-23-21-211-172.compute-1.amazonaws.com"
    driverClassName="com.mysql.jdbc.Driver" />
</Context>

我的数据库连接类:

public final class DatabaseCommunication
{
    public static DatabaseCommunication getInstance()
    {
        return DatabaseCommunicationHolder.INSTANCE;
    }

    /**
     * private declaration of dataSource variable to avoid instanciation
     */
    private DataSource dataSource;

    /**
     * @return returns data source instance
     */
    public synchronized DataSource getDataSource() throws NamingException
    {
        if( dataSource == null )
        {
            InitialContext cxt = new InitialContext();
            dataSource = ( DataSource ) cxt.lookup( "java:/comp/env/jdbc/testd" );
        }
        return dataSource;
    }

    private static class DatabaseCommunicationHolder
    {
        /**
         * instanciates DatabaseCommunication
         */
        public static final DatabaseCommunication INSTANCE = new DatabaseCommunication();
    }
}

我在工作台中的设置:

密码是:password

我使用这个命令绑定了我的数据库:

在我的本地,我能够从我的数据库登录帐户。但我不知道为什么在 CloudBees 中没有。 bees app:bind -db testd -a demoproject -as testd

请帮帮我。

【问题讨论】:

    标签: jsp spring-mvc cloudbees


    【解决方案1】:

    好吧,我更愿意在你的 datasource.xml 文件上使用 JNDI 进行绑定

    <jee:jndi-lookup id="dataSource" jndi-name="jdbc/testdb" resource-ref="true"/>
    

    您可以尝试不在 context.xml 文件中声明数据源。取而代之的是,您将通过 CloudBees SDK 使用 app:bind 命令自动注入它。这样您就可以确保正确声明了数据源。

    然后您应该删除 context.xml 文件的这一部分

    <Resource name="jdbc/testd" auth="Container" type="javax.sql.DataSource" 
    maxActive="100" maxIdle="30" maxWait="10000" 
    username="testus" password="password"
    url="ec2-23-21-211-172.compute-1.amazonaws.com"
    driverClassName="com.mysql.jdbc.Driver" />
    

    所以,它应该是这样的:

        <Context>
          <Loader delegate="true" />
        </Context>
    

    【讨论】:

    • 关于您给出的第一个选项,我应该在哪里放置该代码,我应该在我的 web.xml 中进行任何更改吗?关于第二个选项,如果我删除该代码,我应该将删除的代码放在哪里?据我了解,代码定义了数据库。对不起这个菜鸟评论。
    • 对于第一个选项,您在此 ClickStart 上有一个示例 (github.com/CloudBees-community/spring-petclinic-clickstart/blob/…) 请不要使用 Spring 配置文件 (),因为您必须进行更多更改如果您使用它,则在 CloudBees 方面。对于第二个,您不必将此代码放在任何地方,因为当您启动 bees app:bind 命令时,CloudBees 会自动将其注入容器中。
    • 实际示例:developer-blog.cloudbees.com/2013/10/… 我正在编写一个简单的代码,但我没有完成。
    • 我的web.xml 呢? &lt;res-ref-name&gt;jdbc/testd&lt;/res-ref-name&gt;我也应该删除它吗?
    【解决方案2】:

    资源 URL 必须是 JDBC url jdbc:mysql:ec2-23-21-211-172.compute-1.amazonaws.com:3306/database,而不仅仅是服务器主机名

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 2018-01-21
      相关资源
      最近更新 更多