Hi Dino,

sorry forget to reply.
I checked in an attempt to fix your problem in CVS trunk and 1.0_RELEASE branch.


http://nagoya.apache.org/eyebrowse/[EMAIL PROTECTED]&msgNo=8730
or
http://nagoya.apache.org/eyebrowse/[EMAIL PROTECTED]&msgNo=8731

Replace your files with the modified ones. Hope the made changes will fix your problem.

regards,
Armin

Dino Di Cola wrote:

Armin,
This problem was driving me crazy... finally I
rightfully decided to ask for your support again.

I really Hope to find a solution by tomorrow ;)
cause I am getting too late with this matter :(

Thanks in advance!

d.
--

Hi Dino,

I'm working on this, the patch has some unexpected
side-effects in managed environments ;-)
Hope to find a solution till tomorrow.


regards,
Armin

Dino Di Cola wrote:

Dear Armin,

I am testing your patch on
ImplementationJTAImpl#registerOpenDatabase.
The problems regarding the ejbCreate() method
disappeared. Unfortunately I got some problems

with

the org.odmg.Database#deletePersistent now.
Again this problem is related to Transaction
Management and was not present with the previous
Oracle9iAS 9.0.2.2 version.


The test case I present here is again a simple

J2EE

application made up of a test stateless session

bean

with a single business method invoked via RMI.
The configuration is the same of the previous

e-mail.

What I am trying to do is basically to lookup for

an

object (es. SentMail) and deleting it with the
Database#deletePersistent method:

        /* this is done in ejbCreate()... */
        org.odmg.Implementation odmg =

OJB.getInstance();

org.odmg.Database db = odmg.newDatabase();
db.open(DEF_DATABASE_NAME,
Database.OPEN_READ_WRITE); [...]


        /* this is done in the business method... */
        SentMail objSentMail = (SentMail)
lookupObject(SentMail.class, 4);
        db.deletePersistent(objSentMail);

The object is actually found on the DB but when I

try

to delete it I got the following exception:

[exec] The following exception has been

catched:

Transaction was rolled back:
org.odmg.TransactionNotInProgressException: No
transaction in progress, cannot delete persistent;
nested exception is:
    [exec]
com.evermind.server.rmi.OrionRemoteException:
Transaction was rolled back:
org.odmg.TransactionNotInProgressException: No
transaction in progress, cannot delete persistent
    [exec]
org.odmg.TransactionNotInProgressException: No
transaction in progress, cannot delete persistent
    [exec]     at


OJB_Tx_StatelessSessionBeanWrapper76.test(OJB_Tx_StatelessSessionBeanWrapper76.java:164)

    [exec]     at
java.lang.reflect.Method.invoke(Native Method)
    [exec]     at


com.evermind.server.rmi.RMICallHandler.run(RMICallHandler.java:119)

    [exec]     at


com.evermind.server.rmi.RMICallHandler.run(RMICallHandler.java:48)

    [exec]     at


EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:804)

    [exec]     at
java.lang.Thread.run(Thread.java:479)
    [exec]     at connection to

c-01-091/10.2.20.20

as admin
    [exec]     at


com.evermind.server.rmi.RMIConnection.EXCEPTION_ORIGINATES_FROM_THE_REMOTE_SERVER(RMIConnection.java:1576)

    [exec]     at


com.evermind.server.rmi.RMIConnection.invokeMethod(RMIConnection.java:1529)

    [exec]     at


com.evermind.server.rmi.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:55)

    [exec]     at


com.evermind.server.rmi.RecoverableRemoteInvocationHandler.invoke(RecoverableRemoteInvocationHandler.java:22)

    [exec]     at


com.evermind.server.ejb.StatelessSessionRemoteInvocationHandler.invoke(StatelessSessionRemoteInvocationHandler.java:50)

    [exec]     at __Proxy5.test(Unknown Source)
    [exec]     at


it.enidata.psv.test.ejb.client.TestOJB_Tx.main(TestOJB_Tx.java:45)

[exec]
[exec] Nested exception is:
[exec] org.odmg.TransactionNotInProgressException: No
transaction in progress, cannot delete persistent
[exec] at



org.apache.ojb.odmg.DatabaseImpl.deletePersistent(Unknown

Source)
    [exec]     at


it.enidata.psv.test.ejb.OJB_TxBean.test(OJB_TxBean.java:144)

    [exec]     at


OJB_Tx_StatelessSessionBeanWrapper76.test(OJB_Tx_StatelessSessionBeanWrapper76.java:115)

    [exec]     at
java.lang.reflect.Method.invoke(Native Method)
    [exec]     at


com.evermind.server.rmi.RMICallHandler.run(RMICallHandler.java:119)

    [exec]     at


com.evermind.server.rmi.RMICallHandler.run(RMICallHandler.java:48)

    [exec]     at


EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:804)

    [exec]     at
java.lang.Thread.run(Thread.java:479)
    [exec]     at connection to
c-01-091.prirm.pride.it/10.2.20.20
    [exec]     at


com.evermind.server.rmi.OrionRemoteException.receive(OrionRemoteException.java:130)

    [exec]     at


com.evermind.server.rmi.RMIConnection.handleMethodInvocationResponse(RMIConnection.java:1691)

    [exec]     at


com.evermind.server.rmi.RMIConnection.run(RMIConnection.java:532)

    [exec]     at


com.evermind.server.rmi.RMIConnection.run(RMIConnection.java:275)

    [exec]     at


EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:798)

    [exec]     at
java.lang.Thread.run(Thread.java:484)

You can find the complete source code for the
OJB_TxBean here below.


I am again in your hands... ;) Thanks in advance.

Regards,


Dino.


ps. (from previous thread...)


3. I commented out the beginInternTransaction()
invocation. Clearly this method is equally

invoked

following another code flow. Does it mean it was

called twice before your patch?


this could be the case, but it doesn't matter,

because



beginInternTransaction() take care of this.

nearly all operations of the odmg-api have to be

in

context of a


transaction and in managed environments it's not

allowed to do OJB/ODMG



related transaction demarcation, thus you always

have

to use JTA


transactions and the easiest way is to use

container-managed tx.


Alternative you can use bm-tx via UserTransaction.

--


***********************************************************************

**** Source code for the session bean
*********************************


***********************************************************************

public class OJB_TxBean implements SessionBean {

private SessionContext sessionContext;
private static final String DEF_DATABASE_NAME =
"dsOJB";
private Implementation odmg;
private Database db;
public OJB_TxBean() {}
public void ejbActivate() {
}
public void ejbPassivate() {
}
public void ejbCreate() throws CreateException {
try {
init();
} catch (InitException e) {
throw new CreateException(e.getMessage());
}
}


private void init() throws InitException{
/* ---------------------------- */
/* Step0 - Getting log4j logger */
/* ---------------------------- */
Logger logger =
Logger.getLogger("psv.j2ee.testing");
logger.debug("OJB_TxBean - init(): begin");
odmg = null;
db = null;
/* ------------------------------------ */
/* Step1 - Initializing ODMG connection */
/* ------------------------------------ */
logger.debug("OJB_TxBean - init():

initializing

ODMG connection [BEGIN]");
         odmg = OJB.getInstance();

logger.debug("OJB_TxBean - init():
odmg.newDatabase()");
db = odmg.newDatabase();
try {
logger.debug("OJB_TxBean - init(): open new
database " + db + " using databaseName name " +
DEF_DATABASE_NAME);
db.open(DEF_DATABASE_NAME,
Database.OPEN_READ_WRITE); } catch (ODMGException e) {
logger.error("OJB_TxBean - init(): Database

open

failed", e);
throw new InitException(e.getMessage());
} logger.debug("OJB_TxBean - init():

initializing

ODMG connection [END]"); }
public void ejbRemove() {
Logger logger =
Logger.getLogger("psv.j2ee.testing");
logger.debug("OJB_TxBean - ejbRemove(): closing
ODMG connection [BEGIN]");
try {
logger.debug("OJB_TxBean - ejbRemove():
db.close(): " + db);
if (db != null) db.close();
} catch (ODMGException e) {
logger.error("OJB_TxBean - ejbRemove():

closing of

database failed", e);
}
db = null;
odmg = null;
logger.debug("OJB_TxBean - ejbRemove(): closing
ODMG connection [END]"); }
public void setSessionContext(SessionContext
sessionContext) {
this.sessionContext = sessionContext;
}
protected PObject lookupObject(Class target,

long

oid) {
Logger logger =
Logger.getLogger("psv.j2ee.testing"); logger.debug("OJB_TxBean - lookupObject():

begin");

        
        PersistenceBroker broker = null;
        PObject pObject = null;

        try {
                broker =


PersistenceBrokerFactory.defaultPersistenceBroker();

                Criteria crit = new Criteria();
                crit.addEqualTo("oid", new Long(oid));
                Query query = new QueryByCriteria(target,

crit);

                java.util.Iterator iter =
broker.getCollectionByQuery(query).iterator();

                if (iter.hasNext()) pObject = (PObject)
iter.next();
        } catch (Exception e) {
                logger.error("OJB_TxBean -  lookupObject():

Query

failed", e);
throw new EJBException("OJB_TxBean - lookupObject(): Query failed", e);
} finally {
if (broker != null)
broker.close();
}

logger.debug("OJB_TxBean - lookupObject():

end");

return pObject;
}
public String test() throws

java.rmi.RemoteException

{
Logger logger =
Logger.getLogger("psv.j2ee.testing"); logger.debug("OJB_TxBean - test(): begin");

/* ---------------------- */
/* --- Business Stuff --- */
/* ---------------------- */
logger.debug("OJB_TxBean - test(): odmg : " +
odmg);
SentMail objSentMail = (SentMail)
lookupObject(SentMail.class, 4);
logger.debug("OJB_TxBean - test(): objSentMail

: "

+ objSentMail);
        logger.debug("OJB_TxBean - test():
objSentMail.getSubject() : " +
objSentMail.getSubject());
        logger.debug("OJB_TxBean - test():
objSentMail.getSend_to() : " +
objSentMail.getSend_to());
        logger.debug("OJB_TxBean - test():
objSentMail.getRecipient() : " +
objSentMail.getRecipient());
        
        logger.debug("OJB_TxBean - test(): objSentMail

: "

+ objSentMail);
db.deletePersistent(objSentMail);

logger.debug("OJB_TxBean - test(): end");
SimpleDateFormat simpleDateFormat = new
SimpleDateFormat("dd.MM.yyyy hh:mm:ss");
return "OJB_TxBean - test(): done [" +



simpleDateFormat.format(Calendar.getInstance().getTime())

+ "]";
}
}
--






--- Armin Waibel <[EMAIL PROTECTED]> ha scritto:


Hi Dino,

Dino Di Cola wrote:



Dear Armin,
first of all thanks for your prompt reply!

I applied the change to the
ImplementationJTAImpl#registerOpenDatabase and
executed the test from scratch. My simple test application works fine now.
I deployed also the main J2EE application and

works


also there at first sight.

I would like to have more insight from you

regarding


the patch you proposed to apply in
ImplementationJTAImpl class.

1. You wrote the following: "OJB always lookup a
running JTA-transaction this can't be successful

when


db.open(...) is called on ejbCreate()".
 Could you please give me more info? I cannot

see


the problem with ejbCreate(). Thanks!


ejbCreate() was called on session bean
initialization, this could be done e.g. at startup of your appServer to setup a
pool of session bean instances. Thus there is no guarantee that the
session bean was created in context of a running tx.





2. You wrote me it could be a "bug" in odmg
implementation. And clearly you seems right.

I will fix this in CVS ASAP.




I cannot understand however why it was

successfully


running on previous versions of ora9ias!?!


e.g. in your previous version your appServer

doesn't

setup a session bean pool at startup, so the instances were

created

when needed and thus when a tx was reachable --> no exception




3. I commented out the beginInternTransaction()
invocation. Clearly this method is equally

invoked

following another code flow. Does it mean it was called twice before your

patch?

this could be the case, but it doesn't matter,
because beginInternTransaction() take care of this.





4. My Session Bean is substantially very close to


src\ejb\org\apache\ojb\ejb\odmg\ODMGSessionBean.java

(taken from the db-ojb-1.0.rc7 distribution).
 The only difference I note is on the

"Required"

attribute marked in the ODMGSessionBean.java

javadoc.


I use "NotSupported" instead. Have I to change the attribute to "Required"?



nearly all operations of the odmg-api have to be

in

context of an transaction and in managed environments it's not
allowed to do OJB/ODMG related transaction demarcation, thus you always
have to use JTA transactions and the easiest way is to use
container-managed tx.
Alternative you can use bm-tx via UserTransaction.
I wonder how you could use odmg-api in managed
environment with transaction attribute "NotSupported"?





5. I am quite sure about this bug (anyway I will

check


it more and more and I will keep you informed). If you are certain of this bug too, in what

release


do you think to fix it?

Think the next upcoming OJB 1.0.1 will contain

this

fix.




Have you planned a target release date for

next

OJB


release?

We planed a maintenance release 1.0.1 for last

week

;-)
I'm sure we will release the new version in near
future.




What can I do in the meantime a new release

will be


officially distributed?


use the patched class




Armin, I really appreciated your help.
Hope you will answer to all my questions without
getting bored :)


In return for services, never run down OJB ;-)

regards,
Armin




Thanks,

d.
--





        
                


____________________________________________________________

Yahoo! Companion - Scarica gratis la toolbar di

Ricerca di Yahoo!



http://companion.yahoo.it



---------------------------------------------------------------------

To unsubscribe, e-mail:

[EMAIL PROTECTED]


For additional commands, e-mail:

[EMAIL PROTECTED]



---------------------------------------------------------------------

To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]






        
                


____________________________________________________________

Yahoo! Companion - Scarica gratis la toolbar di

Ricerca di Yahoo!


http://companion.yahoo.it



---------------------------------------------------------------------

To unsubscribe, e-mail:

[EMAIL PROTECTED]

For additional commands, e-mail:

[EMAIL PROTECTED]




---------------------------------------------------------------------

To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]








____________________________________________________________
Yahoo! Companion - Scarica gratis la toolbar di Ricerca di Yahoo! http://companion.yahoo.it


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to