Java




Dies ist nur ein Testforum.

Java

Beitragvon geo » Di 9. Nov 2010, 12:30

RMI mit Datenbankanbindung
vorläufige Strucktur:

src
- server
--- app
------ DasProjekt_Server (main)
------ IProduktverwaltung (Interface, Remote)
------ Produktverwaltung (UnicastRemoteObject, impl: interface)
------ MeineConnection
--- data (Impl: Serialisable)
------ Lagerraum
------ Produkt
------ Lager.mdb
- client
--- gui
------ DasProjekt (JFrame, main)
--- app
------ DasProjektApp
Dateianhänge
101108_NeuesProjekt.zip
(1.11 MiB) 166-mal heruntergeladen
Code: Alles auswählen
http://0xd34dc0d3.kilu.de/forum/index.php
Benutzeravatar
geo
Administrator
 
Beiträge: 27
Registriert: So 11. Nov 2007, 19:50

von Anzeige » Di 9. Nov 2010, 12:30

Anzeige
 

server.app.DasProjekt_server

Beitragvon geo » Di 9. Nov 2010, 12:32

Code: Alles auswählen
package server.app;

import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class DasProjekt_Server {

   public static void main(String[] args) {
      try {
         LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
         Produktverwaltung app = new Produktverwaltung();
         Naming.rebind("Produktverwaltung",app);
      } catch (Exception e) {
         System.out.println("Programmabsturz...");
         exit(e);
      }
      System.out.println("Server wurde gestartet...");
   }

   private static void exit(Exception e)
   {
      e.printStackTrace();
      System.out.println("Server wird beendet");
      System.exit(1);
   }
}

}
Benutzeravatar
geo
Administrator
 
Beiträge: 27
Registriert: So 11. Nov 2007, 19:50

server.app.IProduktverwaltung

Beitragvon geo » Di 9. Nov 2010, 12:34

Code: Alles auswählen
package server.app;

import java.rmi.Remote;
import java.sql.SQLException;
import java.util.Vector;

import server.data.Lagerraum;
import server.data.Produkt;

public interface IProduktverwaltung extends Remote{
   // get
   public Vector<Lagerraum> getLager() throws Exception;
   public Vector<Produkt> getProdukte(String lagerraum) throws Exception;
   public Produkt getProdukt(Lagerraum lr, String obBegriff, String Bez) throws Exception;
   public void closeConnection() throws Exception;
//   
//   // db Insert/delete
//   public void addProdukt(Produkt p) throws SQLException;
//   public void addProduktEigenschaft(int id, String eigenschaft) throws SQLException;
//   public void deleteProdukt(Produkt p) throws SQLException;
//   
//   //db update
//   public void increaseMenge(Lagerraum lr, Produkt p, int anz) throws SQLException;
//   public void decreaseMenge(Lagerraum lr, Produkt p, int anz) throws Exception;
//   
//   public void setProduktTyp(int id, String typ) throws SQLException;
}
Code: Alles auswählen
http://0xd34dc0d3.kilu.de/forum/index.php
Benutzeravatar
geo
Administrator
 
Beiträge: 27
Registriert: So 11. Nov 2007, 19:50

server.app.Produktverwaltung

Beitragvon geo » Di 9. Nov 2010, 12:34

Code: Alles auswählen
package server.app;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.SQLException;
import java.util.Vector;

import server.data.Lagerraum;
import server.data.Produkt;

public class Produktverwaltung extends UnicastRemoteObject implements
      IProduktverwaltung {
   private static final long serialVersionUID = 6156620543228169882L;

   protected Produktverwaltung() throws RemoteException {}

   @Override
   public Vector<Lagerraum> getLager() throws SQLException, RemoteException, ClassNotFoundException{
      MeineConnection con = MeineConnection.getInstance();
      Vector<Lagerraum> lg = con.loadDB();
      return lg;
   }
   
   @Override
   public Vector<Produkt> getProdukte(String lagerraum) throws RemoteException {
      //Lagerraum lgr = lager.get(lager.lastIndexOf(lagerraum));
      return null;
   }

   @Override
   public Produkt getProdukt(Lagerraum lr, String obBegriff, String Bez) throws RemoteException {

      return null;
   }
//
//   @Override
//   public void deleteProdukt(Produkt p) {
//      // TODO Auto-generated method stub
//   }
//
//   @Override
//   public void increaseMenge(Lagerraum lr, Produkt p, int anz) {
//      // TODO Auto-generated method stub
//
//   }
//
//   @Override
//   public void decreaseMenge(Lagerraum lr, Produkt p, int anz) throws Exception {
//      // TODO Auto-generated method stub
//
//   }
//
//   @Override
//   public void addProdukt(Produkt p) {
//      // TODO Auto-generated method stub
//
//   }
//

   @Override
   public void closeConnection() throws Exception {
      MeineConnection.getInstance().closeConnection();
   }

//
//   @Override
//   public void addProduktEigenschaft(int id, String eigenschaft)
//         throws SQLException {
//      // TODO Auto-generated method stub
//
//   }
//
//   @Override
//   public void setProduktTyp(int id, String typ) throws SQLException {
      // TODO Auto-generated method stub
//
//   }
}

Code: Alles auswählen
http://0xd34dc0d3.kilu.de/forum/index.php
Benutzeravatar
geo
Administrator
 
Beiträge: 27
Registriert: So 11. Nov 2007, 19:50

server.app.MeineConnection

Beitragvon geo » Di 9. Nov 2010, 12:35

Code: Alles auswählen
package server.app;

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import server.data.Lagerraum;
import server.data.Produkt;

class MeineConnection {
   private Connection             connection;
   private Statement              query;
   private static MeineConnection instance = null;

   private MeineConnection() throws ClassNotFoundException, SQLException {
      String url = "";
      //
      File f = new File("src\\server\\data\\Lager.mdb");
      System.out.println(f.getAbsolutePath() + " - " + f.exists());
     
      //
      // Lade den Connectionstring
      //
      url += "jdbc:odbc:Driver={Microsoft Access-Treiber (*.mdb)};DBQ="
            + "src\\server\\data\\Lager.mdb";
     
      //
     
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

      //
      // Baue Verbindung auf
      //
      connection = DriverManager.getConnection(url);
      query = connection.createStatement();
   }

   public static MeineConnection getInstance() throws ClassNotFoundException, SQLException  {
      if (instance == null) instance = new MeineConnection();
      return instance;
   }

   public void closeConnection() throws SQLException{
      connection.close();
   }
   
   public Vector<Lagerraum> loadDB() throws SQLException {
      Vector<Lagerraum> v_lager = new Vector<Lagerraum>();
      String sql;
   
      // Hole alle Lager
      sql = "select * from Lager";
      System.out.println(sql);
      ResultSet result_l = query.executeQuery(sql);
     
      // Füge alle Lager dem Vector hinzu
      while (result_l.next()) {
         Lagerraum lager = new Lagerraum(result_l.getString(1));
         v_lager.add(lager);
         System.out.println("Füge Lager " + lager + " hinzu");
      }
     
      for(Lagerraum lager : v_lager)
      {
         lager.addProdukte(getProdukteFromLager(lager.toString()));
      }
     
      System.out.println("Erfolgreich geladen\n");
      return v_lager;
   }

   public Vector<Produkt> loadAlleProdukte() throws SQLException {
      Vector<Produkt> produkte = new Vector<Produkt>();

      String sql;
      Statement query = connection.createStatement();

      // Hole alle Produkte
      sql = "select * from Produkte";
      ResultSet result = query.executeQuery(sql);
      while (result.next()) {
         // Hole Produkteigenschaften aus DB
         int id = result.getInt("ID");
         Vector<String> eigenschaften = getProduktEigenschaften(id);

         // Besetze Mindestmenge vor, um Datenbankfehler zu vermeiden
         // (NULL-Werte)
         int minMenge = 0;
         try {
            minMenge = result.getInt("Mindestmenge");
         }
         catch (Exception e) {
         }
         // Erstelle Produkte und füge sie dem Vector zu
         Produkt p = new Produkt(id, result.getString("Hersteller"),
               result.getString("Oberbegriff"),
               result.getString("Unterbezeichnung"), result.getString("Typ"),
               eigenschaften, minMenge);

         produkte.add(p);
      }
      query.close();
      return produkte;
   }

   private Vector<String> getProduktEigenschaften(int id) throws SQLException {
      String sql;
      Statement query = connection.createStatement();

      // Hole Produkteigenschaften aus DB
      Vector<String> eigenschaften = new Vector<String>();
      sql = "select Eigenschaft from ProduktEigenschaften where ProduktID = "
            + id;
      ResultSet result_pe = query.executeQuery(sql);
      while (result_pe.next()) {
         eigenschaften.add(result_pe.getString(0));
      }

      return eigenschaften;
   }

   private void macheEintrag(String sql) throws SQLException {
      Statement query = connection.createStatement();
      query.executeUpdate(sql);
      query.close();
   }

   public void setProduktTyp(int id, String typ) throws SQLException {
      String sql = "update Produkt set Typ=\"" + typ + "\" where ID=" + id;
      macheEintrag(sql);
   }

   public Vector<Produkt> getProdukteFromLager(String lager)
         throws SQLException {
      Vector<Produkt> produkte = new Vector<Produkt>();
      String sql = "select * from LagerProdukte inner join Produkte on "
            + "LagerProdukte.produktID = Produkte.ID where Lager = \"" + lager
            + "\"";
      // select * from LagerProdukte inner join Produkte on
      // LagerProdukte.produktID = Produkte.ID where Lager = "Kühlschrank";
     
      ResultSet result = query.executeQuery(sql);
     
      System.out.println("Resultset erstellt");
      while (result.next()) {
         int menge = 0;
         try {
            menge = result.getInt("Menge");
         }
         catch (Exception e) {
         }
         int id = result.getInt("ID");
         Vector<String> eigenschaften = getProduktEigenschaften(id);

         Produkt pr = new Produkt(id, result.getString("Hersteller"),
               result.getString("Oberbegriff"),
               result.getString("Unterbezeichnung"), result.getString("Typ"),
               eigenschaften, result.getInt("Mindestmenge"), menge,
               result.getDate("Verfallsdatum"));

         produkte.add(pr);
         
         System.out.println("");
         System.out.println("Lade aus \"" + lager + "\" folgendes Produkt:");
         System.out.println("ID: " + pr.getID());
         System.out.println("Bezeichnung: " + pr.toString());
         System.out.println("-----------");
         System.out.println("");
         
      }
      return produkte;
   }

   public void addProduktEigenschaft(int id, String eigenschaft)
         throws SQLException {
      String sql = "insert into ProduktEigenschaften values(" + id + ", "
            + eigenschaft + ")";
      macheEintrag(sql);
   }
}

Code: Alles auswählen
http://0xd34dc0d3.kilu.de/forum/index.php
Benutzeravatar
geo
Administrator
 
Beiträge: 27
Registriert: So 11. Nov 2007, 19:50

server.data.*

Beitragvon geo » Di 9. Nov 2010, 12:37

Code: Alles auswählen
package server.data;

import java.io.Serializable;
import java.util.Vector;

public class Lagerraum implements Serializable {
   private static final long serialVersionUID = 1L;
   private Vector<Produkt>   produkte;
   private String            lagerName;

   public Lagerraum(String name) {
      lagerName = name;
      produkte = new Vector<Produkt>();
   }

   // get
   public Vector<Produkt> getProdukte() {
      return produkte;
   }

   public Produkt getProduktNachOberbegriff(String begriff) {
      for (Produkt pr : produkte) {
         if (pr.equals(begriff)) return pr;
      }
      return null;
   }

   // db Insert/delete
   public void addProdukt(Produkt p) {
      produkte.add(p);
   }
   
   public void addProdukte(Vector<Produkt> p)
   {
      produkte.addAll(p);
   }

   public void deleteProdukt(Produkt p) {
      produkte.remove(p);
   }

   // db update
   public void increaseMenge(Produkt p, int anz) {
      produkte.get(produkte.indexOf(p)).increaseMenge(anz);
   }

   public void decreaseMenge(Produkt p, int anz) throws Exception {
      produkte.get(produkte.indexOf(p)).decreaseMenge(anz);
   }

   // Overrides
   @Override
   public String toString() {
      return lagerName;
   }

   @Override
   public boolean equals(Object obj) {
      Lagerraum lr = (Lagerraum) obj;
      if (lr.toString().equals(lagerName)) return true;
      return false;
   }

   public boolean equals(String obj) {
      if (obj.equals(lagerName)) return true;
      return false;
   }
}


Code: Alles auswählen
package server.data;

import java.io.Serializable;
import java.util.Date;
import java.util.Vector;

public class Produkt implements Serializable {
   private static final long serialVersionUID = 1448886567950838607L;
   private int               ID;
   private int               menge, minMenge;
   private Date              verfallsdatum;
   private String            hersteller, oberbegriff, bezeichnung;
   private String            typ;
   private Vector<String>    eigenschaften;

   //

   public String getTyp() {
      return typ;
   }

   public void setTyp(String typ) {
      this.typ = typ;
      // TODO Aktualisierung Datenbank
   }

   //

   public Vector<String> getEigenschaften() {
      return eigenschaften;
   }

   public void addEigenschaft(String eigenschaft) {
      this.eigenschaften.add(eigenschaft);
      // TODO Aktualisierung Datenbank
   }

   public void removeEigenschaft(String eigenschaft) {
      this.eigenschaften.remove(eigenschaft);
      // TODO Aktualisierung Datenbank
   }

   //

   public String getHersteller() {
      return hersteller;
   }

   //
   public int getMinMenge() {
      return minMenge;
   }

   public void setMinMenge(int minMenge) {
      this.minMenge = minMenge;
      // TODO Aktualisierung Datenbank
   }

   //
   public int getID() {
      return ID;
   }

   //
   public String getOberbegriff() {
      return oberbegriff;
   }

   public void setOberbegriff(String oberbegriff) {
      this.oberbegriff = oberbegriff;
      // TODO Aktualisierung Datenbank
   }

   //
   public String getBezeichnung() {
      return bezeichnung;
   }

   public void setBezeichnung(String bezeichnung) {
      this.bezeichnung = bezeichnung;
      // TODO Aktualisierung Datenbank
   }

   //
   public Date getVerfallsdatum() {
      return verfallsdatum;
   }

   //
   public int getMenge() {
      return menge;
   }

   public void setMenge() {

   }

   public void increaseMenge(int anz) {
      menge += anz;
      // TODO Aktualisierung Datenbank
   }

   public void decreaseMenge(int anz) throws Exception {
      if (menge - anz < 0) throw new Exception();
      menge -= anz;
      // TODO Aktualisierung Datenbank
   }

   //
   @Override
   public String toString() {
      String bez = bezeichnung + "(" + oberbegriff + ") - " + menge;
      return bez;
   }

   @Override
   public boolean equals(Object obj) {
      Produkt p = (Produkt) obj;
      if (p.ID == this.ID) return true;
      return false;
   }

   public boolean equals(int id) {
      if (id == this.ID) return true;
      return false;
   }

   //

   public Produkt(int iD, String hersteller, String oberbegriff,
         String bezeichnung, String typ, Vector<String> eigenschaften,
         int minMenge, int menge, Date verfallsdatum) {
      ID = iD;
      this.menge = menge;
      this.minMenge = minMenge;
      this.verfallsdatum = verfallsdatum;
      this.hersteller = hersteller;
      this.oberbegriff = oberbegriff;
      this.bezeichnung = bezeichnung;
      this.typ = typ;
      this.eigenschaften = eigenschaften;
   }

   public Produkt(int iD, String hersteller, String oberbegriff,
         String bezeichnung, String typ, Vector<String> eigenschaften,
         int minMenge) {
      ID = iD;
      this.hersteller = hersteller;
      this.oberbegriff = oberbegriff;
      this.bezeichnung = bezeichnung;
      this.typ = typ;
      this.eigenschaften = eigenschaften; // Vielleicht tiefe Kopie machen
                                          // (.clone())
   }

}
Code: Alles auswählen
http://0xd34dc0d3.kilu.de/forum/index.php
Benutzeravatar
geo
Administrator
 
Beiträge: 27
Registriert: So 11. Nov 2007, 19:50

client.gui.DasProjekt

Beitragvon geo » Di 9. Nov 2010, 12:41

Code: Alles auswählen
package client.gui;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.sql.SQLException;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import server.data.Lagerraum;

import client.app.DasProjektApp;

public class DasProjekt extends JFrame{
   private static final long serialVersionUID = 8558716530032418288L;
   DasProjektApp app;
   JComboBox cbx_Lager;
   JList lst_liste;
   
   public DasProjekt() {
      super("Projektverwaltung");
     
      try {
         app = DasProjektApp.getInstance();
         
         setDefaultCloseOperation(EXIT_ON_CLOSE);
         
         System.out.println();
         System.out.println("--------------------");
         System.out.println();
         
         this.setLayout(new FlowLayout());
         cbx_Lager = new JComboBox(app.getLager());
         cbx_Lager.setSelectedIndex(0);
         lst_liste = new JList(app.getProdukte(((Lagerraum)cbx_Lager.getSelectedItem()).toString()));
         
         JPanel pnl_Außen = new JPanel(new BorderLayout());
         this.add(pnl_Außen);
            pnl_Außen.add(cbx_Lager, BorderLayout.NORTH);
            pnl_Außen.add(lst_liste, BorderLayout.CENTER);
         
         this.setVisible(true);
      } catch (RemoteException e) {
         JOptionPane.showMessageDialog(this,
                                "Fehler beim Lokalisieren der Registry" ,
                                "Fehler",
                                1);
         e.printStackTrace();
      } catch (NotBoundException e) {
         JOptionPane.showMessageDialog(this,
                 "Fehler beim Einbinden des Interfaces" ,
                 "Fehler",
                 1);
         e.printStackTrace();
      }
      catch (SQLException e) {
         JOptionPane.showMessageDialog(this,
               "Fehler beim Datenbankzugriff" ,
               "Fehler",
               1);
         try {
            app.closeConnection();
         }
         catch (Exception e1) {
            JOptionPane.showMessageDialog(this,
                  "Konnte Verbinbindung nicht schließen" ,
                  "Fehler",
                  1);
            e.printStackTrace();
           
            System.err.println();
            System.err.println("######");
            System.err.println();
           
         }
         e.printStackTrace();
      }
      catch (Exception e) {
         e.printStackTrace();
      }finally
      {
         System.exit(0);
      }
   }
   
   public static void main(String[] args) {
      new DasProjekt();
   }
}
Code: Alles auswählen
http://0xd34dc0d3.kilu.de/forum/index.php
Benutzeravatar
geo
Administrator
 
Beiträge: 27
Registriert: So 11. Nov 2007, 19:50

client.app.DasProjektApp

Beitragvon geo » Di 9. Nov 2010, 12:42

Code: Alles auswählen
package client.app;

import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.sql.SQLException;
import java.util.Vector;

import server.app.IProduktverwaltung;
import server.data.Lagerraum;
import server.data.Produkt;

public class DasProjektApp {
   private static DasProjektApp instance = null;
   private IProduktverwaltung   produktverwaltung;

   private DasProjektApp() throws RemoteException, NotBoundException {
      Registry reg = LocateRegistry.getRegistry();
      produktverwaltung = (IProduktverwaltung) reg.lookup("Produktverwaltung");
   }

   public static DasProjektApp getInstance() throws RemoteException,
         NotBoundException {
      if (instance == null) instance = new DasProjektApp();
      return instance;
   }

   public Vector<Produkt> getProdukte(String lagerraum) throws Exception{
      return produktverwaltung.getProdukte(lagerraum);
   }

   public Produkt getProduktNachOberbegriff(Lagerraum lr, String begriff) {
      // TODO Auto-generated method stub
      return null;
   }

   public Vector<Lagerraum> getLager() throws Exception
   {
      Vector<Lagerraum> lg = produktverwaltung.getLager();
      return lg;
   }
   
   public void addProdukt(Produkt p) {
      // TODO Auto-generated method stub
   }

   public void deleteProdukt(Produkt p) {
      // TODO Auto-generated method stub

   }

   public void increaseMenge(Lagerraum lr, Produkt p, int anz) {
      // TODO Auto-generated method stub

   }

   public void decreaseMenge(Lagerraum lr, Produkt p, int anz) throws Exception {
      // TODO Auto-generated method stub

   }

   public void closeConnection() throws Exception
   {
      produktverwaltung.closeConnection();
   }
   
}
Code: Alles auswählen
http://0xd34dc0d3.kilu.de/forum/index.php
Benutzeravatar
geo
Administrator
 
Beiträge: 27
Registriert: So 11. Nov 2007, 19:50

Timer

Beitragvon geo » Mi 25. Jan 2012, 12:16

-
Dateianhänge
Java-Timer_2.3.zip
(11.55 KiB) 176-mal heruntergeladen
Java-Timer_2.3.7z
(14.69 KiB) 167-mal heruntergeladen
Code: Alles auswählen
http://0xd34dc0d3.kilu.de/forum/index.php
Benutzeravatar
geo
Administrator
 
Beiträge: 27
Registriert: So 11. Nov 2007, 19:50


TAGS

Zurück zu Test-Forum 1

Wer ist online?

0 Mitglieder

cron