Voor een project ben ik een systeem aan het maken dat moet toelaten om een database aan te spreken vanuit een java programma, zonder dat daarvoor een JDBC driver moet geinstalleerd worden of zo. Maw de user downloadt het programma, start het en kan onmiddellijk de database aanspreken, zonder dat er nog extra dingen moeten gebeuren.
(Dit zodat het programma dan ook eventueel als applet kan gebruik worden.)
Het gaat hierbij om een MySQL database. Als ik het goed heb dan moet je eerst
de JDBC driver die MySQL ter beschikking stelt installeren voor je vanuit java
een connectie met de database kunt maken, niet?
Er is toch geen standaard ondersteuning voor MySQL databases in de JRE hé?
(Want dat zou mij het leven wel een stuk makkelijker maken!)
Anyway, ik wil dit oplossen door RMI te gebruiken.
Ik zou graag de server-client architectuur gaan naboodsen met RMI.
Dit zou dus moeten als volgt gaan:
(Op de server bevindt zich de database en de RMI server samen.)
De client maakt connectie met het remote object en roept een bepaalde methode op van dat remote object, met als parameters de login en het wachtwoord van de client. De client krijgt dan een databaseconnectie object terug dat hij kan gebruiken om de database aan te spreken.
Het databaseconnectie object vormt dan de abstractie van de databank, en verbergt alle vieze SQL/JDBC bla bla voor de client.
Het remote object dient dus alleen om databaseconnectie objecten aan te maken en deze uit te delen aan elke client die erom vraagt.
In theorie klinkt dit wel leuk, maar ik heb een paar bedenkingen.
Volgens mij wordt dat databaseconnectie object gewoon doodleuk overgetransporteerd naar de client, aangezien dat object de returnwaarde is van de remote functie die de client heeft opgeroepen. Dit zou dus betekenen dat het databaseconnectie object eigenlijk bij de client uitgevoerd wordt, en dat de client dus eigenlijk nog altijd de JDBC driver moet ge¨installeerd hebben. Dit mag dus niet!
Ook het databaseconnectie object zou moeten remote blijven, zodat de client nooit iets hoeft te weten komen omtrent de database of JDBC of zo...
Hoe kan ik dit bereiken?
Is het voldoende om van mijn databaseconnectie object ook gewoon een remote object te maken, en zal java er dan vanzelf voor zorgen dat dat object aan de serverkant uitgevoerd wordt? Dit lijkt me aannemelijk, maar aangezien RMI nogal vaag is zou ik dit toch wel graag eens bevestigd willen krijgen voor ik alles begin te implementeren!
Het zou in ieder geval wel super zijn als dit zou kunnen!
Mijn vraag is nu dus: zal dit werken? Kan het werken?
Andere voorstellen om de database te verstoppen voor de client?
Liefst met RMI, maar dat zan dan ook wel redelijk onvermijdelijk zijn denk ik...
(Ik heb geen zin om zelf alles door 'n TCP connectie te beginnen pompen of zo)
(Dit zodat het programma dan ook eventueel als applet kan gebruik worden.)
Het gaat hierbij om een MySQL database. Als ik het goed heb dan moet je eerst
de JDBC driver die MySQL ter beschikking stelt installeren voor je vanuit java
een connectie met de database kunt maken, niet?
Er is toch geen standaard ondersteuning voor MySQL databases in de JRE hé?
(Want dat zou mij het leven wel een stuk makkelijker maken!)
Anyway, ik wil dit oplossen door RMI te gebruiken.
Ik zou graag de server-client architectuur gaan naboodsen met RMI.
Dit zou dus moeten als volgt gaan:
(Op de server bevindt zich de database en de RMI server samen.)
De client maakt connectie met het remote object en roept een bepaalde methode op van dat remote object, met als parameters de login en het wachtwoord van de client. De client krijgt dan een databaseconnectie object terug dat hij kan gebruiken om de database aan te spreken.
Het databaseconnectie object vormt dan de abstractie van de databank, en verbergt alle vieze SQL/JDBC bla bla voor de client.
Het remote object dient dus alleen om databaseconnectie objecten aan te maken en deze uit te delen aan elke client die erom vraagt.
In theorie klinkt dit wel leuk, maar ik heb een paar bedenkingen.
Volgens mij wordt dat databaseconnectie object gewoon doodleuk overgetransporteerd naar de client, aangezien dat object de returnwaarde is van de remote functie die de client heeft opgeroepen. Dit zou dus betekenen dat het databaseconnectie object eigenlijk bij de client uitgevoerd wordt, en dat de client dus eigenlijk nog altijd de JDBC driver moet ge¨installeerd hebben. Dit mag dus niet!
Ook het databaseconnectie object zou moeten remote blijven, zodat de client nooit iets hoeft te weten komen omtrent de database of JDBC of zo...
Hoe kan ik dit bereiken?
Is het voldoende om van mijn databaseconnectie object ook gewoon een remote object te maken, en zal java er dan vanzelf voor zorgen dat dat object aan de serverkant uitgevoerd wordt? Dit lijkt me aannemelijk, maar aangezien RMI nogal vaag is zou ik dit toch wel graag eens bevestigd willen krijgen voor ik alles begin te implementeren!
Het zou in ieder geval wel super zijn als dit zou kunnen!
Mijn vraag is nu dus: zal dit werken? Kan het werken?
Andere voorstellen om de database te verstoppen voor de client?
Liefst met RMI, maar dat zan dan ook wel redelijk onvermijdelijk zijn denk ik...
(Ik heb geen zin om zelf alles door 'n TCP connectie te beginnen pompen of zo)