× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Thanks for your reply.

I send you the logs directly because the zip file size is 1.2 MB. The
environment is WebSphere 3.5.3 running on OS/400 V4R5M0. The following
exception will only be thrown if I enable tracing, otherwise I get no
feedback.

Mattias


The exception:

javax.transaction.TransactionRolledbackException: CORBA
TRANSACTION_ROLLEDBACK 0 No; nested exception is:
        org.omg.CORBA.TRANSACTION_ROLLEDBACK:
com.ibm.websphere.csi.CSITransactionRolledbackException
      java/lang/Throwable.<init>()V+4 (Throwable.java:82)

com/ibm/ejs/csi/TranStrategy.handleException(Lcom/ibm/websphere/csi/EJBKey;Lcom/ibm/ejs/csi/TxCookieImpl;Lcom/ibm/websphere/csi/ExceptionType;)V+47
(TranStrategy.java:113)

com/ibm/ejs/csi/TransactionControlImpl.postInvoke(Lcom/ibm/websphere/csi/EJBKey;Lcom/ibm/websphere/csi/TxCookie;Lcom/ibm/websphere/csi/ExceptionType;)V+79
(TransactionControlImpl.java:409)

com/ibm/ejs/container/EJSContainer.postInvoke(Lcom/ibm/ejs/container/EJSWrapper;ILcom/ibm/ejs/container/EJSDeployedSupport;)V+277
(EJSContainer.java:1754)

de/dakosy/ejb/entity/EJSRemoteDajlock1tHome.create(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lde/dakosy/ejb/entity/Dajlock1t;+0
(EJSRemoteDajlock1tHome.java:31)

de/dakosy/ejb/entity/_Dajlock1tHome_BaseStub.create(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lde/dakosy/ejb/entity/Dajlock1t;+0
(_Dajlock1tHome_BaseStub.java:151)

de/dakosy/ejb/entity/_Dajlock1tHome_Stub.create(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lde/dakosy/ejb/entity/Dajlock1t;+0
(_Dajlock1tHome_Stub.java:158)

de/dakosy/ejb/session/DajDataAccessBean.lock(Ljava/lang/Class;Lde/dakosy/anmeldung/server/OrgProGebiet;Ljava/lang/String;)Z+0
(DajDataAccessBean.java:2181)

de/dakosy/ejb/EJSRemoteDajDataAccess.lock(Ljava/lang/Class;Lde/dakosy/anmeldung/server/OrgProGebiet;Ljava/lang/String;)Z+0
(EJSRemoteDajDataAccess.java:306)

de/dakosy/ejb/_DajDataAccess_BaseStub.lock(Ljava/lang/Class;Lde/dakosy/anmeldung/server/OrgProGebiet;Ljava/lang/String;)Z+0
(_DajDataAccess_BaseStub.java:1872)

de/dakosy/ejb/_DajDataAccess_Stub.lock(Ljava/lang/Class;Lde/dakosy/anmeldung/server/OrgProGebiet;Ljava/lang/String;)Z+0
(_DajDataAccess_Stub.java:1310)

de/dakosy/seedosj/zapp/ejb/session/SejZappGestellungBean.setLocked(Lde/dakosy/anmeldung/server/OrgProGebiet;Ljava/lang/String;Z)Z+0
(SejZappGestellungBean.java:3538)

de/dakosy/seedosj/zapp/ejb/session/SejZappGestellungBean.saveGestellungsmitteilung(Lde/dakosy/anmeldung/server/OrgProGebiet;Lde/dakosy/seedosj/zapp/data/GestellungData;ZZ)Z+0
(SejZappGestellungBean.java:3068)

de/dakosy/seedosj/zapp/ejb/EJSRemoteSejZappGestellung.saveGestellungsmitteilung(Lde/dakosy/anmeldung/server/OrgProGebiet;Lde/dakosy/seedosj/zapp/data/GestellungData;ZZ)Z+0
(EJSRemoteSejZappGestellung.java:31)

de/dakosy/seedosj/zapp/ejb/_SejZappGestellung_BaseStub.saveGestellungsmitteilung(Lde/dakosy/anmeldung/server/OrgProGebiet;Lde/dakosy/seedosj/zapp/data/GestellungData;ZZ)Z+0
(_SejZappGestellung_BaseStub.java:568)

de/dakosy/seedosj/zapp/ejb/_SejZappGestellung_Stub.saveGestellungsmitteilung(Lde/dakosy/anmeldung/server/OrgProGebiet;Lde/dakosy/seedosj/zapp/data/GestellungData;ZZ)Z+0
(_SejZappGestellung_Stub.java:389)

de/dakosy/seedosj/zapp/erfassungsstation/ejb/session/SejZappGM01Bean.saveGestellungsmitteilung(Z)Z+0
(SejZappGM01Bean.java:401)

de/dakosy/seedosj/zapp/erfassungsstation/ejb/EJSRemoteSejZappGM01.saveGestellungsmitteilung(Z)Z+0
(EJSRemoteSejZappGM01.java:31)

de/dakosy/seedosj/zapp/erfassungsstation/ejb/_SejZappGM01_BaseStub.saveGestellungsmitteilung(Z)Z+0
(_SejZappGM01_BaseStub.java:732)

de/dakosy/seedosj/zapp/erfassungsstation/ejb/_SejZappGM01_Stub.saveGestellungsmitteilung(Z)Z+0
(_SejZappGM01_Stub.java:318)

de/dakosy/tools/wrapper/EJBWrapperHandler.callEJBMethod(Ljava/lang/Class;ILjava/lang/String;[Ljava/lang/Object;[Ljava/lang/Class;)Ljava/lang/Object;+0
(EJBWrapperHandler.java:87)

de/dakosy/tools/wrapper/server/EJBWrapperSession.callEJBMethod(Lde/dakosy/tools/wrapper/EJBWrapperParameter;)Lde/dakosy/tools/wrapper/EJBWrapperReturn;+0
(EJBWrapperSession.java:56)

de/dakosy/tools/wrapper/server/EJBWrapperSession.runCommand(Lde/dakosy/tools/wrapper/EJBWrapperParameter;)Lde/dakosy/tools/wrapper/EJBWrapperReturn;+0
(EJBWrapperSession.java:118)

de/dakosy/tools/wrapper/server/EJBWrapperServlet.doPost(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+0
(EJBWrapperServlet.java:98)

javax/servlet/http/HttpServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+136
(HttpServlet.java:760)

javax/servlet/http/HttpServlet.service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+25
(HttpServlet.java:853)

com/ibm/servlet/engine/webapp/StrictServletInstance.doService(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+21
(ServletManager.java:626)

com/ibm/servlet/engine/webapp/StrictLifecycleServlet._service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+46
(StrictLifecycleServlet.java:160)

com/ibm/servlet/engine/webapp/ServletInstance.service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Lcom/ibm/servlet/engine/webapp/WebAppServletInvocationEvent;)V+186
(ServletManager.java:360)

com/ibm/servlet/engine/webapp/WebAppRequestDispatcher.handleWebAppDispatch(Lcom/ibm/servlet/engine/webapp/WebAppRequest;Ljavax/servlet/http/HttpServletResponse;Z)V+771
(WebAppRequestDispatcher.java:404)

com/ibm/servlet/engine/webapp/WebAppRequestDispatcher.dispatch(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Z)V+443
(WebAppRequestDispatcher.java:203)

com/ibm/servlet/engine/webapp/WebAppRequestDispatcher.forward(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+105
(WebAppRequestDispatcher.java:107)

com/ibm/servlet/engine/srt/WebAppInvoker.handleInvocationHook(Ljava/lang/Object;)V+127
(WebAppInvoker.java:77)

com/ibm/servlet/engine/invocation/CachedInvocation.handleInvocation(Ljava/lang/Object;)V+25
(CachedInvocation.java:67)

com/ibm/servlet/engine/invocation/CacheableInvocationContext.invoke(Ljava/lang/Object;)V+87
(CacheableInvocationContext.java:106)

com/ibm/servlet/engine/srp/ServletRequestProcessor.dispatchByURI(Ljava/lang/String;Lcom/ibm/servlet/engine/srp/ISRPConnection;)V+867
(ServletRequestProcessor.java:160)

com/ibm/servlet/engine/oselistener/OSEListenerDispatcher.service(Lcom/ibm/servlet/engine/oselistener/api/IOSEConnection;)V+95
(OSEListener.java:300)

com/ibm/servlet/engine/oselistener/SQEventListenerImp$ServiceRunnable.run()V+155
(SQEventListenerImp.java:230)

com/ibm/servlet/engine/oselistener/SQEventListenerImp.notifySQEvent(Lcom/ibm/servlet/engine/oselistener/api/ISQEvent;)V+184
(SQEventListenerImp.java:104)

com/ibm/servlet/engine/oselistener/serverqueue/SQEventSource.notifyEvent(Lcom/ibm/servlet/engine/oselistener/api/SQEventImp;)V+40
(SQEventSource.java:212)

com/ibm/servlet/engine/oselistener/serverqueue/SQWrapperEventSource$SelectRunnable.notifyService()V+116
(SQWrapperEventSource.java:353)

com/ibm/servlet/engine/oselistener/serverqueue/SQWrapperEventSource$SelectRunnable.run()V+124
(SQWrapperEventSource.java:220)

com/ibm/servlet/engine/oselistener/outofproc/OutOfProcThread$CtlRunnable.run()V+104
(OutOfProcThread.java:248)
      java/lang/Thread.run()V+11 (Thread.java:479)
  minor code: 0  completed: No
org.omg.CORBA.TRANSACTION_ROLLEDBACK:
com.ibm.websphere.csi.CSITransactionRolledbackException
      java/lang/Throwable.<init>()V+4 (Throwable.java:82)

com/ibm/ejs/csi/TranStrategy.handleException(Lcom/ibm/websphere/csi/EJBKey;Lcom/ibm/ejs/csi/TxCookieImpl;Lcom/ibm/websphere/csi/ExceptionType;)V+47
(TranStrategy.java:113)

com/ibm/ejs/csi/TransactionControlImpl.postInvoke(Lcom/ibm/websphere/csi/EJBKey;Lcom/ibm/websphere/csi/TxCookie;Lcom/ibm/websphere/csi/ExceptionType;)V+79
(TransactionControlImpl.java:409)

com/ibm/ejs/container/EJSContainer.postInvoke(Lcom/ibm/ejs/container/EJSWrapper;ILcom/ibm/ejs/container/EJSDeployedSupport;)V+277
(EJSContainer.java:1754)

de/dakosy/ejb/entity/EJSRemoteDajlock1tHome.create(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lde/dakosy/ejb/entity/Dajlock1t;+0
(EJSRemoteDajlock1tHome.java:31)

de/dakosy/ejb/entity/_Dajlock1tHome_BaseStub.create(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lde/dakosy/ejb/entity/Dajlock1t;+0
(_Dajlock1tHome_BaseStub.java:151)

de/dakosy/ejb/entity/_Dajlock1tHome_Stub.create(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lde/dakosy/ejb/entity/Dajlock1t;+0
(_Dajlock1tHome_Stub.java:158)

de/dakosy/ejb/session/DajDataAccessBean.lock(Ljava/lang/Class;Lde/dakosy/anmeldung/server/OrgProGebiet;Ljava/lang/String;)Z+0
(DajDataAccessBean.java:2181)

de/dakosy/ejb/EJSRemoteDajDataAccess.lock(Ljava/lang/Class;Lde/dakosy/anmeldung/server/OrgProGebiet;Ljava/lang/String;)Z+0
(EJSRemoteDajDataAccess.java:306)

de/dakosy/ejb/_DajDataAccess_BaseStub.lock(Ljava/lang/Class;Lde/dakosy/anmeldung/server/OrgProGebiet;Ljava/lang/String;)Z+0
(_DajDataAccess_BaseStub.java:1872)

de/dakosy/ejb/_DajDataAccess_Stub.lock(Ljava/lang/Class;Lde/dakosy/anmeldung/server/OrgProGebiet;Ljava/lang/String;)Z+0
(_DajDataAccess_Stub.java:1310)

de/dakosy/seedosj/zapp/ejb/session/SejZappGestellungBean.setLocked(Lde/dakosy/anmeldung/server/OrgProGebiet;Ljava/lang/String;Z)Z+0
(SejZappGestellungBean.java:3538)

de/dakosy/seedosj/zapp/ejb/session/SejZappGestellungBean.saveGestellungsmitteilung(Lde/dakosy/anmeldung/server/OrgProGebiet;Lde/dakosy/seedosj/zapp/data/GestellungData;ZZ)Z+0
(SejZappGestellungBean.java:3068)

de/dakosy/seedosj/zapp/ejb/EJSRemoteSejZappGestellung.saveGestellungsmitteilung(Lde/dakosy/anmeldung/server/OrgProGebiet;Lde/dakosy/seedosj/zapp/data/GestellungData;ZZ)Z+0
(EJSRemoteSejZappGestellung.java:31)

de/dakosy/seedosj/zapp/ejb/_SejZappGestellung_BaseStub.saveGestellungsmitteilung(Lde/dakosy/anmeldung/server/OrgProGebiet;Lde/dakosy/seedosj/zapp/data/GestellungData;ZZ)Z+0
(_SejZappGestellung_BaseStub.java:568)

de/dakosy/seedosj/zapp/ejb/_SejZappGestellung_Stub.saveGestellungsmitteilung(Lde/dakosy/anmeldung/server/OrgProGebiet;Lde/dakosy/seedosj/zapp/data/GestellungData;ZZ)Z+0
(_SejZappGestellung_Stub.java:389)

de/dakosy/seedosj/zapp/erfassungsstation/ejb/session/SejZappGM01Bean.saveGestellungsmitteilung(Z)Z+0
(SejZappGM01Bean.java:401)

de/dakosy/seedosj/zapp/erfassungsstation/ejb/EJSRemoteSejZappGM01.saveGestellungsmitteilung(Z)Z+0
(EJSRemoteSejZappGM01.java:31)

de/dakosy/seedosj/zapp/erfassungsstation/ejb/_SejZappGM01_BaseStub.saveGestellungsmitteilung(Z)Z+0
(_SejZappGM01_BaseStub.java:732)

de/dakosy/seedosj/zapp/erfassungsstation/ejb/_SejZappGM01_Stub.saveGestellungsmitteilung(Z)Z+0
(_SejZappGM01_Stub.java:318)

de/dakosy/tools/wrapper/EJBWrapperHandler.callEJBMethod(Ljava/lang/Class;ILjava/lang/String;[Ljava/lang/Object;[Ljava/lang/Class;)Ljava/lang/Object;+0
(EJBWrapperHandler.java:87)

de/dakosy/tools/wrapper/server/EJBWrapperSession.callEJBMethod(Lde/dakosy/tools/wrapper/EJBWrapperParameter;)Lde/dakosy/tools/wrapper/EJBWrapperReturn;+0
(EJBWrapperSession.java:56)

de/dakosy/tools/wrapper/server/EJBWrapperSession.runCommand(Lde/dakosy/tools/wrapper/EJBWrapperParameter;)Lde/dakosy/tools/wrapper/EJBWrapperReturn;+0
(EJBWrapperSession.java:118)

de/dakosy/tools/wrapper/server/EJBWrapperServlet.doPost(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+0
(EJBWrapperServlet.java:98)

javax/servlet/http/HttpServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+136
(HttpServlet.java:760)

javax/servlet/http/HttpServlet.service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+25
(HttpServlet.java:853)

com/ibm/servlet/engine/webapp/StrictServletInstance.doService(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+21
(ServletManager.java:626)

com/ibm/servlet/engine/webapp/StrictLifecycleServlet._service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+46
(StrictLifecycleServlet.java:160)

com/ibm/servlet/engine/webapp/ServletInstance.service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Lcom/ibm/servlet/engine/webapp/WebAppServletInvocationEvent;)V+186
(ServletManager.java:360)

com/ibm/servlet/engine/webapp/WebAppRequestDispatcher.handleWebAppDispatch(Lcom/ibm/servlet/engine/webapp/WebAppRequest;Ljavax/servlet/http/HttpServletResponse;Z)V+771
(WebAppRequestDispatcher.java:404)

com/ibm/servlet/engine/webapp/WebAppRequestDispatcher.dispatch(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;Z)V+443
(WebAppRequestDispatcher.java:203)

com/ibm/servlet/engine/webapp/WebAppRequestDispatcher.forward(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+105
(WebAppRequestDispatcher.java:107)

com/ibm/servlet/engine/srt/WebAppInvoker.handleInvocationHook(Ljava/lang/Object;)V+127
(WebAppInvoker.java:77)

com/ibm/servlet/engine/invocation/CachedInvocation.handleInvocation(Ljava/lang/Object;)V+25
(CachedInvocation.java:67)

com/ibm/servlet/engine/invocation/CacheableInvocationContext.invoke(Ljava/lang/Object;)V+87
(CacheableInvocationContext.java:106)

com/ibm/servlet/engine/srp/ServletRequestProcessor.dispatchByURI(Ljava/lang/String;Lcom/ibm/servlet/engine/srp/ISRPConnection;)V+867
(ServletRequestProcessor.java:160)

com/ibm/servlet/engine/oselistener/OSEListenerDispatcher.service(Lcom/ibm/servlet/engine/oselistener/api/IOSEConnection;)V+95
(OSEListener.java:300)

com/ibm/servlet/engine/oselistener/SQEventListenerImp$ServiceRunnable.run()V+155
(SQEventListenerImp.java:230)

com/ibm/servlet/engine/oselistener/SQEventListenerImp.notifySQEvent(Lcom/ibm/servlet/engine/oselistener/api/ISQEvent;)V+184
(SQEventListenerImp.java:104)

com/ibm/servlet/engine/oselistener/serverqueue/SQEventSource.notifyEvent(Lcom/ibm/servlet/engine/oselistener/api/SQEventImp;)V+40
(SQEventSource.java:212)

com/ibm/servlet/engine/oselistener/serverqueue/SQWrapperEventSource$SelectRunnable.notifyService()V+116
(SQWrapperEventSource.java:353)

com/ibm/servlet/engine/oselistener/serverqueue/SQWrapperEventSource$SelectRunnable.run()V+124
(SQWrapperEventSource.java:220)

com/ibm/servlet/engine/oselistener/outofproc/OutOfProcThread$CtlRunnable.run()V+104
(OutOfProcThread.java:248)
      java/lang/Thread.run()V+11 (Thread.java:479)
  minor code: 0  completed: No
        <<no stack trace available>>





"Fred Kulack" <kulack@us.ibm.com>
Sent by: java400-l-admin@midrange.com
17.10.01 17:46
Please respond to java400-l


        To:     java400-l@midrange.com
        cc:
        Subject:        Re: JTA transaction on 2 datasources....



On 10/17/2001 at 07:51:07 AM, java400-l-admin@midrange.com wrote:
I've got a problem using two cmp entity beans of different containers in
one transaction. The containers have different  datasources. A session
bean starts the transaction. The isolation level of all beans is
TRANSACTION_REPEATABLE_READ. Both entity beans have the transaction
attribute TX_SUPPORTS. The invoked method of the session bean has
TX_REQUIRES_NEW. Always the session bean wants to create an entity bean in
a different container an exception occurs. The jdbc driver is
"com.ibm.db2.jdbc.app.DB2Driver" and jta is enabled. If both containers
have the same datasource (and the tables are moved to the other
collection) all works fine.

Has anyone an idea why the JTA two phase commit doesn't work?
--- end of excerpt ---

Can you get us a little more detail?
Is the exception a websphere, JDBC or JVM exception?
Show us the stacks? Output logs or JDBC trace?

JDBC trace is done in Websphere by putting these things
in the command line of the application server that runs your
application. Start it, run your test, and stop it as
quickly as possible (the trace gets _really_ big otherwise).

App server command line:
-Djdbc.db2.traceÓ
-Djdbc.db2.cli.traceÝrue
-Djdbc.db2.trace.configßile:///jdbc.%j.txt

(this trace.config setting outputs the jdbc trace in output
file "/jdbc.<jobname>.txt" where jobname is... well... the job name.


In every single ethnic, religious or racial group, there are a
very few truly evil people. For each of those people there
are many, many, many good people.
Assuming anything (evilness or capability for evil) about the
particular group is bigotry and idiocy. Don't do it.  -- Me

Fred A. Kulack  -  AS/400e  Java and Java DB2 access, Jdbc, JTA, etc...
IBM in Rochester, MN  (Phone: 507.253.5982   T/L 553-5982)
mailto:kulack@us.ibm.com   Personal: mailto:kulack@magnaspeed.net
AOL Instant Messenger: Home:FKulack  Work:FKulackWrk

_______________________________________________
This is the Java Programming on and around the iSeries / AS400 (JAVA400-L)
mailing list
To post a message email: JAVA400-L@midrange.com
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/cgi-bin/listinfo/java400-l
or email: JAVA400-L-request@midrange.com
Before posting, please take a moment to review the archives
at http://archive.midrange.com/java400-l.





As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.