Subject Re: [firebird-support] multi connection Meta data update
Author karthick srini
Hi Helen ,

Thanks for your response.
Please do find my queries related to the same topic
inline with your response.


> Firebird metadata is stored in tables inside the
> database; changing
> metadata changes the data stored in these tables.
> Since objects that are
> using that metadata have to hold a consistent view
> of it during a
> transaction, a metadata update will be refused if it
> affects any
> "interesting" transactions involving the affected
> objects and their
> dependencies. ("interesting" = any transaction that
> is in any state except
> Committed).
>
> You think that opening a table and looking at its
> data is not "accessing"
> it. But, yes, it is "accessing" it. Everything you
> do in Firebird happens
> in transactions. So, if one transaction has
> selected some data from an
> object, that object, and any objects dependent on
> it, are in use. That
> situation won't change until that transaction is
> committed.
>
> Many of the third-party tools, by default, run their
> "browser-style"
> queries in transactions that are never subjected to
> a "hard" commit. This
> mechanism, known as "Commit Retaining", commits work
> but doesn't release
> the objects involved.
>

We just created two active connection. In one
connection we created Table "Employer" and then table
"Labour" with FK to Employer. But it has thrown
exception as follows ,
org.firebirdsql.jdbc.FBSQLException: Resource
Exception. unsuccessful metadata update
object EMPLOYER4 is in use
Reason: unsuccessful metadata update
object EMPLOYER4 is in use
at
org.firebirdsql.jdbc.AbstractConnection.commit(AbstractConnection.java:365)
at
org.firebirdsql.jdbc.FBConnection.commit(FBConnection.java:52)
at
MetaDataUpdate$Executer.run(MetaDataUpdate.java:110)
at java.lang.Thread.run(Thread.java:536)
at org.firebirdsql.gds.GDSException: unsuccessful
metadata update
object EMPLOYER4 is in use
at
org.firebirdsql.jgds.GDS_Impl.readStatusVector(GDS_Impl.java:1756)
at
org.firebirdsql.jgds.GDS_Impl.receiveResponse(GDS_Impl.java:1709)
at
org.firebirdsql.jgds.GDS_Impl.isc_commit_transaction(GDS_Impl.java:586)
at
org.firebirdsql.jca.FBManagedConnectionFactory.commit(FBManagedConnectionFactory.java:681)
at
org.firebirdsql.jca.FBManagedConnection.internalCommit(FBManagedConnection.java:391)
at
org.firebirdsql.jca.FBLocalTransaction.internalCommit(FBLocalTransaction.java:149)
at
org.firebirdsql.jdbc.AbstractConnection.commit(AbstractConnection.java:362)
at
org.firebirdsql.jdbc.FBConnection.commit(FBConnection.java:52)
at
MetaDataUpdate$Executer.run(MetaDataUpdate.java:110)
at java.lang.Thread.run(Thread.java:536)

Remember in other connection we don't fave fetched
any data. So there cannot be any object cache in other
transaction as you said. But still there is meta data
update error when there is multiple connection.
Herewith I have attached testing program which I
have used for testing this issue. Is meta data cannot
be updated at all , when there is multiple connection
, what is reason behind this?.
> No. Keep metadata updates separated from user work
> and all will be sweet.

I don't get what do you mean by this. Do you mean
that there cannot be meta data update when there is
multiple connection. Or it can be achieved? If so how
we can achieve that?

thanks & Regards,
S.Karthick




__________________________________
Do you Yahoo!?
Yahoo! Mail - 50x more storage than other providers!
http://promotions.yahoo.com/new_mail

[Non-text portions of this message have been removed]