Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.

Συζητήσεις για γλώσσες προγραμματισμού και θέματα σχετικά με προγραμματισμό.
Post Reply
User avatar
Zifnab
Venus Former Team Member
Posts: 7581
Joined: Tue Nov 15, 2005 2:42 am
Academic status: MSc
Gender:
Location: Connecticut
Contact:

Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.

Post by Zifnab » Wed Nov 03, 2010 7:31 pm

Θα ήθελα να ξέρω αν έχω ένα applet το οποίο το έχω σ'έναν σέρβερ μακρινό αν μπορεί να μιλήσει με την βάση στον ίδιο σέρβερ. Ξέρω ότι το applet τρέχει clientside οπότε γράφοντας localhost στο applet είναι σαν να ψάχνει την βάση τοπικά... Διάβασα ότι γίνεται μέσω Json κτλ.. Υπάρχει κάποια (άλλη) λύση?? Ευχαριστώ πολύ :smt023

http://efreedom.com/Question/1-3192172/ ... nk-Failure

http://www.stormacq.com/?p=190
User avatar
Ισοβίτης
Venus Former Team Member
Posts: 1262
Joined: Sat Apr 21, 2007 5:45 pm
Gender:
Location: Πίσω από τα σίδερα
Contact:

Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.

Post by Ισοβίτης » Wed Nov 03, 2010 7:35 pm

Μπορείς να παίξεις με web services (xml, json). Soap services ιδανικά, αλλά θέλουν tools.

Ουσιαστικά, ένα συνηθισμένο μοντέλο είναι:
- Το service μιλάει στη βάση.
- Το applet μιλάει στο service.
- Το service κάνει update τη βάση.

Εννοείται ότι μπορείς με διάφορους τρόπους να ορίσεις ποιος θα έχει πρόσβαση στο service σου.
Συγχώρα με που δεν καταλαβαίνω τι λένε τα κομπιούτερς κι οι αριθμοί...

Image

Find me: Image Image Image Image Image
User avatar
Zifnab
Venus Former Team Member
Posts: 7581
Joined: Tue Nov 15, 2005 2:42 am
Academic status: MSc
Gender:
Location: Connecticut
Contact:

Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.

Post by Zifnab » Wed Nov 03, 2010 7:39 pm

Δηλαδή δεν υπάρχει άλλος τρόπος ε? :-| Ούτε κάποια ρύθμιση στον mysql server για να δέχεται remotely από κάποιο χρήστη με μειωμένα δικαιώματα?

Και τί μας διασφαλίζει τελικά από θέμα ασφάλειας η συνεννόηση JSON ?
User avatar
Ισοβίτης
Venus Former Team Member
Posts: 1262
Joined: Sat Apr 21, 2007 5:45 pm
Gender:
Location: Πίσω από τα σίδερα
Contact:

Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.

Post by Ισοβίτης » Wed Nov 03, 2010 7:59 pm

Τίποτα απολύτως. Το JSON δεν είναι παρά μια light μορφή για να στέλνεις δεδομένα. Μπορεί να χρησιμοποιείται αντί της XML.

Πχ, αυτή η XML:

Code: Select all

<name>Vangos</name>
είναι ισοδύναμη με αυτό το JSON (όπως η JavaScript, έτσι και το JSON είναι key-value pairs):

Code: Select all

{ "name": "Vangos" }
Τα services μπορεί να στέλνουν ό,τι από τα δύο θες.

Στα SOAP services, το format είναι transparent - εσύ βλέπεις μόνο τα αποτελέσματα που θες (αυτός είναι και ο λόγος που απαιτούνται tools). Στα REST services χρειάζεται να κάνεις εσύ κάποιο parsing της XML ή του JSON.

Η ασφάλεια και το ποιος θα έχει πρόσβαση καθορίζεται μέσα από το service (client access policy, application key, ανάλογα την περίσταση).

Δε γνωρίζω αν υπάρχει ρύθμιση στη mysql, αλλά δεν νομίζω ότι είναι καλή ή επεκτάσιμη πρακτική, εκτός αν κατάλαβα λάθος το πρόβλημα.
Συγχώρα με που δεν καταλαβαίνω τι λένε τα κομπιούτερς κι οι αριθμοί...

Image

Find me: Image Image Image Image Image
Erevodifwntas
Gbyte level
Gbyte level
Posts: 1098
Joined: Thu Apr 22, 2004 2:18 pm
Academic status: Alumnus/a
Gender:
Location: In a Long Time Ago in A Galaxy far far away
Contact:

Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.

Post by Erevodifwntas » Thu Nov 04, 2010 10:16 am

Δεν κατάλαβα τι πρόβλημα αντιμετωπίζεις... Αρκεί το connection string να είναι ip:3306/κτλπ και όλα θα λειτουργήσουν κανονικά. Σε περίπτωση που δεν το βλέπει το applet από άλλο μηχάνημα (ενώ στο ίδιο το βλέπει) σημαίνει ότι κάποιο firewall είναι στη μέση.

P.S. γιατί JavaFX? Είχα την εντύπωση ότι είμαι ο μόνος που παίζει μαζί της...
Go To Statement Considered Harmful (Τιτλος δημοσίευσης του Edsger Dijkstra).

my personal site
User avatar
Zifnab
Venus Former Team Member
Posts: 7581
Joined: Tue Nov 15, 2005 2:42 am
Academic status: MSc
Gender:
Location: Connecticut
Contact:

Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.

Post by Zifnab » Thu Nov 04, 2010 10:48 am

Λοιπόν έχω ένα 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 :-(
Erevodifwntas
Gbyte level
Gbyte level
Posts: 1098
Joined: Thu Apr 22, 2004 2:18 pm
Academic status: Alumnus/a
Gender:
Location: In a Long Time Ago in A Galaxy far far away
Contact:

Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.

Post by Erevodifwntas » Thu Nov 04, 2010 11:39 am

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 θέλει... Κάτι έχω χάσει μάλλον
Go To Statement Considered Harmful (Τιτλος δημοσίευσης του Edsger Dijkstra).

my personal site
User avatar
Zifnab
Venus Former Team Member
Posts: 7581
Joined: Tue Nov 15, 2005 2:42 am
Academic status: MSc
Gender:
Location: Connecticut
Contact:

Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.

Post by Zifnab » Thu Nov 04, 2010 11:51 am

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) με αυτόν τον τρόπο - θα είναι παλούκι αυτό νομίζω :roll: ?

Πράγματι το localhost/127.0.0.1 χτυπάει εκεί που είναι o firefox (για να συνεννοιομαστε :smt016 )
Και δεν μου επιτρέπει να βάλω την 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 γιατί δουλεύει διαφορετικά?
User avatar
Zifnab
Venus Former Team Member
Posts: 7581
Joined: Tue Nov 15, 2005 2:42 am
Academic status: MSc
Gender:
Location: Connecticut
Contact:

Re: Απορία σύνδεσης Applet/Java FX με απομακρυσμένη βάση.

Post by Zifnab » Thu Nov 04, 2010 5:22 pm

Παιδιά τα κατάφερα - όλοι στο 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 για κλιση και εκτύπωση:

Code: Select all

println(Utils.sendPostRequest());
Κώδικας php:

Code: Select all

<?php
$ret = "error";
if($_POST)
{
$var1= $_POST['param1'];
$ret = "success";
}
echo($ret);
?>
Τώρα μένει να δουλέψει η εικόνα (BLOP) over POST Request/Response - edit: Δούλεψε μια χαρούλα :-D
Post Reply

Return to “Προγραμματισμός”