Εμφάνιση 1-12 από 12
  1. #1
    Εγγραφή
    19-11-2008
    Ηλικία
    40
    Μηνύματα
    286
    Downloads
    4
    Uploads
    0
    Καλημέρα σε όλους.

    Έχω φτιάξει μια desktop εφαρμογή (τύπου αποθήκης προϊόντων) σε Java που αποθηκεύει τα δεδομένα σε ΒΔ MySQL.
    Θέλω να φτιάξω την αντίστοιχη "επέκτασή" της για χρήση σε Android tables/smartphones ώστε να συγχρονίζουν
    μεταξύ τους τις όποιες αλλαγές γίνονται στη ΒΔ.

    Απ' ότι καταλαβαίνω θα χρειάζεται να τρέχει κάποιο web-service μέσω της desktop εφαρμογής και αυτό να
    διαχειρίζεται το συγχρονισμό των συσκευών.

    Απ' τα λίγα παραδείγματα που έχω δει, το web-service τρέχει με local-ip (π.χ. 192.168.1.100). Τι γίνεται όμως όταν
    το web-service πρέπει να είναι προσβάσιμο "globally"; Ρυθμίζουμε ανάλογα το router μας;

    Στην περίπτωση που 2 διαφορετικές συσκευές Android προσθέσουν/αφαιρέσουν το ίδιο προϊόν με ποια προγραμματιστική
    τεχνική θα μπορούσα να διαχειριστώ το συμβάν; Π.χ. με Transaction Pools ή/και με κάτι άλλο;

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

    Επίσης, είμαι αρχάριος στο κομμάτι του Android development.

  2. #2
    Εγγραφή
    19-05-2012
    Ηλικία
    43
    Μηνύματα
    723
    Downloads
    2
    Uploads
    0
    ISP
    Forthnet
    η εφαρμογη που εχεις κανει επικοινωνει κατευθειαν με τη βαση ή εχεις κανει API me post,get requests κτλ?

    για την ταυτοχρονη αλλαγη στα δεδομενα,**υποθετω** οτι απο τη στιγμη ο σερβερ (λογικα) ξεκιναει καινουρις thread για καθε συνδεση θα μπορουσες να δοκιμασεεις με synchronized ktl...μπορει να γίνεται κ απο τη βαση (η postgresql αν θυμαμαι καλα εχει advisory locks για τετοιες καταστασεις)

    δωσε ομως καμμια παραπανω πληροφορια τι ακριβως χρησιμοποιεις;;

  3. #3
    Εγγραφή
    19-11-2008
    Ηλικία
    40
    Μηνύματα
    286
    Downloads
    4
    Uploads
    0
    επικοινωνεί κατευθείαν με queries χρησιμοποιώντας το ΑΡΙ του JDBC driver για MySQL

    τι ακριβώς πληροφορία θέλετε να σας δώσω; ευχαρίστως να σας πω

  4. #4
    Εγγραφή
    19-05-2012
    Ηλικία
    43
    Μηνύματα
    723
    Downloads
    2
    Uploads
    0
    ISP
    Forthnet
    οποτε το κανεις κατευθειαν με jdbc...

    δες λιγο αυτα τα 2 1 2

    για να το ξεκαθαρισω εννοουσα Rest API

    αν θες να κανεις κ client se android νομιζω οτι ειναι καλυτερα να το κανεις με rest, ουσιαστικα τρεχεις οπως ειπες web service k κανεις requests απο το καθε client

  5. #5
    Εγγραφή
    19-11-2008
    Ηλικία
    40
    Μηνύματα
    286
    Downloads
    4
    Uploads
    0
    Καλησπέρα, σ' ευχαριστώ για την απάντησή σου.

    Ενδιαφέρον τα link που μου παρέθεσες.

    Θα κοιτάξω και αυτό για το Rest API, καθώς το ακούω για 1η φορά.

    Άρα με web-service και θα εξάγω τα δεδομένα σε μορφή json για το android και αντίστοιχα το android όταν κάνει αλλαγές στη ΒΔ θα τις στέλνει στο web-service.
    Για να γίνεται ο συγχρονισμός πρέπει και στις 2 εφαρμογές να υπάρχει κάποιο thread - daemon που θα ακούει για αλλαγές;

    Μήπως υπάρχει κάποιο συγκεκριμένο API ή πρωτόκολλο συγχρονισμού γενικότερα (π.χ. bonjour) που θα βελτιστοποιούσε το αποτέλεσμα;




    Επίσης, θα ήθελα να ρωτήσω το εξής.
    Πάντα προσπαθουσα να βρω το βέλτιστο τρόπο για την ανάγνωση δεδομένων από τη ΒΔ. Αυτή τη στιγμή στη desktop εφαρμογή χρησιμοποιώ ένα thread για την
    προβολή και διαχείριση του GUI και ένα άλλο για να εισάγει σε πίνακα (JTable) τις εγγραφές της ΒΔ. Η εισαγωγή γίνεται μέσα σε ένα do{...}while loop και την
    κάθε εγγραφή την περνάει στον πίνακα. Το "πρόβλημα" με αυτό είναι ότι όταν ανοίγει το GUI της εφαρμογής ο πίνακας ναι μεν γεμίζει σχεδόν άμεσα (αναλόγως
    και τις δυνατότητες του κάθε ΗΥ), αλλά δημιουργείται ένα "οπτικό εφέ" σαν να ξεδιπλώνει προς τα κάτω εκείνη τη στιγμή ο πίνακας.

    Σε άλλες εμπορικές εφαρμογές, καθώς και στον MySQL Browser, o πίνακας εμφανίζεται άμεσα σαν να είναι ήδη έτοιμος. Μάλιστα δοκίμασα το MySQL Browser
    και με αρχείο .sql 5000 εγγραφών, όπου και πάλι άνοιξε αμέσως χωρίς καμία καθυστέρηση.
    Σκέφτηκα να το αλλάξω ώστε να διαβάζει πρώτα τις εγγραφές και μετά να εμφανίζει το GUI, αλλά έτσι έδινε την αίσθηση στο χρήστη ότι αργούσε να φορτώσει η
    εφαρμογή διαβάζοντας τα δεδομένα κ ήταν εκνευριστικό. Άρα κάποιο "προβλημα" θα έχει ο κώδικάς μου ή δεν χρησιμοποιώ την ιδανικότερη λύση.
    Έψαξα και για παραδείγματα για εισαγωγή δεδομένων από ΒΔ με Java queries, αλλά ότι βρήκα ήταν αυτό που χρησιμοποιούσα ήδη.

    Προσπάθησα να διαβάσω τον κώδικα του MySQL Browser, αλλά δεν βρήκα καμία άκρη.

    Μήπως υπάρχει κάποιος άλλος τρόπος για να γίνει αυτό;

  6. #6
    Εγγραφή
    19-05-2012
    Ηλικία
    43
    Μηνύματα
    723
    Downloads
    2
    Uploads
    0
    ISP
    Forthnet
    ναι καπως ετσι με το web service που λες, ουσιαστικα γινεται client agnostic..με οποια γλωσσα θες κανεις htttp requests στο server σου..ουσιαστικα servlet κανεις..

    για τις υπολοιπες ερωτησεις ενα γενικοτερο σχόλιο:
    καλυτερα θα ήταν να χρησιμοποιήσεις ενα framework τυπου Spring που ειναι λιγο τερας αλλα αν ψαξεις θα βρεις κ άλλες λύσεις τα οποια κανουν τη βρώμικη δουλεια για σένα (αναφερομαι στη ερώτηση για το poooling). επισης αν πας σε τετοια λύση to συνηθες ειναι να χρησιμοποιήσεις object relational mapper to οποιο κανει κ παλι πολύ βρώμικη δουλεια κ αν δεν σου αρκει τοτε γραφεις raw sql..για την ερωτηση περι ταυτοτοχρονης αλλαγης των ίδιων δεδομενων, θα σου πω το ίδιο, δες μήπως η βαση εχει καποιο lock. Αν κ το συγκεκριμενο πρόβλημα δεν το εχω αντιμετωπισει ποτε, σε τετοια framework υποθετω οτι θα ειναι κατι συνηθισμενο κ θα εχει τη λυση ήδη ενσωματωμενη.αν ταυτοποιουντε οι clients τοτε υποθετω οτι δε θα αφηνει να τον αλλαζουν ταυτοχρονα

    τωρα για το προβλημα που λες οτι φαινεται σαν να ξεδιπλώνεται, αν ειδες οτι ειναι ο "σωστος" τρόπος για να το κανεις τοτε δεν μπορώ να φανταστω κατι, ξεκινας βημα βημα debbuger κ ο θεος μαζι σου
    παντως δες κ "βοηθητικες" βασεις τύπου redis, ουσιαστικα cachareis συνηθισμενα ή συχνα queries στην memory based βαση αντι να κοπανας συνεχεια την κανονικη σου βαση με τα ιδια queries.

    δες αυτο το μαθημα κ αν μπορεις καντο https://www.coursera.org/course/mobilecloudprogram κανουν αυτο ακριβως που θες με spring
    Τελευταία επεξεργασία από το μέλος dimr : 30-04-15 στις 10:18.

  7. #7
    Εγγραφή
    19-11-2008
    Ηλικία
    40
    Μηνύματα
    286
    Downloads
    4
    Uploads
    0
    να συνοψίσω λίγο "πρόχειρα"...

    1. το rest ουσιαστικά είναι μια μετεξέλιξη του Soap και wsdl;
    2. θα χρειαστώ το rest api για το συγχρονισμό (client/server με http requests
    3. για το θέμα concurrency στη ΒΔ μεταξύ πολλών χρηστών θα πρέπει να καταφύγω σε λύσεις τύπου hibernate, spring, κοκ..;
    4. ο κώδικας για την ανάγνωση των εγγραφών απ' τη ΒΔ είναι ο "κλασσικός" που χρησιμοποιείται σ' όλα τα παραδείγματα που είδα, ίσως ο κώδικας που γεμίζω (προβάλω) στη συνέχεια τον JTable να μην είναι ο βέλτιστος...
    5. μήπως ξέρεις τι πρωτόκολλο χρησιμοποιεί π.χ. το Viber και συγχρονίζει άμεσα τα μηνύματα μεταξύ των συσκευών που χρησιμοποιεί ο χρήστης; ώστε να καθήσω να διαβάσω σχετικά για να καταλάβω τη θεωρία τους

  8. #8
    Εγγραφή
    19-05-2012
    Ηλικία
    43
    Μηνύματα
    723
    Downloads
    2
    Uploads
    0
    ISP
    Forthnet
    1)υποθετω ναι δεν ειχα ασχοληθει ποτε με αυτα, το restful ειναι ουσιαστιka mια λιστα απο best practices.
    2)den καταλαβαινω ακριβως τι εννοεις με το "συγχρονιμο", CRUD operations κανεις ουσιαστικα
    3)απο περεμφερη frramework se python, υποθετω οτι θα εχει κατι concurrent modification exception..αλλα σου ειπα αν πας σε αυτη τη λυση μετα μπορεις να το κανεις με ταυτοποιημενους clients, resource owners..αλλα ας πουμε ναι θα σου λυσει το πρόβλημα..κ ξανα ψαξε αν η βαση που χρησιμοποιεις εχει λυσεις για αυτο το προβλημα.
    4)ισως, για αυτο σου ειπα debugging αργα αργα, multithreading δεν ειναι κ το πιο ευκολο πραγματα στον κοσμο κ το debugging τους einai ακομα πιο δυσκολο...
    5) οχι.. αν κανεις rest μπορεις να κανεις ενα client σε ανδροιδ κ ενα πχ σε javascript ή σε οποια γλωσσα θες. Αν kaaneis update καποιο resource στη βαση σου me android **παντα μεσω του restful api**, αμεσως μπαινοντας απο javascript apo ton browser, κανωντας get request οι αλλαγες θα φαίνονται..φυσικα δουλευουν κα αντιστροφα

    νομιζω οτι εχεις μπερδευτει λιγο αν καταλαβαινω σωστα απο το 5.
    δεν ξερω ακριβως πως δουλευει το viber, αλλα συνηθως...
    οι clients δεν εχουν κατι που κανουν για να συχρονιζονται μεταξυ οπως το εννοεις. Απλα επικοινωνουν με τους σερβερ παιρνωντας resource representation των δεδωμενων του λογαριασμου σου, δλδ αλλαζουν σε ενα σημειο( τους σερβερ) κ μπορει να διαβαζωνται απο διαφορους clients.

    python ξερεις;
    αν χρησιμοποιεις facebook,twitter (ή οποια αλλη υπηρεσια χρησιμοποιεις ) googlare να βρεις τα api τους,παρε api keys, κ διαβασε τα endpoints που δινουν. γραψε ενα client που πχ ποσταρει μηνυμα στο timeline sou,αλλαξε τη φωτογραφια σου ή οτι αλλο θες..βρες μια βιβλιοθηκη σε java που σε βολευει για httprequests k χρησιμοποιησε την...(ρωταω για python γιατι εκει ειναι πιο ευκολο)..

  9. #9
    Εγγραφή
    19-11-2008
    Ηλικία
    40
    Μηνύματα
    286
    Downloads
    4
    Uploads
    0
    σ.σ.: έχω μπερδευτεί αρκετά γιατί δεν ξέρω από που να πιάσω το νήμα...

    φίλε δυσκολεύομαι να σε "πιάσω" σε κάποια σημεία, αλλά ok i'll keep up

    python δεν γνωρίζω και social media δεν χρησιμοποιώ

    λέγοντας συγχρονισμό εννοώ όταν πχ κάποιος client (είτε η desktop ή η android εφαρμογή) κάνει κάποια αλλαγή στη ΒΔ αυτομάτως όλοι οι άλλοι συνδεδεμένοι clients να ενημερώνονται (κάπως...;; ) για την αλλαγή αυτή

    π.χ.
    α) τώρα έτσι όπως είναι ο κώδικας της εφαρμογής όταν ένας client αλλάξει μια εγγραφή στη ΒΔ οι υπόλοιποι clients θα βλέπουν την παλαιά τιμή της εγγραφής
    σε web περιβάλλον αυτό ξέρω γίνεται αυτόματα ανανέωση με χρήση ajax, εδώ όμως;

    β) και το χειρότερο είναι όταν ένας client σβήσει μια εγγραφή και κάποιος άλλος (που ακόμα βλέπει πως υπάρχει) τροποποιήσει μια τιμή της, τότε το query εκτελείται κανονικά χωρίς να πετάει η MYSQL κάποιο σφάλμα (και μου κάνει εντύπωση) και στο επόμενο update που κάνει το gui τον πίνακα η εγγραφή αυτή δεν υπάρχει (σαφώς)...
    αυτό δεν έχει να κάνει με την εφαρμογή μου, αλλά με την ίδια την MySQL, καθώς το ίδιο σενάριο να κάνω και με τον MySQL Browser αυτό που μου αναφέρει είναι "Query returned no resultset".

    "Κανονικά" δεν θα πρεπε να πετάει κάποιο warning ότι δεν υπάρχει η εγγραφή που προσπαθούμε να κάνουμε update με το συγκεκριμένο Id;
    Εκτός κ αν "πρέπει" να ορίσω διαφορετικού τύπου ερώτημα που να ελέγχει τέτοιες περιπτώσεις..;;

    Eπομένως ο κώδικας που επικοινωνεί με τη ΒΔ θέλει ολόκληρος ξήλωμα και να τον αντικαταστήσω με τεχνικές από τα APIs που μου πρότεινες;
    Aπ' την εμπειρία σου με ποιο τρόπο έχεις δει να υλοποιείται σε εμπορικές εφαρμογές, τύπου crm κλπ;
    Τελευταία επεξεργασία από το μέλος djastral232 : 01-05-15 στις 00:58.

  10. #10
    Εγγραφή
    19-05-2012
    Ηλικία
    43
    Μηνύματα
    723
    Downloads
    2
    Uploads
    0
    ISP
    Forthnet
    α)ε προφανως πρεπει να ξανατρεξει το query για παρει τις καινουριες τιμεσ.ς....ακριβως, οπως ajax, requests κανει απλα κ ανανεωνει ενα κομματι της ολης σελιδας χωρις να χρειαζεται να κανει ρεφρες ολοκληρη οπως θα ξερεις..
    b) ριξε μια ματια εδω & εδω

  11. #11
    Εγγραφή
    19-11-2008
    Ηλικία
    40
    Μηνύματα
    286
    Downloads
    4
    Uploads
    0
    Μετά από ψάξιμο κ σκέψεις κατέληξα στην εξής "απλή" λύση για τα παραπάνω σενάρια:

    Όταν ένα συνδεδεμένο πρόγραμμα client εκτελεί μια CRUD εντολή στη ΒΔ, τότε θα στέλνει κ ένα πακέτο ack σε έναν tcp-server? ή web-service? με τα στοιχεία της εγγραφής που άλλαξε/πρόσθεσε/διέγραψε (π.χ. περιγραφή, id, κλπ). Στη συνέχεια ο tcp-server? ή web-service? θα στέλνει ένα άλλο πακέτο σε όλους τους υπόλοιπους συνδεδεμένους clients ενημερώνοντάς τους να ανανεώσουν το GUI τους με τα νέα δεδομένα από τη ΒΔ (εκτελώντας πχ SELECT * FROM myDB_table) και με ένα pop-up παράθυρο με τα στοιχεία της ενέργειας που πραγματοποιήθηκε στη ΒΔ (π.χ. Προϊόν1 με id1 νέα τιμή 100€, Το προϊόν2 με id2 προστέθηκε/διαγράφτηκε στη/από ΒΔ, κλπ).

    Έτσι εφόσον θα ανανεώνουν το GUI με τα νέα δεδομένα και θα βλέπουν ΟΛΟΙ τα ΙΔΙΑ, αυτό θα αποτελεί και τον μεταξύ τους "συγχρονισμό". Για την αντιμετώπιση των race-conditions έχω υλοποιήσει κώδικα με βάση την προσέγγιση pessimistic locking.

    Νομίζω ότι (ίσως) αυτή είναι η πιο "απλή" υλοποίηση. Πιστεύετε ότι είναι σωστή η προσέγγισή μου; Μπορείτε να μου δώσετε κάποιες γενικές οδηγίες/κατευθύνσεις για την υλοποίησή του; Θα χρειαστώ tcp-server ή web-service, καθώς η εφαρμογή θα τρέχει και σε android συσκευές και ο tcp-server ή web-service θα πρέπει να είναι προσβάσιμος globally (όχι μόνο σε Intranet δίκτυο).

    --- update ---

    Λίγο μια βοήθεια

    Που πρέπει να κοιτάξω;
    Σε tcp-sockets, websockets ή webservices;
    Τελευταία επεξεργασία από το μέλος djastral232 : 09-05-15 στις 12:46.

  12. #12
    Εγγραφή
    19-11-2008
    Ηλικία
    40
    Μηνύματα
    286
    Downloads
    4
    Uploads
    0
    @dimr αν ακούς, μιας κ που το thread εξελίχτηκε σε μεταξύ μας συζήτηση, ποια είναι η άποψή σου έτσι όπως το σκέφτομαι σχετικά με το "συγχρονισμό"; Έχεις να προτείνεις κάτι καλύτερο, με τη χρήση πχ κάποιας νέας τεχνολογίας ΑΡΙ κλπ που πιθανώς να μην γνωρίζω;

    Τέλος, απ' όσα διάβασα προτιμότερο είναι να χρησιμοποιήσω webservice (όπως προείπες), καθώς τα websockets χρησιμοποιούνται κυρίως για web-apps και για επικοινωνία μεταξύ browsers και web servers.

Παρόμοια Θέματα

  1. Μια απορια σχετικα με συγχρονισμο
    Από nikoslykos στο φόρουμ Nova
    Μηνύματα: 3
    Τελευταίο Μήνυμα: 16-01-15, 20:09
  2. Βοήθεια για εφαρμογή script
    Από paris1871 στο φόρουμ Unix - Linux
    Μηνύματα: 2
    Τελευταίο Μήνυμα: 10-01-15, 18:33
  3. Πρόβλημα με συγχρονισμό = ξεχνάμε VDSL
    Από Ragnarokgr στο φόρουμ Nova
    Μηνύματα: 23
    Τελευταίο Μήνυμα: 09-09-14, 21:01
  4. Πρόβλημα με συγχρονισμό
    Από Geodim στο φόρουμ COSMΟΤΕ
    Μηνύματα: 22
    Τελευταίο Μήνυμα: 13-07-14, 09:19
  5. Μηνύματα: 89
    Τελευταίο Μήνυμα: 02-06-14, 09:37

Tags για αυτό το Θέμα

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας