问题描述
我向你解释我的问题。 我尝试使用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没有链接到此上下文。 例外因我所做的更改而异。 有时似乎找到了数据库,但是查询失败。
任何帮助将不胜感激。 非常感谢,如果您需要更多信息,请询问。
1楼
请尝试在您的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()中添加此函数;
谢谢阿南特