Return-Path: Delivered-To: apmail-ibatis-user-java-archive@www.apache.org Received: (qmail 82398 invoked from network); 13 Jan 2010 09:33:28 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 13 Jan 2010 09:33:28 -0000 Received: (qmail 25848 invoked by uid 500); 13 Jan 2010 09:33:27 -0000 Delivered-To: apmail-ibatis-user-java-archive@ibatis.apache.org Received: (qmail 25783 invoked by uid 500); 13 Jan 2010 09:33:27 -0000 Mailing-List: contact user-java-help@ibatis.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user-java@ibatis.apache.org Delivered-To: mailing list user-java@ibatis.apache.org Received: (qmail 25775 invoked by uid 99); 13 Jan 2010 09:33:27 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 13 Jan 2010 09:33:27 +0000 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests=MISSING_MID,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: local policy) Received: from [80.190.191.173] (HELO plesk.mohrit.de) (80.190.191.173) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 13 Jan 2010 09:33:17 +0000 Received: (qmail 12606 invoked from network); 13 Jan 2010 10:33:17 +0100 Received: from lan.mohrit.de (HELO mohrit.de) (80.153.120.28) by plesk.mohrit.de with SMTP; 13 Jan 2010 10:33:17 +0100 From: =?iso-8859-1?Q?=5Be2n=5D_software_=7C_Bj=F6rn_Raupach?= Subject: Re-2: Logging in iBatis 3 To: user-java@ibatis.apache.org Date: Wed, 13 Jan 2010 09:32:52 +0000 Priority: normal X-Priority: 3 (Normal) Importance: normal X-Mailer: David by Tobit Software, Germany, Mime Converter 101.20 X-David-Sym: 0 X-David-Flags: 0 MIME-Version: 1.0 Content-Type: multipart/signed; protocol="application/x-pkcs7-signature"; micalg=sha1; boundary="----_=_NextPart_000_0059C2F1.4B4D9343" X-Virus-Checked: Checked by ClamAV on apache.org Message-Id: <20100113093325.5C86D816018@nike.apache.org> ------_=_NextPart_000_0059C2F1.4B4D9343 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: quoted-printable Exactly. My problem is not the unchecked exception. In fact I believe = thats the way to go. Unchecked exceptions for everything that is not = recoverable. My only problem is if my apps crashes due to an unexpected exception I would like to know where it happened. Otherwise I am not better of with = a checked exception, which I log first - instead of the framework - and = then throw the runtime exception. That was we way we used to code with = iBatis2 or plain jdbc. Nathan is right. There are usually only a small percent of statements = that need checking and even for these workarounds exists. In case of an unique constraints first check if the attribute already exists then insert, for = example. However having try-catch blocks around all my expected unexpected = exceptions doesn't ease the feeling that I might have forgotten one. Or think of a DB = schema change later one. The one insert statement that used to work = doesn't=20 work anymore and I have no idea why.=20 What about of having a log a tag within the environment tag? iBatis is = already independed of logging frameworks so why not make more use of it? I would like to have a in my developing = environment and in my production code. Is this a good idea? I would give it a try if you don't mind. =20 Subject: Re: Re-2: Logging in iBatis 3 (13-Jan-2010 1:09) From: Clinton Begin To: raupach@e2n.de Yeah, absolutely. I just realized that reading back the thread, that = might not have been clear...=20 Nathan's advice is where you should start: Let the exception bubble up = and only catch the ones you can actually do something with. Clinton On Tue, Jan 12, 2010 at 2:01 PM, Nathan Maves = wrote: There are times when you have an expected exception case. Now I know that statement contradicts itself but move on :) I have seen DB check constraints that throw unique exceptions. That being said you should know that the table/proc/function might throw these and you need to recover from them. Moral of the story is catch them if you expect them otherwise let them = roll. On Tue, Jan 12, 2010 at 12:58 PM, Clinton Begin = wrote: > The idea is that you should rethrow it. I do all of this in one = central > class. All of my service classes have the sqlSession instance injected = into > them with Guice. I don't commit/rollback or deal with exceptions. I = just > get my mappers, do my work, and let the container take care of the = rest. > > Clinton > > try { > // insert, update or delete > session.commit(); > } catch (IbatisException e) { > log.warn(e.getMessage()); > throw e; > } finally { > session.close(); > } > > > 2010/1/12 [e2n] software | Bj=F6rn Raupach >> >> try { >> // insert, update or delete >> session.commit(); >> } catch (IbatisException e) { >> log.warn(e.getMessage()); >> } finally { >> session.close(); >> } >> >> Now I catch a unchecked exception. I don't know. Feels awkward. >> >> >> >> Subject: Re: Logging in iBatis 3 (12-Jan-2010 16:30) >> From: Clinton Begin >> To: raupach@e2n.de >> >> >> The SqlException is always within the thrown exception as a chained >> exception. >> >> Clinton >> >> >> 2010/1/12 [e2n] software | Bj=F6rn Raupach >> >> Hello, >> >> short Question: How is logging configured in iBatis 3? >> >> In iBatis2 we used to caught the SQLException, logged it and threw a >> RuntimeException. >> >> However in iBatis3 there are no checked execptions anymore. >> >> We are using log4j. In log4j.properties we tried: >> >> log4j.logger.org.apache.ibatis=3DDEBUG >> log4j.logger.java.sql=3DDEBUG >> >> The sql statement logging is nice, but how to record if something goes >> wrong? Lets say an insert fails because of a constraint? There is some = nice >> output in my unit tests, but I havent't figured out how retrieve the = SQL >> Exection to log the in the application log. >> >> Thanks in advance! > > --------------------------------------------------------------------- To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org For additional commands, e-mail: user-java-help@ibatis.apache.org ------_=_NextPart_000_0059C2F1.4B4D9343 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" MIIXUgYJKoZIhvcNAQcCoIIXQzCCFz8CAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCCFSww ggSiMIIDiqADAgECAhBEvgyLUAAktBHTNiUlZ8mJMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQG EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUg VVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQG A1UEAxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMB4XDTk5 MDcwOTE3Mjg1MFoXDTE5MDcwOTE3MzY1OFowga4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEX MBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEh MB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3QuY29tMTYwNAYDVQQDEy1VVE4tVVNFUkZpcnN0 LUNsaWVudCBBdXRoZW50aWNhdGlvbiBhbmQgRW1haWwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQCyOYWk8n2rQTtiRjeuzcFgdbw5ZflKGkeiucxIzGqY1U01GbmkQuXOSeKKLx580jEH x060g2SdLinVomTEhb2FUTV5pE5okHsceqSSqBfymBXyk8zJpDKVuwxPML2YoAuL5W4bokb6eLyi b6tZXqUvz8rabaov66yhs2qqty5nNYt54R5piOLmRs2gpeq+C852OnoOm+r82idbPXMfIuZIYcZM 82mxqC4bttQxICy8goqOpA6l14lD/BZarx1x1xFZ2rqHDa/68+HC8KTFZ4zW1lQ63gqkugN3s2XI /R7TdGKqGMpokx6hhX71R2XL+E1XKHTSNP8wtu72YjAUjCzrAgMBAAGjgbkwgbYwCwYDVR0PBAQD AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFImCZ33EnSZwAEu0UEh83j2uBG59MFgGA1Ud HwRRME8wTaBLoEmGR2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUNsaWVu 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 MzI0MTkwODQzWjBbMQswCQYDVQQGEwJERTEjMCEGA1UECgwaU0NBIERldXRzY2hlIFBvc3QgQ29t IEdtYkgxJzAlBgNVBAMMHlNpZ250cnVzdCBDRVJUIENsYXNzIDIgQ0EgMzpQTjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAMEcUNCh9yWzzFl9pcTmEOBTK/ajxRTS9CKfT/LHOfb/u7uL pdlnEV8KDpmvyQtY+541guheTo2wJlqNwI0IqzWRzeZxfHQkWqQ7FEybTb+q8X0u0wz+ulslZ/jx /9+Cz97cLtzWlY9FeAhxUDgiOvA4YUF+VEZKHyPCC7BJh+RQEIm2rwP63tNu0S3OO27ksYwNgTdJ mPK5mKnucbB5QTSOx8dEJ2FNrwPZu1Cf7iCW2igIGxWjwkr7maEszox74lghcWG4SZwTr1sTCB0T 2xlTHipuBP50zL19idHe43dxWqfuBq8zSEWWV/tf9wLg8Phf0jKom+EtDy5Uf7CYxOUCAwEAAaOC ARcwggETMB8GA1UdIwQYMBaAFH//EWSDOnHM3hqok1+qPrvs/tHyMB0GA1UdDgQWBBRDAYXg2P3S WtsME3m6suZpNiljwDAOBgNVHQ8BAf8EBAMCAQYwFAYDVR0gBA0wCzAJBgcrEgkCAgEBMEkGCCsG AQUFBwEBBD0wOzA5BggrBgEFBQcwAYYtaHR0cDovL29jc3Auc2lnbnRydXN0LmRlL29jc3Avc2ln bnRydXN0L25xc2lnMEwGA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly93d3cuc2lnbnRydXN0LmRlL2Ny bC9kcGNvbS9ucXNpZy9zdGNlcnRfcm9vdF9jYTEuY3JsMBIGA1UdEwEB/wQIMAYBAf8CAQAwDQYJ KoZIhvcNAQEFBQADggIBAA2rJXGEq7ZF/hX8Jqbobabbwba5ZO+RKDwR0tPJU4YT8lxu0XNs0wQn 0tvEMTdbn3Ctg6E2YooKghbVAcfVqddpaRg8gnYLyIonfFeh0f1H9eOFkqRoKWQwgJE0he099nol p+H5yp0nomS+YA9c3sskHKfcmaOJnwNTqboViKbyDLnqlMcF+LT8iP8kxhhIOkm/w+Oixua0XBrH NlSgXMrXsbWysyhZZnBRjMbE99kmLFtlzn4gcqftAzuKNy1WPXYXdRcvYPphl5m+X0Rls9glZjzu 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 ------_=_NextPart_000_0059C2F1.4B4D9343--