Hi Vasily,
This <cache> element is used to control the isolation level of the CMP
entity cache.
Basically, when a CMP or CMR field not yet loaded is accessed, this
cache is queried prior to hit the database. The isolation level which is
defined within the <cache> element is the isolation level of the cache.
Thanks for the provided stack-trace; I do know what the problem is and
will fix that tonight.
Thanks,
Gianny
Zakharov, Vasily M wrote:
Hi, all,
I'm getting a NullPointerException in TranQL when changing Transaction
Isolation mode with Derby.
Is it a flaw in TranQL/Derby/connector, or I'm doing something wrong?
I have a simple entity like this:
<entity>
<ejb-name>ItemEnt</ejb-name>
<table-name>O_ITEM</table-name>
<cmp-field-mapping>
<cmp-field-name>discount</cmp-field-name>
<table-column>I_DISCOUNT</table-column>
</cmp-field-mapping>
<cmp-field-mapping>
<cmp-field-name>name</cmp-field-name>
<table-column>I_NAME</table-column>
</cmp-field-mapping>
<cmp-field-mapping>
<cmp-field-name>id</cmp-field-name>
<table-column>I_ID</table-column>
</cmp-field-mapping>
<cmp-field-mapping>
<cmp-field-name>description</cmp-field-name>
<table-column>I_DESC</table-column>
</cmp-field-mapping>
<cmp-field-mapping>
<cmp-field-name>price</cmp-field-name>
<table-column>I_PRICE</table-column>
</cmp-field-mapping>
<cmp-field-mapping>
<cmp-field-name>category</cmp-field-name>
<table-column>I_CATEGORY</table-column>
</cmp-field-mapping>
</entity>
and it works fine. However if I add the following before </entity>:
<cache>
<isolation-level>read-committed</isolation-level>
<size>100</size>
</cache>
It immediately stops working.
Addressing the entity causes NullPointerException in TranQL as shown
below.
The problem occurs if <isolation-level> is "read-committed" or
"repeatable-read"; if it is "read-uncommitted", the entity works fine.
The value of <size> doesn't matter, the effect is the same.
Does Derby support read-committed isolation? DB Info in Geronimo Console
states that it should.
I use repository/tranql/rars/tranql-connector-derby-embed-xa-1.1.rar
connector with the following deployment plan:
<?xml version="1.0" encoding="UTF-8"?>
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.0"
configId="SPECjAppServerDB"
parentId="geronimo/system-database/1.0/car">
<resourceadapter>
<outbound-resourceadapter>
<connection-definition>
<connectionfactory-interface>javax.sql.DataSource</connectionfactory-int
erface>
<connectiondefinition-instance>
<name>SPECDB</name>
<config-property-setting
name="DatabaseName">SPECDB</config-property-setting>
<connectionmanager>
<xa-transaction>
<transaction-caching/>
</xa-transaction>
<single-pool>
<max-size>100</max-size>
<min-size>10</min-size>
<blocking-timeout-milliseconds>60000</blocking-timeout-milliseconds>
<match-one/>
</single-pool>
</connectionmanager>
</connectiondefinition-instance>
</connection-definition>
</outbound-resourceadapter>
</resourceadapter>
</connector>
And here's the stack:
20:19:06,856 WARN [SystemExceptionInterceptor] ItemEnt
javax.ejb.TransactionRolledbackLocalException
at
org.openejb.transaction.ContainerPolicy$TxRequired.invoke(ContainerPolic
y.java:123)
at
org.openejb.transaction.TransactionContextInterceptor.invoke(Transaction
ContextInterceptor.java:80)
at
org.openejb.SystemExceptionInterceptor.invoke(SystemExceptionInterceptor
.java:82)
at
org.openejb.GenericEJBContainer.invoke(GenericEJBContainer.java:238)
at
org.openejb.proxy.EJBMethodInterceptor.intercept(EJBMethodInterceptor.ja
va:129)
at
org.openejb.proxy.EntityEJBLocalObject$$EnhancerByCGLIB$$5c64922d.getDat
aBean(<generated>)
at
org.spec.jappserver.orders.orderses.ejb.OrderSesEJB.getItemInfo(OrderSes
EJB.java:516)
at
org.spec.jappserver.orders.orderses.ejb.OrderSesEJB.newOrder(OrderSesEJB
.java:171)
at
org.spec.jappserver.orders.orderses.ejb.OrderSesEJB$$FastClassByCGLIB$$f
f62c8dc.invoke(<generated>)
at
org.openejb.dispatch.AbstractMethodOperation.invoke(AbstractMethodOperat
ion.java:90)
at
org.openejb.slsb.BusinessMethod.execute(BusinessMethod.java:67)
at
org.openejb.dispatch.DispatchInterceptor.invoke(DispatchInterceptor.java
:72)
at
org.apache.geronimo.naming.java.ComponentContextInterceptor.invoke(Compo
nentContextInterceptor.java:56)
at
org.openejb.ConnectionTrackingInterceptor.invoke(ConnectionTrackingInter
ceptor.java:81)
at
org.openejb.transaction.ContainerPolicy$TxRequired.invoke(ContainerPolic
y.java:119)
at
org.openejb.transaction.TransactionContextInterceptor.invoke(Transaction
ContextInterceptor.java:80)
at
org.openejb.slsb.StatelessInstanceInterceptor.invoke(StatelessInstanceIn
terceptor.java:98)
at
org.openejb.transaction.ContainerPolicy$TxRequired.invoke(ContainerPolic
y.java:140)
at
org.openejb.transaction.TransactionContextInterceptor.invoke(Transaction
ContextInterceptor.java:80)
at
org.openejb.SystemExceptionInterceptor.invoke(SystemExceptionInterceptor
.java:82)
at
org.openejb.GenericEJBContainer.invoke(GenericEJBContainer.java:238)
at
org.openejb.proxy.EJBMethodInterceptor.intercept(EJBMethodInterceptor.ja
va:129)
at
org.openejb.proxy.SessionEJBObject$$EnhancerByCGLIB$$9394b987.newOrder(<
generated>)
at
org.spec.jappserver.servlet.helper.SpecAction.doPurchase(SpecAction.java
:534)
at
org.spec.jappserver.servlet.helper.SpecAction.atomicityTestTwo(SpecActio
n.java:195)
at
org.spec.jappserver.servlet.helper.SpecServletAction.doAtomicityTests(Sp
ecServletAction.java:1304)
at
org.spec.jappserver.servlet.SpecAppServlet.performTask(SpecAppServlet.ja
va:166)
at
org.spec.jappserver.servlet.SpecAppServlet.doGet(SpecAppServlet.java:96)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:428)
at
org.apache.geronimo.jetty.JettyServletHolder.handle(JettyServletHolder.j
ava:99)
at
org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(Web
ApplicationHandler.java:830)
at
org.mortbay.jetty.servlet.JSR154Filter.doFilter(JSR154Filter.java:170)
at
org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(Web
ApplicationHandler.java:821)
at
org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationH
andler.java:471)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
at
org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationCon
text.java:633)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
at org.mortbay.http.HttpServer.service(HttpServer.java:909)
at
org.mortbay.http.HttpConnection.service(HttpConnection.java:816)
at
org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:982)
at
org.mortbay.http.HttpConnection.handle(HttpConnection.java:833)
at
org.mortbay.http.SocketListener.handleConnection(SocketListener.java:244
)
at
org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
at
org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
Caused by: java.lang.NullPointerException
at org.tranql.cache.cache.TxCache.get(TxCache.java:111)
at
org.tranql.cache.cache.FrontEndToCacheAdaptor.get(FrontEndToCacheAdaptor
.java:56)
at
org.tranql.cache.cache.FrontEndCacheDelegate.get(FrontEndCacheDelegate.j
ava:65)
at
org.tranql.cache.cache.CacheFieldFaultTransform.get(CacheFieldFaultTrans
form.java:40)
at
org.openejb.entity.cmp.CMPGetter.invokeInstance(CMPGetter.java:74)
at
org.openejb.entity.cmp.CMPMethodInterceptor.intercept(CMPMethodIntercept
or.java:75)
at
org.spec.jappserver.orders.itement.ejb.ItemCmp20EJB$$EnhancerByCGLIB$$ce
eb9f7.getDescription(<generated>)
at
org.spec.jappserver.orders.itement.ejb.ItemCmp20EJB.getDataBean(ItemCmp2
0EJB.java:245)
at
org.spec.jappserver.orders.itement.ejb.ItemCmp20EJB$$FastClassByCGLIB$$c
9f57db1.invoke(<generated>)
at
org.openejb.dispatch.AbstractMethodOperation.invoke(AbstractMethodOperat
ion.java:90)
at
org.openejb.entity.BusinessMethod.execute(BusinessMethod.java:68)
at
org.openejb.dispatch.DispatchInterceptor.invoke(DispatchInterceptor.java
:72)
at
org.apache.geronimo.naming.java.ComponentContextInterceptor.invoke(Compo
nentContextInterceptor.java:56)
at
org.openejb.ConnectionTrackingInterceptor.invoke(ConnectionTrackingInter
ceptor.java:81)
at
org.openejb.entity.EntityInstanceInterceptor.invoke(EntityInstanceInterc
eptor.java:136)
at
org.openejb.entity.cmp.InTxCacheInterceptor.invoke(InTxCacheInterceptor.
java:90)
at
org.openejb.transaction.ContainerPolicy$TxRequired.invoke(ContainerPolic
y.java:119)
... 46 more
Vasily Zakharov
Intel Middleware Products Division