这是我在这个论坛上的第一个问题,所以我希望你理解我的问题!
在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的另一台计算机上部署它。 我成功部署了它,但当我访问应用程序时,它会询问我的用户名和密码,我写了两个,按登录,它似乎没有连接任何数据库。 我搜索了一下,然后我不得不改变我连接到数据库的方式,因为我正在从Glassad的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();
我用
向glasssfish添加了两个资源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,但我不知道这是否也可以。
你们有什么建议我应该做什么? 非常感谢提前!
答案 0 :(得分:0)
由于您的应用程序指定了
jdbc:derby://localhost:1527/WEBAPP-Soria
作为其JDBC连接URL,它希望连接到同一台机器上的Derby Network Server实例(&#34; localhost&#34;)作为您的应用程序。
因此,在部署应用程序时,您还需要部署Derby Network Server。
或者,如果您的目的是在多台计算机上部署应用程序,然后让它们全部连接到Derby Network Server的同一实例,那么您需要指定该单个共享实例的主机名或IP地址代替&#34; localhost&#34; (并确保您的网络允许进行这些连接。)