Netværksprogrammering!

Størrelse: px
Starte visningen fra side:

Download "Netværksprogrammering!"

Transkript

1 Netværksprogrammering! Plan! Socket-baseret kommunikation! Fjernmetodekald (RMI)!!- Designmønsteret Proxy! Databasetilgang (JDBC)! 1! 2! Distribuerede beregninger! Kommunikation! Dagens beregningsmiljøer er!!distribuerede:!beregningerne forgår på flere!!!!værtsmaskiner!!heterogene:!værtsmaskinerne er forskellige! Java indeholder to mekanismer til distribuerede! beregninger:! (1)!Socket-baseret kommunikation!(java.net)!!en socket er et endepunkt for en tovejs-forbindelse imellem to parter.! (2)!Fjernmetodekald (RMI)!!(java.rmi)!!RMI tillader manipulation af objekter på fjerne maskiner, som om objekterne var lokale.! 3! 4!

2 Socket-baseret kommunikation! Sockets er endepunkterne for en tovejs-forbindelse imellem to værtsmaskiner.! Der er to slags sockets: server sockets og client sockets.!!en server socket venter på klienters anmodning om en!!forbindelse.!!en client socket (også blot kaldet socket) bruges til både at!sende og modtage data.! Porte! En server socket lytter på en bestemt port.! En port er angivet ved et positivt heltal mindre end eller lig med ! Portnummeret er nødvendigt for at kunne skelne imellem servere (server-applikationer), der kører på samme værtsmaskine.! De første 1024 porte er reserveret til specifikke protokoller, f.eks. 21 til FTP, 23 til Telnet, 25 til og 80 til HTTP.! 5! 6! Server sockets! En server socket er en instans af klassen ServerSocket! og skabes ved en af følgende to konstruktører:!!serversocket(int port)!!!!serversocket(int port, int backlog)!!!!!!!!!port: portnummeret!!!!!backlog: den maksimale længde for køen af ventende!! klienter (50 er standard)! Metoder i ServerSocket! Socket accept()!!!!!!!vent på en anmodning om en forbindelse fra en klient.!den tråd, der udfører kaldet, blokeres, indtil der!modtages en anmodning om forbindelse. Når det sker,!returnerer accept med et Socket-objekt.! void close()!!!!!!!luk denne ServerSocket.! Kun applikationer kan skabe ServerSocket-objekter.! 7! 8!

3 Typisk brug af ServerSocket! try {!!!!!!!ServerSocket s = new ServerSocket(port);!!while (true) {!!!!!! Socket incoming = s.accept();!! «Handle a client»! incoming.close();!!! s.close();!!!!!! } catch (IOException e) {!! «Handle exception»!!!! Client sockets! En client socket er en instans af klassen Socket og kan opnås på to måder:!!(1) På serversiden som returværdi af accept().!!(2) På klientsiden ved brug af konstruktøren!!!!!!!!!!!socket(string host, int port)!!!!!!!!!!!!host: navnet på værtsmaskinen!!!!port: portnummeret! 9! 10! Klienters kommunikation med en server! new Socket(...)! ServerSocket! Server-applikation! Client! Socket! Socket! Socket! Client! Socket! Socket! Metoder i Socket! getinputstream()!!!!!!!returnerer et InputStream-objekt til modtagelse af data! getoutputstream()!!!!!!!returnerer et OutputStream-objekt til afsendelse af data! close()!!!!!!!!!lukker forbindelsen! Kommunikationen håndteres på begge sider med Socket-objekter.! 11! 12!

4 Typisk brug af Socket! try {!!!!!!!Socket socket = new Socket(host, port);!!bufferedreader in = new BufferedReader(! new InputStreamReader(!!!! socket.getinputstream()));!!printwriter out = new PrintWriter(!! new OutputStreamWriter(!!! socket.getoutputstream()));!!«send and receive data»!!in.close();!!!!!!out.close();!!!!!!socket.close();!!!!! } catch (IOException e) {!!! «Handle exception»!!!! Udvikling af client/serverprogrammer! 1. Afgør, om det er fornuftigt at implementere en server og en eller flere matchende klienter! 2. Design en (tekstbaseret) kommunikationsprotokol! 3. Implementér serveren!!!! 4. Afprøv serveren med et telnetprogram! 5. Programmér og afprøv en klient! 13! 14! En simpel ekko-server! import java.io.*;! import java.net.*;! public class EchoServer {! public static void main(string[] args) {! try {! ServerSocket s = new ServerSocket(8008);! while (true) {! Socket incoming = s.accept();! BufferedReader in = new BufferedReader(! new InputStreamReader(! incoming.getinputstream()));! PrintWriter out = new PrintWriter(! new OutputStreamWriter(! incoming.getoutputstream()));! 15!!!out.println("Hello! This is the Java EchoServer.");!!!out.println("Enter BYE to exit.");!!!!!out.flush();!!!while (true) {!!!!!!! String str = in.readline();!!! if (str == null)!!!!!!! break; // client closed connection!!! out.println("echo: " + str);!!!!! out.flush();!!!!!!! if (str.trim().equals("bye"))!!!! break;!!!!!!!!!!in.close();!!!!!!!!out.close();!!!!!!!incoming.close();!!! }!!!!!!!! } catch (Exception e) {}!!! }!!!!!!!! 16!

5 Kørsel med et telnetprogram som klient! En simpel Java-klient til!ekko-serveren! venus% telnet saturn 8008! Trying ! Connected to saturn.!! Escape character is '^]'.! Hello! This is the Java EchoServer. Enter BYE to exit.! Hi, this is from venus! Echo: Hi, this is from venus! BYE! Echo: BYE!! Connection closed by foreign host.! import java.io.*;! import java.net.*;! public class EchoClient {! public static void main(string[] args) {! try {! String host =! args.length > 0? args[0] : "localhost";! Socket socket = new Socket(host, 8008);! BufferedReader in = new BufferedReader(! new InputStreamReader(! socket.getinputstream()));! PrintWriter out = new PrintWriter(! new OutputStreamWriter(! socket.getoutputstream()));! Telnet: Et terminalemuleringsprogram til TCP/IP-netværk såsom Internettet! 17! 18! Kørsel med Java-klienten! // send data to the server! for (int i = 1; i <= 10; i++) {! System.out.println("Sending: line " + i);! out.println("line " + i);! out.flush();! out.println("bye");! out.flush();! // receive data from the server! while (true) {! String str = in.readline();! if (str == null)! break;! System.out.println(str);! in.close();! out.close();! socket.close();! } catch (Exception e) {}! 19! venus% java EchoClient saturn! Sending: line 1! Sending: line 2!...! Sending: line 10! Hello! This is Java EchoServer.! Enter BYE to exit.! Echo: line 1! Echo: line 2!...! Echo: line 10! Echo: BYE! 20!

6 En ekko-server, der servicerer flere klienter samtidigt! Benyt en tråd for hver af klienterne.! public class MultiEchoServer {! public static void main(string[] args) {! try {! ServerSocket s = new ServerSocket(8009);! while (true) {! Socket incoming = s.accept();! new ClientHandler(incoming).start();! } catch (Exception e) {}! Klassen ClientHandler! public class ClientHandler extends Thread {! protected Socket incoming;! public ClientHandler(Socket incoming) {! this.incoming = incoming;! public void run() {! try {! BufferedReader in = new BufferedReader(! new InputStreamReader(! incoming.getinputstream()));! PrintWriter out = new PrintWriter(! new OutputStreamWriter(!!! incoming.getoutputstream())); 21! 22! out.println("hello!...");! out.println("enter BYE to exit.");! out.flush();! while (true) {! String str = in.readline();! if (str == null)! break;! out.println("echo: " + str);! out.flush();! if (str.trim().equals("bye"))! break;! in.close();! out.close();! incoming.close();! } catch (Exception e) {}! Rundsending af meddelelser til flere klienter! Udvikling af en chat-server, der! håndterer flere klienter samtidigt! rundsender en meddelelse, der modtages fra en klient til alle andre klienter! Der er behov for at holde rede på alle aktive klienter.! 23! 24!

7 Chat! ChatServer! public class ChatServer {!!!!!public ChatServer(int port) throws IOException {!! ServerSocket s = new ServerSocket(port);!! while (true)!!!!!! new ChatHandler(s.accept()).start();!!!!!!!!!!!public static void main(string[] args)!!!! throws IOException {!! if (args.length!= 1)!!!!! throw new RuntimeException(!!! "Syntax: java ChatServer <port>");! new ChatServer(Integer.parseInt(args[0]));!}!!!!!!! 25! 26! ChatHandler! public class ChatHandler extends Thread {!!Socket socket;!!datainputstream in;!!dataoutputstream out;!!static Set<ChatHandler> handlers = new HashSet<ChatHandler>();!!public ChatHandler(Socket socket) throws IOException {!! this.socket = socket;!! in = new DataInputStream(socket.getInputStream());!! out = new DataOutputStream(socket.getOutputStream());!! handlers.add(this);!! 27! public void run() {!!!!!!!String name = "";!!!!!!try {!!!!!!!! name = in.readutf();!! System.out.println("New client " + name + " from " +!! socket.getinetaddress());!!! broadcast(name + " entered");!! while(true)!!!!!!! broadcast(name + ": " + in.readutf());!!} catch (IOException e) {!!!!!! System.out.println("-- Connection to user lost.");!!} finally {!!!!!!! handlers.remove(this);!! try {!!!!!!!! broadcast(name + " left");!!!!!! in.close();!!!!!! out.close();!!!!!! socket.close();!!!!! } catch (IOException e) {}! }!!!!!!!!! 28!

8 !static synchronized void broadcast(string message)!! throws IOException {!! for (ChatHandler handler : handlers) {!! handler.out.writeutf(message);!! handler.out.flush();!!!}! Bemærk, at metoden skal være synchronized.! 29! ChatClient! public class ChatClient {!!String name;!!socket socket;!!datainputstream in;!!dataoutputstream out;!!chatframe gui;!!!!!public ChatClient(String name, String server, int port) {!! try {!! this.name = name;!! socket = new Socket(server, port);!! in = new DataInputStream(socket.getInputStream());!! out = new DataOutputStream(socket.getOutputStream());!! out.writeutf(name);!! gui = new ChatFrame(this);!! while (true)!! gui.output.append(in.readutf() + "\n");!! } catch (IOException e) {! 30!!void sendtexttochat(string str) {!! try {!! out.writeutf(str);!! } catch (IOException e) { e.printstacktrace();!!void disconnect() {!!try {!! in.close();!! out.close();!! socket.close();!!} catch (IOException e) { e.printstacktrace();!!public static void main(string[] args) throws IOException {!!if (args.length!= 3)!! throw new RuntimeException(! "Syntax: java ChatClient <name> <serverhost> <port>");!!new ChatClient(args[0], args[1], Integer.parseInt(args[2]);!! 31! import java.awt.*;! import java.awt.event.*;! import javax.swing.*;! ChatFrame! public class ChatFrame extends JFrame {!!JTextArea output = new JTextArea();!!JTextField input = new JTextField();!!public ChatFrame(final ChatClient client) {!! super(client.name);!! Container pane = getcontentpane();!! pane.setlayout(new BorderLayout());!! pane.add(new JScrollPane(output), BorderLayout.CENTER);!! output.seteditable(false);!! pane.add(input, BorderLayout.SOUTH);! 32!

9 ! input.addkeylistener(new KeyAdapter() {!! public void keypressed(keyevent e) {!! if (e.getkeycode() == KeyEvent.VK_ENTER) {!! client.sendtexttochat(input.gettext());!! input.settext("");!!!!});!! addwindowlistener(new WindowAdapter() {!! public void windowclosing(windowevent e) {!!! client.disconnect();!! System.exit(0);!!!!});!! setsize(400, 200);!! setvisible(true);!! input.requestfocus();!! Fjernmetodekald! RMI (Remote Method Invocation)! Objekter på fjerne værtsmaskiner kan manipuleres, som om de befandt sig på den lokale maskine.! client:! server! klient-vært! server.m()! server:! void m()! server-vært! 33! 34! RMI-arkitekturen! Client! Stub! JVM! Server! Skeleton! JVM! Client:!!!!!!!!!Et objekt på klient-værten! Server:!!!!!!!!!Et objekt på server-værten, der servicerer klienter! Stub:!!!!!!!!!Et objekt på klient-værten, der udgør en erstatning for Server-objektet! Skeleton:!!!!!!!!!Et objekt på server-værten, der modtager forespørgsler fra stubbe og!videresender dem til Server-objektet! Service contract:!!!!!!!!!en grænseflade, der specificerer, hvilke tjenester, serveren kan yde! 35! Client! 1! Stub! JVM! RMI-kald! Server! 6! 3! 4! 2! 5! Skeleton! JVM! Kald af server.m() i klienten:! 1.!Den tilsvarende stubmetode, stub.m(), kaldes! 2. Stubben serialiserer argumenter og sender argumenter og kaldinformation til skelettet! 3. Skelettet deserialiserer argumenter og kaldinformation, og kalder metoden m() i serveren! 4.!Serveren udfører metoden og returnerer resultatet til skelettet! 5.!Skelettet serialiserer resultatet og sender det til stubben! 6.!Stubben deserialiserer resultatet og returnerer det til klienten! 36!

10 RMI-programmering! Server, Client og Service contract skrives af programmøren.! Parameteroverførsel! Ved et fjernmetodekald overføres lokale (nonremote) objekter ved værdi-overførsel (serialisering), medens fjerne (remote) objekter overføres ved reference-overførsel.! Stubbe og skeletter genereres af en RMI-oversætter (f.eks. rmic) ud fra den oversatte Server-klasse.! 37! 38! RMI-registrering! Enhver RMI-server identificeres ved en URL med protokollen rmi.!!!!!!!rmi://host:port/name!!!!!!!!!!host: værtsnavn for RMI-kataloget!(hvis udeladt: localhost)!!!port: portnummer for RMI-kataloget (hvis udeladt: 1099)!!!name: navnet tilknyttet serveren! Serveren registreres på server-værten i et RMI-katalog.! Denne proces kaldes binding:!!!!!!!!!!!naming.bind(name, server)! 39! Opslag i RMI-kataloget! En klient kan lokalisere en RMI-server ved at slå op i RMIkataloget:! Remote server = Naming.lookup(url)! 40!

11 Operationer på RMI-kataloget! (statiske metoder i Naming)! static void bind(string name, Remote obj)! static void rebind(string name, Remote obj)! static void unbind(string name)! static Remote lookup(string url)! static String[] list(string url)! Anvendelse af RMI! 1. Definer en grænseflade for Server-objektet.! public interface Contract extends Remote {! public void aservice(...) throws RemoteException;!!// other services! Denne udgør kontrakten imellem serveren og dens klienter.! Grænsefladen skal udvide grænsefladen Remote.! Hver af servicemetoderne skal erklæres, således at den kan kaste en RemoteException.! Argumenternes typer skal være serialiserbare.!! 41! 42! 2.!Definer en klasse, der implementerer kontrakten.!!klassen skal nedarve fra klassen UnicastRemoteObject. 3.!Skab en instans af serveren og registrer den i RMI-!!kataloget.!! public class ServiceProvider extends UnicastRemoteObject!!!! implements Contract {! public void aservice(...) throws RemoteException {! // implementation!!// implementation of other services! Contract remoteobj = new ServiceProvider(...);! Naming.rebind(name, remoteobj);! 4.!Generer stub- og skelet-klasserne ved hjælp af RMI-!!oversætteren.! 43! 44!

12 5. Programmér en klient, der bruger de tjenester, som serveren udbyder.!!!!!! For at bruge et fjernt objekt, må klienten først lokalisere objektet ved hjælp af RMI-kataloget.! Contract serverobj = (Contract) Naming.lookup(url);!! //...! serverobj.aservice(...);! //...! AClient! Struktur af RMI-applikationer! Remote! UnicastRemoteObject! Contract! aservice()! ServiceProvider_Stub! aservice()! ServiceProvider! aservice()! 45! 46! Designmønsteret Proxy! Designmønsteret Proxy! (fortsat)! Kategori:!!!!!!!!Strukturelt designmønster! Hensigt:!!!!!!!!At tilbyde en erstatning for et andet objekt.! Struktur:! Client! Subject! Anvendelse:!!Når der er brug for en mere raffineret reference til et objekt end en!!simpel reference! Proxy! RealObject! 47! 48!

13 Designmønsteret Proxy! (fortsat)! Deltagere:!!!!!!!!!!!!!!!!!Proxy (f.eks. ServiceProvider_Stub), der har en reference, der kan!bruges til at referere det virkelige objekt, og som implementerer Subject-!grænsefladen!!Subject (f.eks. Contract), der definerer en fælles grænseflade for Subject!og Proxy, således at Proxy kan bruges overalt, hvor Subject forventes!!realobject (f.eks. ServiceProvider), der definerer det virkelige objekt,!som Proxy repræsenterer! 49! Udvikling af et RMI-baseret chat-system! Fjernmetodekald på både server- og klientside.!!server:!!!!!!!login!!!!!!!logout!!!!!!sendmessage!!client:!!!!!!!receivelogin!!!!!receivelogout!!!!!receivemessage! 50! Grænseflader! Message! public interface ChatServerInterface extends Remote {!!public void login(string name, ChatClientInterface newclient)! throws RemoteException;!!public void logout(string name) throws RemoteException;!!!public void sendmessage(message message) throws RemoteException;! public interface ChatClientInterface extends Remote {! public void receivelogin(string name) throws RemoteException;! public void receivelogout(string name) throws RemoteException;! public void receivemessage(message message) throws RemoteException;! public class Message implements java.io.serializable {!!public String name, text;!!public Message(String name, String text) {!!this.name = name;!!this.text = text;!! 51! 52!

14 import java.rmi.*;! import java.rmi.server.*;! import java.rmi.registry.*;! import java.util.*;! ChatServer! public class ChatServer extends UnicastRemoteObject!! implements ChatServerInterface {!!Map<String, ChatClientInterface> chatters =! new HashMap<String, ChatClientInterface>();!!public ChatServer() throws RemoteException {!public synchronized void login(string name,!! ChatClientInterface newclient) throws RemoteException {!! chatters.put(name, newclient);!!! for (ChatClientInterface client : chatters.values())! client.receivelogin(name);!! 53!!public synchronized void logout(string name)!! throws RemoteException {!! chatters.remove(name);!! for (ChatClientInterface client : chatters.values())! client.receivelogout(name);!! System.out.println("client " + name + " logged out");!!!public synchronized void sendmessage(message message)!! throws RemoteException {!! for (ChatClientInterface client : chatters.values())! client.receivemessage(message);!!!public static void main(string[] args) {!! try {!! LocateRegistry.createRegistry(1099);!! Naming.rebind("ChatServer", new ChatServer());!! } catch (Exception e) { e.printstacktrace();! 54! ChatClient! public class ChatClient extends UnicastRemoteObject!! implements ChatClientInterface {!!String name;!!chatserverinterface server;!!chatframe gui;!!public ChatClient(String name, String url) throws RemoteException {!! this.name = name;!! try {!! server = (ChatServerInterface)!! java.rmi.naming.lookup("rmi://" + url + "/ChatServer");!! server.login(name, this);!!} catch (Exception e) { e.printstacktrace();! gui = new ChatFrame(this);!!!public void receivelogin(string name) {!!gui.output.append(name + " entered\n");!!!public void receivelogout(string name) {!!gui.output.append(name + " left\n");!!!public void receivemessage(message message) {!! gui.output.append(message.name + ": " + message.text + "\n");!! 55! 56!

15 !void sendtexttochat(string text) {!!try {!! server.sendmessage(new Message(name, text));!!} catch (RemoteException e) { e.printstacktrace(); }!!!void disconnect() {!!try {!! server.logout(name);!!} catch (Exception e) { e.printstacktrace();!!!!public static void main(string[] args) {!! if (args.length!= 2)!! throw new RuntimeException(!! "Usage: java ChatClient <user> <host>");!! try {!! new ChatClient(args[0], args[1]);!! } catch (RemoteException e) { e.printstacktrace(); }! }! 57! Børsnoteringer! Studér lærebogens design af client/server-programmel til! løbende underretning om aktiekurser.!!client pull:!!!!!!!!klienterne kontakter serveren med passende mellemrum!!for at få oplyst de aktuelle kurser!!client push:!!!!!!!!serveren underretter interesserede klienter, når kurserne!!ændres! Socket-baserede udgaver:!s !!!! RMI-baserede udgaver: s ! 58! JDBC! Java Database Connectivity! Eksempel på en database! JDBC er en API, der tillader et Java-program at tilgå relationelle databaser.! JDBC tilbyder en simpel grænseflade til SQL (Structured Query Language).! name! address!! city state zip! ! creditcard orderno! M. Jordan!549 E. [email protected]!Visa! ! S. Pippen!11 S. [email protected]!Discover! ! D. Rodman!234 N. [email protected]!MasterCard! ! S. Kerr!4010 Pine!Los [email protected]!Visa! ! R. Harper!234 N. 3rd!New [email protected]!MasterCard! ! Muliggør:!!skabelse af en database!!indsættelse, søgning og opdatering!!tilgang til metadata! 59! 60!

16 Basale SQL-kommandoer! JDBC-drivere! INSERT!Indsætter en eller flere nye rækker i en tabel! DELETE!Sletter en eller flere rækker i en tabel! UPDATE! Modificerer værdierne i en eller flere rækker i en tabel! SELECT!Udvælger information baseret på en betingelse! CREATE!Skaber et nyt databaseobjekt! DROP!Fjerner et eksisterende databaseobjekt! En driver udgør bindeledet imellem program og database.! Der er fire typer:!!(1) JDBC-ODBC-bro:!-> ODBC (Open Data Base Connectivity)!!(2) Native-API (delvis Java):!-> DBMS!!(3) Net-protocol (ren Java):!-> netprotokol -> DBMS!!(4) Native-protocol (ren Java):!-> DBMS netprotokol! ALTER!Ændrer formatet for et eksisterende databaseobjekt! 61! 62! Ikke-kommercielle JDBC-drivere! (open source type 4 drivere)! MySQL Application! JDBC-interaktion! ResultSet! ResultSet! executeupdate! executequery! executeupdate! executequery! PreparedStatement! Statement! preparestatement! createstatement! Connection! getconnection! ResultSet! execute! CallableStatement! preparecall! Cloudscape ODBC Driver! DriverManager! JDBC-ODBC Bridge! Class.forName! Sybase Driver! ODBC Driver! PostgreSQL Oracle! Database! ODBC! Database! Sybase! Database! 63! 64!

17 Skabelse af en JDBC-tabel! 1. Driveren hentes! 2. Forbindelse til database etableres! import java.sql.*;! import java.io.*;! public class BuildBeetlesTable {! public static void main(string args[])! throws SQLException, IOException {! System.out.println("Loading JDBC driver...");! try {! Class.forName("com.mysql.jdbc.Driver");! } catch(classnotfoundexception e) {! System.exit(1);! }! System.out.println("Connecting to Orders database...");! String url = "jdbc:mysql://localhost/ordersdriver";! String user = "keld";! String password = "xyz123";!!! Connection conn = DriverManager.getConnection(url,! user,!!!!! password);! conn.setautocommit(false);! 65! 66! 3. En tabel skabes! 4. En række indsættes! System.out.print("Building new Beetles table...\n\n");! Statement stmt = conn.createstatement();! String createstring =! "CREATE TABLE Beetles (name VARCHAR(35), " +! "address VARCHAR(35), " +! "city VARCHAR(20), " +! "state VARCHAR(2), " +! "zip VARCHAR(5), " +! " VARCHAR(30), " +! "creditcard VARCHAR(15))";! stmt.executeupdate(createstring);! System.out.print("Inserting test row in Beetles table...\n\n");! String insertstring =! "INSERT INTO Beetles VALUES ('Michael Owen', " +! "'123 Elmwood Street', " +! "'Lake Forest', " +! "'IL', " +! "'65431', " +! "'[email protected]', " +! "'MasterCard')";! stmt.executeupdate(insertstring);! 67! 68!

18 5. Tabellens indhold udskrives! 6. Ressourcer frigives, og forbindelsen til databasen lukkes! ResultSet rset = stmt.executequery("select * FROM Beetles");! while (rset.next()) {! System.out.print(" ");! System.out.print(rset.getString("name") + ", ");! System.out.print(rset.getString(2) + ", " );! System.out.print(rset.getString(3) + ", " );! System.out.print(rset.getString(4) + ",\n ");! System.out.print(rset.getString(5) + ", ");! System.out.print(rset.getString(6) + ", ");! System.out.print(rset.getString(7) + "\n");! System.out.println("Closing database connection...");! conn.commit();! // make changes permanent! stmt.close();! rset.close();! conn.close();! // release DBMS ressources! 69! 70! Modifikation af en JDBC-tabel! 1. Driveren hentes! 2. Forbindelse til database etableres! import java.sql.*;! import java.io.*;! import java.util.calendar;! public class ModifyBeetlesTable {! public static void main(string args[])! throws SQLException, IOException {! System.out.println("Loading JDBC driver...");! try {! Class.forName("com.mysql.jdbc.Driver");! } catch(classnotfoundexception e) {! System.exit(1);! }! 71! System.out.println("Connecting to Beetles table...");! String url = "jdbc:mysql://localhost/ordersdriver" +! "?user=keld&password=xyz123";! Connection conn = DriverManager.getConnection(url);! conn.setautocommit(false);! 72!

19 3. Der tilføjes et ekstra felt (søjle)! 4. En række i tabellen opdateres! stmt = conn.createstatement();! System.out.print("Modifying Beetles table...\n\n");! String updatestring =! "ALTER TABLE Beetles ADD ORDERNO VARCHAR(12) ;! stmt.executeupdate(updatestring);! Calendar cal = Calendar.getInstance();! String orderno = String.valueOf(cal.get(cal.MONTH) + 1) +! String.valueOf(cal.get(cal.DAY_OF_MONTH)) +! String.valueOf(cal.get(cal.YEAR)) +! String.valueOf(cal.get(cal.HOUR)) +! String.valueOf(cal.get(cal.MINUTE)) +! String.valueOf(cal.get(cal.SECOND));! updatestring = "UPDATE Beetles SET ORDERNO = " + orderno +! " WHERE NAME='Michael Owen'";! stmt.executeupdate(updatestring);! 73! 74! 5. Tabellens indhold udskrives! 6. En række slettes! System.out.print("Displaying table contents...\n\n");! ResultSet rset = stmt.executequery("select * FROM Beetles");! while (rset.next()) {! System.out.println(" " +! rset.getstring("name") + ", " +! rset.getstring("address") + ", " +! rset.getstring("city") + ", " +! rset.getstring("state") + "\n " +! rset.getstring("zip") + ", " +! rset.getstring(" ") + ", " +! rset.getstring("creditcard") + ", " +! rset.getstring("orderno") );! System.out.println("Deleting test record...");! updatestring = "DELETE FROM Beetles WHERE NAME='Michael Owen'";! stmt.executeupdate(updatestring);! 75! 76!

20 7. Ressourcer frigives, og forbindelsen til databasen lukkes! System.out.println("Closing database connection...");! conn.commit();! stmt.close();! rset.close();! conn.close();! E-handel med en ordre-database! import java.util.calendar;! import java.awt.event.*;! import javax.swing.*;! import java.sql.*;! import java.io.*;! public class JdbcOrderDialog extends OrderDialog {! public JdbcOrderDialog(JFrame owner) {! super(owner);! protected ActionListener makebuttonhandler() {! return new JdbcButtonHandler();! class JdbcButtonHandler implements ActionListener {... }! 77! 78! class JdbcButtonHandler implements ActionListener {! public void actionperformed(actionevent evt) {! JButton button = (JButton) evt.getsource();! String label = button.gettext();! if (label.equals("ok") {! try {! insertneworder();! } catch (IOException IOex) { dialogpanel.reset();! setvisible(false);! public void insertneworder()! throws SQLException, IOException {... }! 79! public void insertneworder() throws SQLException, IOException {! System.out.print("Loading JDBC driver...\n\n\n" );! try {! Class.forName("com.mysql.jdbc.Driver");! } catch (ClassNotFoundException e) {! System.exit(0);! String url = "jdbc:mysql://localhost/ordersdriver" +! "?user=keld&password=xyz123";! Connection conn = DriverManager.getConnection(url);! Statement stmt = conn.createstatement();! String creditcard = null;! if (dialogpanel.visabox.isselected())! creditcard = "Visa";! else if (dialogpanel.mcbox.isselected())! creditcard = "MasterCard";! else if (dialogpanel.discoverbox.isselected())! creditcard = "Discover";! //...! 80!

21 Calendar cal = Calendar.getInstance();! String orderno = String.valueOf(cal.get(cal.MONTH)+1) +! String.valueOf(cal.get(cal.DAY_OF_MONTH)) +! String.valueOf(cal.get(cal.YEAR)) +! String.valueOf(cal.get(cal.HOUR)) +! String.valueOf(cal.get(cal.MINUTE)) +! String.valueOf(cal.get(cal.SECOND));! String insertstring =! "INSERT INTO Beetles VALUES( " +! "'" + dialogpanel.namefield.gettext()!+ "'," +! "'" + dialogpanel.addressfield.gettext()!+ "'," +! "'" + dialogpanel.cityfield.gettext()!+ "'," +! "'" + dialogpanel.statefield.gettext()!+ "'," +! "'" + dialogpanel.zipfield.gettext()!+ "'," +! "'" + dialogpanel. field.gettext()!+ "'," +! "'" + creditcard!+ "'," +! "'" + orderno!+ "')";! stmt.executeupdate(insertstring);! stmt.close();! conn.commit();! conn.close();! 81! CORBA! Common Object Request Broker Architecture! CORBA er et framework, der muliggør samspil imellem objekter, der er implementeret i forskellige sprog.! Arkitekturen er helt analog til RMI s.! Client! Stub! ORB! Server! Skeleton! ORB! Serverkontrakten defineres i IDL (Interface Definition Language)! 82! Andre Java-teknologier! JavaBeans!!!!!!!!Et framework til at definere genbrugelige program-!!komponenter, der kan manipuleres visuelt.!!!teknologien baseres på overholdelsen af en række!!navnekonventioner.! Enterprise JavaBeans!!!!!!Udvidelse af JavaBeans med beholder-baserede!!objekter, der kan kommunikere indbyrdes via netværk.! 83! Java Media Framework!!!!!!Java Sound!!!!!!!Java Speech!!!!!!!Java Telephony!!!!!!Java 2D!!!!!!!Java 3D!!!!!!!Java Advanced Imaging! Java Cryptography Extension!! Understøtter fortrolighed ved kommunikation over netværk! Jini!!!!!!! Gør det muligt for forskellige digitale enheder let og hurtigt at udveksle tjenester i et netværk.! 84!

22 Ugeseddel 9" 26. oktober - 2. november!!intet læsestof og ingen øvelsesopgaver.!!der arbejdes med afleveringsopgaven.!!næste kursusgang afholdes opgaveseminar og kursus-!evaluering. Hver opgavegruppe bedes forberede en 10!minutters fremlæggelse:!!!1. Hvad går opgaven ud på?!!!!!2. Hvor langt er gruppen nået?"""""""""""!!!!3. Hvilke delopgaver mangler at blive løst?! 85!

Databaseadgang fra Java

Databaseadgang fra Java Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,

Læs mere

Eksempel på en database: studenter, kurser, eksamener

Eksempel på en database: studenter, kurser, eksamener Udvidet Programmering 1999 Forelæsning 20, fredag 12. november 1999 Relationsdatabaser: relationer, tupler, attributter Forespørgselssproget SQL Databasesystemet PostgreSQL Tilgang til relationsdatabaser

Læs mere

MySQL i Java. Tutorial lavet af Jákup W. Hansen TSU 2006 2.semester 05.januar 2007

MySQL i Java. Tutorial lavet af Jákup W. Hansen TSU 2006 2.semester 05.januar 2007 MySQL i Java Tutorial lavet af Jákup W. Hansen TSU 2006 2.semester 05.januar 2007 Hvad er MySQL? Det er et database system, som er gratis for os at bruge. Det er lidt mere besværligt i starten at bruge

Læs mere

Web- og serverprogrammering

Web- og serverprogrammering Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Web- og serverprogrammering Databasekommunikation - dag 7 Strategier til databaseadgang JDBC (Java DataBase Connectivity)

Læs mere

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation). Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer

Læs mere

Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation

Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation Plan 12.3. Oversigt over grundlæggende begreber Java: eksempel på applikation, programmering og oversættelse Uddybning af grundlæggende begreber Java RMI implementation Forklaring af øvelsen Hvad er et

Læs mere

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

Læs mere

RMI med BlueJ. Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 11. desember 2007

RMI med BlueJ. Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 11. desember 2007 RMI med BlueJ Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 11. desember 2007 Hvad er RMI? Når man arbejder med Distribuerede Systemer, som igen vil sige at man ønsker at flere end én komputer

Læs mere

Rigtig SQL Programmering

Rigtig SQL Programmering Rigtig SQL Programmering 1 SQL i Rigtige Programmer Indtil nu har vi brugt SQL direkte i kommandolinje promt/gui program, hvor vi kan lave forespørgsler til databasen I virkeligheden: Programmer kontakter

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 3 Skabende designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Eksempel: Forskellige slags

Læs mere

Computer netværk og TCP/IP protokoller. dcomnet 1

Computer netværk og TCP/IP protokoller. dcomnet 1 Computer netværk og TCP/IP protokoller dcomnet 1 Maskinarkitektur.. fokus på intern organisation af en enkelt computer: dcomnet 2 Computer netværk.. kommunikation mellem maskiner forbindet i et netværk:

Læs mere

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering Skriftlig eksamen i Grundlæggende Programmering ITU, 20. januar 2000 Alle hjælpemidler tilladt, dog ikke datamat. Eksamen er skriftlig, fire timer, og bedømmes efter 13-skalaen. Opgavesættet består af

Læs mere

Computer netværk og TCP/IP protokoller. dcomnet 1

Computer netværk og TCP/IP protokoller. dcomnet 1 Computer netværk og TCP/IP protokoller dcomnet 1 Maskinarkitektur.. fokus på intern organisation af en enkelt computer: dcomnet 2 Computer netværk.. kommunikation mellem maskiner forbindet i et netværk:

Læs mere

Objektorienterede metoder

Objektorienterede metoder Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags

Læs mere

A Profile for Safety Critical Java

A Profile for Safety Critical Java A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren

Læs mere

Computer Networks Specielt om Infrastrukturer og Teknologi

Computer Networks Specielt om Infrastrukturer og Teknologi Computer Networks Specielt om Infrastrukturer og Teknologi Ole Borch Slide 1 Doc Bud på arkitektur (som mange andre steder) Sygehus Hemmelig Meget hemmelig WWW browser WWW Server Dataplejer Staklen Internet

Læs mere

Hvordan vælger jeg dokumentprofilen?

Hvordan vælger jeg dokumentprofilen? Hvordan vælger jeg dokumentprofilen? Valget af OIOUBL profil i en konkret dokumentudveksling vil bl.a. afhænge af, hvilke OIOUBL profiler den anden part i udvekslingen understøtter. Et konkret eksempel

Læs mere

Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere

Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere Integrationsmanual Anvendelse af webservice til kursusoversigt i Campus Brugervejledning til udviklere Moderniseringsstyrelsen Webservice manual til udviklere 2016 1 1. Indholdsfortegnelse Nyt kapitel

Læs mere

Kursus navn: Indledende programmering Kursus nr. 02101

Kursus navn: Indledende programmering Kursus nr. 02101 Danmarks Tekniske Universitet Side 1 af 8 sider Skriftlig prøve, den 15. december 2007 Kursus navn: Indledende programmering Kursus nr. 02101 Tilladte hjælpemidler: Alle skriftlige hjælpemidler Vægtning

Læs mere

SigmaT.

SigmaT. Java + Groovy Disposition Om SigmaT Eksempel på indlejring af Groovy Overvågning af PEM Ønske om dynamisk loaded Java uden at fifle med classloaderen Groovy til hjælp Opsamling hvad jeg ikke har fortalt

Læs mere

1 Domæne 2 1.1 Design valg... 2 1.1.1 User... 2. 2 Klassediagran 5

1 Domæne 2 1.1 Design valg... 2 1.1.1 User... 2. 2 Klassediagran 5 INDHOLD 1 Domæne 2 1.1 Design valg.................................... 2 1.1.1 User.................................... 2 2 Klassediagran 5 3 Serbio 7 3.1 Kommunikation..................................

Læs mere

Webserverprogrammering

Webserverprogrammering Webserverprogrammering WSP fortsat - dag 11 Behandling af XML (StAX) Syndikering og RSS med XML JAXB - XML Java-objekter Projekthjælp Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

Læs mere

Servlets, Tomcat & BlueJ

Servlets, Tomcat & BlueJ Servlets, Tomcat & BlueJ Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 05.october 2007 Hvad er Servlets: For at forstå det, må vi først få styr på to begreber, nemlig statiske og dynamiske hjemmesider

Læs mere

Eksamen, DSDS, efterår 2008

Eksamen, DSDS, efterår 2008 Eksamen, DSDS, efterår 2008 Introduktion til Scripting, Databaser og Systemarkitektur Jonas Holbech IT Universitetet i København 6. januar 2009 Alle hjælpemidler er tilladte, dog ikke computer og kommunikationsmidler.

Læs mere

Singleton pattern i Java

Singleton pattern i Java Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.

Læs mere

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004 Genbrugelige komponenter og designmønstre i Java Jacob Nordfalk Ingeniørhøjskolen i København Nykøbing F itvisioncenter 24. februar 2004 Program Om Jacob Nordfalk introduktion (ikke-teknisk del) Komponentbaseret

Læs mere

educasoft - en professionel samarbejdspartner med speciale i uddannelse!

educasoft - en professionel samarbejdspartner med speciale i uddannelse! Velkommen til educasoft's hjemmeside educasoft - en professionel samarbejdspartner med speciale i uddannelse! Professionelle undervisere Undervisning i virksomheden Undervisning dag/aften eller week-end

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

Bookie. IT-Universitetet i København. Grundlæggende Programmering. Eksamensprojekt. Forfattere: Sigrid Gyldenkærne Dalsgard Kasper Kronborg Isager

Bookie. IT-Universitetet i København. Grundlæggende Programmering. Eksamensprojekt. Forfattere: Sigrid Gyldenkærne Dalsgard Kasper Kronborg Isager IT-Universitetet i København Grundlæggende Programmering Eksamensprojekt Bookie Forfattere: Sigrid Gyldenkærne Dalsgard Kasper Kronborg Isager Vejleder: Jesper Wendel Madsen 17. december 2014 Resumé Indhold

Læs mere

Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i)

Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i) Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i) 1: KLASSE METODE KONSTRUKTØR EKS. PÅ TYPE (VARIABLE) PUBLIC/PRIVATE OBJECT UD FRA KLASSE KALD METODE TILFØR PARAMETER TIL METODE RETURNERE VARIBEL.

Læs mere

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater Design by Contract Design and Programming by Contract Anne Haxthausen [email protected] Informatics and Mathematical Modelling Technical University of Denmark Design by Contract er en teknik til at specificere

Læs mere

Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse.

Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse. Mysqli Webintegrator Når vi arbejder med server-side scripting ( i vort tilfælde PHP), har vi ofte behov for at kunne tilgå data, som vi opbevarer i en database. Det kan f.eks. dreje sig om nyhederne i

Læs mere

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Denne guide er oprindeligt udgivet på Eksperten.dk Threads i Java Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java Den forudsætter

Læs mere

Sikker netværkskommunikation

Sikker netværkskommunikation Eksamensprojekt IT Sikker netværkskommunikation Af Nicklas Bo Jensen Klasse 3.4 RTG Vejleder: Piotr Dzierzynsky Side 1 af 14 Indholdsfortegnelse Indledning... 3 Netværk... 4 Sniffing... 4 Løsning... 6

Læs mere

Bilagsrapport til specialet Flash-light

Bilagsrapport til specialet Flash-light Bilagsrapport til specialet Flash-light Af Filip Nicolaisen og Kasper Storm Afleveret Maj 2006 Vejledere: Mads Rosendahl (Datalogi) Bjørn Laursen (Kommunikation) Indholdsfortegnelse - Bilag Bilag 1. 1

Læs mere

Google App Engine. Google App Engine som platform. Claus Myglegaard Vagner og Jacob von Eyben

Google App Engine. Google App Engine som platform. Claus Myglegaard Vagner og Jacob von Eyben GoogleAppEngine GoogleAppEnginesomplatform ClausMyglegaardVagnerogJacobvonEyben Abstract CloudcomputingerenteknologidervinderfremidengenerelleITinfrastruktur. SocialemediersåsomLinkedIn,TwitterogFacebookharøgetbehovetfor

Læs mere

Sikring af netværkskommunikation

Sikring af netværkskommunikation Sikring af netværkskommunikation Som udgangspunkt kan sikring af en netværkskommunikation foretages på et vilkårligt lag i netværksprotokolstakken. Hvis vi ser på TCP/IP protokolstakken vil det sige at

Læs mere

BRP 6.9.2006 Kursusintroduktion og Java-oversigt

BRP 6.9.2006 Kursusintroduktion og Java-oversigt BRP 6.9.2006 Kursusintroduktion og Java-oversigt 1. Kursusintroduktion 2. Java-oversigt (A): Opgave P4.4 3. Java-oversigt (B): Ny omvendings -opgave 4. Introduktion til næste kursusgang Kursusintroduktion:

Læs mere

Løsning af møntproblemet

Løsning af møntproblemet Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

Test af It-komponent

Test af It-komponent Test af It-komponent I programmeringssproget Java Programmet Login service Elev: Mads Funch Klasse 2.4 Mat, It, Programmering Skole: Roskilde Tekniske Gymnasium HTX Underviser: Karl Dato: 31-08-2016 Side

Læs mere

Tredjepart webservices

Tredjepart webservices Tredjepart webservices 4. juni 2015 USS Dok. Klik her for at angive tekst. 1/12 Indholdsfortegnelse Introduktion... 3 Miljøer... 3 Adgang... 3 API kald... 4 GET: /authorizations... 4 Input 4 Output 4 Output

Læs mere

Interaktionsudvikling

Interaktionsudvikling Projektopgave 3: Interaktionsudvikling CPH business, klasse: MulA2013 Projektansvarlige undervisere Thomas Hartmann MereteGeldermann lützen: Projekt produkt url: www.amalieardahl.dk/projekt3/index.html

Læs mere

Det er muligt at chekce følgende opg. i CodeJudge: og

Det er muligt at chekce følgende opg. i CodeJudge: og Det er muligt at chekce følgende opg. i CodeJudge:.1.7 og.1.14 Exercise 1: Skriv en forløkke, som producerer følgende output: 1 4 9 16 5 36 Bonusopgave: Modificer dit program, så det ikke benytter multiplikation.

Læs mere

SIP. Session Initiation Protocol. TDC IP telefoni Scale

SIP. Session Initiation Protocol. TDC IP telefoni Scale SIP Session Initiation Protocol TDC IP telefoni Scale SIP design mål Give mulighed for at integrere nye faciliteter efterhånden som de opfindes SIP er ikke en erstatning for det offentlige telefonnet -

Læs mere

Løsning af skyline-problemet

Løsning af skyline-problemet Løsning af skyline-problemet Keld Helsgaun RUC, oktober 1999 Efter at have overvejet problemet en stund er min første indskydelse, at jeg kan opnå en løsning ved at tilføje en bygning til den aktuelle

Læs mere

Kursus i OOP og Java

Kursus i OOP og Java Kursus i OOP og Java Sidst opdateret 24. november 2001 kun afpudset t.o.m lektion 12 Indholdsfortegnelse Kursus i OOP og Java 1 Til underviseren 5 Om transparenterne 5 Om ugesedlerne 5 Lektion 1 6 Mål

Læs mere

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

PHP 3 UGERS FORLØB PHP, MYSQL & SQL PHP 3 UGERS FORLØB PHP, MYSQL & SQL Uge 1 & 2 Det basale: Det primære mål efter uge 1 og 2, er at få forståelse for hvordan AMP miljøet fungerer i praksis, og hvordan man bruger PHP kodesproget til at

Læs mere

Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach ([email protected]) 2002

Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach (jeans@ruc.dk) 2002 Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach ([email protected]) 2002 På datalogi har vi en databaseserver, som de studerende på datalogi kan benytte til projekter og som også benyttes i forbindelse

Læs mere

Kursusgang 12. Oversigt: Sidste kursusgang Layout-manager Event-håndtering. Design af brugerflader 12.1

Kursusgang 12. Oversigt: Sidste kursusgang Layout-manager Event-håndtering. Design af brugerflader 12.1 Kursusgang 12 Oversigt: Sidste kursusgang Layout-manager Event-håndtering Design af brugerflader 12.1 Sidste kursusgang Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design

Læs mere

Data load og udtræk. 2. iteration: implmentation (test af backend) PHP mysql. Loade og parse XML (SimpleXML, Xpath) Filhåndtering i PHP JSON

Data load og udtræk. 2. iteration: implmentation (test af backend) PHP mysql. Loade og parse XML (SimpleXML, Xpath) Filhåndtering i PHP JSON Data load og udtræk 2. iteration: implmentation (test af backend) 1 PHP mysql Loade og parse XML (SimpleXML, Xpath) Filhåndtering i PHP JSON 2 Data udtræk PHP mysql: Processen 1. Forbind til MySQL server

Læs mere

Præsentation af BSK regionens identity and access management platform

Præsentation af BSK regionens identity and access management platform Regionshuset It digital forvaltning BSK programmet Olof Palmens alle 17 [email protected] www.regionmidtjylland.dk Præsentation af BSK regionens identity and access management platform BrugerStamdataKataloget

Læs mere

De vigtigste SQL-sætninger. SQL kap Oprette database. DDL og DML

De vigtigste SQL-sætninger. SQL kap Oprette database. DDL og DML SQL kap 6-7 + 17-20 DDL og DML 1 De vigtigste SQL-sætninger Data Definition Language (DDL) create table: opretter en ny tabel create unique index: tilføjer et index til en tabel drop table : sletter en

Læs mere

Skriftlig opgave. Designtanker i database-nære systemer

Skriftlig opgave. Designtanker i database-nære systemer Skriftlig opgave til eksamen for faget»databaser«designtanker i database-nære systemer Martin Ancher Holm Juni 2010 1 Intro Denne skriftlige opgave indeholder kort de daglige tanker jeg har omkring design

Læs mere