NET vs. J2EE: In welche Plattform investieren?

Transcription

NET vs. J2EE: In welche Plattform investieren?
.NET vs. J2EE: In welche Plattform investieren?
IEX 2003 | Seminar d-9
Donnerstag, 6. Februar 2003
Andreas Göldi, CEO, namics ag
Jürg Stuker, CTO, namics ag
Frankfurt, Hamburg, Konstanz, St.Gallen, Zug, Zürich
www.namics.com
team–based net solutions
Agenda
» Einführung
» Evaluationskriterien
– Kosten
– Architektur
– Plattformneutralität
– Plattformreife
– Skalierbarkeit
– Der „Sprachenstreit“
» Fazit und Ausblick
© namics
Seite 1
Einführung
Die lange Geschichte der IT-Konflikte:
z.B. Mainframe vs. Client/Server
vs.
© namics
Seite 2
Die lange Geschichte der IT-Konflikte:
z.B. OS/2 vs. Windows
vs.
Ist J2EE vs. .NET wirklich wieder so eine
wichtige Entscheidung?
» Ja, denn...
– es geht um beträchtliche IT-Investitionen
– es geht um den Kern jeder modernen IT-Strategie
– diese beiden Plattformen beherrschen schon jetzt
85% der geplanten Applikationsinvestitionen
– die Entscheidung wird jahrelange Konsequenzen
für jedes Unternehmen haben
© namics
Seite 3
Keine Äpfel mit Birnen vergleichen!
» „Java“ist eine sehr umfassende Spezifikation.
Implementiert wird diese durch alle namhaften
Softwarehersteller (ausser Microsoft)
» „.NET“ist eine Basisframework und Produktfamilie
des einen Herstellers Microsoft
» Eigentlich „SUN ONE“vs „Microsoft .NET“, da J2EE
nur eine Gruppe von Java Standards zusammenfasst
--> Im folgenden sind die Begriffe J2EE, Java und
SUN ONE synonym genutzt.
– http://www.sun.com/software/sunone/
– http://www.microsoft.com/net/
J2EE (Java 2 Enterprise Edition) ist nur ein
Teil von SUN ONE
Java 2
Enterprise
Edition
(J2EE)
Java 2
Standard
Edition
(J2SE)
Java 2 Micro Edition
Java Language
HotSpot
© namics
JVM
KVM
Card VM
Seite 4
.NET: Neuste Stufe der
Microsoft-Plattform-Evolution
Web
services
2002
Internet
Client/
server
Standalone
PC
2000
1998
1994
1990
.NET
1988
Windows DNA
Windows
MS-DOS
Quelle: Gartner
.NET ist ein Framework und ein Schwall
von Serversoftware und SW-Produkten
VB
C++
C#
JScript
…
Common Language Specification
ASP.NET
Windows Forms
ADO.NET and XML
Base Class Library
Common Language Runtime
Windows
© namics
COM+ Services
Seite 5
Gemeinsamkeiten
(Web Browser Client)
» 3-Tier-Architektur
Presentation Layer
» Komponentenorientiert,
optimiert für verteilte Architekturen
Business Logic Layer
» Netzwerkorientierung:
Internet als zentrale Infrastruktur
Data Layer
» Web-Browser als primäres User Interface;
„Rich Clients“als sekundäres User Interface
Sind die beiden überhaupt vergleichbar?
J2EE:
Plattform-Spezifikation
.NET:
Basis-Framework,
Gruppe von Produkten
Sprache:
Java
Sprachen:
C#, VB, C++, ...
Toolhersteller:
Sun, BEA, IBM, Oracle, Borland, ...
Toolhersteller:
Microsoft
Komponentenmodell:
(Enterprise) Java Beans
Komponentenmodell:
.NET (Web) Services/COM+
Betriebssystem:
fast alle
Betriebssystem:
Windows
ð Die Ansätze sind sehr verschieden, aber das grundsätzliche Ziel ist gleich:
wichtigste Plattform für Applikationsentwicklung werden.
© namics
Seite 6
Evaluationskriterien
Kriterien für die Evaluation
Möglichkeiten
Kosten
» Entwicklung von E-BusinessAnwendungen und „klassischer“
Unternehmensanwendungen
» Neue Arten von Anwendungen,
z.B. Web Services
»
»
»
»
Plattform-Investitionen
Ausbildungskosten
Entwicklungskosten
Pflegekosten für Applikationen
Äusseres Umfeld
»
»
»
»
Reifegrad
Skalierbarkeit/ Ausbaufähigkeit
Verfügbarkeit von Entwicklern und Support
Auswahl an Produkten
Unternehmensinternes Umfeld
» Bestehendes Know-How
» Bisherige IT-Strategie
© namics
Seite 7
Möglichkeiten: Kurz im Überblick
» Grundsätzlich:
Beide gleichermassen geeignet für Entwicklung
anspruchsvoller Applikationen
» Differenzierungsfaktoren:
J2EE
.NET
» Herstellerunabhängigkeit
» Plattformunabhängigkeit:
„Write once, run anywhere“
» Alles aus einer Hand
» Web Services voll eingebaut
à Integration über Internet
» Sprachunabhängigkeit
Die Kostensituation
© namics
Seite 8
Typische Kostenaufteilung für grosse
Entwicklungsprojekte
Kosten
KapitalInvestitionen:
Systeme,
Softwarelizenzen
Entwicklungskosten
50-60%
Pflege
1. Jahr
Pflege
2. Jahr
Pflege
3. Jahr
20-35%
20-35%
20-35%
15-20%
Zeit
ð Die Initialinvestitionen machen nur einen relativ geringen Teil der
Gesamtkosten aus.
ð Wichtiger sind eine effiziente Entwicklung und Verringerung der Pflegekosten!
Quelle: Gartner, namics Research
Kapitalinvestitionen
J2EE
.NET
Hardware
Diverse, von IntelPCs bis High-EndUnix-Servern
Intel-PCs
Betriebssystem
Diverse
Derzeit nur
Windows
Application Server
Von versch.
Herstellern, eher
teuer
integriert
Tools
verschiedenste
Visual Studio .NET
ð Kein eindeutiger Vorteil für eine der Plattformen
ð Möglicher Kostentreiber bei J2EE: Application Server-Lizenzen. Oft auch
anspruchsvollere Hardware erforderlich
© namics
Seite 9
Entwicklungskosten
J2EE
.NET
Nötiger Skill-Level
der Entwickler
(=Lohnkosten)
Hoch
Mittel; höher für
komplexere .NETAnwendungen
Entwicklerproduktivität
Anfangs eher
gering, steigend
Von Anfang an recht
hoch, steigt aber
langsamer
Verfügbarkeit von
Entwicklern
Eher knapp
Relativ gut, da auch
mit VB etc.
benutzbar.
Kosten für externe
Dienstleister
Hoch
Mittel
ð J2EE verursacht in der Entwicklung tendenziell die höheren Kosten.
ð Der Einstieg bei .NET ist leichter und billiger, für anspruchsvolle Projekte
steigen die Kosten aber in Java-Regionen.
Maintenance-Kosten
J2EE
System-Stabilität
mittel bis hoch
.NET
mässig bis mittel
Pflegefreundlichkeit komplex, daher
oft „pragmatische“
der Applikationen
nicht immer optimal Architektur, daher
schwierig
Wiederverwertbarkeit von Code
hoch
traditionell recht
gering, sollte mit
.NET steigen
Erweiterungsfreundlichkeit
hoch
traditionell eher
gering, sollte mit
.NET steigen
ð In Bezug auf Erweiterbarkeit und Wiederverwendbarkeit hat J2EE klare Vorteile;
.NET ist den Beweis hier noch schuldig.
ð Systemstabilität: Bei Microsoft oft geringer durch vermiedenen Wartungsaufwand
© namics
Seite 10
Kostensituation: Fazit
» J2EE:
– Eher für grosse, langfristig angelegte Projekte
geeignet
– Rentabilität wird langfristig durch niedrigere
Pflegekosten und bessere Wiederverwertbarkeit
erreicht.
» Microsoft .NET
– Eignet sich besser für Projekte mit kurzen
Payback-Zeiträumen
– Dafür: langfristige Pflege eher aufwendiger
– Tatsächliche Konsequenzen aller neuen
Elemente schwer vorhersagbar
Verfügbarkeit von Entwicklern
Anzahl
Programmierer
weltweit
Visual Basic
3Mio
2Mio COBOL
C++
1Mio
Java
C# ?
2000
2001
2002
2003
Quelle: Gartner
2004
2005
ð Die Verfügbarkeit von Entwicklern für die jeweiligen Kernsprachen ist
grundsätzlich gut, mit Ausnahme von C#.
ð Externer Support ebenfalls bei beiden ausreichend vorhanden.
© namics
Seite 11
Entwickler: Wie beschaffen und ausbilden?
» Lohnkosten:
– Erfahrene Java-Entwickler kosten ca. 30-50% mehr als äquivalente
Entwickler im Microsoft-Umfeld.
» Fortbildungskosten (Schätzungen):
Vorhandene
Skills
C++
C++
VB/ASP
VB/ASP
VB/ASP
Dauer bis volle Produktivität, Schulungskosten
Ca. 4 Monate, 25-35kCHF
Ca. 3 Monate, 20-30kCHF
Ca. 8 Monate, 35-50kCHF
Ca. 6 Monate, 30-40kCHF
Ca. 4 Monate, 20-30kCHF
Zielskills
Java/J2EE
.NET mit C#
Java/J2EE
.NET mit C#
.NET mit VB
Quelle: Gartner, namics Research
Die Architektur
© namics
Seite 12
Architekturübersicht J2EE
Business Partners
Fat Clients
(Applets: Swing, AWT)
SOAP,
ebXML etc.
Light Client
(Webbrowser)
RMI over
IIOP
FIREWALL
Servlet
Small Clients
Mobile, PDA etc.
HTTP
HTTP
Java Server Pages (JSP)
Enterprise Javabeans (EJB)
JDBC
Connector API
JVM
SQL
???
Datenbanksystem
SOAP,
ebXML etc.
Legacy Systeme
Business Partners
Light Client
(Webbrowser)
Small Clients
Mobile, PDA etc.
Architekturübersicht .NET
Business Partners
Fat Clients
(win32, Win Forms)
SOAP,
ebXML etc.
HTTP
HTTP
HTTP
FIREWALL
ASP.NET
.NET Managed Components
ADO.NET
Host Integration
Server.NET
CLR
SOAP
„Dienste“
© namics
SQL, OLE DB
Datenhaltung
???
Legacy Systeme
SOAP,
ebXML etc.
Business Partners
Seite 13
Architekturdetail:
Integration von Serviceobjekten
.NET
.NET Client
.NET Objekt A
.NET Objekt B
Komponente für A
(COM+ in Wrapper)
Komponente für B
(COM+ in Wrapper)
managed
(.NET)
unmanaged
com+
J2EE
Java Client
EJB Session A
EJB Session A
JAAS
JNDI
Java Mail
JMS
JTA/JTS
RMI/IIOP
managed
Die Basisklassen
© namics
Seite 14
.NET Framework Namespace
System.Web
System.WinForms
Services
Description
UI
HtmlControls
Discovery
Protocols
WebControls
Design
ComponentModel
System.Drawing
Caching
Security
Drawing2D
Printing
Configuration
SessionState
Imaging
Text
System.Data
System.Xml
ADO
SQL
XSLT
Design
SQLTypes
XPath
Serialization
System
Collections
IO
Security
Configuration
Net
ServiceProcess
Diagnostics
Globalization
Reflection
Resources
Text
Threading
Runtime
InteropServices
Remoting
Serialization
Mögliche Entsprechungen bei J2EE für den
.NET Framework Namespace
System.Web
Services
Description
System.WinForms
UI
HtmlControls
Design
ComponentModel
Applet / Swing / AWT
Discovery
WebControls
Servlet / JSP
Protocols
System.Drawing
Caching
Security
Drawing2D
Configuration
SessionState
Imaging
System.Data
ADO
Design
Printing
Java 2D
Text
System.Xml
SQL
XSLT
SQLTypes
XPath
JDBC
Serialization
JAXP
System
© namics
Collections
IO
Security
Configuration
Net
ServiceProcess
Diagnostics
Globalization
Reflection
Resources
Java Core API
Text
Threading
Runtime
InteropServices
Remoting
Serialization
Seite 15
Alles Klassen-APIs von J2EE
Demokratie bei JAVA: Der Community
Process (http://jcp.org/)
© namics
Seite 16
Und der Entscheidungsprozess bei
Microsoft ;-)
Aber auch: http://research.microsoft.com/
Web Services
© namics
Seite 17
Web Services: Übersicht
» Elemente
– Aufruf von Softwarekomponenten auf entfernten
Servern: SOAP (XML plus HTTP[s])
– Schnittstellen- und Methodenbeschreibung:
WSDL
– Verzeichnisdienst: UDDI
» Funktioniert im verteilten Umfeld:
– Im Unternehmen (LAN/WAN)
– Zwischen Unternehmen per Internet
» Definiert von Microsoft, basierend auf offenen
W3C-Standards
ð Begriff wurde von Microsoft für .NET geprägt, Web Services basieren aber auf
offenen Standards und sind darum in beiden Welten verfügbar.
Der bekannteste Web Service:
Microsoft Passport
» Zentrale UserverwaltungsInfrastruktur für dezentrale
Anwendungen
» Stark gestützt von Microsoft mit
Hotmail, Windows XP und
anderen Produkten
» Integriert in alle Microsoft
Entwicklungsumgebungen und
Server
» War zentraler Baustein der .NET
My Services (Hailstorm)-Strategie
» Microsoft begegnet Kritik mit
Versuch einer Dezentralisierung
© namics
Seite 18
Web Services: Bewertung
Vorteile:
Nachteile:
» Vielversprechender Ansatz für die
Vernetzung im und zwischen
Unternehmen
» Noch sehr unreife Technologie
» Denkbare neue Businessmodelle:
Leistungen als kostenpflichtige
Web Services anbieten
» Basiert auf offenen Standards,
daher universell einsetzbar
» Viele Fragen offen: Performance,
Sicherheit, Interoperabilität, ...
» Echter Nutzen entsteht erst, wenn
entsprechende Geschäftsprozesse
vorhanden sind
» Unklare Businessmodelle
ð Web Services dürften vor 2003/04 kaum eine echte Bedeutung für
missionskritische Anwendungen erlangen. Experimente lohnen sich aber jetzt
schon.
ð Microsoft hat einen gewissen Vorsprung, der aber kaum lang anhalten dürfte.
Plattformneutralität
© namics
Seite 19
.NET = Windows und J2EE = alles?
» Mit Rotor gibt es eine Betaversion der C# und JScript.NET
Compilers und der CLI (Common Language Infrastructure) für
Open BSD Unix von Microsoft als Shared Source.
– Get Your Rotor Running:
http://research.oreilly.com/pub/a/dotnet/2002/03/27/gettingstarted.
html
– Uncovering Rotor -- A Shared Source CLI:
http://research.oreilly.com/pub/a/dotnet/2002/03/04/rotor.html
» http://www.go-mono.com/ versucht das gesamte .NET
Framework als Open Source für Linux zu implementieren.
» Auch kommerzielle Anbieter implementieren das .NET
Framework: http://www.stryon.com/products.asp
» Die Clientseite ist faktisch fast ausschliesslich Windows
Java WORA (write once run anywhere)?
» Die Java Virtual Machine stellt die
Kompatibilität sicher...
» Aber: „Zusatzfunktionen“bei J2EE Server
reduzieren Portierbarkeit
– Clustering
– Load Balancing mit Session Failover
– Deployment-Mechanismen
– etc.
» Softwareverteilung bei Java: Nicht immer so
automatisch wie versprochen...
© namics
Seite 20
„Öffnung“von .NET?
» Standardisierung von zwei zentralen Elementen bei
ECMA gemeinsam mit HP und Intel
» C#
– http://www.ecma.ch/ecma1/STAND/ecma-334.htm
» CLI (Common Language Infrastructure)
– http://www.ecma.ch/ecma1/STAND/ecma-335.htm
» Baldige Übernahme durch ISO angestrebt
– ISO/IEC 23270 (C#)
– ISO/IEC 23271 (CLI)
– ISO/IEC 23272 (CLI TR)
Autorisierte Lizenznehmer von J2EE
(http://java.sun.com/j2ee/licensees.html)
»
»
»
»
»
»
»
»
»
»
»
»
»
»
»
»
»
© namics
ATG
BEA Systems
Borland Corp.
BroadVision
Brokat
Cape Clear Software
Compaq
DataDirect Technologies
Fujitsu
Fujitsu Siemens
Computers
Hewlett-Packard
Hitachi
IBM
Interworld
IONA Technologies
Macromedia
MERANT
»
»
»
»
»
»
»
»
»
»
»
»
»
»
»
»
NEC
Nokia
Oracle Corporation
Persistence Software, Inc.
Pramati
SAP
SAS Institute, Inc.
Secant
SilverStream
Sonic Software
Corporation
SpiritSoft
SUN
Sybase, Inc.
TIBCO Software Inc.
Tmax Soft
Trifork Technologies
rot/bold =
zertifiziert für
Version 1.3
Seite 21
Die Plattformreife
Java gibt es seit 1995
© namics
Seite 22
und Microsoft gibt es seit…
» Microsoft = COM (aus Präsentation von Don Box)
– 1988: Seed work for COM began inside MS.
Influenced by prior work done in Smalltalk, C++, and
OSF Distributed Computing Environment (DCE)
– 1993: First public release of COM as part of OLE 2.0
SDK
» Wer war des erste? Ist kaum wichtig.
» Aber:
– Wer kennt die Kundenbedürfnisse?
– Wer agiert am geschicktesten?
– Wer verkauft sich besser?
– etc.
» Oder: Wer war der Erste mit einem guten
Webbrowser…
Skalierbarkeit
© namics
Seite 23
Die Skalierbarkeits-Legende (1 von 2)
» Gängiges Vorurteil:
Microsoft nicht geeignet für grosse e-Business-Systeme, Java schon.
ð J2EE-Hersteller stellen sich bisher keinem objektiven Benchmark!
ð Auch noch keine Angaben für neue .NET-Plattform, erst „alte“MS-Technologie.
Die Skalierbarkeits-Legende (2 von 2)
» Diverse sehr grosse Installationen auch auf MS-Plattformen:
ð Auf beiden Plattformen lassen sich hochskalierbare Anwendungen bauen,
vergleichbaren Aufwand und Skill-Levels vorausgesetzt.
© namics
Seite 24
Zwei Kinder streiten: Der Pet Store
» Pet Store ist eine Referenzanwendung von
SUN zum Einsatz der J2EE Technologie
(http://developer.java.sun.com/developer/relea
ses/petstore/)
» Die Anwendung war nie als Benchmark aber
als Lernbeispiel für gedacht -- dennoch würde
Pet Store von Oracle für 9i aber dazu
verwendet…
Implementing Sun’
s Java Petstore with Microsoft .NET
17 500
1750
0
14,273
1500
0
15 000
.NET Pet
Pet Shop
Shop
J2EE
J2E
E Pet
Pet Store
Store
10 ,00 0
10,000
7500
5,891
5,891
5
5000
000
2,566
863
1,881
Total Lines
of
of Code
Code
User
User
Interface
Tier
Interface Tier
684
Middle Tier
Tier
412
Data
Data Tier
56
56
Config
Config
Response Time vs. User Load
1.2
P er Pa ge Avg. Response Time (sec onds)
… und vergleicht gegen einen bestehenden
Test mit Oracle9iAS (dann ging es weiter).
5,404
3,484
25 00
2500
» Im November 2001 implementiert Microsoft
einen funktional identischen PetStore in .NET
Technologie …
Lines of Code Required
12 500
1250
0
1
.NE T Resp onse Time
with Out put Caching
0.8
0.6
.NE T Resp onse Time
with no Output
Caching
0.4
J2E E Re sponse Time
0.2
0
0
500
1000
1500
200 0
2500
3000
3500
4000
User Load
Quellen: http://www.gotdotnet.com/team/compare/ und
http://www.middleware-company.com/j2eedotnetbench/
Der „Sprachenstreit“
© namics
Seite 25
Der „Sprachenstreit“
» J2EE baut auf einer einzigen Sprache auf: Java
» .NET ist von Grund auf mehrsprachig konstruiert
– C# als neue (wichtigste) Sprache als ECMA-33 Standard
anerkannt (http://www.ecma.ch/)
– VB.NET (eigtl. Visual Basic 7), Managed C++, JScript.NET
– weitere Sprachen von Microsoft oder von Drittanbietern:
J#, PERL, APL, COBOL, Eiffel, Fortran, Haskell etc.
» Die Herausforderung ist nicht der Bytecode Compiler (da
gibt auch für JavaVM verschiedene Sprachen) sondern
die Interoperabilität auf Klassenebene während der
Laufzeit (ohne Linking).
– Dazu haben alle .NET Sprachen das selbe Typensystem
und nutzen die selbe Basisklassen
Hallo
// Ich bin C++
#include <iostream.h>
int main(){
for(int ii = 1; ii <= 100; ii++)
cout <<"Hallo, " << ii << " mal. " << '\n';
}
// Ich bin C#
using System;
class HelloWorld{
static void Main(){
for(int ii = 1; ii <= 100; ii++)
Console.WriteLine(" Hallo, {0} mal. ", ii);
}
}
// Ich bin Java
class HelloWorld{
public static void main(String[] args){
for(int ii= 1; ii <= 100; ii++)
System.out.println(" Hallo, " + ii + " mal.");
}
}
© namics
Seite 26
Java vs C#
» Java und alle (managed) .NET-Sprachen sind typen- und
pointersicher
» Java und C# sind objektorientiert
» Aus Java und alle .NET-Sprachen wird bei der Kompilation ein
plattformneutraler Zwischencode (Bytecode resp. MSIL)
erzeugt
» Die virtuellen Maschine resp. der JIT unterscheiden sich stark:
– Java
– war ursprünglich für clientseitige Applets gedacht und daher ist der
Zwischencode für die JVM auf Interpretation ausgelegt
– ist isolierter als die .NET-Sprachen von Betriebssystem als .NET
bspw. Speicherzugriffe
– .NET Sprachen
– werden durch die CLR ausschliesslich kompiliert (verschiedenen
Compiler JIT, EconoJIT und NGen und Übersetzungszeitpunkte)
– http://students.infoiasi.ro/~microsoft/articole/download/
virtual_machines.pdf
Braucht es mehrere Sprachen?
» Programmierer-Religion oder in gewissen Anwendungsfällen
eine optimale Auswahl (Technology Follows Function)
» .NET lässt das Zusammenspiel zwischen un- und sicherem
Code zu und ermöglich somit modulare Migrationen
class TestClass{
static unsafe void PerformOperation (int* x){
*x = 99;
}
public static unsafe void Main(){
int a = 1;
System.Console.WriteLine("before a:"+a);
PerformOperation (&a);
System.Console.WriteLine("after a:"+a);
}
}
© namics
Seite 27
Fazit und Ausblick
Zusammenfassung
.NET
J2EE
» Architektur
– Alt und neu aber alles drin
– „Perfekt“, evt. zu sauber
» Basisklassen
– Eher knapp dafür übersichtlich
– Sehr mächtig, hoher Lernaufwand
» Plattformneutralität
– Serverseite: Kommt evt.
– Serverseite: Ja, bewiesen
– Clientseite: Favorit
– Clientseite: Ohne Erfolg
» Maturität
– Jung, Schlau und Flink
– Bewährt mit viel Energie
» „Sprachenstreit“
– Handlungsfreiraum
© namics
– Eher eine Einschränkung
Seite 28
Applikationsportfolio und Entwicklungstechnologien: die nächsten drei Jahre
Stabilität
der Technologie
Microsoft
Web-Techn.
„klassisch“
Missionskritische,
Host und
stabilitätsorientierte
Trad. C/S
Entwicklungsarbeit
.NET
J2EE
Java
bisher
Innovationsprojekte
Komplexität/Wichtigkeit des Systems
Welche Plattform einsetzen?
» Fast alle grösseren Unternehmen werden in
den nächsten Jahren beide Welten parallel
einsetzen.
– Desktop-Welt/PC-Server: Microsoft-zentriert
– Enterprise-Applikationen: Immer mehr Java
» Integrationsfähigkeit wird zum Schlüssel
– Grosse Hoffnung auf Web Services
– Aber: Bisher wenig gute Antworten zur
Integration von Legacy Systems
» Langfristige Vision:
Plattformunabhängige, serviceorientierte
Softwareinfrastrktur
© namics
Seite 29
Wichtigste Aufgaben für IT-Management
» Entscheidend:
Klare Definition der strategischen Hauptplattform,
dort Hauptinvestitionen konzentrieren
» Typische Migrationspfade:
– Microsoft VB / ASP à .NET
– Unix, C++, CORBA, Java à J2EE
» Kriterien für projektspezifische Technologiewahl
aufstellen
– Taktische Ausnahmen zulassen, aber begründet
» Integrationsfähigkeit in jedem Projekt sicherstellen
Vielen Dank für Ihre Aufmerksamkeit!
Seminarunterlagen: http://www.namics.com/knowledge
Besuchen Sie uns am Stand 145 in der Halle 5 und gewinnen Sie!
[email protected]
[email protected]
Frankfurt, Hamburg, Konstanz, St.Gallen, Zug, Zürich
www.namics.com
© namics
team–based net solutions
Seite 30