java.rmi.ServerException: RemoteException occurred in server thread; nested ex
ption is:
        java.rmi.RemoteException: Transaction aborted; nested exception is: ja
x.transaction.RollbackException: Transaction ed for rollback.; nested exce
ion is:
        javax.transaction.RollbackException: Transaction ed for rollback.
        at com.sun.corba.se.internal.iiop.ShutdownUtilDelegate.mapSystemExcept
n(ShutdownUtilDelegate.java:64)
        at javax.rmi.CORBA.Util.mapSystemException(Util.java:65)
        at _EmployeeHome_Stub.create(Unknown Source)
        at EmployeeClient$saveEvent.actionPerformed(EmployeeClient.java:83)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:
86)
        at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Abst
ctButton.java:1839)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonMod
.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:2
)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButto
istener.java:245)
        at java.awt.Component.processMouseEvent(Component.java:5100)
        at java.awt.Component.processEvent(Component.java:4897)
        at java.awt.Container.processEvent(Container.java:1569)
        at java.awt.Component.dispatchEventImpl(Component.java:3615)
        at java.awt.Container.dispatchEventImpl(Container.java:1627)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:34
)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:319        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
        at java.awt.Container.dispatchEventImpl(Container.java:1613)
        at java.awt.Window.dispatchEventImpl(Window.java:1606)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatch
read.java:201)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchTh
ad.java:151)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:14        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:13        at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
Caused by: java.rmi.RemoteException: Transaction aborted; nested exception is:
avax.transaction.RollbackException: Transaction ed for rollback.; nested e
eption is:
        javax.transaction.RollbackException: Transaction ed for rollback.
        at com.sun.enterprise.iiop.POAProtocolMgr.mapException(POAProtocolMgr.
va:213)
        at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:
7)
        at com.sun.ejb.containers.EJBHomeInvocationHandler.invoke(EJBHomeInvoc
ionHandler.java:194)
        at $Proxy10.create(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImp
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcc
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(Reflec
veTie.java:117)
        at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dis
tchToServant(CorbaServerRequestDispatcherImpl.java:651)
        at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dis
tch(CorbaServerRequestDispatcherImpl.java:190)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleReque
Request(CorbaMessageMediatorImpl.java:1653)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleReque
(CorbaMessageMediatorImpl.java:1513)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput
orbaMessageMediatorImpl.java:895)
        at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.ca
back(RequestMessage_1_2.java:172)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleReque
(CorbaMessageMediatorImpl.java:668)
        at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.dispa
h(SocketOrChannelConnectionImpl.java:375)
        at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.read(
cketOrChannelConnectionImpl.java:284)
        at com.sun.corba.ee.impl.transport.ReaderThreadImpl.doWork(ReaderThrea
mpl.java:73)
        at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThrea
run(ThreadPoolImpl.java:382)
Caused by: javax.transaction.RollbackException: Transaction ed for rollbac        at com.sun.enterprise.distributedtx.J2EETransaction.commit(J2EETransac
on.java:255)
        at com.sun.enterprise.distributedtx.J2EETransactionManagerOpt.commit(J
ETransactionManagerOpt.java:333)
        at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.ja
:2622)
        at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.jav
2411)
        at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:

解决方案 »

  1.   

    import java.io.Serializable;
    import java.rmi.RemoteException;
    import javax.ejb.*;public interface EmployeeHome extends EJBHome {
      public Employee create(String codecd, String codename, String codeename, String ememo) throws RemoteException, CreateException;  public Employee findByPrimaryKey(String codecd) throws FinderException, RemoteException;
    }
      

  2.   

    import java.sql.*;
    import javax.sql.*;
    import java.rmi.RemoteException;
    import javax.ejb.*;
    import javax.naming.*;public class EmployeeEJB implements EntityBean {
      private String codecd;
      private String codename;
      private String codeename;
      private String ememo;  private EntityContext context;
      private Connection con;
      //private String dbName = "java:comp/env/interbase/EmployeeDB";  
      
      public String getCodeName() {
        return codename;
      }
      public String getCodeEName() {
        return codeename;
      }
      public String getEMemo() {
        return ememo;
      }
      public String getId() {
        String ss = "Ok, sir, you see me!!";
        return ss;
      }  //public EmployeeEJB() {}  public String ejbCreate(String codecd, String codename, String codeename, String ememo) throws CreateException {
        try {
          insertRow(codecd, codename, codeename, ememo); 
        }
        catch (Exception ex) {
          throw new EJBException("ejbCreate: " + ex.getMessage());
        }
        //this.codecd = codecd;
        //this.codename = codename;
        //this.codeename = codeename;
        //this.ememo = ememo;
        return codecd;
      }    public String ejbFindByPrimaryKey(String primaryKey) throws FinderException {
        boolean result;
        try {
          result = selectByPrimaryKey(primaryKey);
        }
        catch (Exception ex) {
          throw new EJBException("ejbFindByPrimaryKey: " + ex.getMessage());
        }
        if (result) {
          return primaryKey;
        }
        else {
          throw new ObjectNotFoundException("Row for codecd " + primaryKey + " not found.");
        }
      }
      
      public void ejbRemove() {
        try {
          deleteRow(codecd);
        }
        catch (Exception ex) {
          throw new EJBException("ejbRemove: " + ex.getMessage());    
        } 
      }
      
      public void ejbActivate() {
        codecd = (String)context.getPrimaryKey();
      }  public void ejbPassivate() {
        codecd = null;
      }
      
      public void ejbLoad() {
        try {
          loadRow();
        }
        catch (Exception ex) {
          throw new EJBException("ejbLoad: " + ex.getMessage());
        }
      }
       
      public void ejbStore() {
        try {
          storeRow();
        }
        catch (Exception ex) {
          throw new EJBException("ejbStore: " + ex.getMessage());
        }
      }
      
      public void ejbPostCreate(String codecd, String codename, String codeename, String ememo) {}  private void makeConnection() throws ClassNotFoundException, SQLException {
        Class.forName("interbase.interclient.Driver");
        String dbName = "jdbc:interbase://localhost/E:/AJava/jsptest/JspTest.gdb"; 
        con = DriverManager.getConnection(dbName, "SYSDBA", "masterkey");
      }  public void setEntityContext(EntityContext sc) {
        this.context = sc;
        try {
          makeConnection();
        }
        catch (Exception ex) {
          throw new EJBException("Unable to connet ot database. " + ex.getMessage());
        }
      }  public void unsetEntityContext() {
        try {
          con.close();
        }
        catch (SQLException ex) {
          throw new EJBException("unsetentityContext: " + ex.getMessage());
        }
      }
      
      private void insertRow(String codecd, String codename, String codeename, String ememo) throws SQLException {
        String insertStatement = "INSERT INTO ECODEMST VALUES(?,?,?,?)";
        PreparedStatement ps = con.prepareStatement(insertStatement);
        ps.setString(1, codecd);
        ps.setString(2, codename);
        ps.setString(3, codeename);
        ps.setString(4, ememo);
        ps.executeUpdate();
        ps.close();
      }  private void deleteRow(String codecd) throws SQLException {
        String deleteStatement = "DELETE FROM ECODEMST WHERE CODECD = ?";
        PreparedStatement ps = con.prepareStatement(deleteStatement);
        ps.setString(1, codecd);
        ps.executeUpdate();
        ps.close();
      }    private void loadRow() throws SQLException {
        String selectStatement = "SELECT CODENAME, CODEENAME, EMEMO FROM ECODEMST WHERE CODECD = ?";
        PreparedStatement ps = con.prepareStatement(selectStatement);
        ps.setString(1, codecd);
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
          this.codename = rs.getString(1);
          this.codeename = rs.getString(2);
          this.ememo = rs.getString(3);
          ps.close();
        }
        else {
          ps.close();
          throw new NoSuchEntityException("Row for codecd " + codecd + " not found in database.");
        }
      }
      
      private boolean selectByPrimaryKey(String primaryKey) throws SQLException {
        String selectStatement = "SELECT CODECD FROM ECODEMST WHERE CODECD = ?"; 
        PreparedStatement ps = con.prepareStatement(selectStatement);
        ps.setString(1, primaryKey);
        ResultSet rs = ps.executeQuery();
        boolean result = rs.next();
        ps.close();
        return result;    
      }  private void storeRow() throws SQLException {
        String updateStatement = "UPDATE ECODEMST SET CODENAME = ?, CODEENAME = ?, EMEMO = ? WHERE CODECD = ?";
        PreparedStatement ps = con.prepareStatement(updateStatement);
        ps.setString(1, codename);
        ps.setString(2, codeename);
        ps.setString(3, ememo);
        int rowCount = ps.executeUpdate();
        if (rowCount == 0) {
           throw new EJBException("Storing row for codecd " + codecd + "failed.");
        }
      }  
    }
      

  3.   

    import java.io.Serializable;
    import java.rmi.RemoteException;
    import javax.ejb.*;public interface EmployeeHome extends EJBHome {
      public Employee create(String codecd, String codename, String codeename, String ememo) throws RemoteException, CreateException;  public Employee findByPrimaryKey(String codecd) throws FinderException, RemoteException;
    }
      

  4.   

    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.rmi.PortableRemoteObject;public class EmployeeClient extends JFrame {
      public static int w = 400;
      public static int h = 200;
      public static String str = "Earnest Shopping Center Welcome You";
      Container c;
      
      JLabel lcodecd, lcodename, lcodeename, lememo, result;
      JTextField tcodecd, tcodename, tcodeename, tememo;
      JButton bsave, bdisplay;
      public static String codecd, codename, codeename, ememo;  public EmployeeClient() {
        super(str);
       
        c = getContentPane();
        c.setLayout(new GridLayout(6,2,2,2));    lcodecd = new JLabel("CodeCd:");
        c.add(lcodecd);
        tcodecd = new JTextField(20);
        c.add(tcodecd);
     
        lcodename = new JLabel("CodeName:");
        c.add(lcodename);
        tcodename = new JTextField(20);
        c.add(tcodename);
        
        lcodeename = new JLabel("CodeEName:");
        c.add(lcodeename);
        tcodeename = new JTextField(20);
        c.add(tcodeename);
       
        lememo = new JLabel("EMemo:");
        c.add(lememo);
        tememo = new JTextField(20);
        c.add(tememo);
        
        bsave = new JButton("Save");
        c.add(bsave);
        bdisplay = new JButton("Display");
        c.add(bdisplay);    result = new JLabel();
        c.add(result);    bsave.addActionListener(new saveEvent());
        bdisplay.addActionListener(new displayEvent());
        setSize(w,h);
        show(); 
      }
      
      public class saveEvent implements ActionListener {
        public void actionPerformed(ActionEvent e) {
          codecd = tcodecd.getText();
          codename = tcodename.getText();
          codeename = tcodeename.getText();
          ememo = tememo.getText();      try { 
            //Properties env = new Properties();
            //env.put("java.naming.factory.initial", "com.sun.jndi.cosnaming.CNCtxFactory");
            //env.put(Context.PROVIDER_URL, "iiop://192.168.0.108:3700");        //Context ic = new InitialContext(env);        //Object obj = ic.lookup("EmployeeEJB");
         //EmployeeHome home = (EmployeeHome)PortableRemoteObject.narrow(obj, EmployeeHome.class);
            //Employee r= home.create(codecd, codename, codeename, ememo);
      
            EJBHomeFactory f = EJBHomeFactory.getInstance();        EmployeeHome home =
              (EmployeeHome)f.lookup("EmployeeJNDI", EmployeeHome.class);
            Employee r = home.create(codecd, codename, codeename, ememo);
            result.setText("Created!!!");
          }
          catch (Exception ex) {
            //result.setText("Check if you have entered your name and also card number!");
            ex.printStackTrace();
          }
        }
      }  public class displayEvent implements ActionListener {
        public void actionPerformed(ActionEvent e) {
          codecd = tcodecd.getText();            try { 
            EJBHomeFactory f = EJBHomeFactory.getInstance();        EmployeeHome home =
              (EmployeeHome)f.lookup("EmployeeJNDI", EmployeeHome.class);
            Employee r = home.findByPrimaryKey(codecd);
            
            tememo.setText(r.getId());   
            //tcodename.setText(r.getCodeName());
            //tcodeename.setText(r.getCodeEName());
            //tememo.setText(r.getEMemo());
      
            result.setText("Displayed!!!");
          }
          catch (Exception ex) {
            //result.setText("Check if you have entered your name and also card number!");
            ex.printStackTrace();
          }
        }
      }  public static void main(String[] args) {
        EmployeeClient m = new EmployeeClient();
      }
    }
      

  5.   

    import javax.ejb.EJBObject;
    import java.rmi.RemoteException;public interface Employee extends EJBObject {
      public String getCodeName() throws RemoteException;
      public String getCodeEName() throws RemoteException;
      public String getEMemo() throws RemoteException;
      public String getId() throws RemoteException;
    }