Exception ends program execution

Hello everyone!
I'm developing an application that uses a plugin architecture. I had to come up with my own plugin architecture since the ready-made solutions for my problem seemed like overkill (JPF and OSGI) and not exactly what I wanted.
The thing is that with one particular plugin, when the application tries to execute the initialize code and it throws an exception, it brings the whole system down! Obviously not a very good thing to happen. The way that I'm loading each plugin is as follows (just the relevant code):
try{
    Object o = Class.forName(className).newInstance();
    //Execute the init method
    ((IHardwareCapsule)o).init();
}catch(Exception e){
    logger.debug(e.getMessage());
}I would expect the try/catch above to catch any possible exception, however that is not the case. Also, that code is called from inside a SwingWorker's doInBackground method, and so (I think) the exception should merely kill the background thread and not the whole application. The specific exception that does this is a ConnectException. I tested with another exception (divide by zero) and it gets caught fine.
What am I missing here?

Cesaro wrote:
I would expect the try/catch above to catch any possible exception, Why would you expect that? Did you not study exceptions? Or did you not look at Exception's javadocs?

Similar Messages

  • How do you force DAQmx output to 0 at the end of program execution?

    I am using a 6713 to generate an arbitrary analog waveform on its output. However, once the labview vi has finished execution, the output voltage from the 6713 does not go back to 0 V. I have tried to force it back to 0 V by appending a 0 V amplitude waveform to the end of the analog waveform to mixed results (if I give it thousands of points, it goes to 0, but if I make it a more reasonable 100 points, it doesn't). How can I force the output back to 0 V. I tried stopping the task, clearing it, and stopping it and then clearing it. None of those worked.
    Any help would be greatly appreciated.
    Attachments:
    6713 Interface.vi ‏144 KB

    First, I have to ask, did you write this VI?
    It is very hard to follow and has a lot of confusing structures in it.  IN the middle area where a lot of the DAQmx functions are, the error wire loops around so much it is hard to tell what is happening in what order.  To the lower left, an array is converted to a cluster, the cluster is unbundled, the individual elements are fed to a compound addition to get a single value.  Why not just use a sum array function on the original array?
    The stop button is fed to the Stop Sign function.  This is Abort execution which is the same as hitting the red stop button at the top of the VI.  It ends the execution of the VI right then and there and doesn't allow anything else to happen.  Read the context help for that function.  As someone else has said on the forum,  "Using the Abort button is like using a tree to stop your car.  It will stop it, but there might be consequences."
    How is this VI being run?  Is the Run Continuous button being used?  My guess is yes because I don't see any While loops and the only thing the stop button does is end the program abruptly.
    You will need to rethink your whole architecture.  Stuff that needs to happen once should be set up before a while loop that has wires leading to the while loop or uses a flat sequence to make sure that it happens first.  This is you program initialization.
    Everything that happens repeatedly would be in the while loop.  The front panel Stop button is what ends this loop.
    Anything that has to happen before the program ends like closing out tasks happens after the while loop (either by wires for dataflow or in 3rd frame of a flat sequence structure.  With this, you should be able to reset your tasks so they output a zero voltage from the analog outputs before the tasks are closed and the program ends naturally.
    Appending a zero to the end of the waveform won't help because if the waveforms run continuously, it will restart back at the beginning.
    I would highly recommend looking at the example VI's for DAQmx functions and taking the tutorials for Labview that are available on the NI website.
    Message Edited by Ravens Fan on 02-23-2008 10:45 PM

  • Concurrent program execution Error

    i have genrated a simple report and copied to linux server,could any on help me how to resolve the error.Eventhough I was Getting the output.
    ERROR:
    Program exited with status 1
    Concurrent Manager encountered an error while running Oracle*Report for your concurrent request 4349601.
    Review your concurrent request log and/or report output file for more detailed information.

    I have copied the message from the logfile itself for complete reference,plz look in to the following error
    ERROR
    +-----------------------------
    | Starting concurrent program execution...
    +-----------------------------
    APPLLCSP Environment Variable set to :
    Current NLS_LANG and NLS_NUMERIC_CHARACTERS Environment Variables are :
    American_America.UTF8
    Enter Password:
    Report Builder: Release 10.1.2.0.2 - Production on Wed Jun 4 16:36:01 2008
    Copyright (c) 1982, 2005, Oracle. All rights reserved.
    Start of log messages from FND_FILE
    End of log messages from FND_FILE
    Program exited with status 1
    Concurrent Manager encountered an error while running Oracle*Report for your concurrent request 4349601.
    Review your concurrent request log and/or report output file for more detailed information.
    Executing request completion options...
    Output is not being printed because:
    The print option has been disabled for this report.
    Finished executing request completion options.
    Concurrent request completed
    Current system time is 04-JUN-2008 16:36:02
    ---------------------------------------------------------------------------

  • Cannt close itunes, have to end program

    itunes works fine except when i try and shut down the program,
    it freezes and i am forced to end program
    i uninstalled apple mobile device support and it would close down, but then my ipod touch would not be recognised as being connected by my computer or itunes.
    help!?

    It finally seems like it finished uploading... only 6000 of the 13000 songs...
    You may be right about selecting smaller numbers at a time.  I know this problem happened before too.
    I keep most of my music on a side drive to my laptop (PC) and recently the computer had formerly named it m,y F drive, then last time when i hooked up it called it the E drive... go figure, anyway seemed iTunes considered it new and so the match started all over.
    I have music files on both my laptop and the side drive.
    Much of my music has been converted from LP's and Cassettes  (I'm old...;)
    Next time if I have issues I'll try your idea of matching a few at a time.
    I am able to select small groups and match them on top of the matched ones already completed.
    This is really cool to get all these songs on our iphone(s) at will....  great when traveling or I want my wife (4000 miles away) to have access to other songs...
    jay love joy luck
    Hawaii and Minnesota, USA

  • Program execution during RIMODAC2..will it  always reach to cif user exit

    Hello ,
    We are implementing cif user exit for Purchase Order at R3 side to capture additional date field. So logic to capture additional date field is put in user exit CIFPUR01. We have  RIMODAC2  background job for Purchase order running on daily basis.
    if there is no change in standard Purchase Order objects. When RIMODAC2 is executed  for purchase order Integration models ..will  program execution still always reach to R3  user exit part of the program irrespective of if  any change in standard purchase order object has happened or not.
    Will appreciate your answer.
    Thank you
    Best Regards
    Nilesh Patil

    Nilesh,
    I am no longer sure I understand the question.
    RIMODAC2 activates the model.  Once a model is activated, if someone changes certain specific fields in an R/3 object, then these changes are sent to SCM, either immediately or via change pointers.  All this happens irrespective of IM userexits.
    If this same field in this same object is changed in R/3, and a userexit also has been implemented, the  userexit will execute according to its design,  performing whatever task it has been programmed to do.
    If you create and implement a userexit, it begins working at that moment in time that it is installed.  Data that flowed across 'yesterday' to SCM is not affected.  Data that flows across 'tomorrow' will be affected.  Data in R/3 will usually only flow across to SCM if there is some kind of triggering event, usually a database 'change' transaction (e.g., ME22N for POs) The mere act of installing a userexit will not generally affect existing data on either side.  The userexit only affects data that flows across the IM. Unchanged records in the R/3 database will generally not be sent to SCM by the IM, and will not be subject to userexit processing.
    It is not generally the responsibility of a functional consultant to explain the workings of a userexit to a technical consultant.  It is enough that the functional identifies the userexit, and specifies the business requirement in as much detail as possible.  The developer is then responsible for carrying out the coding.  Technicals are generally expected to be competent enough to determine from the userexit docs, and from the surrounding code, how a userexit works.  They can also raise a message to SAP.  In the end, it is all just ABAP, although userexit implementations can be quite challenging. SAP seldom provides enough details in their documentation.   Once the Technical has finalized the code, Functional and Technical together then perform unit testing, before passing the mods to users for integration testing.
    If your client's coders are unable to manage the task, perhaps they should engage your company to provide technical expertise, as well as functional expertise.
    Best Regards,
    DB49

  • Java.sql.SQLException: Io exception: End of TNS data channel

    Hello folks,
    Has amyone encountered this exception? If so, could you please shed some light for what might be going wrong?
    Here is my confuguration:
    400MB RAM
    1.2GHTz processor
    Win2K Pro
    Oracle server 9.0.1
    JDBC Thin driver (libs for 9.0.1)
    Scenario:
    My Java code uses Oracle Spatial to insert SDO_GEOMETRY objects into my DB model.
    I have a config file where I store my connection properties, e.g.,
    <DBConnection name="twatest">
    <JDBCDriver>oracle.jdbc.driver.OracleDriver</JDBCDriver>
    <URL>jdbc:oracle:thin:@saturn:1521:saturn</URL>
    <Username>user1</Username>
    <Password>twatest</Password>
    </DBConnection>
    We have 2 schemas defined: user1 and twatest.
    The problem first occured when I switched from user1 to twatest. Consequent attempt to run the process as user user1 failed! The Java SQL statements do not use schemas (so they default, I suppose, to the default schema for that particular user, in our case being user1-->user1, twatest-->twatest).
    The problem happens in the following Java class (search for "HERE" to see where exactly the problem occurs):
    package com.vividsolutions.twatest;
    import java.util.*;
    import java.sql.*;
    import oracle.sql.*;
    import oracle.sdoapi.OraSpatialManager;
    import oracle.sdoapi.geom.*;
    import oracle.sdoapi.adapter.*;
    import oracle.sdoapi.sref.*;
    import com.vividsolutions.twatest.parser.*;
    import com.vividsolutions.twatest.config.*;
    import com.vividsolutions.twatest.model.*;
    * This class is responsible for loading lakes into the SDO Oracle Spatial DB.
    public class LakeLoader
    static boolean initialized = false;
    private static GeometryFactory gF;
    private static SRManager srManager;
    private static SpatialReference sref;
    private static GeometryAdapter sdoAdapter;
    public static void loadLake(EdgedLake slake, Connection conn) throws Exception {
    com.vividsolutions.jts.geom.Envelope e = slake.getEnvelope();
    if (e == null) {
    System.out.println("Invalid envilope (feature ID="+slake.getFeatureId()+")! Ignoring...");
    return; // ignore lake - it's invalid (no envilope)
    if (!initialized) {
    initialize(conn);
    initialized = true;
    Geometry geom;
    STRUCT str;
    // insert Lake
    String lakeQuery = "INSERT INTO lake " +
    "(lake_id, area, bounding_box, name, instantiation_date) " +
    "VALUES(?,?,?,?,?)";
    PreparedStatement ps = conn.prepareStatement(lakeQuery);
    int lakeId = getId(Lake.ID, conn);
    ps.setInt(1, lakeId);
    ps.setDouble(2, Double.parseDouble(slake.getArea()));
    // Creates a 2-D rectangle (special case of Polygon geometry).
    geom = gF.createRectangle(e.getMinX(), e.getMinY(), e.getMaxX(), e.getMaxY());
    ps.setObject(3, sdoAdapter.exportGeometry(STRUCT.class, geom));
    ps.setString(4, slake.getName());
    ps.setTimestamp(5, new Timestamp(new java.util.Date().getTime()));
    ps.executeUpdate(); // <-- HERE I got: java.sql.SQLException: Io exception: End of TNS data channel
    //ps.close();
    String ringQuery = null;
    int ringId = 0;
    List shellEdges = slake.getShellEdges();
    if (shellEdges != null && shellEdges.size() > 0) { // if there is valid shell, insert it...
    // insert shell Rings
    ringQuery = "INSERT INTO ring (ring_id, lake_id, type) VALUES(?,?,?)";
    ps = conn.prepareStatement(ringQuery);
    ringId = getId(Ring.ID, conn);
    ps.setInt(1, ringId);
    ps.setInt(2, lakeId);
    ps.setString(3, Ring.SHELL);
    ps.executeUpdate();
    //ps.close();
    // insert shell ring Edges
    insertEdges(shellEdges, lakeId, Ring.SHELL, ringId, conn);
    List holeEdges = slake.getHoleEdges();
    if (holeEdges != null && holeEdges.size() > 0) { // if there are valid holes, insert them...
    // insert hole Rings
    ringQuery = "INSERT INTO ring (ring_id, lake_id, type) VALUES(?,?,?)";
    ps = conn.prepareStatement(ringQuery);
    ringId = getId(Ring.ID, conn);
    ps.setInt(1, ringId);
    ps.setInt(2, lakeId);
    ps.setString(3, Ring.HOLE);
    ps.executeUpdate();
    //ps.close();
    // insert hole ring Edges
    insertEdges(holeEdges, lakeId, Ring.HOLE, ringId, conn);
    ps.close();
    private static void insertEdges(List edges, int lakeId, String ringType,
    int ringId, Connection conn) throws Exception {
    if (!initialized) {
    initialize(conn);
    initialized = true;
    Geometry geom;
    STRUCT str;
    // insert shell ring Edges
    String edgeQuery = "INSERT INTO edge " +
    "(edge_id, lake_id, ring_type, ring_id, edge_sequence, shape) " +
    "VALUES(?,?,?,?,?,?)";
    int edge_sequence = 0;
    for (Iterator it=edges.iterator(); it.hasNext(); ) {
    Edge edge = (Edge)it.next();
    geom = gF.createLineString(LakeFactory.edgeToArray2D(edge)); // 2-dimensional coordinates
    PreparedStatement ps = conn.prepareStatement(edgeQuery);
    int edgeId = getId(Edge.ID, conn);
    ps.setInt(1, edgeId);
    ps.setInt(2, lakeId);
    ps.setString(3, ringType);
    ps.setInt(4, ringId);
    ps.setInt(5, edge_sequence++);
    ps.setObject(6, sdoAdapter.exportGeometry(STRUCT.class, geom));
    ps.executeUpdate();
    ps.close();
    * @param key This can be: "lake", "ring", or "edge".
    * @param conn The connection to use.
    * @return the unique ID corresponding to the given key.
    public static int getId(String key, Connection conn) {
    int id = -1;
    try {
    String query = "SELECT "+key+"_SEQUENCE.NEXTVAL FROM DUAL";
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(query);
    while (rs.next()) {
    id = rs.getInt(1);
    stmt.close();
    } catch(SQLException sqle) {
    sqle.printStackTrace();
    return id;
    private static void initialize(Connection conn) throws Exception {
    gF = OraSpatialManager.getGeometryFactory();
    // Set spatial reference system in which the geometries will be created
    srManager = OraSpatialManager.getSpatialReferenceManager(conn);
    sref = srManager.retrieve(8307);
    gF.setSpatialReference(sref);
    sdoAdapter = OraSpatialManager.getGeometryAdapter("SDO", "8.1.6",
    null, STRUCT.class, null, conn);
    public static void main(String args[]) throws Exception
    String[] xmlLakeFiles = {
    "lakes101to1400.xml",
    "lakes1401to10000.xml",
    "lakes10001to20000.xml",
    "lakes20001to30000.xml",
    "lakes30001to40000.xml",
    "lakes40001to50000.xml",
    "lakes50001to60000.xml"
    PropertyManager pm = new PropertyManager();
    int numberOfLoadedLakes = 0;
    try {
    pm.initialize();
    Map modelMap = (Map)pm.get(XMLConfigFile.MODEL_MAP);
    LakeModel lakeModel = (LakeModel)modelMap.get(LREConcreteLakeModel.NAME);
    Connection connection = ConnectionManager.getConnection();
    lakeModel.setConnection(connection);
    for (int i=0; i<xmlLakeFiles.length; i++) {
    long then = System.currentTimeMillis();
    System.out.println("Loading lake "+xmlLakeFiles[i]+"...");
    numberOfLoadedLakes = lakeModel.loadModel(xmlLakeFiles);
    long now = System.currentTimeMillis();
    System.out.println("Loaded "+numberOfLoadedLakes+" lakes!");
    System.out.println("Execution time: "+(now-then)/1000+" seconds!");
    System.out.println("Loading lake "+xmlLakeFiles[i]+"...done!");
    connection.close();
    } catch(Exception e) {
    e.printStackTrace();
    My client class calls LakeLoader.loadLake() method in a loop to load a bunch of Lake objects into the DB. The first lake in the list is created without problems, but when the 2-nd lake is being inserted, I get an exception at the preparedStatement.executeUpdate() statement. This happens consistently.
    I tried to find information on this on the net, but seems that this problem only happened when people dealt with LOBs?!
    Thank you very much!
    Georgi

    Suresh -- I'd probably log a TAR with Oracle support for this question if you definitely need it resolved. Support have access to all manner of existing cases, so this may be something they have seen before.
    cheers
    -steve-

  • Error out the ABAP program execution

    I have an ABAP program which transfers data from a file to a database table thru function module in packages of 50,000 records.
    Upon the successful completion of this ABAP program, I start dependent processes.
    Sometimes the function module does not transfer the data and returns the exception back to the ABAP program - which is an expected scenario. Currently when ever an exception is received in the function module, I stop the ABAP program with a STOP statement.
    The ABAP program stops, which meets my first objective. But what happens is, if you look at the job log --> it is Completed in terms of program execution and the dependent processes automatically start - which is not meeting my second objective.
    My second objective is to force the ABAP program to error out in such a way that .........
    1) The program execution is stopped
    2) If I look at the job log it should not be Completed (I am looking for something like Cancelled so that the dependent process do not get started automatically)
    Is it possible to error out the ABAP program execution by raising an exception or something, so that when i look at the job log - it shows Cancelled and not Completed?
    Let me know if you have any questions.
    Thanks,
    RK.

    Adrian,
    Thanks - This is exactly what I was looking for, it works.
    For some reason Messages skipped my mind and I was looking at raising Exceptions
    Solution:
    if sy-subrc NE 0.
      message id 'abc' type 'E' number 000.
    endif.
    Thanks,
    RK.
    Edited by: RK on Jan 17, 2010 7:47 PM
    Edited by: RK on Jan 17, 2010 7:50 PM
    Edited by: RK on Jan 17, 2010 7:52 PM

  • How to pause program execution?

    I'm developing a board game. It has the Board class, Coin class and Dice class.
    The dice class has an animation to show the dice rolling. The coin class also has an animation to show the coin moving from start square to end square.
    When user clicks on the dice the sequence of steps that take place are -
    getRandomNumber();
    dice.roll();
    coin.move();
    But the problem I'm facing is even before the dice rolling animation stops, the coin moving animation begins.
    How can I pause the program execution so I can move to next line in program only when the animation in the previous is stopped?
    or How can I change the logic so that it goes as desired.

    Timelines (well, actually KeyFrames) have an action variable, where you can put a function doing whatever you need to do at the end of the key frame.
    So, you can make your coin to move at the end of the dice animation (ie. calling coinAnimation.play() in the action of the last key frame of diceAnimation).

  • Firefox is very slow to respond when opening and nearly always stops responding altogether even refusing to react to Task Manager "End Program@ command. The "not responding@ error message also comes up during navigation on line.

    Firefox is very slow to respond when opening and nearly always stops responding altogether, even refusing to react to the Task Manager "End Program" command. The "not responding" error message also comes up during navigation on line. Several attempt have to be made to get on line. A loss of stability seems to be endemic at the moment.

    Try following the instructions here: [[Firefox hangs]]

  • Date format changes in the middle of a program execution

    In my C code I have a series of select statements.
    When I first get a session to the database I use the following command to set the date format
    alter session set nls_date_format = 'MM/DD/YYYY HH24:MI:SS'
    It works fine for a few queries. After a while during the program execution I see that the date format changes to 'DD-MON-YY' format. This results in a series of error in my code because I expect the date format to always be in the 'MM/DD/YYYY HH24:MI:SS' format.
    Any idea why the date format should change all of a sudden in the middle of the program execution.

    I second the idea that you should always use TO_DATE and TO_CHAR if you want to reliably convert between dates and strings.
    Without seeing your code, it is hard to say why your date format is changing, but the most likely reason is that you are changing users somewhere in the code. For example:
    SQL> show user
    USER is "OPS$ORACLE"
    SQL> SELECT sysdate FROM dual;
    SYSDATE
    11-JUL-2003
    SQL> ALTER SESSION SET nls_date_format='dd-Mon-yyyy hh24:mi:ss';
    Session altered.
    SQL> SELECT sysdate FROM dual;
    SYSDATE
    11-Jul-2003 10:15:12
    SQL> connect jtest/test
    Connected.
    SQL> SELECT sysdate FROM dual;
    SYSDATE
    11-JUL-2003TTFN
    John

  • Remote Program Execution

    Dear Sir,
    I have following problem and very desperately looking for the solution .
    I have 9ias installed on window-2000 server and on this machine JSP/Servlet is also running .
    There is another Unix server also having Oracle 7.3.4 and Pro*C installed .
    My requirement is that on receiving a web client request , the invoked JSP must also execute a C program on the unix machine ( the execution of C program creates a text output file on the unix machine ) and after completion of C program execution the output text file must be available to JSP . As a final result of JSP execution this output text file must be returned to WEB Client .
    Please guide me how to go about this .
    Thanks and Regards
    B V Mittal

    Call your C program like this from your controller servlet
    Process p = Runtime.getRuntime().exec("c.exe");
    BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
    Then read from your generated file and populate whatever you need into a bean.

  • How do I insert or delete a row in tree during program execution ?

    Trying to understand how to edit/modify a tree control during program execution, specifically if I want to add a row or delete a row.
    Thanks

    Hi dwjef,
                 Go through this.I think by going through this you we will get an idea of how to achieve what you are trying.
                 https://decibel.ni.com/content/docs/DOC-20747
    Thanks as kudos only

  • Problem closing a Program (remains in status 'trying to end program')

    After upgrading to OS Maverick, CrossOver issued an error message. Trying to finish the program didn't work, it continuous indicating it's trying to end it. Even after using the immediatly stopping function, it falls into the 'trying to end program' mode on opening CrossOver again. Any suggestions on how to solve it?

    I would suggest force-quitting the application as detailed here. I hope this helps.

  • How do I pinpoint the program execution?

    Hi all,
    I am wondering how to pinpoint the program's execution point?  I have a problem with all of the loops not stopping properly.  I hit the "Hilight Program execution" and it went to one loop, that is, it appeared greyed out, but I can't figure out which case it's stuck in.  Is there a way to find the exact *point* of execution?
    Thanks,
    Jason

    You can use breakpoints. The program will pause as soon as it hit the breakpoint. To add breakpoints, right-click in the place where you want it and set it. You can also set probes. The probes activate as soon as the information is available. Then you can be creative with the highlight execution, breakpoints and probes. You can have a fairly good idea on how your program is executing.
    Otherwise, try posting your code or an image of your code so we can try to figure out what is going on.
    www.vartortech.com

  • Exception during mapping Execution

    Hi Experts
    an Matmas05 xml is coming from MDM system. & it should be posted as Matmas05 in R/3.
    i imported the MDM content in IR. but the fields order in coming Matmas05 xml file and the fields order in
    Matmas05 Idoc  are Not same.
    while Executing Mapping it  throws 'Exception during mapping execution'
    so pls give solution How can i solve...this error
    pls ....urgent.
    thanks & regards
    swapna

    HI swapna,
    The XMl coming from MDM have the different sequence than the original Matmas05 IDOC that you have imported in IR,.
    Lets take it this way as the Original Matmas IDOC structre is not matched up with the sender side Structure.
    You can change the sequence of IDOC XSD file with some tools like Altova xmlSpy and make it same as sender side. Then import the modified XSD file as external defination and use it on sender side.
    On Receiver side your Matmas05 structre sequence should have to be original one.
    Now map the corresponding fields and execute the scenario.
    thanks
    Swarup

Maybe you are looking for

  • Transferring the values from a known range of cells (containing formulas) in Excel using Applescript

    I have my AppleScript iterating thru email messages and pasting data (which arrives via email from a web form) into following cells: range "A1:A50" My Excel parsing of data occurs in cell formulas on Row 52, cells in range "A52:AZ52" I want to copy t

  • Urgent Help need - How to capture client change event

    Dear Gurus, I am not able to track whether user has changed any field in the table or not. I am using IWDNodeElement.isChangedByClient  to capture , but it is always returning me false. PLEASE HELP. Sample code wdContext.nodeTravelTable().moveFirst()

  • Is it possible to insert image that is embedded in XML tag value?

    Hello, I am trying to import a blog XML. Blogs can have images in their bodies. So can I have this image imported and placed in content place holder along with other text in the XML? I am using import XML here....thanks

  • Mac Notes app duplicates

    I love being able to sync my iCloud content so easily from my iPhone to my Mac (contacts, calenders, notes, etc.), but since I updated to Mavericks (at least I'm almost sure that's when it started), the Notes app on my Mac has shown duplicates of eve

  • Snow Leopard causes computer to crash

    I purchased a snow leopard home pack (5 users). The first was on my macbook pro and there were lots of problems with my e-mail account, key chain and a number of my usual third party software programmes will not run on it (bummer as most want me to b