Job Finder

71
Social Network per la gestione di risorse umane Anno Accademico: 2008/2009 Componenti Gruppo: Bello Giuseppe, Campanale Lorella, Guglielmi Michele, Spadaro Alessandro.

description

 

Transcript of Job Finder

Page 1: Job Finder

Social Network per la gestione di risorse umane

Anno Accademico: 2008/2009

Componenti Gruppo: Bello Giuseppe, Campanale Lorella, Guglielmi Michele, Spadaro Alessandro.

Page 2: Job Finder

Scopo progettoVogliamo realizzare una social network per

lavoratori in cerca di lavoro part-time.Due grandi obiettivi:

Page 3: Job Finder

1° grande Vantaggio:Riduciamo al minimo le comunicazioni tra

agenzia e lavoratoreMiglioriamo la qualità del servizio offerto dalle

agenzie nel momento in cui:

Vogliamo ricercare profili più adatti al lavoro in questione

Proporre ai lavoratori/utenti i lavori a cui sono più interessati

Page 4: Job Finder

Scenario attuale:Di che tipo di lovoro stiamo parlando?

Hostess

Promoter

Addetti agli stand

Il ruolo delle agenzie:

Risultato:Un gran mare di

telefonate

Page 5: Job Finder

Problematiche:

Page 6: Job Finder

Dal lato lavoratore:

Page 7: Job Finder

Dal lato agenzia:

Page 8: Job Finder

Dominio del problema:Tre entità:

Dati Agenzia, contatti, sede,dettagli, affidabilità

Dati Personali, contatti, dettagli, preferenze, disponibilità lavorativa

Tipo di lavoro, quando, dove, agenzia

Page 9: Job Finder

Requisiti : utenteDal punto di vista dell’ UTENTE in cerca di lavoro, deve esistere un meccanismo che imposta:

Page 10: Job Finder

Requisiti: agenziaDal punto di vista dell’ AGENZIA, deve esistere un meccanismo che

permetta:

Page 11: Job Finder

Requisiti: lavoratore e agenziaConcetto di AMICO:

Page 12: Job Finder

Soluzione: Social Network La piattaforma prevede l’iscrizione di due tipi di utenti

Lavoratore:Ricerca:• Tutte le agenzie che offrono un determinato tipo di lavoro in una certa area geografica.

• Tutti i lavori disponibili, in un determinato periodo e in una certa area geografica.

Page 13: Job Finder

Agenzia:

Soluzione: Social Network

Page 14: Job Finder

Dal lato Agenzia e Lavoratore:

Soluzione: Social Network

Page 15: Job Finder

Progettazione: profilo utente

Page 16: Job Finder

Progettazione: home lavoratore

Page 17: Job Finder

Progettazione: home agenzia

Page 18: Job Finder

Progettazione: profilo agenzia

Page 19: Job Finder

Perchè usare una social network?La nostra social network non è un semplice

gestionale, ma un VERO E PROPRIO SERVIZIO perché offre :

Page 20: Job Finder

Confronto con realtà esistenti nel web

Non esiste una realtà simile alla

nostra! Perchè noi offriamo:

Informazioni real time; Feedback & Reputation

agenzia; Preferenze lavorative

specifiche; Priorità lavorative; Nuovo tipo di amicizia; Storico; Info sui colleghi.

Page 21: Job Finder

Cosa abbiamo realizzato: Vocabolario Job Finder (file rdf ) Descrizione delle classi/proprietàPresentazione dell’ontologia attraverso un foglio

di stile (file xsl)Esempio di visualizzazione della social network

(file rdf di istanze)

Page 22: Job Finder

1°Passo: Modellazione dell’ontologia

Page 23: Job Finder

Tecnologie del semantic web utilizzate Elementi dello stack da

noi utilizzati per specificare l’ontologia:

URI: stringa che identifica univocamente una risorsaIRI: estensione dell’URI

Metalinguaggio che fornisce un meccanismo di interpretazione dei contenuti

Linguaggio usato per descrivere le proprietà di una risorsa identificata da URI/IRI

RDF Schema: espone la sintassi per definire schemi e vocabolari per i metadati

Estende RDFS per descrivere le proprietà associate a una risorsa

Page 24: Job Finder

Classi e proprietà modellate

Page 25: Job Finder

File rdf: intestazione<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href="jf.xsl" type="text/xsl"?><!DOCTYPE rdf:RDF [ <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#"> <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#"> <!ENTITY owl "http://www.w3.org/2002/07/owl#"> <!ENTITY rec "http://www.w3.org/2001/02pd/rec54#"> <!ENTITY doc "http://www.w3.org/2000/10/swap/pim/doc#"> <!ENTITY contact "http://www.w3.org/2000/10/swap/pim/contact#"> <!ENTITY address "http://daml.umbc.edu/ontologies/ittalks/address#" > <!ENTITY org "http://www.w3.org/2001/04/roadmap/org#"> <!ENTITY dcterms "http://purl.org/dc/terms#"> <!ENTITY dc "http://purl.org/dc/elements/1.1/"> <!ENTITY foaf "http://xmlns.com/foaf/0.1/"> <!ENTITY jf "http://www.jobfinder.com/voc#"> ]>

<rdf:RDF xmlns:xsd = "&xsd;" xmlns:foaf = "&foaf;" xmlns:rdf = "&rdf;" xmlns:rdfs = "&rdfs;" xmlns:owl = "&owl;" xmlns:rec = "&rec;" xmlns:doc = "&doc;" xmlns:org = "&org;" xmlns:address =

"&address;" xmlns:contact =

"&contact;" xmlns:dc = "&dc;" xmlns:dcterms =

"&dcterms;" xmlns:base = "&jf;" xmlns =

"http://www.jobfinder.com/voc#"

>

Inidica che il contenuto XML che segue rappresenta RDF

xmlns:foaf=” http://xmlns.com/foaf/0.1/", è unaXML Namespace (xmlns) declaration, che specifica che tutti i tag con prefisso foaf: sono parte del namespace identificato dalla URI riportata di seguito all’uguale.

Page 26: Job Finder

Classe Lavoratore<owl:Class rdf:about="&jf;Person"> <rdfs:label

xml:lang="it">Lavoratore</rdfs:label> <rdfs:subClassOf

rdf:resource="&foaf;Person" /> <owl:intersectionOf

rdf:parseType="Collection">Proprietà: <owl:Restriction>

<rdfs:label xml:lang="it">Nome del lavoratore</rdfs:label><owl:onProperty rdf:resource="&foaf;givenname" />

<owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality></owl:Restriction>

Associamo un nome alla classe

Definiamo la relazione di sottoclasse

Definiamo tale classe come l’intersezione di una serie di proprietà

Page 27: Job Finder

Proprietà jf: Object Property<owl:Restriction>

<rdfs:label xml:lang="it">Luogo di nascita del lavoratore</rdfs:label> <owl:onProperty rdf:resource="&jf;placeOfBorn" />

<owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality>

</owl:Restriction>

<owl:ObjectProperty rdf:about="&jf;placeOfBorn"> <rdfs:label xml:lang="it">Luogo di nascita del lavoratore</rdfs:label> <rdfs:domain rdf:resource="&jf;Person" /> <rdfs:range rdf:resource="&jf;City" /> </owl:ObjectProperty>

Denota il numero esatto di occorrenze di una proprietà

Page 28: Job Finder

Proprietà jf: Datatype Property

<owl:DatatypeProperty rdf:about="&jf;carOwner"> <rdfs:label xml:lang="it">Proprietario di automezzo</rdfs:label> <rdfs:domain rdf:resource="&jf;Person" /> <rdfs:range rdf:resource="&xsd;boolean" /> </owl:DatatypeProperty>

<owl:Restriction> <rdfs:label xml:lang="it">Proprietario di automezzo</rdfs:label> <owl:onProperty rdf:resource="&jf;carOwner" /> <owl:cardinality df:datatype="&xsd;nonNegativeInteger">1</owl:cardinality> </owl:Restriction>

La proprietà appartiene alla classe Person

La proprietà assume valore booleano

Page 29: Job Finder

Proprietà Address

<owl:ObjectProperty rdf:about="&jf;homeAddress"> <rdfs:label xml:lang="it">Indirizzo di abitazione del

lavoratore</rdfs:label><rdfs:domain rdf:resource="&jf;Person"/>

<rdfs:range rdf:resource="&address;Address" /> </owl:ObjectProperty>

<owl:Restriction> <rdfs:label xml:lang="it">Indirizzo di abitazione del lavoratore</rdfs:label> <owl:onProperty rdf:resource="&jf;homeAddress" /> <owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality></owl:Restriction>

Page 30: Job Finder

Proprietà utilizzate da più classi

<owl:ObjectProperty rdf:about="&jf;mobilePhone"> <rdfs:label xml:lang="it">N°Cellulare del

lavoratore</rdfs:label><rdfs:subPropertyOf rdf:resource="&foaf;phone" />

</owl:ObjectProperty>

<owl:Restriction> <owl:onProperty rdf:resource="&jf;mobilePhone" /> <owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">0</owl:minCardinality> </owl:Restriction>

Denota il numero minimo di occorrenze di una proprietà

Gerarchie di proprietà una proprietà è una sottoproprietà di un’altra proprietà

Page 31: Job Finder

Classe Role<owl:Restriction>

<rdfs:label xml:lang="it">Figura lavorativa</rdfs:label> <owl:onProperty rdf:resource="&jf;typeRole" />

<owl:minCardinality rdf:datatype="&xsd;nonNegativeInteger">0</owl:minCardinality>

</owl:Restriction>

<owl:Class rdf:about="&jf;Role"> <rdfs:label xml:lang="it">Figura lavorativa</rdfs:label> <owl:oneOf rdf:parseType="Collection">

<owl:Thing rdf:about="#hostess"/><owl:Thing rdf:about="#Promoter"/><owl:Thing rdf:about="#leafleting"/><owl:Thing rdf:about="#clerk"/><owl:Thing rdf:about="#factoryworker"/><owl:Thing rdf:about="#merchandiser"/>

</owl:oneOf></owl:Class>

Classe enumerata:viene descritta grazie all'enumerazione delle figure lavorative - che costituiscono la classe: ATTENZIONE:I membri della classe sono esattamente l'insieme delle figure lavorative enumerate - nè più, nè meno.

Page 32: Job Finder

Classe Availability<owl:ObjectProperty rdf:about="&jf;workAvailability"> <rdfs:label xml:lang="it">Disponibilità lavorativa</rdfs:label> <rdfs:domain rdf:resource="&jf;Person"/> <rdfs:range rdf:resource="&jf;Availability" /> </owl:ObjectProperty>

<owl:Class rdf:about="&jf;Availability"> <rdfs:label xml:lang="it">Disponibilità</rdfs:label><rdfs:subClassOf> <owl:Restriction>

<rdfs:label xml:lang="it">Data di inizio lavoro</rdfs:label> <owl:onProperty rdf:resource="&jf;startDateAvailability" />

<owl:cardinality>1</owl:cardinality> </owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction>

<rdfs:label xml:lang="it">Data di fine lavoro</rdfs:label> <owl:onProperty rdf:resource="&jf;endDateAvailability" />

<owl:cardinality>1</owl:cardinality> </owl:Restriction> </rdfs:subClassOf></owl:Class>

La disponibilità lavorativa viene specificata con le proprietà obbligatorie: startDate e endDate

Page 33: Job Finder

Classe Agency

<owl:Restriction> <rdfs:label xml:lang="it">Data di fondazione Agenzia</rdfs:label>

<owl:onProperty rdf:resource="&foaf;birthday" /><owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality>

</owl:Restriction>

<owl:Class rdf:about="&jf;Agency"><rdfs:label xml:lang="it">Agenzia</rdfs:label>

<rdfs:subClassOf rdf:resource="&foaf;Organization" /><owl:intersectionOf rdf:parseType="Collection">

Page 34: Job Finder

Classe Reputation<owl:Class rdf:about="&jf;Reputation"> <rdfs:label xml:lang="it">Affidabilità

dell'Agenzia</rdfs:label> <rdfs:subClassOf> <owl:Restriction>

<rdfs:label xml:lang="it">Punteggio Reputation</rdfs:label>

<owl:onProperty rdf:resource="&jf;scoreReputation" />

<owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality>

</owl:Restriction> </rdfs:subClassOf> <rdfs:subClassOf> <owl:Restriction>

<rdfs:label xml:lang="it">Commenti Reputation </rdfs:label> <owl:onProperty rdf:resource="&jf;commentsReputation" /> <owl:maxCardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:maxCardinality>

</owl:Restriction> </rdfs:subClassOf></owl:Class>

<owl:ObjectProperty rdf:about="&jf;agencyReputation">

<rdfs:label xml:lang="it">Affidabilità dell'Agenzia</rdfs:label>

<rdfs:domain rdf:resource="&jf;Agency" /> <rdfs:range rdf:resource="&jf;Reputation" /> </owl:ObjectProperty>

Nel momento in cui si inserisce la reputation bisogna inserire un punteggio e un commento (obbligatorio)

score

Page 35: Job Finder

Class Job<owl:Class rdf:about="&jf;Job"> <rdfs:label xml:lang="it">Lavoro</rdfs:label>

… …

<owl:ObjectProperty rdf:about="&jf;executedWork"> <rdfs:label xml:lang="it">Storia lavorativa</rdfs:label> <rdfs:domain rdf:resource="&jf;Person" /> <rdfs:range rdf:resource="&jf;Job" /> </owl:ObjectProperty>

L’attributo appartiene alla classe Person: specificato attraverso una o più istanze della classe Lavoro

<!-- Storico Lavorativo -->

Page 36: Job Finder

XSL (XML Stylesheet Language)

Page 37: Job Finder

Un po’ di codice<xsl:template match="/"> …. <h3>Datatype property</h3><xsl:apply-templates select="rdf:RDF/owl:DatatypeProperty"/>…</xsl:template> <xsl:template match="rdf:RDF/owl:DatatypeProperty">

<xsl:if test="//rdfs:label/@xml:lang = 'it'"> <h4><xsl:value-of select="rdfs:label/text()"/></h4></xsl:if>URI reference: <a href="#{rdfs:label/text()}">

<xsl:value-of select="@rdf:about" /> <xsl:text> </xsl:text></a><xsl:text> </xsl:text> <xsl:if test="rdfs:domain">

Dominio: <xsl:variable name="classid" select="rdfs:domain/@rdf:resource"/>

<xsl:for-each select="/rdf:RDF/owl:Class"> <xsl:if test="@rdf:about = $classid">

<a href="#{rdfs:label/text()}"> <xsl:value-of select="@rdf:about" /></a>

<xsl:text> </xsl:text> </xsl:if> </xsl:for-each>

</xsl:if></xsl:template>

Page 38: Job Finder

Struttura del file html generato

Page 39: Job Finder

Esempio di presentazione della piattaforma

Dal documento XML preleviamo informazioni come:• Dati agenzia• Contatti• Descrizione lavoro

Sfruttiamo il file xslt per la formattazione del documento

Ma non dimentichiamoci della Reputation…

Page 40: Job Finder

<jf:homeAddress> <address:Address> <address:roomNumber>5</address:roomNumber> <address:streetAddress>S.Pietrino</address:streetAddress> <address:city>Varese</address:city> <address:zip>21100</address:zip> <address:country>Italia</address:country> </address:Address></jf:homeAddress>

Page 41: Job Finder

<jf:jobRole rdf:resource="&jf;hostess"/> <jf:jobFirm>MetropolitanClub</jf:jobFirm> <jf:jobStart>2009-03-10</jf:jobStart> <jf:jobEnd>2009-03-13</jf:jobEnd>

<jf:remunerationWork>90.00</jf:remunerationWork> <jf:necessaryPeopleNumber>4</jf:necessaryPeopleNumber> <jf:competenciesRequired>bella presenza</jf:competenciesRequired> <jf:materialRequired>abito e scarpe eleganti</jf:materialRequired>E non dimentichiamoci la reputation

Page 42: Job Finder

DatabaseUser: contiene i profili di tutti gli utenti registrati alla rete sociale.

Agency: contiene i profili di tutte le agenzie registrate alla rete sociale.

Job: contiene i lavori offerti dalle agenzie ai lavoratori.

Friend: contiene le relazioni di amicizia tra un utente e un altro. Gli utenti vengono rappresentati tramite le loro chiavi primarie che fanno riferimento ai rispettivi profili.

Availability: contiene le disponibilità di ciascun utente. Gli utenti vengono rappresentati tramite le loro chiavi primarie.

HystoricalJob: In questa entità ciascun utente è legato ai lavori che ha svolto in passato. Gli utenti e i lavori sono rappresentati tramite le loro chiavi primarie. La conferma dell’associazione tra utente e lavoro deve essere effettuata dall’agenzia tramite il campo confirmed.

FeebBackAgency: contiene i feedback rilasciati da un utente ad una determinata agenzia. La chiave primaria è data dalla coppia (chiave utente, chiave agenzia) in modo che ciascun utente possa inserire un solo feedback per ogni agenzia. Analogamente per FeedBackWork.

Message: Contiene tutti i messaggi scambiati nella rete sociale. Il mittente e il destinatario di ogni messaggio vengono rappresentati dalle rispettive chiavi primarie(riferite o all’agenzia o all’utente).

Page 43: Job Finder

Web Services

gestisce l'accesso ai dati degli utenti e le relazioni di amicizia.

gestisce l'accesso ai dati delle agenzie.

gestisce il rilascio dei feedback da parte degli utenti sia alle agenzie che ai lavori.

gestisce l'accesso ai dati riguardanti la disponibilità lavorativa degli utenti.

gestisce la messaggistica interna tra utente e utente o tra utente e agenzia.

gestisce l'accesso ai dati riguardanti i lavori e dello storico.

Page 44: Job Finder

Quando questo web service genera la pagina del profilo utente deve: Visualizzare il profilo dell’utente invocando il metodo “GetProfile”.

Visualizzare i suoi amici invocando il metodo "GetFriends".

Quando questo web service effettua la ricerca di un lavoratore deve:

Cercare gli utenti tramite la loro disponibilità e per fare questo il metodo “FindWorker” invoca il metodo "GetUserAvailability" del web service "AvailabilityManager“.

Cercare gli utenti tramite il loro storico e per fare questo il metodo “FindWorker” invoca il metodo “GetHystoricalUserJob” del web service “JobManager”.

User Manager Gestisce i profili degli utenti tramite i metodi AddProfile, GetProfile, EditProfile, DeleteProfile

gestisce le operazioni di Login e Logout; gestisce l’urgenza con cui l’utente cerca lavoro (getUrgence)

gestisce la ricerca dei lavoratori da parte delle agenzie.

gestisce le relazioni di amicizia tramite i metodi AddFriend, RemoveFriend, GetFriends, confirmFriendship e AddToFavourtie

Page 45: Job Finder

Agency Manager

Gestisce i profili delle agenzie tramite i metodi AddProfile, GetProfile, EditProfile, DeleteProfile

Gestisce le operazioni di Login e Logout

Gestisce i feedback alle agenzie aggiornando il loro punteggio tramite il metodo UpdateScore.

Page 46: Job Finder

Job Manager Gestisce i lavori offerti delle agenzie agli utenti tramite i metodi AddJob, GetJob, EditJob, DeleteJob

Gestisce la ricerca di lavori da parte dell’utente

Gestisce i feedback ai lavori aggiornando il loro punteggio tramite il metodo UpdateScore.

Gestisce lo storico dei lavori svolti da un utente.

Quando viene cercato un lavoro dagli utenti il web service: il metodo “Find”, nella visualizzazione dei risultati deve inserire i dati delle agenzie che offrono il lavoro e quindi fa una richiesta al web service "AgencyManager" tramite il metodo "GetProfile" per ottenere le informazioni relative all'agenzia.

Quando l’utente aggiunge un lavoro:

Viene invocato il metodo AddJob, il quale può essere confermato dall’agenzia con il metodo ConfirmJob.

Quando l’utente può visualizzare il proprio storico:

questo web service genera la pagina dello storico lavorativo dell'utente deve caricare i dati relativi ai lavori svolti dall'utente e per far ciò viene invocato il metodo "GetJobs".

Quando un’agenzia cerca un lavoratore in base ai dati nello storico:

il metodo “FindWorker” di “UserManager” invoca il metodo “GetHysoricalUserJob”.

Page 47: Job Finder

Gestisce i feedback rilasciati dagli utenti alle agenzie e ai lavori tramite i metodi AddFeedAgency, EditFeedAgency, AddFeedJob, AddFeedJob.

Quando un utente inserisce un nuovo feedback ad un'agenzia:

Il metodo “AddFeedAgency” richiama il metodo "UpdateScore" del web service "AgencyManager" che salva nel profilo dell'agenzia il voto medio che ha ricevuto dagli utenti; analogamente quando deve aggiornare il voto relativo al lavoro.

FeedBack Manager

Page 48: Job Finder

Availability Manager

Gestisce le disponibilità degli utenti tramite i metodi AddAvailability, EditAvailability, DeleteAvailability, GetAvailability

Gestisce la ricerca di lavoratori in base alla loro disponibilità tramite il metodo getUserAvailability, che cerca gli utenti disponibili per una determinata data.

Page 49: Job Finder

Quando questo web service genera le pagine con la posta in arrivo e la posta inviata dall’utente deve:

visualizzare il nome mittente e nome destinatario, per fare questo i metodi “ViewInBox” e “ViewOutBox” fanno una richiesta al web service “UserManager” tramite il metodo “GetProfile ” oppure al web service “AgencyManager” tramite il metodo “GetProfile”

Messages Manager

Gestisce lo scambio di messaggi tra utenti e agenzie tramite i metodi sendMessage, DeleteMessage, GetMessage

Page 50: Job Finder

Casi D’uso: Login

1. L'utente (Worker) accede alla pagina di login

2. L'utente (Worker) inserisce user e password

3. La pagina invia una richiesta al web service “UserManager” invocando il metodo “login”

4. Il web service “UserManager” interroga il database “User”

5. Se l'autenticazione ha successo il web service “UserManager” effettua un redirect alla pagina del profilo dell'utente.

6. Se l'autenticazione fallisce il web service “UserManager” ritorna alla pagina di login con un messaggio di errore.

7. Analogamente funziona la pagina di Logout.

Page 51: Job Finder

Casi D’uso: Profilo utente

Per generare il profilo: la pagina invia una richiesta al web service “UserManager” invocando il metodo “getProfile” che a sua volta interroga il database “User” e restituisce il profilo dell'utente.

1.Per generare la disponibilità: la pagina invia una richiesta al web service “AvailabilityManager” invocando il metodo “getAvailability” che a sua volta interroga il database “Availability” e restituisce la disponibilità dell'utente.

2.3.Per generare la lista amici: la pagina invia una richiesta al web service “UserManager” invocando il metodo “getFriends” che a sua volta interroga il database “Friend” per trovare gli amici dell'utente. Il metodo “getFriends” effettua una JOIN tra gli ID degli amici e i loro profili per recuperare dall’ID il nome, il cognome e gli altri dati dell’amico.

Page 52: Job Finder

Casi D’uso: Trova Amici

1. L'utente accede alla pagina per la ricerca degli amici

2. L'utente inserisce i parametri di ricerca (nome,cognome ecc.)

3. La pagina invia una richiesta al web service “UserManager” invocando il metodo “FindFriend” che a sua volta interroga il database “User” per trovare gli utenti che corrispondono ai parametri di ricerca.

Page 53: Job Finder

Casi D’uso: Aggiungi Amico

L'utente “User” vuole aggiungere l'utente “Friend” ai suoi amici.1. La pagina per la richiesta di amicizia invoca il web service “UserManager” per aggiungere l'utente “Friend” con il metodo “AddFriend” alla lista amici.

2. Quando l'utente “Friend” riceve la richiesta di amicizia decide se accettarla o meno inviando una richiesta al web service “UserManager” e invocando il metodo “ConfirmFriendship” che aggiunge un record al database “Friend” con la nuova relazione di amicizia.

Page 54: Job Finder

Casi D’uso: Imposta disponibilità

1. L'utente imposta i giorni in cui è disponibile sul calendario.2. La pagina per la disponibilità invia una richiesta al web service “AvailabilityManager”

invocando il metodo “AddAvailability” che a sua volta inserisce nel database “Availability” la disponibilità dell'utente.

Page 55: Job Finder

Casi D’uso: Trova Lavoro

L'utente vuole trovare un lavoro secondo alcuni filtri di ricerca.

I filtri di ricerca sono l'area geografica, il periodo lavorativo e i dettagli sul tipo di lavoro. Oltre a questi filtri è presente la scelta di una particolare agenzia. c

1. Per creare l'elenco delle agenzie la pagina web invia una richiesta al web service “AgencyManager” invocando il metodo “GetProfile” che a sua volta interroga il database “Agency” e restituisce il profilo dell'agenzia.

2. Quando l'utente preme il tasto ricerca viene invia una richiesta al web service “JobManager” invocando il metodo “Find” che a sua volta interroga il database “Job” e restituisce i lavori filtrati secondi i parametri dell'utente. Il metodo “Find” deve poter ricercare i lavori offerti da una determinata agenzia e quindi può invocare il metodo “getProfile” del web service “AgencyManager” per recuperare i dati dell'agenzia.

Page 56: Job Finder

Casi D’uso: Trova Lavoratore

L'agenzia vuole cercare un lavoratore in base ad alcuni filtri: area geografica, figura professionale, disponibilità e filtro storico.

La pagina web della ricerca effettua le seguenti chiamate:

1. Invia una richiesta al web service “UserManager” invocando il metodo “FindWorker”

3. “FindWorker” invia una richiesta al web service “AvailabilityManager” invocando il metodo “GetUserAvailability” che restituisce la disponibilità degli utenti. A questo punto “FindWorker” filtra nuovamente gli utenti in base alla loro disponibilità.

4. “FindWorker” invia una richiesta al web service “JobManager” invocando il metodo “GetHysoricalUserJob” che restituisce lo storico degli utenti(facendo una JOIN tra l’utente e i lavori che ha svolto). A questo punto “FindWorker” filtra nuovamente gli utenti in base al loro storico e ritorna il risultato alla pagina web.

2. FindWorker” inizia a filtrare gli utenti con una selezione sul database “User” filtrandoli in base all'area geografica e alla figura professionale.

Page 57: Job Finder

Casi D’uso: Feedback Agenzia

1. La pagina viene creata inviando una richiesta al web service “AgencyManager” invocando il metodo “getProfile” che a sua volta interroga il database “Agency” e restituisce il profilo dell'agenzia.

2. La pagina web invia una richiesta al web service “FeedbackManager” invocando il metodo “AddFeedAgency” che a sua volta interroga il database “FeedBack Agency” e inserisce il nuovo feedback.

3. Inolte il metodo “AddFeedAgency” aggiorna il punteggio dell'agenzia inviando una richiesta al web service “AgencyManager” invocando il metodo “UpadteScore” che a sua volta aggiorna il database “Agency”. Analogamente per rilasciare il feedback ad un lavoro. L'utente vuole rilasciare un feedback ad un'agenzia accedendo alla pagina web del profilo dell'agenzia.

Page 58: Job Finder

Casi D’uso: Inserisci Dati Storico

L'utente (User) vuole inserire un lavoro nel suo storico:

1. La pagina web invia una richiesta al web service “JobManager” invocando il metodo “getJob” che a sua volta interroga il database “Job” e restituisce i lavori svolti dall'utente.

2. Dopo che l'utente ha scelto uno dei lavori da aggiungere allo storico la pagina web invia una richiesta al web service “JobManager” invocando il metodo “addJob” che a sua volta inserisce nel database “HystoricalJob” il lavoro (come lavoro in attesa di approvazione dell'agenzia).

L'utente (User) vuole visualizzare il suo storico:

La pagina web invia una richiesta al web service “JobManager” invocando il metodo “GetJobs” che interroga il database “HystoricalJob” restituendo tutti i lavori inseriti nello storico dell'utente, per avere i dettagli sui lavori il metodo “getJobs” effettua una JOIN tra i lavori “HystoricalJob” e i dettagli di ciascun lavoro contenuti in “Job”.

L'agenzia vuole confermare il lavoro di un utente:

La pagina web invia una richiesta al web service “JobManager” invocando il metodo “ConfirmJob” che a sua volta modifica il database “HystoricalJob” confermando il lavoro svolto dall'utente.

Page 59: Job Finder

Casi D’uso: Gestione Messaggi

L'utente (Sender) vuole inviare un messaggio:La pagina web invia una richiesta al web service “MessagesManager” invocando il metodo “SendMessages” che inserisce il messaggio nel database “Messaeges”.InBox

L'utente accede alla sua pagina InBox. 1. La pagina web invia una richiesta al web service “MessagesManager” invocando il metodo “ViewInBox” che interroga il database “Messaeges” e restituisce i messaggi dell'utente.

2. Il metodo “ViewInBox” invia una richiesta al web service “UserManager” invocando il metodo “GetProfile” per ottenere i nomi di mittente e destinatario.

L'utente accede alla sua pagina OutBox. 1. La pagina web invia una richiesta al web service “MessagesManager” invocando il metodo “ViewOutBox” che interroga il database “Messaeges” e restituisce i messaggi dell'utente.

2. Il metodo “ViewOutBox” invia una richiesta al web service “UserManager” invocando il metodo “GetProfile” per ottenere i nomi di mittente e destinatario.

Page 60: Job Finder

Studio del Carico di lavoro (1) UserManager: ogni volta che un utente accede alla social network deve invocare

questo web service per accedere al proprio profilo e per ottenere la sua lista amici. Essendo gli utenti, molti di più rispetto alle agenzie, questo è sicuramente il web service più critico e più sollecitato di tutta la rete sociale. Inoltre UserManager viene invocato in numerose richieste quali: la visualizzazione dei profili degli amici, ricerca di lavoratori da parte delle agenzie o per visualizzare i messaggi di posta relativi ad un utente.

AgencyManager: ogni volta che un’agenzia accede alla social network deve invocare questo web service per accedere al proprio profilo. Inoltre AgencyManager viene invocato in numerose richieste quali: la ricerca di lavoro da parte dell’utente, il rilascio del feedback o per visualizzare i messaggi di posta relativi ad un’agenzia.

JobManager: viene utilizzato nelle ricerche sia di lavori che di lavoratori, ma anche nella visualizzazione dello storico di un utente. Essendo queste tra le interrogazioni più costose, JobManager è uno dei web server più critici della rete sociale.

I Web Service più utilizzati sono:

Page 61: Job Finder

Studio del Carico di lavoro (2) Trova lavoratore: E’ sicuramente l’interrogazione più costosa, perché deve effettuare

3 operazioni di JOIN su 4 Database diversi: Sul database “User” viene effettuata una ricerca con i filtri impostati dall’utente; I risultati vengono uniti con le disponibilità di ciascun utente e poi il tutto viene

filtrato secondo i parametri della ricerca; Inoltre se viene impostata la ricerca mediante storico, viene eseguita un’ulteriore

unione dei dati precedenti con i dati dello storico di ciascun utente. Per ottenere dallo storico i lavori svolti dall’utente deve essere fatta un’ulteriore JOIN con il database Job. I risultati così ottenuti vengono filtrati secondo i parametri di ricerca.

Trova Lavoro: Quando un utente deve cercare un lavoro viene effettuata

un’operazione di JOIN su 2 database: sul database dei lavori viene effettuata una ricerca con i filtri impostati dall’utente, i risultati vengono uniti con le agenzie che offrono il lavoro e poi il tutto viene a seconda dell’agenzia richiesta nella ricerca.

Visualizza Profilo utente: Viene interrogato il database User per avere i dati del profilo, inoltre viene interrogato Friend per trovare gli amici dell’utente. Da questa interrogazione risultano solo gli ID degli amici, questi devono poi essere uniti ai relativi profili tramite un’operazione di JOIN.

Interrogazioni più costose:

Page 62: Job Finder

Problema: Privacy UtentePROBLEMA:

Nel momento in cui gli utenti inseriscono dati riservati nel proprio profilo, dati che, magari, non si vogliono rendere pubblici a tutti, ma si vuole, al contrario, che rimangano riservati.

Applicato per l’intero profilo

Applicato per il singolo

dato

Page 63: Job Finder

Problema: Privacy Agenzia

Lo stesso discorso fatto per i lavoratori, si può applicare alle agenzie

Applicato per l’intero profilo

Applicato per il singolo

dato

Page 64: Job Finder

Problema: Privacy Lavoro

PROBLEMA:Come fa l’utente a capire impostazioni

legate a determinate impostazioni

?SOLUZIONE:

Pop-up javascript

Page 65: Job Finder

Accountability

Page 66: Job Finder

Reputation System per il lavoroCosa accade: tutti gli utenti che assegnano un rate al lavoro hanno lo stesso peso; pertanto, la reputation del lavoro sarà calcolata come media matematica dei voti degli utenti

Page 67: Job Finder

Reputation System per l’agenzia

Valutazione Agenzia: (7/20) * 5 + (13/20) * 8 = 6,95 (voto 7)

Page 68: Job Finder

Autenticazione e Registrazione Per garantire la reale esistenza dell'utente lavoratore che si registra a JobFinder, utilizzeremo un sistema di controllo basato su:

Page 69: Job Finder

Non è possibile trovare, in tale contesto, una vera e propria soluzione a al problema del furto di identità.

Furto d’identità

Page 70: Job Finder

Conclusioni(1)Prima di affrontare questo corso non avevamo idea di cosa

fossero linguaggi come OWL e RDF, ora non possiamo dire di conoscer a pieno l’argomento ma abbiamo appreso a pieno i suoi ampi vantaggi:

Page 71: Job Finder

Conclusioni (2)Il progetto “JobFinder” ci ha permesso di ideare un’

applicazione web mediante l’architettura dei “web services”.

Nella progettazione di un Web Service si è messi di fronte a differenti problematiche come:la gestione dell’interazione tra “web services” e “database”.la distribuzione del carico di lavoro su più “web services”.

I “Web Services” sono un’ottima soluzione per i problemi di scalabilità e di gestione del carico di una Social Network come la nostra.