这是我在该论坛上遇到的第一个问题,希望您能理解我的问题!

我的问题是在Glassfish中部署应用程序时出现的。

我一直在开发Web应用程序,并且必须访问两个不同的数据库,一个derby数据库和一个mysql数据库。
从NetBeans IDE 7.4开发时,没有问题,我使用SessionBean来访问两个数据库,并且配置连接太容易了。
我在构造函数中写的

Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
    connectionSoria=DriverManager.getConnection("jdbc:derby://localhost:1527/WEBAPP-Soria","App","App");
    Class.forName("com.mysql.jdbc.Driver").newInstance();
  connectionTeruel=DriverManager.getConnection("jdbc:mysql://localhost:3306/webapp_teruel","root","root");


一切正常。

问题是我建造的时候。战争,我试图将其部署在没有NetBeans的另一台计算机上。
我成功地部署了它,但是当我访问该应用程序时,它要求我输入用户名和密码,然后将它们都写出来,然后按登录键,似乎没有与任何数据库建立连接。
我进行了搜索,发现当我从Glassfish的bin目录中的asadmin部署应用程序时,不得不改变连接数据库的方式。

我在Bean的构造函数中编写的用于连接数据库的内容是这样的:

ctx1 = new InitialContext();
            ds1 = (DataSource)ctx1.lookup("jdbc/WEBAPP-Soria");
            ds2 = (DataSource)ctx1.lookup("jdbc/WEBAPP_Teruel");

            connectionSoria=ds1.getConnection();
            connectionTeruel=ds2.getConnection();


然后我在玻璃鱼上添加了两个资源

C:\glassfishv3\asadmin
asadmin> start-domain
asadmin> deploy E:\AppV2.war
asadmin> add-resources E:\resources.xml
asadmin> restart-domain


resources.xml的内容是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
<jdbc-resource enabled="true" jndi-name="jdbc/WEBAPP-Soria" object-type="user" pool-name="WEBAPP-Soria">
<description/>
</jdbc-resource>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="org.apache.derby.jdbc.ClientDriver" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="WEBAPP-Soria" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="port" value="1527"/>
<property name="databaseName" value="WEBAPP-Soria"/>
<property name="serverName" value="localhost"/>
<property name="url" value="jdbc:derby://localhost:1527/WEBAPP-Soria"/>
<property name="user" value="App"/>
<property name="password" value="App"/>
</jdbc-connection-pool>
<jdbc-resource enabled="true" jndi-name="jdbc/WEBAPP_Teruel" object-type="user" pool-name="WEBAPP_Teruel">
<description/>
</jdbc-resource>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.Driver" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="WEBAPP_Teruel" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="port" value="3306"/>
<property name="databaseName" value="WEBAPP_Teruel"/>
<property name="serverName" value="localhost"/>
<property name="url" value="jdbc:mysql://localhost:3306/WEBAPP_Teruel"/>
<property name="user" value="root"/>
<property name="password" value="root"/>
</jdbc-connection-pool>
</resources>


无论如何,它不起作用,我想我应该将这个resources.xml添加到目录WEB-INF中,作为glassfish-resources.xml,但我也不知道是否也可以。

你们建议我该怎么办?
在此先多谢!

最佳答案

由于您的应用程序指定

jdbc:derby://localhost:1527/WEBAPP-Soria


作为其JDBC连接URL,它希望连接到与您的应用程序位于同一台计算机(“ localhost”)上的Derby Network Server实例。

因此,在部署应用程序时,还需要部署Derby Network Server。

或者,如果您打算在多台计算机上部署应用程序,然后将它们全部连接到Derby Network Server的同一实例,则需要指定该单个共享实例的主机名或IP地址,而不是“ localhost” ”(并确保您的网络允许建立这些连接)。

10-07 19:09
查看更多