you need to re-check your code. The connection you are getting
back from ds.getConnection() is not the same one you are using
in insertRow()
craig
At 20:40 30/12/00, you wrote:
>I modify my program according to your advice.
>But errors occur.
>I don't know what bring the errors.
>
>On jboss server:
>[AccountBean] Connected to Oracle!
>[AccountBean] TRANSACTION ROLLBACK EXCEPTION:ejbCreate: null; nested
>exception i
>s:
> javax.ejb.EJBException: ejbCreate: null
>[AccountBean] javax.ejb.EJBException: ejbCreate: null
>[AccountBean] at
>com.sasgz.ejb.account.AccountEJB.ejbCreate(AccountEJB.java:75
>)
>[AccountBean] at java.lang.reflect.Method.invoke(Native Method)
>[AccountBean] at
>org.jboss.ejb.plugins.BMPPersistenceManager.createEntity(BMPP
>ersistenceManager.java:120)
>[AccountBean] at
>org.jboss.ejb.EntityContainer.createHome(EntityContainer.java
>:441)
>[AccountBean] at java.lang.reflect.Method.invoke(Native Method)
>[AccountBean] at
>org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome
>(EntityContainer.java:639)
>[AccountBean] at
>org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke
>Home(EntitySynchronizationInterceptor.java:160)
>[AccountBean] at
>org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(En
>tityInstanceInterceptor.java:86)
>[AccountBean] at
>org.jboss.ejb.plugins.TxInterceptorCMT.invokeNext(TxIntercept
>orCMT.java:135)
>[AccountBean] at
>org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(Tx
>InterceptorCMT.java:263)
>[AccountBean] at
>org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxIntercept
>orCMT.java:86)
>[AccountBean] at
>org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(Security
>Interceptor.java:126)
>[AccountBean] at
>org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogIntercepto
>r.java:106)
>[AccountBean] at
>org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java
>:316)
>[AccountBean] at
>org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke
>Home(JRMPContainerInvoker.java:143)
>[AccountBean] at java.lang.reflect.Method.invoke(Native Method)
>[AccountBean] at
>sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.jav
>a:241)
>[AccountBean] at sun.rmi.transport.Transport$1.run(Transport.java:142)
>[AccountBean] at java.security.AccessController.doPrivileged(Native Method)
>[AccountBean] at sun.rmi.transport.Transport.serviceCall(Transport.java:139)
>[AccountBean] at
>sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTranspor
>t.java:443)
>[AccountBean] at
>sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPT
>ransport.java:643)
>[AccountBean] at java.lang.Thread.run(Thread.java:484)
>
>on client:
>Caught an exception.
>java.rmi.ServerException: RemoteException occurred in server thread;
>nested exception is:
> javax.transaction.TransactionRolledbackException: ejbCreate:
> null; nested exception is:
> javax.ejb.EJBException: ejbCreate: null
>javax.transaction.TransactionRolledbackException: ejbCreate: null; nested
>exception is:
> javax.ejb.EJBException: ejbCreate: null
>javax.ejb.EJBException: ejbCreate: null
> at
>
>sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:245)
> at
> sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:220)
> at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:122)
> at
> org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker_Stub.invokeHome(Unknown
> Source)
> at
> org.jboss.ejb.plugins.jrmp.interfaces.HomeProxy.invoke(HomeProxy.java:221)
> at $Proxy0.create(Unknown Source)
> at com.sasgz.ejb.account.AccountClient.main(AccountClient.java:34)
>
>______________________________jboss.conf___________________________
><MLET CODE="org.jboss.jdbc.XADataSourceLoader"
>ARCHIVE="jboss.jar,oracle816jdbc.zip" CODEBASE="../../lib/ext/">
> <ARG TYPE="java.lang.String" VALUE="OracleORCLPool">
> <ARG TYPE="java.lang.String"
> VALUE="org.jboss.minerva.xa.XADataSourceImpl">
></MLET>
>
>______________________________jboss.jcml____________________________
><mbean name="DefaultDomain:service=XADataSource,name=OracleORCLPool">
> <attribute name="Properties"></attribute>
> <attribute
> name="URL">jdbc:oracle:thin:@localhost:1521:orcl</attribute>
> <attribute name="GCMinIdleTime">1200000</attribute>
> <attribute name="JDBCUser">scott</attribute>
> <attribute name="MaxSize">0</attribute>
> <attribute name="Password">tiger</attribute>
> <attribute name="GCEnabled">false</attribute>
> <attribute name="InvalidateOnError">false</attribute>
> <attribute name="TimestampUsed">false</attribute>
> <attribute name="Blocking">true</attribute>
> <attribute name="GCInterval">120000</attribute>
> <attribute name="IdleTimeout">1800000</attribute>
> <attribute name="IdleTimeoutEnabled">false</attribute>
> <attribute name="LoggingEnabled">false</attribute>
> <attribute name="MaxIdleTimeoutPercent">1.0</attribute>
> <attribute name="MinSize">0</attribute>
> </mbean>
>
>___________________________________Ejb class________________________
>/*
> *
> * Copyright 2000 Sun Microsystems, Inc. All Rights Reserved.
> *
> * This software is the proprietary information of Sun Microsystems, Inc.
> * Use is subject to license terms.
> *
> */
>package com.sasgz.ejb.account;
>
>import java.sql.*;
>import javax.sql.*;
>import java.util.*;
>import javax.ejb.*;
>import javax.naming.*;
>
>public class AccountEJB implements EntityBean {
>
> private String id;
> private String firstName;
> private String lastName;
> private double balance;
> private EntityContext context;
> private Connection con;
> private String dbName = "java:comp/env/jdbc/AccountDB";
>
> private DataSource ds = null;
>
> public void debit(double amount)
> throws InsufficientBalanceException {
>
> if (balance - amount < 0) {
> throw new InsufficientBalanceException();
> }
> balance -= amount;
> }
>
> public void credit(double amount) {
>
> balance += amount;
> }
>
> public String getFirstName() {
>
> return firstName;
> }
>
> public String getLastName() {
>
> return lastName;
> }
>
> public double getBalance() {
>
> return balance;
> }
>
> public String ejbCreate(String id, String firstName,
> String lastName, double balance)
> throws CreateException {
>
> Connection conn = null;
>
> if (balance < 0.00) {
> throw new CreateException
> ("A negative initial balance is not allowed.");
> }
>
> try {
>
> conn = ds.getConnection();
>
> insertRow(id, firstName, lastName, balance);
> } catch (Exception ex) {
> throw new EJBException("ejbCreate: " +
> ex.getMessage());
> }
>
> finally {
> try { conn.close(); } catch (Exception ex) { }
> }
>
> this.id = id;
> this.firstName = firstName;
> this.lastName = lastName;
> this.balance = balance;
>
> return id;
> }
>
> 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 id " + primaryKey + " not found.");
> }
> }
>
> public Collection ejbFindByLastName(String lastName)
> throws FinderException {
>
> Collection result;
>
> try {
> result = selectByLastName(lastName);
> } catch (Exception ex) {
> throw new EJBException("ejbFindByLastName " +
> ex.getMessage());
> }
>
> if (result.isEmpty()) {
> throw new ObjectNotFoundException("No rows found.");
> }
> else {
> return result;
> }
> }
>
> public Collection ejbFindInRange(double low, double high)
> throws FinderException {
>
> Collection result;
>
> try {
> result = selectInRange(low, high);
>
> } catch (Exception ex) {
> throw new EJBException("ejbFindInRange: " +
> ex.getMessage());
> }
> if (result.isEmpty()) {
> throw new ObjectNotFoundException("No rows found.");
> }
> else {
> return result;
> }
> }
>
> public void ejbRemove() {
>
> try {
> deleteRow(id);
> } catch (Exception ex) {
> throw new EJBException("ejbRemove: " +
> ex.getMessage());
> }
> }
>
> public void setEntityContext(EntityContext context) {
>
> this.context = context;
> try {
>// makeConnection();
> InitialContext ic = new InitialContext();
> ds = (DataSource) ic.lookup(dbName);
>
> } catch (Exception ex) {
> throw new EJBException("Unable to connect to database. " +
> ex.getMessage());
> }
> System.out.println("Connected to Oracle!");
> }
>
> public void unsetEntityContext() {
>
> try {
> con.close();
> } catch (SQLException ex) {
> throw new EJBException("unsetEntityContext: " + ex.getMessage());
> }
> }
>
> public void ejbActivate() {
>
> id = (String)context.getPrimaryKey();
> }
>
> public void ejbPassivate() {
>
> id = 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("ejbLoad: " +
> ex.getMessage());
> }
> }
>
>
> public void ejbPostCreate(String id, String firstName,
> String lastName, double balance) { }
>
>
>/*********************** Database Routines *************************/
>
> private void makeConnection() throws NamingException, SQLException {
>
> InitialContext ic = new InitialContext();
> DataSource ds = (DataSource) ic.lookup(dbName);
> con = ds.getConnection();
> }
>
> private void insertRow (String id, String firstName, String lastName,
> double balance) throws SQLException {
>
> String insertStatement =
> "insert into account values ( ? , ? , ? , ? )";
> PreparedStatement prepStmt =
> con.prepareStatement(insertStatement);
>
> prepStmt.setString(1, id);
> prepStmt.setString(2, firstName);
> prepStmt.setString(3, lastName);
> prepStmt.setDouble(4, balance);
>
> prepStmt.executeUpdate();
> prepStmt.close();
> }
>
> private void deleteRow(String id) throws SQLException {
>
> String deleteStatement =
> "delete from account where id = ? ";
> PreparedStatement prepStmt =
> con.prepareStatement(deleteStatement);
>
> prepStmt.setString(1, id);
> prepStmt.executeUpdate();
> prepStmt.close();
> }
>
> private boolean selectByPrimaryKey(String primaryKey)
> throws SQLException {
>
> String selectStatement =
> "select id " +
> "from account where id = ? ";
> PreparedStatement prepStmt =
> con.prepareStatement(selectStatement);
> prepStmt.setString(1, primaryKey);
>
> ResultSet rs = prepStmt.executeQuery();
> boolean result = rs.next();
> prepStmt.close();
> return result;
> }
>
> private Collection selectByLastName(String lastName)
> throws SQLException {
>
> String selectStatement =
> "select id " +
> "from account where lastname = ? ";
> PreparedStatement prepStmt =
> con.prepareStatement(selectStatement);
>
> prepStmt.setString(1, lastName);
> ResultSet rs = prepStmt.executeQuery();
> ArrayList a = new ArrayList();
>
> while (rs.next()) {
> String id = rs.getString(1);
> a.add(id);
> }
>
> prepStmt.close();
> return a;
> }
>
> private Collection selectInRange(double low, double high)
> throws SQLException {
>
> String selectStatement =
> "select id from account " +
> "where balance between ? and ?";
> PreparedStatement prepStmt =
> con.prepareStatement(selectStatement);
>
> prepStmt.setDouble(1, low);
> prepStmt.setDouble(2, high);
> ResultSet rs = prepStmt.executeQuery();
> ArrayList a = new ArrayList();
>
> while (rs.next()) {
> String id = rs.getString(1);
> a.add(id);
> }
>
> prepStmt.close();
> return a;
> }
>
> private void loadRow() throws SQLException {
>
> String selectStatement =
> "select firstname, lastname, balance " +
> "from account where id = ? ";
> PreparedStatement prepStmt =
> con.prepareStatement(selectStatement);
>
> prepStmt.setString(1, this.id);
>
> ResultSet rs = prepStmt.executeQuery();
>
> if (rs.next()) {
> this.firstName = rs.getString(1);
> this.lastName = rs.getString(2);
> this.balance = rs.getDouble(3);
> prepStmt.close();
> }
> else {
> prepStmt.close();
> throw new NoSuchEntityException("Row for id " + id +
> " not found in database.");
> }
> }
>
>
> private void storeRow() throws SQLException {
>
> String updateStatement =
> "update account set firstname = ? ," +
> "lastname = ? , balance = ? " +
> "where id = ?";
> PreparedStatement prepStmt =
> con.prepareStatement(updateStatement);
>
> prepStmt.setString(1, firstName);
> prepStmt.setString(2, lastName);
> prepStmt.setDouble(3, balance);
> prepStmt.setString(4, id);
> int rowCount = prepStmt.executeUpdate();
> prepStmt.close();
>
> if (rowCount == 0) {
> throw new EJBException("Storing row for id " + id + " failed.");
> }
> }
>
>} // AccountEJB
>" " " " + " + id + " failed.");
> }
> }
>
>} // AccountEJB
>N�.n�+���n�,�ǫ�yb��(�H��� ��&N�����r��z6�ˬz�~X��
>+�)�v�,r����GzZc�|(�H��� ��&��
--
--------------------------------------------------------------
To subscribe: [EMAIL PROTECTED]
To unsubscribe: [EMAIL PROTECTED]
List Help?: [EMAIL PROTECTED]