Hi Tom,
It appears this happens to be a documented behavior of Sybase where it
connects as guest to master when the requested DB is not online. I found
the following link on Sybase which talks about this behavior:
http://manuals.sybase.com/onlinebooks/group-as/asg1250e/svrtsg/@Generic__BookTextView/39281;pt=38808
That being said, I checked the code and came with this fix that fixes
the problem. The change needs to be made in the connect() method in the
org.eclipse.persistence.sessions.DefaultConnector.class
Old Code:
-------------
-
-
if (this.shouldUseDriverManager(properties, session)) {
try {
return
DriverManager.getConnection(this.getConnectionString(), properties);
} catch (SQLException sqlException) {
driverManagerException = sqlException;
if (session != null) {
((AbstractSession)session).log(SessionLog.FINER,
SessionLog.CONNECTION, "connect_drivermanager_fail");
((AbstractSession)session).logThrowable(SessionLog.FINER,
SessionLog.CONNECTION, sqlException);
}
}
}
-
-
New Code:
--------------
if (this.shouldUseDriverManager(properties, session)) {
try {
//return
DriverManager.getConnection(this.getConnectionString(), properties);
Connection conn =
DriverManager.getConnection(this.getConnectionString(), properties);
// If DB is Sybase, check for warnings on the
connection. Sybase is little strange
// where it returns a connection as user guest if it is
in the middle of startup with
// the master db up but the target requested db is still
waiting to come online. In this
// case, Sybase returns warnings as part of the connection.
if (getPlatform().isSybase()) {
SQLWarning warning = conn.getWarnings();
if (warning != null) {
// Log SQL warning for tracking purposes
if (session != null) {
((AbstractSession)session).log(SessionLog.FINER,
SessionLog.CONNECTION, "SQL Warning: " + warning.getLocalizedMessage());
}
conn.close();
// true flag below reflects Communication failure which forces the retry
throw DatabaseException.sqlException(exception, true);
}
}
return conn;
} catch (SQLException sqlException) {
driverManagerException = sqlException;
if (session != null) {
((AbstractSession)session).log(SessionLog.FINER,
SessionLog.CONNECTION, "connect_drivermanager_fail");
((AbstractSession)session).logThrowable(SessionLog.FINER,
SessionLog.CONNECTION, sqlException);
}
}
}
This fix is kind of generic in which it only checks for warnings
coming from Sybase. Other database connections behavior will not be
affected. I am not familar with the eclipseLink code and it should be
reviewed by people knowledgable in this area.
Please let me know if you have additional questions.
Thanks
Sridhar
--- On *Thu, 9/29/11, Tom Ware /<tom.ware@xxxxxxxxxx>/* wrote:
From: Tom Ware <tom.ware@xxxxxxxxxx>
Subject: Re: [eclipselink-dev] Sybase Connection logs in as guest in
case of Connection communication failure
To: "Tom Ware" <tom.ware@xxxxxxxxxx>
Cc: "sridhar baratam" <sridhar_baratam@xxxxxxxxx>, "Dev mailing list
for Eclipse Persistence Services" <eclipselink-dev@xxxxxxxxxxx>
Date: Thursday, September 29, 2011, 4:25 PM
BTW: I do see you suggestion about getting the warnings, but am
concerned about how we would do this in a generic way. Parsing the
warning isn't a great answer here.
Tom Ware wrote:
> Hi Sridhar,
>
> What do you think EclipseLink could do to resolve this? We
don't have access to the logged message. Is there a way configure
Sybase so this throws an exception instead? Are you hoping we will
simply not try to reconnect and leave recovery to the application?
>
> -Tom
>
> sridhar baratam wrote:
>> Hi Tom,
>> Thanks for the prompt reply. Here are the details:
>> User "dbuser" has CRUD permissions on the AEDB database. I
connect to the application using this "dbuser".
>> Here is my persistence.xml file:
>> <?xml version="1.0" encoding="UTF-8"?>
>> <persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
>> <persistence-unit name="JPA">
>>
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>com.sridhar.jpa.tutorial.Invoice</class>
>> <class>com.sridhar.jpa.tutorial.Order</class>
<class>com.sridhar.jpa.tutorial.Customer</class>
>> <class>com.sridhar.jpa.tutorial.Product</class>
>> <class>com.sridhar.jpa.tutorial.Person</class>
>> <properties>
>> <property name="javax.persistence.jdbc.driver"
>> value="com.sybase.jdbc3.jdbc.SybDriver"/>
>> <property name="javax.persistence.jdbc.url"
>> value="jdbc:sybase:Tds:barsr01b:5000/AEDB"/>
>> <property name="javax.persistence.jdbc.user"
value="dbuser"/>
>> <property name="javax.persistence.jdbc.password"
value="dbuser"/>
>> <!-- EclipseLink should create the database schema
automatically -->
>> <!-- property name="eclipselink.ddl-generation"
value="drop-and-create-tables" />
>> <property name="eclipselink.ddl-generation.output-mode"
>> value="both" /-->
>> <property name="eclipselink.logging.level" value="FINE"/>
>> <property name="eclipselink.session.customizer"
value="com.sridhar.jpa.waae.custom.JPASessionCustomizer"/>
>> <property name="eclipselink.jdbc.cache-statements"
value="true"/> </properties> </persistence-unit>
>> </persistence>
>> I am running this module as a standalone application and not
using JTA. I set my logging level as fine and I believe that is why
we are able to see all the logging associated with user "dbuser" and
the exceptions caught/thrown internally within eclipselink.
>> As I mentioned in the email, Sybase is a little different in
its behavior. When a connection is requested when Sybase is still
coming up and master being online, Sybase goes ahaead and connects
with user as "guest" thus giving a connection with "warnings". It
does not throw an exception.
>> In the case that I ran into, the retry code within
>> org.eclipse.persistence.internal.sessions.AbstractSession
attempts to retry the query using retryQuery function on a
communication error and when Sybase comes up partially (only
recovering the master db), the following code within
org.eclipse.persistence.sessions.DefaultConnector.class returns a
connection without even checking for the warnings on the connection.
>> try {
>> return
DriverManager.getConnection(this.getConnectionString(),
>> properties);
>> } catch (SQLException sqlException) {
>>
>> The warning in this case would be:
>> "010DF: Attempt to set database at login failed. Error message:
Database 'AEDB' has not been recovered yet - please wait and try
>> again."
>>
>> It is very easy to recreate the problem using my test case. You
can change getOrders to someSelect function.
>>
>> Please let me know if you have additional questions.
>> I really appreciate your time.
>> Thanks for all your help.
>> Sridhar
>>
>>
>> --- On *Thu, 9/29/11, Tom Ware /<tom.ware@xxxxxxxxxx
<http://us.mc655.mail.yahoo.com/mc/compose?to=tom.ware@xxxxxxxxxx>>/*
wrote:
>>
>>
>> From: Tom Ware <tom.ware@xxxxxxxxxx
<http://us.mc655.mail.yahoo.com/mc/compose?to=tom.ware@xxxxxxxxxx>>
>> Subject: Re: [eclipselink-dev] Sybase Connection logs in as
guest in
>> case of Connection communication failure
>> To: "Dev mailing list for Eclipse Persistence Services"
>> <eclipselink-dev@xxxxxxxxxxx
<http://us.mc655.mail.yahoo.com/mc/compose?to=eclipselink-dev@xxxxxxxxxxx>>
>> Date: Thursday, September 29, 2011, 11:32 AM
>>
>> Hi Sridhar,
>>
>> My first question is:
>>
>> Where does the string "dbuser" come from. I can't find
anywhere in
>> the EclipseLink code that could accidentally be providing
that string.
>>
>> How are you setting up your database connectivity? What
does the
>> persistence.xml for persistence unit "JPA" look like?
>>
>> -Tom
>>
>> sridhar baratam wrote:
>> > Hello Gurus,
>> >
>> > I am trying to test the behavior of
>> DelayBetweenConnectionAttempts on a Sybase Connection
communication
>> behavior and running into problems. From what I have
experienced so
>> far, when EclipseLink recovers from the communication link
failure,
>> Sybase Connection gets logged in as user "guest" as opposed
to the
>> original input user (which has the table read/write access) thus
>> resulting in "SybSQLException Table not found" error.
>> >
>> > My test case was relatively simple:
>> >
>> > 1. Write a sample program which does the following:
>> > - Call GetOrders()
>> > - Sleep for 10 seconds
>> > - Call GetOrders() again.
>> >
>> > While the program sleeps, stop the Sybase services and
restart
>> the service. In the meantime, the program wakes up from sleep,
>> determines a ConnectionException and kicks in the Connection
retry
>> mechsnism using the DelayBetweenConnectionAttempts variable.
After a
>> few attemps, EclipseLink recovers but almost 50% of the times,
>> connects to the database as user guest thus resulting in a
>> SybSQLException stating table not found.
>> >
>> > Here is my test module:
>> > -----------------------
>> > package com.sridhar.jpa.tutorial.test;
>> >
>> >
>> > import java.sql.SQLException;
>> > import java.util.Iterator;
>> > import java.util.List;
>> >
>> > import javax.persistence.*;
>> >
>> > import com.sridhar.jpa.tutorial.Order;
>> >
>> >
>> > public class RetryTest {
>> >
>> > public static void main(String[] args) {
>> > EntityManagerFactory entityManagerFactory =
>> Persistence.createEntityManagerFactory("JPA");
>> >
>> > getOrders(entityManagerFactory);
>> > try {
>> > System.out.println("Sleeping");
>> > Thread.sleep(10000);
>> > } catch (InterruptedException e) {
>> > // TODO Auto-generated catch block
>> > e.printStackTrace();
>> > }
>> > getOrders(entityManagerFactory);
>> > entityManagerFactory.close();
>> > }
>> >
>> > private static void getOrders(EntityManagerFactory
>> entityManagerFactory) {
>> > EntityManager em = null;
>> > int retryCount = 0;
>> > int masterRetry = 4;
>> > do {
>> > try {
>> > System.out.println("Trying to create EM");
>> > em = entityManagerFactory.createEntityManager();
>> > em.getTransaction().begin();
>> > System.out.println("Got one EM");
>> > TypedQuery<Order> qry = em.createQuery("SELECT o FROM
ORDERS o",
>> Order.class);
>> > List<?> orderList = qry.getResultList();
>> > System.out.println("Got query resultset");
>> > Iterator<?> iter = orderList.iterator();
>> > while (iter.hasNext()) {
>> > Order order = (Order) iter.next();
>> > System.out.println("order : " + order);
>> > }
>> > } catch (Exception e) {
>> > System.out.println("Got an exception: " + e.getMessage());
>> > retryCount++;
>> > if (em != null)
>> > {
>> > java.sql.Connection connection =
>> em.unwrap(java.sql.Connection.class);
>> > try {
>> > connection.close();
>> > } catch (SQLException e1) {
>> > // TODO Auto-generated catch block
>> > e1.printStackTrace();
>> > }
>> >
>> > em.close();
>> > em = null;
>> > }
>> > System.out.println("Continuing the loop");
>> > continue;
>> > } finally {
>> > if (em != null)
>> > {
>> > em.getTransaction().commit();
>> > em.close();
>> > em = null;
>> > }
>> > }
>> > return;
>> > } while (retryCount < masterRetry);
>> > }
>> > }
>> >
>>
-------------------------------------------------------------------------------
>> >
>> > Here is the log information during the retry mechanims:
>> > -------------------------------------------------------
>> > [EL Info]: 2011-09-23
>>
16:51:29.072--ServerSession(29167060)--Thread(Thread[main,5,main])--EclipseLink,
>> version: Eclipse Persistence Services - 2.3.0.v20110604-r9504
>> > [EL Fine]: 2011-09-23
>> 16:51:29.354--Thread(Thread[main,5,main])--Detected Vendor
platform:
>> org.eclipse.persistence.platform.database.SybasePlatform
>> > [EL Config]: 2011-09-23
>>
16:51:29.4--ServerSession(29167060)--Connection(27979955)--Thread(Thread[main,5,main])--connecting(DatabaseLogin(
>> > platform=>SybasePlatform
>> > user name=> "dbuser"
>> > datasource URL=> "jdbc:sybase:Tds:barsr01b:5000/AEDB"
>> > ))
>> > [EL Config]: 2011-09-23
>>
16:51:29.463--ServerSession(29167060)--Connection(27296482)--Thread(Thread[main,5,main])--Connected:
>> jdbc:sybase:Tds:barsr01b:5000/AEDB
>> > User: dbuser
>> > Database: Adaptive Server Enterprise Version: Adaptive Server
>> Enterprise/15.0/EBF 12783 GA/P/NT (IX86)/Windows
>> 2000/ase150/2158/32-bit/OPT/Fri Aug 19 18:42:50 2005
>> > Driver: jConnect (TM) for JDBC (TM) Version: jConnect
(TM) for
>> JDBC(TM)/6.05(Build 25773)/P/EBF12723/JDK14/Fri Aug 5
0:05:43 2005
>> > [EL Info]: 2011-09-23
>>
16:51:29.619--ServerSession(29167060)--Thread(Thread[main,5,main])--file:/C:/Vignesh-SPOG/JPA/build/classes/_JPA
>> login successful
>> > Got one EM
>> > [EL Fine]: 2011-09-23
>>
16:51:30.354--ServerSession(29167060)--Connection(27296482)--Thread(Thread[main,5,main])--SELECT
>> t1.PROD_ID, t1.REGULAR_PRICE, t1.PROD_DESC, t1.PROD_NAME,
>> t1.LAST_UPDATED_TIME FROM ORDER_DETAIL t0, PRODUCT t1 WHERE
>> ((t0.ORDER_ID = ?) AND (t1.PROD_ID = t0.PROD_ID))
>> > bind => [111]
>> > Got query resultset
>> > order : orderId : 111 custId : 100 totPrice : 100.0
orderDesc :
>> Internet and phone orderDt : Wed Sep 07 00:00:00 EDT 2011
invoice :
>> orderId : 111 invoiceId : 1 amtDue : 100.0 orderRaisedDt :
Wed Sep
>> 07 00:00:00 EDT 2011 orderSettledDt : Wed Sep 07 00:00:00
EDT 2011
>> orderCancelledDt : null updatedTime : Wed Sep 07 00:00:00
EDT 2011
>> > order : orderId : 222 custId : 100 totPrice : 15.0
orderDesc :
>> Cable at discounted price orderDt : Wed Sep 07 00:00:00 EDT 2011
>> invoice : orderId : 222 invoiceId : 2 amtDue : 15.0
orderRaisedDt :
>> Wed Sep 07 00:00:00 EDT 2011 orderSettledDt : Wed Sep 07
00:00:00
>> EDT 2011 orderCancelledDt : Wed Sep 07 00:00:00 EDT 2011
updatedTime
>> : Wed Sep 07 00:00:00 EDT 2011
>> > order : orderId : 333 custId : 110 totPrice : 99.0
orderDesc : 3
>> in one offer orderDt : Wed Sep 07 00:00:00 EDT 2011 invoice :
>> orderId : 333 invoiceId : 3 amtDue : 99.0 orderRaisedDt :
Wed Sep 07
>> 00:00:00 EDT 2011 orderSettledDt : Wed Sep 07 00:00:00 EDT 2011
>> orderCancelledDt : null updatedTime : Wed Sep 07 00:00:00
EDT 2011
>> > Sleeping
>> > Trying to create EM
>> > Got one EM
>> > Call: SELECT ORDER_ID, CUST_ID, OREDER_DESC, ORDER_DATE,
>> TOTAL_PRICE, LAST_UPDATED_TIME FROM ORDERS
>> > Query: ReadAllQuery(referenceClass=Order sql="SELECT
ORDER_ID,
>> CUST_ID, OREDER_DESC, ORDER_DATE, TOTAL_PRICE, LAST_UPDATED_TIME
>> FROM ORDERS").
>> > [EL Config]: 2011-09-23
>>
16:51:40.416--ServerSession(29167060)--Connection(31637242)--Thread(Thread[main,5,main])--connecting(DatabaseLogin(
>> > platform=>SybasePlatform
>> > user name=> "dbuser"
>> > datasource URL=> "jdbc:sybase:Tds:barsr01b:5000/AEDB"
>> > ))
>> > [EL Severe]: 2011-09-23
>>
16:51:42.307--ServerSession(29167060)--Thread(Thread[main,5,main])--Local
>> Exception Stack:
>> > Exception [EclipseLink-4002] (Eclipse Persistence Services -
>> 2.3.0.v20110604-r9504):
>> org.eclipse.persistence.exceptions.DatabaseException
>> > Internal Exception: java.sql.SQLException: JZ006: Caught
>> IOException: java.net.ConnectException: Connection refused:
connect
>> > Error Code: 0
>> > at
>>
org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:324)
>> > at
>>
org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:319)
>> > at
>>
org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:138)
>> > at
>>
org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162)
>> > at
>>
org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:330)
>> > at
>>
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:293)
>> > at
>>
org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connect(DatasourceAccessor.java:418)
>> > at
>>
org.eclipse.persistence.sessions.server.ConnectionPool.buildConnection(ConnectionPool.java:216)
>> > at
>>
org.eclipse.persistence.sessions.server.ConnectionPool.acquireConnection(ConnectionPool.java:135)
>> > at
>>
org.eclipse.persistence.sessions.server.ServerSession.getAccessors(ServerSession.java:534)
>> > at
>>
org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:553)
>> > at
>>
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207)
>> > at
>>
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193)
>> > at
>>
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:264)
>> > at
>>
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:646)
>> > at
>>
org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2592)
>> > at
>>
org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2551)
>> > at
>>
org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:418)
>> > at
>>
org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1097)
>> > at
>>
org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:829)
>> > at
>>
org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1056)
>> > at
>>
org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:390)
>> > at
>>
org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1144)
>> > at
>>
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2863)
>> > at
>>
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1501)
>> > at
>>
org.eclipse.persistence.internal.sessions.AbstractSession.retryQuery(AbstractSession.java:1571)
>> > at
>>
org.eclipse.persistence.sessions.server.ClientSession.retryQuery(ClientSession.java:593)
>> > at
>>
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.retryQuery(UnitOfWorkImpl.java:5453)
>> > at
>>
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1537)
>> > at
>>
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1483)
>> > at
>>
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1457)
>> > at
>>
org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:485)
>> > at
>>
org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:742)
>> > at
>>
com.sridhar.jpa.tutorial.test.RetryTest.getOrders(RetryTest.java:41)
>> > at
com.sridhar.jpa.tutorial.test.RetryTest.main(RetryTest.java:26)
>> > Caused by: java.sql.SQLException: JZ006: Caught IOException:
>> java.net.ConnectException: Connection refused: connect
>> > at com.sybase.jdbc3.jdbc.ErrorMessage.raiseError(Unknown
Source)
>> > at
com.sybase.jdbc3.jdbc.ErrorMessage.raiseErrorCheckDead(Unknown
>> Source)
>> > at com.sybase.jdbc3.tds.Tds.a(Unknown Source)
>> > at com.sybase.jdbc3.tds.Tds.a(Unknown Source)
>> > at com.sybase.jdbc3.tds.Tds.login(Unknown Source)
>> > at com.sybase.jdbc3.jdbc.SybConnection.a(Unknown Source)
>> > at com.sybase.jdbc3.jdbc.SybConnection.a(Unknown Source)
>> > at com.sybase.jdbc3.jdbc.SybConnection.<init>(Unknown Source)
>> > at com.sybase.jdbc3.jdbc.SybConnection.<init>(Unknown Source)
>> > at com.sybase.jdbc3.jdbc.SybDriver.connect(Unknown Source)
>> > at java.sql.DriverManager.getConnection(Unknown Source)
>> > at java.sql.DriverManager.getConnection(Unknown Source)
>> > at
>>
org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:98)
>> > ... 32 more
>> >
>> > [EL Info]: 2011-09-23
>>
16:51:42.307--UnitOfWork(1635615)--Thread(Thread[main,5,main])--Communication
>> failure detected when attempting to perform read query
outside of a
>> transaction. Attempting to retry query. Error was: Exception
>> [EclipseLink-4002] (Eclipse Persistence Services -
>> 2.3.0.v20110604-r9504):
>> org.eclipse.persistence.exceptions.DatabaseException
>> > Internal Exception: java.sql.SQLException: JZ006: Caught
>> IOException: java.net.ConnectException: Connection refused:
connect
>> > Error Code: 0
>> > Query: ReadAllQuery(referenceClass=Order sql="SELECT
ORDER_ID,
>> CUST_ID, OREDER_DESC, ORDER_DATE, TOTAL_PRICE, LAST_UPDATED_TIME
>> FROM ORDERS").
>> > [EL Config]: 2011-09-23
>>
16:51:52.322--ServerSession(29167060)--Connection(23257749)--Thread(Thread[main,5,main])--connecting(DatabaseLogin(
>> > platform=>SybasePlatform
>> > user name=> "dbuser"
>> > datasource URL=> "jdbc:sybase:Tds:barsr01b:5000/AEDB"
>> > ))
>> > [EL Config]: 2011-09-23
>>
16:51:52.978--ServerSession(29167060)--Connection(8755816)--Thread(Thread[main,5,main])--Connected:
>> jdbc:sybase:Tds:barsr01b:5000/AEDB
>> > User: guest
>> > Database: Adaptive Server Enterprise Version: Adaptive Server
>> Enterprise/15.0/EBF 12783 GA/P/NT (IX86)/Windows
>> 2000/ase150/2158/32-bit/OPT/Fri Aug 19 18:42:50 2005
>> > Driver: jConnect (TM) for JDBC (TM) Version: jConnect
(TM) for
>> JDBC(TM)/6.05(Build 25773)/P/EBF12723/JDK14/Fri Aug 5
0:05:43 2005
>> > [EL Fine]: 2011-09-23
>>
16:51:52.978--ServerSession(29167060)--Connection(8755816)--Thread(Thread[main,5,main])--SELECT
>> ORDER_ID, CUST_ID, OREDER_DESC, ORDER_DATE, TOTAL_PRICE,
>> LAST_UPDATED_TIME FROM ORDERS
>> > [EL Fine]: 2011-09-23
>>
16:51:52.994--ServerSession(29167060)--Thread(Thread[main,5,main])--SELECT
>> 1
>> > [EL Warning]: 2011-09-23
>>
16:51:52.994--UnitOfWork(1635615)--Thread(Thread[main,5,main])--Exception
>> [EclipseLink-4002] (Eclipse Persistence Services -
>> 2.3.0.v20110604-r9504):
>> org.eclipse.persistence.exceptions.DatabaseException
>> > Internal Exception:
com.sybase.jdbc3.jdbc.SybSQLException: ORDERS
>> not found. Specify owner.objectname or use sp_help to check
whether
>> the object exists (sp_help may produce lots of output).
>> >
>> > Error Code: 208
>> > Call: SELECT ORDER_ID, CUST_ID, OREDER_DESC, ORDER_DATE,
>> TOTAL_PRICE, LAST_UPDATED_TIME FROM ORDERS
>> > Query: ReadAllQuery(referenceClass=Order sql="SELECT
ORDER_ID,
>> CUST_ID, OREDER_DESC, ORDER_DATE, TOTAL_PRICE, LAST_UPDATED_TIME
>> FROM ORDERS")
>> > Got an exception:
>> > Internal Exception:
com.sybase.jdbc3.jdbc.SybSQLException: ORDERS
>> not found. Specify owner.objectname or use sp_help to check
whether
>> the object exists (sp_help may produce lots of output).
>> >
>>
------------------------------------------------------------------------------------
>> >
>> > As you could see from the log file above, the connection
recovers
>> but as user "guest" thus resulting in a failure. I even tried
>> closing the entity manager and that did not work. Later, I even
>> tried to close the connection as well but that did not help
either.
>> >
>> > It appears that Sybase allows a connection to be
successful even
>> when the user specifies an invalid database like:
>> >
>> > <property name="javax.persistence.jdbc.url"
>> > value="jdbc:sybase:Tds:barsr01b:5000/XXXXXXXXXX"/>
>> >
>> > In this case, Sybase logins in an user guest going
against the
>> master database but gives SQL warning on the same. From what
I can
>> see, EclipseLink should catch the SQL warnings and fail the
connection.
>> >
>> > Here is how one can get the SQLWarnings:
>> >
>> > Properties props = new Properties();
>> > props.setProperty("userName", user);
>> > props.setProperty("password", pwd);
>> >
>> > m_con = DriverManager.getConnection(url, user, pwd);
>> > SQLWarning warning = m_con.getWarnings();
>> > if (warning != null) {
>> > logger.log(Level.SEVERE, "SQLWarning: ");
>> > logger.log(Level.SEVERE, warning.getLocalizedMessage());
>> > ErrorStack.addError(warning.getLocalizedMessage());
>> > m_con.close();
>> > return;
>> > }
>> >
>> > I appreciate all the help.
>> >
>> > Thanks
>> > Sridhar
>> >
>> >
>> >
>>
------------------------------------------------------------------------
>> >
>> > _______________________________________________
>> > eclipselink-dev mailing list
>> > eclipselink-dev@xxxxxxxxxxx
<http://us.mc655.mail.yahoo.com/mc/compose?to=eclipselink-dev@xxxxxxxxxxx>
>>
<http://us.mc655.mail.yahoo.com/mc/compose?to=eclipselink-dev@xxxxxxxxxxx>
>> > https://dev.eclipse.org/mailman/listinfo/eclipselink-dev
>> _______________________________________________
>> eclipselink-dev mailing list
>> eclipselink-dev@xxxxxxxxxxx
<http://us.mc655.mail.yahoo.com/mc/compose?to=eclipselink-dev@xxxxxxxxxxx>
>>
<http://us.mc655.mail.yahoo.com/mc/compose?to=eclipselink-dev@xxxxxxxxxxx>
>> https://dev.eclipse.org/mailman/listinfo/eclipselink-dev
>>
>