Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1374 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  JNI Utiliser une connection Java dans une dll C/C++

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

JNI Utiliser une connection Java dans une dll C/C++

n°239195
El_gringo
Posté le 04-11-2002 à 13:59:27  profilanswer
 

Bon, pour des raisons que j'ai pas bien le temps d'expliquer, voila ce que j'aurais besoin defaire :
J'ai une appli Java qui à initialisé une connection JDBC.
Cette appli Java utilisera JNI pour déléguer une partie du boulot qu'elle a à faire à une DLL écrite en C. Cette dll C doit absolument aller chercher elle même des données dans une base de données. D'ou ma question :  
- Est-il possible de passer en paramètre l'objet de type java.sql.Connection représentant ma connection Java ? (logiquement, oui)
- Mais surtout, est ce que ça serait très lourd à gérer, nottament pour la récupération de données, comment exploiter un Statement, un ResultSet via JNI (dans la dll quoi !) ?
 
Je rêve là ou pas ? C possible ça ?

mood
Publicité
Posté le 04-11-2002 à 13:59:27  profilanswer
 

n°239197
darklord
You're welcome
Posté le 04-11-2002 à 14:01:47  profilanswer
 

et tu es sur que ca en vaut la peine?
 
Idée: modifier le programme C pour qu'il traite le resultset à ta place ... Mais bon pour la connection, ca m'étoonerait TRES fort. Et à y réfléchir c'est même impossible ...


Message édité par darklord le 04-11-2002 à 14:02:20

---------------
Just because you feel good does not make you right
n°239198
El_gringo
Posté le 04-11-2002 à 14:03:41  profilanswer
 

DarkLord a écrit a écrit :

et tu es sur que ca en vaut la peine?
 
Idée: modifier le programme C pour qu'il traite le resultset à ta place ... Mais bon pour la connection, ca m'étoonerait TRES fort. Et à y réfléchir c'est même impossible ...




 
Comment ça qu'il traite le ResultSet à ma place ?

n°239199
darklord
You're welcome
Posté le 04-11-2002 à 14:06:54  profilanswer
 

bin qu'il te renvoie des données formatées (un tableau de brol ou que sais je). Mais oublie pour ta connection hein :o Utiliser une connection (qui je le rappelle est dépendante du driver Java de ta DB) Java dans un prog C j'ai du mal à imaginer que ce soit possible ...


---------------
Just because you feel good does not make you right
n°239202
El_gringo
Posté le 04-11-2002 à 14:13:02  profilanswer
 

Ms le problème c'est que cette Dll existe déja. Elle est actuellement utilisée dans des programmes C++.
Le but serait que ma web-app utilise aussi cette dll.
Ms cette dll, dans son fonctionnement "normal" utilise une connection Odbc pour aller chercher toutes sortes d'infos en BD dont elle à besoin en interne pour pouvoir faire son job.
J'ai pas compris les raisons que tu donnes à propos de l'inutilisabilité d'un objet Connection java pour récupérer des données dans un prog C++ via JNI...

n°239205
darklord
You're welcome
Posté le 04-11-2002 à 14:19:12  profilanswer
 

bin Connection c'est une interface. Lorsque tu fais un forName de ton driver (oracle ou autre) il déclare l'api qui va etre utilsée pour accéder à la BD. Donc lorsque tu demandes une connection tu récupères une implémentation de Connection pour ta BD.  
 
Conceptuellement parlant, je vois mal (mais je peux me tromper) comment ce genre d'objet pourrait etre utilisable par ta DLL. J'ose imaginer que JNI s'occupe de transformer les objets Java en truc compréhensible par ta DLL C++ ou un mécanisme du genre ...
 
Mais bon une connection JDBC, j'ai plus qu'un doute


---------------
Just because you feel good does not make you right
n°239207
El_gringo
Posté le 04-11-2002 à 14:25:21  profilanswer
 

Moi j'imaginait que les objetc Java restaient les même de toute façon, et que JNI permettait juste de "piloter" un objet passé en paramètre, en permettant d'utiliser ses méthodes et attributs publics.
J'éspère que j'me trompe pas. Si c le cas, qqch est possible...

n°239215
BifaceMcLe​OD
The HighGlandeur
Posté le 04-11-2002 à 14:33:40  profilanswer
 

El_Gringo a écrit a écrit :

Bon, pour des raisons que j'ai pas bien le temps d'expliquer, voila ce que j'aurais besoin defaire :
J'ai une appli Java qui à initialisé une connection JDBC.
Cette appli Java utilisera JNI pour déléguer une partie du boulot qu'elle a à faire à une DLL écrite en C. Cette dll C doit absolument aller chercher elle même des données dans une base de données. D'ou ma question :  
- Est-il possible de passer en paramètre l'objet de type java.sql.Connection représentant ma connection Java ? (logiquement, oui)
- Mais surtout, est ce que ça serait très lourd à gérer, nottament pour la récupération de données, comment exploiter un Statement, un ResultSet via JNI (dans la dll quoi !) ?
 
Je rêve là ou pas ? C possible ça ?




La réponse est oui aux 2 questions. Le truc, c'est que tu vas vite trouver cela très lourd à programmer. Par exemple, si tu as un objet Connection et que tu veux exécuter la méthode Statement createStatement(int resultSetType, int resultSetConcurrency), tu dois écrire :

Code :
  1. jclass     connectionClass       = jniEnv->getObjectClass(connection);
  2. jmethodID  createStatementMethod = jniEnv->getMethodID(connectionClass, "createStatement", "(II)Ljava.sql.Statement;" );
  3. if (jniEnv->ExceptionOccurred()) {
  4.    // Erreur : quitter le JNI et laisser l'exception se propager.
  5.    return;
  6. }
  7. jobject  statement = jniEnv->CallObjectMethod(connection, createStatementMethod,
  8.                                               (jint) resultSetType, (jint) resultSetConcurrency);


n°239226
darklord
You're welcome
Posté le 04-11-2002 à 14:48:35  profilanswer
 

>>> Désolé d'avoir induit en erreur. Je suis vraiment étonné de ce que JNI est capable de faire (meme si c'est lourd) ...
 
 :jap:


---------------
Just because you feel good does not make you right
n°239230
El_gringo
Posté le 04-11-2002 à 14:55:29  profilanswer
 

BifaceMcLeOD a écrit a écrit :

 
La réponse est oui aux 2 questions. Le truc, c'est que tu vas vite trouver cela très lourd à programmer. Par exemple, si tu as un objet Connection et que tu veux exécuter la méthode Statement createStatement(int resultSetType, int resultSetConcurrency), tu dois écrire :

Code :
  1. jclass     connectionClass       = jniEnv->getObjectClass(connection);
  2. jmethodID  createStatementMethod = jniEnv->getMethodID(connectionClass, "createStatement", "(II)Ljava.sql.Statement;" );
  3. if (jniEnv->ExceptionOccurred()) {
  4.    // Erreur : quitter le JNI et laisser l'exception se propager.
  5.    return;
  6. }
  7. jobject  statement = jniEnv->CallObjectMethod(connection, createStatementMethod,
  8.                                               (jint) resultSetType, (jint) resultSetConcurrency);


 




 
Génial...
Bon, j'vais m'y mettre à JNI alors.
Biface et les autres qui connaissent JNI, restez à portée de clavier, j'risque d'avoir besoin de vous :D
Merci...

mood
Publicité
Posté le 04-11-2002 à 14:55:29  profilanswer
 

n°239231
El_gringo
Posté le 04-11-2002 à 14:56:57  profilanswer
 

DarkLord a écrit a écrit :

>>> Désolé d'avoir induit en erreur. Je suis vraiment étonné de ce que JNI est capable de faire (meme si c'est lourd) ...
 
 :jap:  




 
Y a pas d'mal, ça peut arriver.
Juste, t'as la chance de pas avoir en face de toi qqn avec un caractère de chiotte qui en profite pour t'en mettre plein la tête !  :D

n°239261
- Renaud -
Posté le 04-11-2002 à 16:45:57  profilanswer
 

BifaceMcLeOD a écrit a écrit :

 
La réponse est oui aux 2 questions....  




 
biface  :hello:  
 
Une remarque (pas pour toi biface, je sais que tu sais...), quand meme, c'est lourd a gerer, c'est sujet aux erreurs, c'est lent.
 
En general on reserve ce genre de callback pour des cas exceptionnels (creation d'une exception, logging d'un message...).
 
De plus ca ne va pas te remplacer directement ta connection ODBC.
 
Renaud

n°239304
BifaceMcLe​OD
The HighGlandeur
Posté le 04-11-2002 à 17:23:54  profilanswer
 

Renaud  :hello:  :jap:

n°239677
El_gringo
Posté le 05-11-2002 à 09:45:27  profilanswer
 

- Renaud - a écrit a écrit :

 
 
biface  :hello:  
 
Une remarque (pas pour toi biface, je sais que tu sais...), quand meme, c'est lourd a gerer, c'est sujet aux erreurs, c'est lent.
 
En general on reserve ce genre de callback pour des cas exceptionnels (creation d'une exception, logging d'un message...).
 
De plus ca ne va pas te remplacer directement ta connection ODBC.
 
Renaud




 
J'aurais peut être une disaine de requète à effectuer, maxi, chacune rendant un seul résultat. Tu crois que c beaucoup trop lourd ?
Comment ça ça remplacera pas ma connection ODBC ?
  Je me doute bien que ça va pas marcher sans changer le code, ms si ça me permet d'exécuter des requêtes SQL et de Récupérer les résultats, ça remplace ma connection ODBC. Sinon j'vois pas l'intéret !

n°239686
darklord
You're welcome
Posté le 05-11-2002 à 10:01:15  profilanswer
 

mais si tu as si peu de trucs pourquoi te casser la tête :??: ca te prendra dix fois moins de temps de recoder ca en java que de jouer avec JNI avec ton truc tout fait ...
 
Enfin moi ce que j'en dit ...


---------------
Just because you feel good does not make you right
n°239688
BifaceMcLe​OD
The HighGlandeur
Posté le 05-11-2002 à 10:04:44  profilanswer
 

DarkLord a raison. D'autant qu'après, le code JNI, il faut le maintenir, et de mon expérience, le coût de maintenance d'une ligne de JNI est 10 fois plus important que celui d'une ligne Java (c'est un ordre de grandeur), même s'il a été codé très proprement au départ (parce que si le programmeur a codé ça comme un porc, c'est 50 fois plus...).

n°239704
El_gringo
Posté le 05-11-2002 à 10:51:08  profilanswer
 

Ben, y a relativement peu d'accès au BD, mais ceux-ci sont utilisés pour initialiser des objets qui, eux sont relativement complexes, et, à mon avis, pas si simple que ça à recoder.
D'autant plus qu'après avior été initialisés, ces objets sont utilisés dans un moteur graphique (ma dll) qui, lui, est carrément impossible à refaire en Java...

n°239718
darklord
You're welcome
Posté le 05-11-2002 à 11:21:08  profilanswer
 

si les objets sont complexes et que tu veux les faire passer à ton prog java, ca va etre galère


---------------
Just because you feel good does not make you right
n°239767
El_gringo
Posté le 05-11-2002 à 12:32:56  profilanswer
 

DarkLord a écrit a écrit :

si les objets sont complexes et que tu veux les faire passer à ton prog java, ca va etre galère




 
Justement, j'éspère ne pas avoir à les passer à mon code Java.
Cette dll générère et utilise toute seule comme une grande ces objets complexes. Avec ceux-ci, elle me génére une image, dès lors toute simple à utiliser (forcément )
Moi seul pb (et surement pas des miondres), c'est que cette dll à besoin d'aller chercher 2, 3 trucs en BD...
Un peu trop nombreux qd même pour pouvoir tout lui passer en paramètres...

n°239802
darklord
You're welcome
Posté le 05-11-2002 à 14:03:06  profilanswer
 

et pq pas. Moi je dis passage de paramètre powa :sol:


---------------
Just because you feel good does not make you right
n°239840
El_gringo
Posté le 05-11-2002 à 15:16:12  profilanswer
 

DarkLord a écrit a écrit :

et pq pas. Moi je dis passage de paramètre powa :sol:




 
T'as peut être raison, mais ça me fait chercher en bd des trucs peut être pas nécessaire...

n°239842
darklord
You're welcome
Posté le 05-11-2002 à 15:17:19  profilanswer
 

il faut etre pragmatique parfois ...


---------------
Just because you feel good does not make you right
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  JNI Utiliser une connection Java dans une dll C/C++

 

Sujets relatifs
[JAVA] obtenir la précision voulue pour un nombre....[PHP] utiliser une fonction php dans le champ action d'une forme
connection a une base MySQL avec vb .NET !![Java] Tranfert de fichier client/server ????
[java] comment faire une application en plein ecran ?[JAVA] Help! upload + envoi d'email avec pièce jointe
[java] il se fou du monde le jbuilder !!!![Delphi]Interface 1 Wire Micro Lan avec Driver Java ! c est possible ?
Servlet-utiliser les plugins de l'explorateur pr lire des pdf, doc,...[Java]TCP Client ne marche que partiellement pkoi?[Resolu]
Plus de sujets relatifs à : JNI Utiliser une connection Java dans une dll C/C++


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR