当前位置: 代码迷 >> java >> 将Postgresql数据库连接到在Tomcat上运行的应用程序时出现问题
  详细解决方案

将Postgresql数据库连接到在Tomcat上运行的应用程序时出现问题

热度:59   发布时间:2023-07-27 09:19:52.0

我向你解释我的问题。 我尝试使用netbeans和tomcat创建一个Web应用程序。 我已经创建了为后端提供服务的应用程序的后端。 后端通过使用eclipseLink(JPA 2.1)的持久性单元连接到postgresql db并管理实体。 我使用每个组件的最新版本。

现在,我想在前端使用这些服务,因此我在项目中包含了后端的.jar。 问题在于tomcat与数据库之间的连接。 经过许多小时的研究,我来到了这些配置文件:

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<servlet>
    <servlet-name>controleurMaintenance</servlet-name>
    <servlet-class>controleur.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>controleurMaintenance</servlet-name>
    <url-pattern>/controleurMaintenance</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
<welcome-file-list>
    <welcome-file>connection.html</welcome-file>
</welcome-file-list>
<resource-ref>
    <res-ref-name>java:jdbc/maintenanceDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</web-app>

context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="jdbc/Maintenance_webInterface">
<Resource auth="Container" name="java:comp/env/jdbc/maintenanceDB"               type="javax.sql.DataSource" user="paul" password="1234" driverClassName="org.postgresql.Driver"    url="jdbc:postgresql://localhost:5432/Maintenance_db" maxActive="20" schema="public" maxIdle="2" maxAwaits="-1" validationQuery="select true;"/>
</Context>

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="MaintenancePU" transaction-type="JTA">
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>java:comp/env/jdbc/MaintenanceDB</jta-data-source>
    <properties>
      <property name="javax.persistence.schema-generation.database.action"     value="create"/>
    </properties>
  </persistence-unit>
</persistence>

简而言之,我尝试将其视为数据源。 我没有碰过server.xml。 我得到了javax.naming.NameNotFoundException:名称jdbc / MaintenanceDB没有链接到此上下文。 例外因我所做的更改而异。 有时似乎找到了数据库,但是查询失败。

任何帮助将不胜感激。 非常感谢,如果您需要更多信息,请询问。

请尝试在您的context.xml文件中关注以下内容

<Resource auth="Container" driverClassName="org.postgresql.Driver" maxActive="20" maxIdle="2" maxWait="-1"
              name="/maintenanceDB" password="1234" removeAbandoned="true" removeAbandonedTimeout="20"
              type="javax.sql.DataSource" url="jdbc:postgresql://localhost:5432/Maintenance_db" username="paul"
              validationQuery="select true;"/> 

干杯安南

与此结合的是绑定JNDI数据源的另一种方法

try {
            // Create initial context
            System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
                    "org.apache.naming.java.javaURLContextFactory");
            System.setProperty(Context.URL_PKG_PREFIXES,
                    "org.apache.naming");
            InitialContext ic = new InitialContext();

            ic.createSubcontext("java:");
            ic.createSubcontext("java:comp");
            ic.createSubcontext("java:comp/env");

            // Construct DataSource for staging
            // Construct DataSource for wfms
            PGSimpleDataSource ds = new PGSimpleDataSource();
            ds.setUrl("jdbc:postgresql://localhost:5432/maintenanceDB");//you might get this from context
            ds.setUser("paul");//you might get this from context
            ds.setPassword("1234");//you might get this from context

            ic.bind("java:comp/env/maintenanceDB", wfmsds);

        } catch (NamingException ex) {
            ex.printStackTrace();
        }

可能想在servlet init()中添加此函数;

谢谢阿南特

  相关解决方案