2010-12-10 71 views
1

J'ai créé une page à l'aide d'entretoises. En cours d'exécution sur localhost (glassfish), cela fonctionne bien. Toutefois, lorsque je copie le fichier WAR sur un serveur distant et exécute l'application à partir de ce formulaire de connexion ne fonctionne pas. Cela signifie que quelque chose ne va pas lors de la connexion sur la base de données mysql.MySql ne fonctionne pas à partir de l'application Web Java déployée

Comment pourrais-je résoudre ce problème?

extrait de code:

Connection conn = null; 
    Statement stmt = null; 
    try{ 
     InitialContext ctx = new InitialContext(); 
     DataSource ds = (DataSource)ctx.lookup("jdbc/SB"); 


     conn = ds.getConnection(); 
     stmt = conn.createStatement(); 
     ResultSet rs = null; 
     if(stmt.execute("SELECT * FROM users WHERE username='"+loginform.getUsername()+"' AND geslo=MD5('"+loginform.getPassword()+"') LIMIT 1;")) 
     { 
    rs = stmt.getResultSet(); 
     } 

     rs.next(); 

Malheureusement je ne peux pas lire à partir de la console du serveur. Que dois-je faire d'autre pour voir l'exception (enregistrement à distance?)?

Merci pour vos réponses.

MISE À JOUR: - À la fois localement et à distance GlassFish 3.0.1 est en cours d'exécution. - Mon environnement de travail est NetBeans 6.9.1. - Le déploiement local se fait simplement dans NetBeans. Je clique juste sur le nom du projet et clique sur publier. Pour le déploiement à distance, admin m'a donné accès au serveur FTP où je viens de copier le fichier WAR. - Le serveur MySQL est situé ailleurs. Le fait est qu'il est accessible depuis l'application web localhost mais pas depuis la même application web distante.

+0

utilisez un tas de débogueurs bon marché à chaque point du programme. voir ce qui ne s'écrit pas à l'écran ... vieille école mais fonctionne. – johnny

+0

@johnny - * "Malheureusement, je ne peux pas lire depuis la console du serveur." *. –

+0

Vous pouvez avoir une meilleure réponse en ajoutant plus de détails à votre question. Quelle version de GlassFish exécutez-vous localement? Quelle version est la version à distance ou GlassFish? Comment déployez-vous l'application sur votre machine locale? Comment déployez-vous l'application sur la machine distante? Qu'est-ce que votre administrateur vous a dit de faire pour déployer votre application? En incluant plus de détails, les gens seront en mesure de comprendre votre environnement particulier et d'adapter une réponse pour vous, ce qui vous évitera d'avoir à suivre un tas de fausses pistes. – vkraemer

Répondre

1

en supposant que vous avez des droits d'administrateur sur le serveur distant, vous devez

  1. Vérifiez que la source de données "jdbc/SB" existe.(Ressources/Ressources JDBC/JDBC)
  2. Vérifiez que le "nom_pool" dans les données existe (ressources/JDBC/Pools de connexion)
  3. Ouvrez le pool de connexion approprié et cliquez sur le bouton "ping".
  4. Si le ping échoue, vérifiez les paramètres de connexion sous l'onglet Propriétés supplémentaires.

Il pourrait également y avoir une douzaine d'autres problèmes. Vous avez vraiment besoin d'accéder au journal du serveur pour voir quelle est l'exception spécifique. Il est peu probable que ce soit votre code et il est plus probable que le serveur distant manque de la dépendance du pilote ou ne soit pas correctement configuré (le pool de connexion une source de données)

+0

Ceci est mon exception (il suffit de l'obtenir du journal): [javax.naming.NamingException] La recherche a échoué pour 'jdbc/SB' dans SerialContext javax.naming.NamingException: La recherche a échoué pour 'jdbc/SB' dans SerialContext [Root exception est javax.naming.NameNotFoundException: SB non trouvé]. Je suppose que je dois dire à admin de créer une source de données et un pool pour moi. Ou puis-je faire quelque chose sans demander à l'administrateur de le faire? – Aliens

+0

@Aliens - Vous devrez demander à l'administrateur de mettre cela en place pour vous. Puisque vous utilisez NB, il est probable que vous ayez un fichier dans votre projet $ PROJECT_ROOT/setup/sun-resources.xml. Vous pouvez donner ce fichier à votre administrateur et lui demander d'utiliser les ressources additionnelles d'asadmin http://docs.sun.com/app/docs/doc/821-1758/add-resources-1?l=fr&a=view pour s'inscrire vos ressources. – vkraemer

+0

J'ai envoyé le fichier admin xml que vous avez suggéré et il a suivi votre conseil. La connexion à la base de données fonctionne enfin. Merci. – Aliens

0

Quelques idées sont
- Log fichier au lieu de la console
- journal d'impression sur votre struts la page
- peut-être vous n'avez pas des subventions ou un problème de pare-feu pour accéder DB

+0

Je ne suis pas sûr de pouvoir accéder aux fichiers journaux sur un serveur Glassfish distant. Admin m'a seulement donné la possibilité de télécharger mon projet sur le serveur. – Aliens

0

Je serais prêt à parier que Vous n'avez pas le droit d'accéder à la base de données ...

Essayez ceci comme un test ... installez le client MySQL sur une autre machine, puis connectez-vous au serveur MySQL à partir de là.

Si cela échoue alors:

Dites que vous n'êtes pas connecté avec: utilisateur: Test Mot de passe: Mot de passe

Ensuite, ouvrez le client Mysql et entrez:

use nameOfDatabase; 
GRANT ALL ON nameofDatabase.* TO 'userName'@'ipaddressOfServerOrDNSName'; 

Cela devrait le faire .

Il existe d'autres façons de donner accès voir http://dev.mysql.com/doc/refman/5.1/en/grant.html

+0

Le client MySql sur ma machine se connecte avec succès à une base de données et sélectionne, met à jour, insère. Le problème est uniquement lorsque le client MySQL est en cours d'exécution sur le serveur distant. J'ai essayé d'écrire l'instruction GRANT ALL mais j'ai le code d'erreur 1044, ce qui signifie que je n'ai pas accès pour modifier les droits. Je devrais contacter l'administrateur pour cela. – Aliens

+0

Notez la deuxième partie du GRANT: une adresse IP. Tout ce que votre succès suggère est que votre machine a probablement été ACCÈS GRANT, mais pas le serveur distant. – duffymo

0

Êtes-vous sûr que votre base de données est configuré correctement sur votre serveur distant? Cela ressemble peut-être à un problème de pare-feu.

+0

Je peux accéder à la base de données de mes applications localhost sans problème. Donc, ça ne devrait pas être la base de données. – Aliens

0

Malheureusement, je ne peux pas lire à partir de la console du serveur.

Si vous avez un accès shell au serveur distant, la solution est simple:

  • Modifier les configs de journalisation afin que vos journaux webapp dans un fichier au lieu de/ainsi que la console.
  • Connectez-vous et lisez le fichier.

(En effet, si vous utilisez Tomcat, écrit des choses à System.out/System.err est écrit dans un fichier de toute façon. Peut-être que cela est vrai pour Glassfish aussi.)

Si vous n'êtes pas avoir un accès shell, vous devrez peut-être modifier votre webapp pour fournir une page supplémentaire qui peut être utilisée pour télécharger ou afficher le fichier journal à partir de votre navigateur Web. Si vous devez recourir à cela, faites attention aux problèmes de sécurité évidents.

0

Ceci est mon weg (conjecture aux yeux sauvages) ....

Votre serveur d'applications local a le pilote installé MySql. La ressource JDBC est également définie correctement. Le serveur MySql est probablement en cours d'exécution sur votre hôte local. Vous avez développé votre application localement dans NetBeans.

Lorsque vous déployez une application à partir de NetBeans sur un serveur local, l'EDI vérifie que le pilote DB est installé sur le serveur. NetBeans ne peut pas faire cela lorsque vous déployez sur un hôte distant. Si vous utilisez une autre méthode de déploiement, l'installation du pilote n'est pas automagique. C'est une étape facile à oublier.

Vous pouvez savoir si le lecteur MySQL est installé sur votre serveur en écrivant une application Web qui tente de charger ou d'utiliser l'une des classes du fichier jar du pilote. Si l'accès génère une exception, vous pouvez probablement obtenir quelque chose qui fonctionne en incluant le lecteur MySql dans WEB-INF/lib de votre webapp. NetBeans aide également les gens à créer et à gérer leurs définitions de ressources JDBC. Si vous créez une application qui cible une base de données sur votre hôte local, la ressource JDBC aura localhost dans l'URL. Cela fonctionnera très bien lorsque l'application est déployée sur le même serveur que le serveur de base de données. Si l'application est déplacée vers un autre serveur, la ressource JDBC doit être modifiée pour tenir compte de la possibilité que le serveur de base de données ne soit pas sur l'hôte local.

Si vous ne disposez pas d'un accès administrateur au serveur distant, vous aurez des difficultés à définir les ressources. Si votre serveur distant était un domaine/une instance GlassFish 3.1, vous pouvez tirer parti de application scoped resources pour obtenir les ressources définies pour votre application.

En ce qui concerne l'accès au fichier journal.

Si vous utilisez asadmin pour le déploiement sur le serveur distant, cette commande vous aidera à accéder au journal du serveur si vous utilisez GlassFish v2.x: http://docs.sun.com/app/docs/doc/821-0179/display-log-records-1?l=en&a=view. Vous pouvez également accéder au journal via la console d'administration.

Si vous utilisez rcp pour déployer votre application, en la copiant dans le répertoire autodeploy du serveur distant, vous souhaiterez peut-être voir si vous pouvez copier le journal sur votre ordinateur local.

Par exemple ... si votre administrateur vous a dit de déployer à l'aide d'une commande ftp comme ceci:

ftp> cd /a/b/glassfish/domains/domain1/autodeploy 
ftp> put MyGreatWebapp.war 

vous pourriez être en mesure d'obtenir le journal en faisant quelque chose comme ceci:

ftp> cd /a/b/glassfish/domains/domain1/logs 
ftp> get server.log 

expérience ....

+0

Merci pour vos suggestions. – Aliens