OpenShift、Tomcat7和JDBC领域

OpenShift、Tomcat7和JDBC领域,tomcat,jdbc,openshift,jdbcrealm,Tomcat,Jdbc,Openshift,Jdbcrealm,我正在尝试将基于JaveeeTomcat7的应用程序部署到OpenShift。整个配置基于Tomcat7(JBoss EWS 2.0)catridge。到目前为止,我已经在本地开发了我的应用程序,包括基于JDBCRealm的用户身份验证,所有这些都运行良好 项目规范,pom.xml附在文章末尾: 完全基于maven tomcat通过artifactorg.apache.tomcat.maven使用 但现在我需要让我的应用程序在web上可用,所以我决定去OpenShift,在那里我创建了Tom

我正在尝试将基于JaveeeTomcat7的应用程序部署到OpenShift。整个配置基于Tomcat7(JBoss EWS 2.0)catridge。到目前为止,我已经在本地开发了我的应用程序,包括基于JDBCRealm的用户身份验证,所有这些都运行良好

项目规范,pom.xml附在文章末尾:

  • 完全基于maven
  • tomcat通过artifactorg.apache.tomcat.maven使用
但现在我需要让我的应用程序在web上可用,所以我决定去OpenShift,在那里我创建了Tomcat7应用程序(也是基于maven的)。部署是成功的,但我现在在本地工作的JDBCRealm上遇到了问题。问题是tomcat无法找到MySQL驱动程序来打开领域连接。我已经用org.apache.tomcat.maven解决了这个问题,方法是指定context.xml并添加mysql依赖项。然而,maven-war插件似乎没有注入依赖项的选项。所以我被这样的错误绊住了:

mar 30, 2013 8:59:08 AM org.apache.catalina.realm.JDBCRealm authenticate
SEVERE: Exception performing authentication
java.sql.SQLException: com.mysql.jdbc.Driver
    at org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:706)
    at org.apache.catalina.realm.JDBCRealm.authenticate(JDBCRealm.java:352)
    at org.apache.catalina.authenticator.BasicAuthenticator.authenticate(BasicAuthenticator.java:158)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:544)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    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:722)
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:188)
    at org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:702)
    ... 14 more
像这样的pom.xml不起作用:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>majekwms</groupId>
    <artifactId>majekwms</artifactId>
    <packaging>war</packaging>
    <version>1.0</version>
    <name>majekwms</name>

    <developers>
        <developer>
            <id>kornicameister</id>
            <email>kornicameister@gmail.com</email>
            <name>Tomasz Trębski</name>
        </developer>
    </developers>

    <repositories>
        <repository>
            <id>eap</id>
            <url>http://maven.repository.redhat.com/techpreview/all</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>eap</id>
            <url>http://maven.repository.redhat.com/techpreview/all</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
    <properties>
        <maven.compiler.source>1.6</maven.compiler.source>
        <maven.compiler.target>1.6</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <json-simple.version>1.1.1</json-simple.version>

        <jdk.version>1.7</jdk.version>
        <log4j.version>1.2.17</log4j.version>
        <mysql.version>5.1.9</mysql.version>
        <tomcat.maven.version>2.0</tomcat.maven.version>
        <maven.compiler.version>3.0</maven.compiler.version>
        <junit.version>4.11</junit.version>
        <hibernate.version>4.2.0.CR1</hibernate.version>
        <hibernate-annotations.version>3.5.6-Final</hibernate-annotations.version>
        <hibernate-common-annotations.version>3.3.0.ga</hibernate-common-annotations.version>
        <gson.version>2.2.2</gson.version>
        <slf4j-log4j12.version>1.7.2</slf4j-log4j12.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.jboss.spec</groupId>
            <artifactId>jboss-javaee-6.0</artifactId>
            <version>3.0.0.Final-redhat-1</version>
            <type>pom</type>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j-log4j12.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>

        <!--json-->
        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>${json-simple.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>${gson.version}</version>
        </dependency>
        <!--json-->

        <!--hibernate-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-annotations</artifactId>
            <version>${hibernate-annotations.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0.2</version>
        </dependency>
        <!--hibernate-->

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-servlet-api</artifactId>
            <version>7.0.21</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <!-- When built in OpenShift the 'openshift' profile will be used when
                invoking mvn. -->
            <!-- Use this profile for any OpenShift specific customization your app
                will need. -->
            <!-- By default that is to put the resulting archive into the 'webapps'
                folder. -->
            <!-- http://maven.apache.org/guides/mini/guide-building-for-different-environments.html -->
            <id>openshift</id>
            <build>
                <finalName>majekwms</finalName>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>${maven.compiler.version}</version>
                        <configuration>
                            <source>${jdk.version}</source>
                            <target>${jdk.version}</target>
                            <encoding>${project.build.sourceEncoding}</encoding>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.tomcat.maven</groupId>
                        <artifactId>tomcat7-maven-plugin</artifactId>
                        <version>${tomcat.maven.version}</version>
                        <configuration>
                            <url>http://127.6.35.1:8080/MajekWMS/</url>
                            <mode>both</mode>
                            <path>/MajekWMS</path>
                            <uriEncoding>UTF-8</uriEncoding>
                            <contextReloadable>true</contextReloadable>
                            <contextFile>src/main/tomcat/context.xml</contextFile>
                        </configuration>
                        <dependencies>
                            <dependency>
                                <groupId>mysql</groupId>
                                <artifactId>mysql-connector-java</artifactId>
                                <version>${mysql.version}</version>
                            </dependency>
                        </dependencies>
                    </plugin>
                    <plugin>
                        <artifactId>maven-war-plugin</artifactId>
                        <version>2.1.1</version>
                        <configuration>
                            <attachClasses>true</attachClasses>
                            <classesClassifier>classes</classesClassifier>
                            <containerConfigXML>src/main/tomcat/context.xml</containerConfigXML>
                            <outputDirectory>webapps</outputDirectory>
                            <warName>ROOT</warName>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

4.0.0
majekwms
majekwms
战争
1
majekwms
科尔尼卡梅斯特酒店
kornicameister@gmail.com
托马斯特鲁布斯基
eap
http://maven.repository.redhat.com/techpreview/all
真的
真的
eap
http://maven.repository.redhat.com/techpreview/all
真的
真的
1.6
1.6
UTF-8
1.1.1
1.7
1.2.17
5.1.9
2
3
4.11
4.2.0.CR1
3.5.6-最终版本
3.3.0.ga
2.2.2
1.7.2
org.jboss.spec
jboss-javaee-6.0
3.0.0.Final-redhat-1
聚甲醛
假如
朱尼特
朱尼特
${junit.version}
log4j
log4j
${log4j.version}
org.slf4j
slf4j-log4j12
${slf4j-log4j12.version}
mysql
mysql连接器java
${mysql.version}
com.googlecode.json-simple
简单json
${json simple.version}
com.google.code.gson
格森
${gson.version}
org.hibernate
冬眠核心
${hibernate.version}
org.hibernate
休眠实体管理器
${hibernate.version}
org.hibernate
休眠ehcache
${hibernate.version}
org.hibernate
休眠注释
${hibernate annotations.version}
org.hibernate
hibernate-c3p0
${hibernate.version}
javax.persistence
持久性api
1.0.2
javax.servlet
javax.servlet-api
3.0.1
假如
javax.servlet.jsp
javax.servlet.jsp-api
2.2.1
假如
javax.servlet
jstl
1.2
假如
org.apache.tomcat
TomcatServletAPI
7.0.21
假如
openshift
majekwms
org.apache.maven.plugins
maven编译器插件
${maven.compiler.version}
${jdk.version}
${jdk.version}
${project.build.sourceEncoding}
org.apache.tomcat.maven
tomcat7 maven插件
${tomcat.maven.version}
http://127.6.35.1:8080/MajekWMS/
二者都
/MajekWMS
UTF-8
真的
src/main/tomcat/context.xml
mysql
mysql连接器java
${mysql.version}
maven战争插件
2.1.1
真的
班级
src/main/tomcat/context.xml
网络应用
根
当然还有my context.xml,它似乎被检测到,tomcat试图从中读取配置,但由于缺少mysql驱动程序,它会失败,并出现SQLException:

<?xml version="1.0" encoding="UTF-8"?>
<Context
        className="org.apache.catalina.core.StandardContext"
        reloadable="true"
        antiJARLocking="true"
        swallowOutput="true">
    <Realm connectionName="user_name_here"
           connectionPassword="pass_here"
           connectionURL="jdbc:mysql://localhost:3306/majekwms?useUnicode=true&amp;characterEncoding=utf8"
           roleNameCol="role"
           userCredCol="secPassword"
           userNameCol="login"
           userRoleTable="userRole"
           userTable="user"
           driverName="com.mysql.jdbc.Driver"
           digest="md5"
           className="org.apache.catalina.realm.JDBCRealm"/>
</Context>

感谢您在我们的论坛上发布:

这里有一个论坛主题:


你能看一下它,看看是否有用吗?然后,如果您仍然无法连接,请通知我们。

鉴于在openshift中您只能部署一个Web应用程序,您必须编辑globalcontext.xml