ODBC, OCI, OCCI

Hi,
Could anyone tell me whether I can access a Oracle Spatial instance through Oracle 9i AS Wireless using ODBC, OCI or OCCI. I want to interrogate the spatial database from a Compaq iPAQ running the familiar distribution of embedded Linux.
Cheers,
Sean

iAS is an application server, which pretty much indicates that you'll be writing Java. ODBC, OCI, and OCCI are C or C++ API's. It's probably possible to set up a system that makes JNI calls in iAS to C or C++ libraries, but that hardly seems like the ideal architecture.
If you want to use a Java application, JDBC is the Java API for database access. JDBC will certainly allow you to work with the Oracle Spatial datatypes.
You can also use things like mod_plsql with iAS to do the vast majority of middle tier work in PL/SQL.
If you want to use OCI or OCCI, you could certainly write a middle tier layer there, throw some ASP pages on top, and expose that through IIS (since you mentioned ODBC as an option, I'm assuming you're a Windows shop).
The ODBC does not provide a particularly useful way to work with Oracle-specific data types like those in interMedia.
Justin
Distributed Database Consulting, Inc.
www.ddbcinc.com

Similar Messages

  • OCI OCCI performance

    Hi everyone,
    is there a difference between these two implementation?
    I 've got to develop a C++ program with more than 3 billion database entries, so every tuning would be helpful I guess :-)
    The biggest table would have 1,5 billion entries.
    Is OCCI only a warrper or has it more features? Is there a book or documention about the performance for C++ application with oracle.
    All I 've found about performance tuning is tuning the database itself.
    thx
    marc

    iAS is an application server, which pretty much indicates that you'll be writing Java. ODBC, OCI, and OCCI are C or C++ API's. It's probably possible to set up a system that makes JNI calls in iAS to C or C++ libraries, but that hardly seems like the ideal architecture.
    If you want to use a Java application, JDBC is the Java API for database access. JDBC will certainly allow you to work with the Oracle Spatial datatypes.
    You can also use things like mod_plsql with iAS to do the vast majority of middle tier work in PL/SQL.
    If you want to use OCI or OCCI, you could certainly write a middle tier layer there, throw some ASP pages on top, and expose that through IIS (since you mentioned ODBC as an option, I'm assuming you're a Windows shop).
    The ODBC does not provide a particularly useful way to work with Oracle-specific data types like those in interMedia.
    Justin
    Distributed Database Consulting, Inc.
    www.ddbcinc.com

  • Reason to explain these performances of odbc and occi...

    I wrote some simple test programs to compare the performances of odbc and occi accessing Oracle.
    These programs were wrote in C++. The occi and odbc were given under almost the same circumstance.
    The result is: when executing query(simple select) the odbc is fast than occi. When executing insert sentences, the occi is much more fast than odbc does.
    My computer environment: Oracle 10g, Oracle instant cilent, VS 8.0.
    Do they all access oracle through OCI interface? How to explain the result?
    Someone give me some hints , please.

    Hi,
    With the limited info available, I can't offer any specific suggestions that will help here.
    Usually sqlnet tracing is a good thing to check to see if maybe it's round trips causing the discrepency, packet/buffer sizes, query differnces, etc.
    Server side sql tracing is often useful as well to check bind types, query execution, etc.
    Yes, both Oracle's ODBC driver and OCCI are written in OCI, but they have completely different implmentations: array fetching, statement caching, buffer sizes, etc. Simply because they're both written in OCI doesnt mean they share an implmentation.
    Hope it helps,
    Greg

  • Unable to connect to oracle 11g db using ODBC/OCI in OBIEE rep

    Hi, i have windows 7 , 64 bit, oracle 11g R1, obiee 11g.
    Trying to connect to oracle 11g db when working on OBIEE rep, but the connection fails when connecting through odbc/oci. Any imput is appreciated.
    Thanks,

    you must add a TNS names entry to your tnsnames.ora file @ ORACLE_HOME\network\admin
    if not open the connection pool add the tns entry starting from "(DESCRIPTION=....
    followed by user id and password

  • Is there intermedia oci/occi api support?

    I use occi in Linux server programes,I found there is little statement about oci/occi support about intermedia in the occi documentation,is Oracle going to support intermedia oci/occi API,or is there any?
    Thanks.
    XiaoboGu

    I have used OCI with interMedia, I would assume OCCI would be similar.
    While we don't have the wrapper classes for objects that we provide for Java, you can do queries or call procedures to access interMedia data.
    For example, you can do a select img.getContent(), img.getMimeType() from ....
    To get at the object attributes as simple types.
    Larry

  • OBIEE 11g client ODBC/OCI  issue

    Hi Experts
    I have been installed OBIEE 11g on Linux Box and installed Client in my Windows machine and I can connect to the server rpd also still here it is working fine
    Now I want to enhance the existing rpd by connecting to the Oracle database to newly created schema
    when I connect through OCI/ODBC interface it is showing an error (here I have been used local machine instead of Remote server from "import from metadata")
    is there any additional configuration requred which need to do?

    Hi
    Thanks for your inputs but I can not find the path that you specified in my cliient machine(windows)
    1.Copy the tnsnames.ora from Oracle Database home (ORACLE_HOME\NETWORK\ADMIN\) to the following locations.
    *\OracleBI1\network\admin (Example: C:\OBI\Oracle_BI1\network\admin)*
    *\oracle_common\network\admin (Example: C:\OBI\oracle_common\network\admin)*
    weather we have any other path for client machine or I have to do the changes in server side(Linux)
    waiting for your response

  • From ODBC to OCCI

    Hello,
    I have an application that uses ODBC and I want to change it into OCCI.
    Could you please give me any hints or an example how to realize that.
    Thanks a lot and have a nice day.

    Thank you for you help Justin. I have converted ODBC versions of calls to OCCI by replacing "{call with "BEGIN and )}" with );END;" Worked for me. However, one of my querries which works in ODBC hangs in OCCI. It is a select statement. I placed it bellow. When I call rset->next(), my app hangs ( I waited more than half an hour for it to respond and gave up ). I checked rset->status before calling next, it returned 1. Any ideas?
    Here is the querry:
    SELECT symtom_name, p.Create_Date, p.Problem_ID, p.Sentry_ID, p.status,
    nvl(se.host_name,'N/A'), decode(p.sensorip,'unknown','Not Reported',null,'Not Reported','null','Not Reported',p.sensorip), nvl(se.short_description,'N/A'), p.sensor_hostname, nvl(CountPTGatewayMessage(p.Problem_ID),0) FROM rep_problemticket p, (SELECT short_description,device_ip,host_name,sentry_id FROM rep_sensor WHERE company_id ='123')se WHERE p.sensorip=se.device_ip(+)
    AND p.sentry_id=se.sentry_id(+) AND p.Company_ID = '456' ORDER BY create_date desc
    Thanks.

  • How to find the installed oracle components( oci , occi) versions?

    Hi,
    could you please help me to find out the version of installed oracle components?
    ex: which version of OCCI installed?
    one way is using OUI gui tool.
    I also got this info from oracle inventory file.
    under $ORACLE_HOME/inventory/ContentsXML/comps.xml
    But is there any best way or command to look for the same.
    Thanks,
    Krish

    The "best way" almost certainly depends on why you're looking for the information and what tool(s) you're using.
    If you're asking a human being to get the information, the OUI is generally going to be "better". If you're writing a program to get the information, parsing the inventory XML is likely to be "better".
    If you have multiple Oracle Homes on a single machine (particularly Oracle Homes with different major Oracle releases), though, or you have various failed/ incomplete/ obsolete installations on various machines, or if you're trying to figure out which version of the libraries would actually get used when a particular application starts up (assuming there are multiple applications on the machine), things start to get rather trickier.
    Justin

  • Does Oracle Database 10g Express support oci/occi ?

    When I install express on fedroa ,can't find the libraries.

    Hi,
    Thanks for your quick reply. I just wanted to know if it does support sequences. We are planning to bundle some free DB with our product. So, I was thinking if OracleXE would be a choice & hence, verifying the required features.
    Thanks.

  • Oracle VM and OVF

    Hello,
    use Oracle VM the OVF or can I import VM's with this format?
    regards
    ChriZ

    No, It looks like the OVF format is not supported.
    Regards,
    http://oracleracexpert.com
    Click here to learn [ RMAN incomplete recovery|http://www.oracleracexpert.com/2009/11/how-to-restore-database-to-point-in.html]
    Click here to learn on [Oracle ODBC, OCI, OCCI Drivers|http://www.oracleracexpert.com/2009/08/download-oracle-client-instant-client.html]

  • OCCI Error -  ORA-32102: invalid OCI handle

    Hi,
    I'm completely new to OCCI and Linux and trying to run the simple OCCI program given in oracle site (http://www.oracle.com/technology/tech/oci/occi/occibasic.html) to connect a remote Oracle DB server.
    #include <iostream>
    #include <occi.h>
    using namespace std;
    using namespace oracle::occi;
    int main()
    Environment* env = Environment::createEnvironment();
    Connection* conn = env->createConnection("testdb", "testdb", "192.168.10.118:1521/ORADB"); // user, password, url
    Statement* stmt = conn->createStatement();
    stmt->setSQL("INSERT into FRUITS (fruit, amt) VALUES ('apple', 10)");
    stmt->executeUpdate();
    conn->terminateStatement(stmt);
    env->terminateConnection(conn);
    Environment::terminateEnvironment(env);
    return 0;
    When I try to run it after compilation it gives the following error.
    ORA-32102: invalid OCI handle
    The error should be in the line: Connection* conn = env->createConnection("testdb", "testdb", "192.168.10.118:1521/ORADB");
    I could track it by placing a cout<< there.
    Why this is and how can I handle this error? Please post your experience.
    Thanks

    Hi,
    I found the reason. It may due to the permission level of the user "testdb". When I tried with a different user it worked!
    Thanks

  • Does Oracle provide public Symbol Files (PDB) for OCCI/OCI ?

    When debugging an application under Windows (with Visual Studio or WinDBG) that makes use of OCCI it would often be convenient if there be symbol files (PDB files) for the Oracle OCI/OCCI libraries. ( [public symbol files|http://msdn.microsoft.com/en-us/library/ff553493%28VS.85%29.aspx] , just as Microsoft makes available for all system libraries)
    Does Oracle provide these?
    thanks,
    Martin

    Hi,
    I have this bug opened http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7191593 and http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7175004.
    I also opened Jetty bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=335813 and It sounds like it is a JVM on windows 2008 problem..
    In order to investigate it further I also need these .pdb files which I am trying to get with no success (http://stackoverflow.com/questions/12265573/looking-for-java-pdb-files-analyze-a-crash-hdmp-file)
    Thanks.

  • Comparison: OCI or OCCI.

    Hi,
    I'll start a new project that requires low-level Oracle access. I want to use OCI or OCCI.
    I've searched and read some docs. But, I still have some questions on using OCI or OCCI.
    - I'm familiar with object-orientied programming. So, I consider OCCI. But, I'm not sure if I can do anything that I can do in OCI. does OCCI provide anything provided by OCI ?
    - Which one is faster (if other conditions are accepted as constant) ?
    - Which one is more popular in development ?
    - is there a comparison sheet between them ?
    - is there a URL that referres to OCI/OCCI papers (other than OCI/OCCI home pages at otn) ?
    thanks in advance...

    But you can only use OCCI with a C++ compiler, NOT a plain C compiler, right?
    However, with OCI you can use either c or c++.

  • Problem with OCI call  and  how to install and use 'DEBUG_EXTPROC' on Linux

    Hi,
    Can any one let me know how I can install and use this debug_extproc package. I have installed oracle XE server on Linux machine(32-bit).
    When I use : DEBUG_EXTPROC.STARTUP_EXTPROC_AGENT' ... i get an error saying that : it is not declared.
    I tried looking in all the directories but did not find the dbgextp.sql(which is required in order to install that package).And tried searching on google but could not get any relevant information.
    Also I am newbie to OCI call interface and also to C programming too: I have coded a external procedure or custom user aggregate in C. But since I was using C++ : 'set' STL. I have compiled my program using g++ instead of gcc and I have correspondingly modified the make file in public/demo directory.
    So, is it fine to do it that way: using OCI (instead of OCCI(C++)) but again compiling the pgm as a regular C++ using g++ instead of gcc.(But rest of the pgm including printf statements : everything is in C).
    Also I have created the library from my : custagg.so library:
    SQL> create or replace library custagg is '$ORACLE_HOME/lib/custagg.so'
    But my aggregate function implemented as external C function using OCI is either not recognised or else : if recognized then there is some error because of which i am getting the following errors : ORA-06522
    SQL> select MinDistance(TT) from egg1;
    select MinDistance(TT) from egg1
    ERROR at line 1:
    ORA-06520: PL/SQL: Error loading external library
    ORA-06522: /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/custagg.so:
    cannot dynamically load executable
    Please kindly answers my queries and trying to resolve this for almost 4 days now and could not find any clue on how to get this done.
    Thanks,
    -NN

    #/bin/make
    # Make file for OCI,OCCI and ODBC demos
    # Usage :
    # For compiling & linking the cdemo81.c file
    # make -f demo_xe.mk buildoci CDEMOEXE=cdemo81 CDEMOOBJS=cdemo81.o
    .SUFFIXES: .o .c .cpp
    ICINCHOME=$(ORACLE_HOME)/rdbms/public/
    ICLIBHOME=$(ORACLE_HOME)/lib
    ICLIBPATH=-L$(ICLIBHOME)
    THREADLIBS=-lthread
    CCLIB=$(ICLIBPATH) -lclntsh $(THREADLIBS)
    OCCILIB=$(ICLIBPATH) -locci -lclntsh $(THREADLIBS)
    CCINCLUDES = -I$(ICINCHOME)
    CCFLAGS=$(CCINCLUDES) -D_REENTRANT -g -xs
    LDFLAGS=
    SO_EXT=.so
    EXTLDFLAGS=$(LDFLAGS) -shared
    REMOVE=rm -rf
    MKLINK=ln
    MAKE=make
    MAKEFILE=demo_xe.mk
    CDEMOEXE=custagg.so
    CDEMOOBJS=custagg.o
    OCCIDEMO=occidml
    OCCIOBJDEMO=occiobj
    OTT=$(ORACLE_HOME)/bin/ott
    OCCIOTTUSR=hr
    OCCIOTTPWD=hr
    ODBCDEMOEXE=odbcdemo
    ODBCDEMOOBJS=odbcdemo.o
    AQDEMOEXE=ociaqdemo00
    AQDEMOOBJS=ociaqdemo00.o
    EXTDEMO=extdemo2.so
    CC=/usr/bin/g++
    echo "LIBCLNT value is :" $(LIBCLNT)
    echo "CC value is :" $(CC)
    .c.o:
    g++ -c -I$(ICINCHOME) $(CCFLAGS) $<
    all: clean buildoci
    echo "LIBCLNT value is :" $(LIBCLNT)
    buildoci: $(LIBCLNT) $(CDEMOOBJS)
    g++ -o $(CDEMOEXE) $(LDFLAGS) $(CDEMOOBJS) $(CCLIB)
    echo "CC value is :" $(CC)
    echo "LIBCLNT value is :" $(LIBCLNT)
    clean:
    $(REMOVE) $(CDEMOOBJS) $(CDEMOEXE)
    # This port-specific file is currently empty on Solaris. Product
    # lines may use this file to override compiler definitions and
    # flags used in occi.mk.
    # Linux compiler definitions
    CC=/usr/bin/gcc
    cc=/usr/bin/gcc
    CCFLAGS=$(CCINCLUDES) -DLINUX -D_GNU_SOURCE -D_REENTRANT -g
    LDFLAGS=-g
    # This macro CCINCLUDES has to be redefined on Linux because of
    # the existence of the 'new' directory in t_work. The name new
    # clashes with a system header file.
    CCINCLUDES = -idirafter .
    THREADLIBS=-lpthread
    ifdef BUILD_CCC296
    CC=/usr/bin/g++296
    endif
    And I am executing the make file using the command :
    make -f demo12.mk buildoci CDEMOEXE=custagg.so CDEMOOBJS=custagg.o
    I am not getting any error while running this make file.
    Can you please tell me whether PLSQL/Oracle is able to locate the file or not. Incase, if it is locating the file but due to some error in the custagg.so it is throwing that error. If this is the case, is there any way that i can debug the C program .....how can i install the debug_extproc package.. I am really new to C & OCI ... if the custagg.so is being located then there might be some problem with the way I am dynamically allocating memory to some variables.
    Please kindly reply to this Post/response.
    Please let me know if you also want to see my program code.
    Thanks & Regards,
    -NN

  • OCCI: ORA-21500 [17099] seg faults on 10.2.0.4.1 client

    Hi,
    I've been getting this seg fault using OCCI, my environment:
    Oracle client 10.2.0.4.1 x86_64 (jul 2009) on rhel5.4
    Oracle database 9.2.0.8 x86_64 on rhel4.8
    I've written a g++ multi thread app that is making use of Connection Pooling, within 5 minutes of my app starting it seg faults with:
    ORA-21500: internal error code, arguments: [], [], [], [], [], [], [], []
    ORA-21500: internal error code, arguments: [17099], [], [], [], [], [], [], []
    Errors in file :
    ORA-21500: internal error code, arguments: [], [], [], [], [], [], [], []
    ORA-21500: internal error code, arguments: [17099], [], [], [], [], [], [], []
    ----- Call Stack Trace -----
    ORA-21500: internal error code, arguments: [], [], [], [], [], [], [], []
    ORA-21500: internal error code, arguments: [17099], [], [], [], [], [], [], []
    Errors in file :
    ORA-21500: internal error code, arguments: [], [], [], [], [], [], [], []
    ORA-21500: internal error code, arguments: [17099], [], [], [], [], [], [], []
    ----- Call Stack Trace -----
    calling call entry argument values in hex
    location type point (? means dubious value)
    calling call entry argument values in hex
    location type point (? means dubious value)
    Cannot seek to string table section header in /proc/8712/exe.
    Cannot seek to string table section header in /proc/8712/exe.
    Segmentation fault
    its compiled against gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
    I've tried the following:
    Installing the occi download from http://www.oracle.com/technology/tech/oci/occi/occidownloads.html and compiling with gcc-3.4.6
    I'm using the following commands to compile & link:
    g++ -DMOXA_DEBUG -I/database/u00/app/oracle/product/10.2.0/db_1/rdbms/demo -I/database/u00/app/oracle/product/10.2.0/db_1/rdbms/public -I/database/u00/app/oracle/product/10.2.0/db_1/plsql/public -I/database/u00/app/oracle/product/10.2.0/db_1/network/public -O0 -g3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"src/DB_Table.d" -MT"src/DB_Table.d" -o"src/DB_Table.o" "../src/DB_Table.cpp"
    g++ -L/database/u00/app/oracle/product/10.2.0/db_1/rdbms/lib -L/database/u00/app/oracle/product/10.2.0/db_1/lib -shared -o"libmoxa.so" ./src/DB_Table.o ./src/Dialup.o ./src/Modem.o ./src/Rtu.o ./src/Rtu_Type.o ./src/Session.o ./src/Session_Log.o ./src/Soe_Point.o ./src/Soe_Point_Event.o ./src/Thread.o ./src/Utils_Time.o ./src/db.o -locci10_343 -lclntsh -ldl -lm
    I've tried to do a -locci10 instead of the -locci10_343, still nothing..
    Intesting to note, the older version of the application on the same environment doesn't have this problem..
    I do know OCCI is a bit tempremental, especially when creating threads, as i've had to put a 100ms delay otherwise i get other errors
    the back trace looks like, it allways core dumps when releasing the connection..
    #0 0x00002b01b9fd8cae in slrac () from /database/u00/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    (gdb) bt
    #0 0x00002b01b9fd8cae in slrac () from /database/u00/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #1 0x00002b01b9fd8b3d in kgdsaaddr () from /database/u00/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #2 0x00002b01b9fd83b8 in kgdsdst () from /database/u00/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #3 0x00002b01b9c7f0b0 in skgudmp () from /database/u00/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #4 0x00002b01b9fb27ac in kgeriv () from /database/u00/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #5 0x00002b01b9fb2fab in kgesiv () from /database/u00/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #6 0x00002b01b9fb2ace in kgesic0 () from /database/u00/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #7 0x00002b01b9ace52d in kpuhhfre () from /database/u00/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #8 0x00002b01b9ad9a3a in kpuhmcfre () from /database/u00/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #9 0x00002b01b9a6ca5a in kputac () from /database/u00/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #10 0x00002b01b9b8265a in kpuspsessionrelease () from /database/u00/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #11 0x00002b01b9be1d6f in OCISessionRelease () from /database/u00/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1
    #12 0x00002b01b95452f1 in oracle::occi::ConnectionImpl::do_destroy () from /home/fep/moxa_1.3/libmoxa/Debug/libmoxa.so
    #13 0x00002b01b954d78c in oracle::occi::ConnectionPoolImpl::terminateConnection () from /home/fep/moxa_1.3/libmoxa/Debug/libmoxa.so
    #14 0x00002b01b953c47c in DB::release_connection (conn=0xed36498) at ../src/db.cpp:126
    I'm downloading the 11.2g client in the hope it works there without a hitch..
    Any help/suggestions whould be much appreciated..
    Cheers
    James

    Shiyer,
    libmoxa.so is the library I have created which is performing the oracle queries..
    The pool is created from the main thread by:
    Environment _env = Environment::createEnvironment (Environment::DEFAULT);
    ConnectionPool connectionpool = _env->createConnectionPool(
    username, passwd, tnsname, 1, 10, 1);
    And then each query is used run inside a connect initiated with:
    Connection *conn = connectionpool->createConnection(_username.c_str(), passwd.cstr());
    Statement *stmt = conn->createStatement("select 1 from dual;");
    ResultSet *rset = stmt->executeQuery();
    while( rset->next() == rset->DATA_AVAILABLE ) {
    std::cout << rset->getInt(1) << std::endl;
    stmt->closeResultSet (rset);
    conn->terminateStatement (stmt);
    and connection released with:
    connectionpool->terminateConnection(conn);
    Hope this helps!
    cheers
    James

Maybe you are looking for

  • How can I control print quantities from the main browser?

    So here's the workflow question I want to select photos to print but I want to print a different quantity depending on criteria. The photos may be in different albums, etc.. Selecting them all and trying to set the quantity in the Print Order window

  • Pivot Table - Rows displayed

    Hi, I have a pivot table report which display complete report instead of showing 25 rows first. Due to large number of rows we are getting Out of memory issue. Is it possible to display 25 rows first in Pivot table. Please help - as users are unable

  • Database Error after upgrading to CF8

    Hello, I have some applications which are running under CF MX 6.1 and MySQL 4.0. For the Database connection I use the J-Connector of MySQL. Now I upgraded one server to CF8 and MySQL 5.0. For the database connection I use the intern connector for My

  • Forms standard coding technique

    Hi: Thinking in terms of efficiency I need to check for the existence of a value in a database table E.g. in a W-V-I trig CURSOR c1 IS SELECT 'X' FROM TAB_A WHERE COL_A = :blockA.itema; IF ( c1%NOTFOUND THEN ) show_alert('Does not exist...blah blah b

  • Executing SP in MSSQL takes forever?!

    Hi all, I need to execute a stored procedure in our database server, MS SQL Server 2000 and it takes forever... I'm using Microsoft SQL Server 2000 Driver for JDBC Version 2.2.0022 My code: Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"