Page 1 of 1
Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.
Posted: Wed Nov 03, 2010 7:31 pm
by Zifnab
Θα ήθελα να ξέρω αν έχω ένα applet το οποίο το έχω σ'έναν σέρβερ μακρινό αν μπορεί να μιλήσει με την βάση στον ίδιο σέρβερ. Ξέρω ότι το applet τρέχει clientside οπότε γράφοντας localhost στο applet είναι σαν να ψάχνει την βάση τοπικά... Διάβασα ότι γίνεται μέσω Json κτλ.. Υπάρχει κάποια (άλλη) λύση?? Ευχαριστώ πολύ
http://efreedom.com/Question/1-3192172/ ... nk-Failure
http://www.stormacq.com/?p=190
Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.
Posted: Wed Nov 03, 2010 7:35 pm
by Ισοβίτης
Μπορείς να παίξεις με web services (xml, json). Soap services ιδανικά, αλλά θέλουν tools.
Ουσιαστικά, ένα συνηθισμένο μοντέλο είναι:
- Το service μιλάει στη βάση.
- Το applet μιλάει στο service.
- Το service κάνει update τη βάση.
Εννοείται ότι μπορείς με διάφορους τρόπους να ορίσεις ποιος θα έχει πρόσβαση στο service σου.
Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.
Posted: Wed Nov 03, 2010 7:39 pm
by Zifnab
Δηλαδή δεν υπάρχει άλλος τρόπος ε?

Ούτε κάποια ρύθμιση στον mysql server για να δέχεται remotely από κάποιο χρήστη με μειωμένα δικαιώματα?
Και τί μας διασφαλίζει τελικά από θέμα ασφάλειας η συνεννόηση JSON ?
Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.
Posted: Wed Nov 03, 2010 7:59 pm
by Ισοβίτης
Τίποτα απολύτως. Το JSON δεν είναι παρά μια light μορφή για να στέλνεις δεδομένα. Μπορεί να χρησιμοποιείται αντί της XML.
Πχ, αυτή η XML:
είναι ισοδύναμη με αυτό το JSON (όπως η JavaScript, έτσι και το JSON είναι key-value pairs):
Τα services μπορεί να στέλνουν ό,τι από τα δύο θες.
Στα SOAP services, το format είναι transparent - εσύ βλέπεις μόνο τα αποτελέσματα που θες (αυτός είναι και ο λόγος που απαιτούνται tools). Στα REST services χρειάζεται να κάνεις εσύ κάποιο parsing της XML ή του JSON.
Η ασφάλεια και το ποιος θα έχει πρόσβαση καθορίζεται μέσα από το service (client access policy, application key, ανάλογα την περίσταση).
Δε γνωρίζω αν υπάρχει ρύθμιση στη mysql, αλλά δεν νομίζω ότι είναι καλή ή επεκτάσιμη πρακτική, εκτός αν κατάλαβα λάθος το πρόβλημα.
Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.
Posted: Thu Nov 04, 2010 10:16 am
by Erevodifwntas
Δεν κατάλαβα τι πρόβλημα αντιμετωπίζεις... Αρκεί το connection string να είναι ip:3306/κτλπ και όλα θα λειτουργήσουν κανονικά. Σε περίπτωση που δεν το βλέπει το applet από άλλο μηχάνημα (ενώ στο ίδιο το βλέπει) σημαίνει ότι κάποιο firewall είναι στη μέση.
P.S. γιατί JavaFX? Είχα την εντύπωση ότι είμαι ο μόνος που παίζει μαζί της...
Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.
Posted: Thu Nov 04, 2010 10:48 am
by Zifnab
Λοιπόν έχω ένα javaFX applet το οποίο τραβάει μια εικόνα απο την βάση σε μορφή BLOB τις κάνει κάτι και μπορεί να την ξαναβάλει στην βάση - το θέμα είναι ότι μου λειτούργησε κανονικά όταν όλα ήταν localhost. Όταν τα ανέβασα όλα σε webserver το applet δεν μπορούσε να συνδεθεί στη βάση - και έκανα και self-sign στο JavaFX για να μπορεί να δουλεύει το JFileChooser (για ένα export στο δίσκο-άσχετο). Τη σύνδεση την κάνω μέσω ένος απλού .java που κάνει connect στη βάση και επιστρέφει ή δέχεται την εικόνα από/πρός το αρχείο .fx . Παρ' όλα αυτά επειδή όπως φαίνεται το jar τρέχει στον client (έτσι λέει και στο link που έχω δώσει) - ψάχνει να βρεί localhost βάση - άρα όχι στον webserver. Τονίζω ότι το applet και ο mysql server βρίσκονται στο ίδιο μηχάνημα.
@Ισοβίτης - thanks! Δηλαδή όλα θα γίνουν μέσω Javascript+Json/XML και θα μπορώ να κάνω ό,τι θέλω ε? Π.χ το upload εικόνων πως γίνεται στο facebook με Java? Άλλη λύση δεν υπάρχει έτσι? Τί tools χρειάζομαι για να επιταχύνω την διαδικασία? Επίσης tell me more about SOAP services - Χρειάζεται να τρέχει κάτι στον apache?
@erevo το θέμα είναι ότι η JavaFX είναι πολύ πιο συμπαθητική και δυνατή σε σχέση με το swing που αγάπησα να μισώ - νομίζω JavaFX χρησιμοποιείται και σε android εφαρμογές.
Θέλω να αποφύγω να ξανακάνω compile κτλ το jar για να περνάω παραμέτρους IP και στοιχεία βάσης - θα έχω ένα συγκεκριμένω χρήστη με περιορισμένα δικαιώματα και κωδικούς για αυτό το λόγο. Δυστυχώς δεν κατάφερα να κάνω το Jar να βλέπει αρχεία που είναι στον ίδιο φάκελο με αυτό (π.χ. εξωτερικά database config files) - οπότε αναγκαστικά μπήκαν όλα μέσα στο jar

Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.
Posted: Thu Nov 04, 2010 11:39 am
by Erevodifwntas
Zifnab wrote:
@erevo το θέμα είναι ότι η JavaFX είναι πολύ πιο συμπαθητική και δυνατή σε σχέση με το swing που αγάπησα να μισώ - νομίζω JavaFX χρησιμοποιείται και σε android εφαρμογές.
Θέλω να αποφύγω να ξανακάνω compile κτλ το jar για να περνάω παραμέτρους IP και στοιχεία βάσης - θα έχω ένα συγκεκριμένω χρήστη με περιορισμένα δικαιώματα και κωδικούς για αυτό το λόγο. Δυστυχώς δεν κατάφερα να κάνω το Jar να βλέπει αρχεία που είναι στον ίδιο φάκελο με αυτό (π.χ. εξωτερικά database config files) - οπότε αναγκαστικά μπήκαν όλα μέσα στο jar

Ναι αλλά πέθανε (ειδικά η έκδοση για κινητά). Καταλαβαίνω όμως την ομορφιά της (το bind της είναι θεϊκό -ειδικά σε σχέση με το αντίστοιχο του silverlight). Πάντως συνεχίζω να πιστεύω ότι αρκεί να αλλάξεις το localhost και να βάλει την IP της MySQL. Τι εννοείς ότι θες να αποφύγεις το recompile? πώς αλλιώς μπορείς να το κάνεις? ακόμα και web services να βάλεις (που δεν έχουν σχέση με javascript) recompile θέλει... Κάτι έχω χάσει μάλλον
Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.
Posted: Thu Nov 04, 2010 11:51 am
by Zifnab
Erevodifwntas wrote:Zifnab wrote:
@erevo το θέμα είναι ότι η JavaFX είναι πολύ πιο συμπαθητική και δυνατή σε σχέση με το swing που αγάπησα να μισώ - νομίζω JavaFX χρησιμοποιείται και σε android εφαρμογές.
Θέλω να αποφύγω να ξανακάνω compile κτλ το jar για να περνάω παραμέτρους IP και στοιχεία βάσης - θα έχω ένα συγκεκριμένω χρήστη με περιορισμένα δικαιώματα και κωδικούς για αυτό το λόγο. Δυστυχώς δεν κατάφερα να κάνω το Jar να βλέπει αρχεία που είναι στον ίδιο φάκελο με αυτό (π.χ. εξωτερικά database config files) - οπότε αναγκαστικά μπήκαν όλα μέσα στο jar

Ναι αλλά πέθανε (ειδικά η έκδοση για κινητά). Καταλαβαίνω όμως την ομορφιά της (το bind της είναι θεϊκό -ειδικά σε σχέση με το αντίστοιχο του silverlight). Πάντως συνεχίζω να πιστεύω ότι αρκεί να αλλάξεις το localhost και να βάλει την IP της MySQL. Τι εννοείς ότι θες να αποφύγεις το recompile? πώς αλλιώς μπορείς να το κάνεις? ακόμα και web services να βάλεις (που δεν έχουν σχέση με javascript) recompile θέλει... Κάτι έχω χάσει μάλλον
ωστέ έτσι ε? Δεν θέλω recompile γιατί το applet θα δωθεί σε διαφορετικούς πελάτες - και δεν θέλω κάθε φορά να αλλάζω ips κτλ...Ναι αλλά ο MySQL τρέχει και δέχεται αιτήματα μόνο από localhost όχι remote...
Edit: Κάποια νεότερα - έβαλα την τοπική IP και μου έβγαλε το:
Exception: null, message from server: "Host 'michaelpc.lan' is not allowed to connect to this MySQL server"
Αυτό βγαίνει είτε έχοντας το applet locally ή στον webserver...
Έπίσης έβαλα και το domain και μου βγάζει τα ίδια με το localhost Δηλαδή Link Communication Failure ή κάτι τέτοιο και last packet was received from server 0ms ago κτλ...
Θα μπορώ να στέλνω Εικόνα (ολόκληρη binary ~100kb) με αυτόν τον τρόπο - θα είναι παλούκι αυτό νομίζω

?
Πράγματι το localhost/127.0.0.1 χτυπάει εκεί που είναι o firefox (για να συνεννοιομαστε

)
Και δεν μου επιτρέπει να βάλω την IP του mysql server...
φαντάζομαι δεν μπορώ να έχω ένα php/jsp/java-servlet και να παίρνω/δίνω δεδομένα μέσω αυτού !
php executes on the server side. A java applet executes on the client side. Therefore, php is not going to be talking to a java applet. Your php will have long since finished executing when a java applet begins executing.
Ή μπορώ να στείλω ένα post εκεί - επιτρέπεται να στέλνει posts ένα applet ???
To SOAP γιατί δουλεύει διαφορετικά?
Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.
Posted: Thu Nov 04, 2010 5:22 pm
by Zifnab
Παιδιά τα κατάφερα - όλοι στο internet μιλάγανε για σύνδεση του applet μεσω RESTful device όπως servlet...SOAP/JSON κτλ...
Τελικά γίνεται αμφίδρομη επικοινωνία μεταξύ ενός applet/JavaFX και PHP που κάνει retreive και fetch από/προς την βάση (δεν μπορούσα να φανταστώ ότι η επικοινωνία θα ήταν αμφίδρομη) - ιδού ο κώδικας για απλή επικοινωνία με POST. Το applet παρ'όλα αυτά δεν μπορεί να έχει κατευθείαν πρόσβαση στη βάση - ίσως να υπάρχει ρύθμιση στον mysql-server - αλλά δεν είναι σωστό (αν γίνεται).
Κώδικας utility.java
Code: Select all
class Utils {
public static String sendPostRequest(){
String data="";
String aLine="";
try {
String parametersAsString = "param1=value1"; //για παραμετρους
byte[] parameterAsBytes = parametersAsString.getBytes();
// στέλνω post
String server = "http://blabla.com/";
URL url = new URL(server + "test.php");
URLConnection con = url.openConnection();
((HttpURLConnection) con).setRequestMethod("POST");
con.setDoOutput(true);
con.setDoInput(true);
con.setUseCaches(false);
OutputStream oStream = con.getOutputStream();
oStream.write(parameterAsBytes);
oStream.flush();
//παίρνω την απάντηση
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
while ((aLine = in.readLine()) != null)
{
data+=aLine;
if(aLine.equals("")) break;
}
in.close();
oStream.close();
}
catch (Exception ex)
{
return ex.toString();
}
return data;
}
}
}
Κώδικας app.fx για κλιση και εκτύπωση:
Κώδικας php:
Code: Select all
<?php
$ret = "error";
if($_POST)
{
$var1= $_POST['param1'];
$ret = "success";
}
echo($ret);
?>
Τώρα μένει να δουλέψει η εικόνα (BLOP) over POST Request/Response - edit: Δούλεψε μια χαρούλα
