Return-Path: Delivered-To: apmail-db-jdo-dev-archive@www.apache.org Received: (qmail 43893 invoked from network); 8 Oct 2006 16:44:03 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 8 Oct 2006 16:44:03 -0000 Received: (qmail 96749 invoked by uid 500); 8 Oct 2006 16:44:03 -0000 Mailing-List: contact jdo-dev-help@db.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: jdo-dev@db.apache.org Delivered-To: mailing list jdo-dev@db.apache.org Received: (qmail 96737 invoked by uid 99); 8 Oct 2006 16:44:03 -0000 X-ASF-Spam-Status: No, hits=2.0 required=10.0 tests=HTML_MESSAGE,UNPARSEABLE_RELAY X-Spam-Check-By: apache.org Received-SPF: pass (hermes.apache.org: local policy) Received: from [192.18.42.249] (HELO nwk-ea-fw-1.sun.com) (192.18.42.249) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 08 Oct 2006 09:44:02 -0700 Received: from d1-sfbay-09.sun.com ([192.18.39.119]) by nwk-ea-fw-1.sun.com (8.13.6+Sun/8.12.9) with ESMTP id k98Ghfj1029288 for ; Sun, 8 Oct 2006 09:43:41 -0700 (PDT) Received: from conversion-daemon.d1-sfbay-09.sun.com by d1-sfbay-09.sun.com (Sun Java System Messaging Server 6.2-6.01 (built Apr 3 2006)) id <0J6T00L01T19LA00@d1-sfbay-09.sun.com> (original mail from Craig.Russell@Sun.COM) for jdo-dev@db.apache.org; Sun, 08 Oct 2006 09:43:41 -0700 (PDT) Received: from [192.168.0.10] (c-24-6-172-77.hsd1.ca.comcast.net [24.6.172.77]) by d1-sfbay-09.sun.com (Sun Java System Messaging Server 6.2-6.01 (built Apr 3 2006)) with ESMTPSA id <0J6T002GPT4R9Y00@d1-sfbay-09.sun.com> for jdo-dev@db.apache.org; Sun, 08 Oct 2006 09:43:41 -0700 (PDT) Date: Sun, 08 Oct 2006 09:43:37 -0700 From: Craig L Russell Subject: Re: A JDO-JPA Bridge In-reply-to: <004b01c6eac2$7bc1eee0$0500000a@ILANC> Sender: Craig.Russell@Sun.COM To: JDO Expert Group Cc: jdo-dev@db.apache.org Message-id: MIME-version: 1.0 X-Mailer: Apple Mail (2.752.2) Content-type: multipart/signed; protocol="application/pkcs7-signature"; boundary=Apple-Mail-10--517491822; micalg=sha1 X-Priority: 3 References: <004b01c6eac2$7bc1eee0$0500000a@ILANC> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N --Apple-Mail-10--517491822 Content-Type: multipart/alternative; boundary=Apple-Mail-9--517492370 --Apple-Mail-9--517492370 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed Hi Ilan, On Oct 8, 2006, at 3:12 AM, Ilan Kirsh wrote: > Hi Craig, > ...snip... > > However, I think that having or not having a JQuery interface is a > minor issue. No real damage can occur also for not having it. I am > glad that you like the general idea. Having JEntityManagerFactory, > JEntityManager and JEntityTransaction might be good enough for me. It is an interesting idea. Craig > > Regards, > > Ilan > > > ----- Original Message ----- > From: Craig L Russell > To: Ilan Kirsh > Cc: jdo-dev@db.apache.org > Sent: Sunday, October 08, 2006 6:34 AM > Subject: Re: A JDO-JPA Bridge > > Hi Ilan, > > I've looked at the JPA Query interface and I'm totally not > impressed. There's no reason to close a Query. The parameter > binding is hopeless. There is no notion of serializing a query. I > don't see anything in common that would allow you to construct a > JPA query and use the JDO query API with it, so I don't see any > need to return a JPDOQuery instance from either API. > > If you use EntityManager, use a JPA Query. If you use > PersistenceManager, use a JDO Query. Why mix? > > Craig > > On Oct 7, 2006, at 6:29 PM, Ilan Kirsh wrote: > >> Hi Craig, >> >> I wasn't sure about the JQuery interface either, but eventually I >> decided to include it in my suggestion to provide the compile, >> close and closeAll methods for JPQL queries (mainly the close and >> closeAll methods are useful). This can also be achieved by a new >> JDOHelper method if the JQuery interface causes too much trouble >> (which I hope does not) but it complicates things. Also there may >> be additional methods that we might want to add to javax.jdo.Query >> in the future for the sake of both JDOQL and JPQL, so JQuery might >> be useful. Exceptions can be thrown when irrelevant methods of >> javax.jdo.Query are invoked for a JPQL query. >> >> Regards, >> >> Ilan >> >> ----- Original Message ----- >> From: "Craig L Russell" >> To: >> Cc: "JDO Expert Group" >> Sent: Sunday, October 08, 2006 3:03 AM >> Subject: Re: A JDO-JPA Bridge >> >> > Hi Ilan, >> > >> > Thanks for this. I've been thinking for a while that JDO is an >> > extension of JPA and this makes sense. >> > >> > I don't know why the JQuery interface is needed. The query >> interfaces >> > of JDO and JPA are different enough that I don't know why you would >> > want to mix them. >> > >> > Craig >> > >> > On Oct 7, 2006, at 11:08 AM, Ilan Kirsh wrote: >> > >> >> Hi all, >> >> >> >> Following is an enhancement suggestion for JDO 2.1 (or maybe even >> >> for JDO 2.01?) that may give maximum results in minimum effort. >> >> >> >> I suggest to add four new interfaces to javax.jdo (or to a sub >> >> package): >> >> >> >> public interface JEntityManagerFactory extends >> >> javax.persistence.EntityManagerFactory, >> >> javax.jdo.PersistenceManagerFactory >> >> { >> >> } >> >> >> >> public interface JEntityManager extends >> >> javax.persistence.EntityManager, javax.jdo.PersistenceManager >> >> { >> >> } >> >> >> >> public interface JEntityTransaction extends >> >> javax.persistence.EntityTransaction, javax.jdo.Transaction >> >> { >> >> } >> >> >> >> public interface JQuery extends >> >> javax.persistence.Query, javax.jdo.Query >> >> { >> >> } >> >> >> >> JDO 2.1 Implementations that will support the new optional >> >> "javax.jdo.option.JPA" feature will have to return instances of >> >> these interfaces instead of the super interfaces when using either >> >> the JDO API or the JPA API. >> >> >> >> For instance, a JDO 2.1 implementation with JPA 1.0 support will >> >> support datastore transactions (currently only optimistic >> >> transactions are supported by JPA): >> >> >> >> EntityManagerFactory emf = >> >> Persistence.createEntityManagerFactory("myUnit"); >> >> EntityManager em = emf.createEntityManager(); >> >> ((JEntityTransaction)em.getTransaction()).setOptimistic >> (false); >> >> >> >> And will support using Extent (no Extent in JPA and I think that >> >> there is no support for filtering subclasses, at least not in an >> >> easy way): >> >> >> >> EntityManagerFactory emf = >> >> Persistence.createEntityManagerFactory("myUnit"); >> >> EntityManager em = emf.createEntityManager(); >> >> Extent extent = ((JEntityManager)em).getExtent(MyClass, >> false); >> >> >> >> As well as many other things that are missing in JPA, for example: >> >> >> >> boolean isDirty = JDOHelper.isDirty(entity); >> >> EntityManager em = (EntityManager) >> >> JDOHelper.getPersistenceManager(entity); >> >> >> >> These examples are for using JPA with JDO extensions which I think >> >> is more interesting. Of course, similar examples can be written >> >> also for the other direction (using JPA from JDO). >> >> >> >> The names of the new four interfaces is based on the JPA interface >> >> names in a way that may suggest that they are more powerful. Which >> >> do you consider more powerful AWT Frame, Panel and Button or Swing >> >> JFrame, JPanel and JButton? If JPA will catch then every curious >> >> Java developer will soon know that there is EntityManager but >> there >> >> is also JEntityManager that supports additional operations and >> >> unlike Hibernate or TopLink extensions is supported by many >> vendors >> >> and backed by a standard! I agree with David that some day the >> >> majority of the JPA implementations might be also JDO >> >> implementations. In that case, JEntityManagerFactory, >> >> JEntityManager, JEntityTransaction, JQuery, JDOHelper and Extent >> >> may be something significant that cannot be ignored in the JPA >> market. >> >> >> >> The minimum that is required in order to support this addition in >> >> JDO 2.1 is: >> >> - Adding the four new interfaces. >> >> - Adding "javax.jdo.option.JPA" to the specification with a short >> >> explanation. >> >> >> >> Actually the maximum is not so far from the minimum: >> >> - New section in the specification that explains this addition >> with >> >> more details and maybe some examples. >> >> - Handling possible conflicts (e,g, which exceptions are thrown >> JDO >> >> or JPA?). >> >> - TCK tests that check that an implementation that claims to >> >> support "javax.jdo.option.JPA" indeed returns instances of the new >> >> four interfaces. >> >> >> >> Of course, no need to describe the JPA in the JDO spec or write >> JPA >> >> tests because all this is already handled by the EJB 3 spec. >> >> >> >> Accepting this suggestion will enable using JDO in two modes: >> >> 1. Standalone (for current users as well as for new users that are >> >> interested). >> >> 2. As an extension to JPA (might be very useful if JPA will >> catch). >> >> >> >> Any comments will be welcomed. >> >> >> >> Regards, >> >> >> >> Ilan Kirsh >> >> ObjectDB Software >> >> http://www.objectdb.com >> > >> > Craig Russell >> > Architect, Sun Java Enterprise System http://java.sun.com/ >> products/jdo >> > 408 276-5638 mailto:Craig.Russell@sun.com >> > P.S. A good JDO? O, Gasp! >> > >> > >> > > Craig Russell > Architect, Sun Java Enterprise System http://java.sun.com/products/jdo > 408 276-5638 mailto:Craig.Russell@sun.com > P.S. A good JDO? O, Gasp! > > > Craig Russell Architect, Sun Java Enterprise System http://java.sun.com/products/jdo 408 276-5638 mailto:Craig.Russell@sun.com P.S. A good JDO? O, Gasp! --Apple-Mail-9--517492370 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=ISO-8859-1 Hi Ilan,

On = Oct 8, 2006, at 3:12 AM, Ilan Kirsh wrote:

Hi = Craig,
=A0
...snip...
=A0
However, I think that having or not having a JQuery = interface is a minor issue. No real damage can occur also for not having = it. I am glad that you like the general idea. Having = JEntityManagerFactory, JEntityManager and JEntityTransaction might be = good enough for me.

It is an interesting = idea.

Craig
=A0
=A0
=A0
=A0
----- Original Message = -----
Cc:

Hi = Ilan,

I've looked = at the JPA Query interface and I'm totally not impressed. There's no = reason to close a Query. The parameter binding is hopeless. There is no = notion of serializing a query. I don't see anything in common that would = allow you to construct a JPA query and use the JDO query API with it, so = I don't see any need to return a JPDOQuery instance from either = API.=A0

If = you use EntityManager, use a JPA Query. If you use PersistenceManager, = use a JDO Query. Why mix?

Craig

On Oct 7, 2006, at 6:29 PM, Ilan Kirsh wrote:

Hi Craig,
I wasn't sure about the JQuery interface = either, but eventually I decided to include it in my suggestion to = provide the compile, close and closeAll methods for JPQL queries (mainly = the close and closeAll methods are useful). This can also be achieved by = a new JDOHelper method if the JQuery interface causes too much trouble = (which I hope does not) but it complicates things. Also there may be = additional methods that we might want to add to javax.jdo.Query in the = future for the sake of both JDOQL and JPQL, so JQuery might be useful. = Exceptions can be thrown when irrelevant methods of javax.jdo.Query are = invoked for a JPQL query.
Regards,
=A0
=A0

> Hi Ilan,
>
> Thanks for this. = I've been thinking for a while that JDO is an=A0
> extension of JPA and this makes = sense.
>
> of JDO and JPA are different enough that = I don't know why you would=A0
>
> Craig
>
> On Oct 7, 2006, at 11:08 AM, Ilan Kirsh = wrote:
>
>> Following is an enhancement = suggestion for JDO 2.1 (or maybe even=A0
>> for JDO 2.01?) that may give maximum results = in minimum effort.
>> I suggest to add four new interfaces = to javax.jdo (or to a sub=A0
>> = package):
>>
>>=A0=A0=A0=A0 = javax.persistence.EntityManagerFactory,=A0
>> = javax.jdo.PersistenceManagerFactory
>> }
>> public interface JEntityManager = extends
>>=A0=A0=A0=A0 = javax.persistence.EntityManager, = javax.jdo.PersistenceManager
>> = {
>> }
>> public interface JEntityTransaction = extends
>>=A0=A0=A0=A0 = javax.persistence.EntityTransaction, = javax.jdo.Transaction
>> = {
>> }
>> public interface JQuery = extends
>>=A0=A0=A0=A0 javax.persistence.Query, = javax.jdo.Query
>> {
>>
>> "javax.jdo.option.JPA" feature will have to = return instances of=A0
>> these = interfaces instead of the super interfaces when using either=A0 =
>> the JDO API or the JPA API.
>>
>> For instance, a = JDO 2.1 implementation with JPA 1.0 support will=A0
>> support datastore transactions (currently = only optimistic=A0
>> transactions = are supported by JPA):
>>=A0=A0=A0=A0 EntityManagerFactory emf = =3D=A0
>> = Persistence.createEntityManagerFactory("myUnit");
>>=A0=A0=A0=A0 EntityManager em =3D = emf.createEntityManager();
>>=A0=A0=A0=A0 = ((JEntityTransaction)em.getTransaction()).setOptimistic(false);
>>
>> And will = support using Extent (no Extent in JPA and I think that=A0 =
>> there is no support for filtering = subclasses, at least not in an=A0
>>=A0=A0=A0=A0 EntityManagerFactory emf = =3D=A0
>> = Persistence.createEntityManagerFactory("myUnit");
>>=A0=A0=A0=A0 EntityManager em =3D = emf.createEntityManager();
>>=A0=A0=A0=A0 = Extent extent =3D ((JEntityManager)em).getExtent(MyClass, = false);
>>
>>
>>=A0=A0=A0=A0 = EntityManager em =3D (EntityManager)
>>
>> These examples = are for using JPA with JDO extensions which I think=A0
>> is more interesting. Of course, similar = examples can be written=A0
>> also for the = other direction (using JPA from JDO).
>> The names of the new four interfaces = is based on the JPA interface=A0
>> do you consider more powerful AWT = Frame, Panel and Button or Swing=A0
>> Java developer will soon know that = there is EntityManager but there=A0
>> unlike Hibernate or TopLink = extensions is supported by many vendors=A0
>> and backed by a standard! I agree with David = that some day the=A0
>> majority of the = JPA implementations might be also JDO=A0
>> implementations. In that case, = JEntityManagerFactory,=A0
>> JEntityManager, = JEntityTransaction, JQuery, JDOHelper and Extent=A0
>> may be something significant that cannot be = ignored in the JPA market.
>> The minimum that is required in = order to support this addition in=A0
>> - Adding the = four new interfaces.
>> - Adding = "javax.jdo.option.JPA" to the specification with a short=A0 =
>> explanation.
>>
>> Actually the = maximum is not so far from the minimum:
>> - New section in the specification that = explains this addition with=A0
>> - Handling possible conflicts (e,g, which = exceptions are thrown JDO=A0
>> or = JPA?).
>> - TCK tests that check that an = implementation that claims to=A0

>> four interfaces.
>>
>> Of course, no = need to describe the JPA in the JDO spec or write JPA=A0 =
>> tests because all this is already handled by = the EJB 3 spec.
>>
>> 1. Standalone (for current users as = well as for new users that are=A0
>> 2. As an = extension to JPA (might be very useful if JPA will = catch).
>>
>>
>> = Regards,
>>
>> ObjectDB = Software
>>
>
> Craig Russell
> 408 276-5638
>


Craig Russell
P.S. A good JDO? O, = Gasp!

=A0


=

Craig Russell

Architect, Sun Java = Enterprise System http://java.sun.com/products/jdo=

408 = 276-5638 mailto:Craig.Russell@sun.com

P.S. A = good JDO? O, Gasp!


= --Apple-Mail-9--517492370-- --Apple-Mail-10--517491822 Content-Transfer-Encoding: base64 Content-Type: application/pkcs7-signature; name=smime.p7s Content-Disposition: attachment; filename=smime.p7s MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIGUDCCAwkw ggJyoAMCAQICEB7Y7fLHmKoeHTUdbtYrvpAwDQYJKoZIhvcNAQEEBQAwYjELMAkGA1UEBhMCWkEx JTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQ ZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBMB4XDTA1MTIxNTIxNDc0NFoXDTA2MTIxNTIxNDc0 NFowbDEQMA4GA1UEBBMHUnVzc2VsbDEUMBIGA1UEKhMLQ3JhaWcgTGFpcmQxHDAaBgNVBAMTE0Ny YWlnIExhaXJkIFJ1c3NlbGwxJDAiBgkqhkiG9w0BCQEWFUNyYWlnLlJ1c3NlbGxAU3VuLkNPTTCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMXXgEAm88nu8cFbxXSWqTq+GaYpCx/0QSom 8kBbVxpJIURuO4ErLDupeXu6y9+5e7ZKLbeSQE5xbfYPcQR/IhqmYKy5YqRcuzPXREBj2zKEkZph pNXWpHgMdx9W8dq0Cu2i9Ux/S6c2MuEHrP6gfGGll+b/mzLoO280QHTuE4pcpKntRnwZdGxQ/5l8 IL+eLP+jpJAbYW9C+KNKofZtS6V6R0uzlqTOsEdZvwxZQ4mmPgHoz1+Gjwme/PC5sKvF09MaJDiI pj9SvZ4CTCgcDZV78J086YwlVbMC0VQotjhu1p42lr8CS33IXLz3OWNrDETCAepah/Dgw2ZZApQ9 9L0CAwEAAaMyMDAwIAYDVR0RBBkwF4EVQ3JhaWcuUnVzc2VsbEBTdW4uQ09NMAwGA1UdEwEB/wQC MAAwDQYJKoZIhvcNAQEEBQADgYEAKdIkgAWCg2Bi7ocnstfJA4iymTRI2/L4oQx9zvllM9bNJ2cR cecJIx3HuoHbhPvemh1GExEPgHU+dXSxDmD0BEmPnhSReKCURyslnbMphPZ5kR6USzQFrRa+v0ii J+SBO9VQYTQWT+xEjmRLM76MfkBFw3IOC9CUkRoYZ88pOoUwggM/MIICqKADAgECAgENMA0GCSqG SIb3DQEBBQUAMIHRMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQH EwlDYXBlIFRvd24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZp Y2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMSQwIgYDVQQDExtUaGF3dGUgUGVyc29uYWwgRnJlZW1h aWwgQ0ExKzApBgkqhkiG9w0BCQEWHHBlcnNvbmFsLWZyZWVtYWlsQHRoYXd0ZS5jb20wHhcNMDMw NzE3MDAwMDAwWhcNMTMwNzE2MjM1OTU5WjBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3Rl IENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWls IElzc3VpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMSmPFVzVftOucqZWh5owHUE cJ3f6f+jHuy9zfVb8hp2vX8MOmHyv1HOAdTlUAow1wJjWiyJFXCO3cnwK4Vaqj9xVsuvPAsH5/Ef kTYkKhPPK9Xzgnc9A74r/rsYPge/QIACZNenprufZdHFKlSFD0gEf6e20TxhBEAeZBlyYLf7AgMB AAGjgZQwgZEwEgYDVR0TAQH/BAgwBgEB/wIBADBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3Js LnRoYXd0ZS5jb20vVGhhd3RlUGVyc29uYWxGcmVlbWFpbENBLmNybDALBgNVHQ8EBAMCAQYwKQYD VR0RBCIwIKQeMBwxGjAYBgNVBAMTEVByaXZhdGVMYWJlbDItMTM4MA0GCSqGSIb3DQEBBQUAA4GB AEiM0VCD6gsuzA2jZqxnD3+vrL7CF6FDlpSdf0whuPg2H6otnzYvwPQcUCCTcDz9reFhYsPZOhl+ hLGZGwDFGguCdJ4lUJRix9sncVcljd2pnDmOjCBPZV+V2vf3h9bGCE6u9uo05RAaWzVNd+NWIXiC 3CEZNd4ksdMdRv9dX2VPMYIDEDCCAwwCAQEwdjBiMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhh d3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEsMCoGA1UEAxMjVGhhd3RlIFBlcnNvbmFsIEZyZWVt YWlsIElzc3VpbmcgQ0ECEB7Y7fLHmKoeHTUdbtYrvpAwCQYFKw4DAhoFAKCCAW8wGAYJKoZIhvcN AQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDYxMDA4MTY0MzM4WjAjBgkqhkiG9w0B CQQxFgQUy4ypSIcmYzTdyZWLrOLQ6954qOowgYUGCSsGAQQBgjcQBDF4MHYwYjELMAkGA1UEBhMC WkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQdHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0 ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBAhAe2O3yx5iqHh01HW7WK76QMIGHBgsqhkiG 9w0BCRACCzF4oHYwYjELMAkGA1UEBhMCWkExJTAjBgNVBAoTHFRoYXd0ZSBDb25zdWx0aW5nIChQ dHkpIEx0ZC4xLDAqBgNVBAMTI1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBJc3N1aW5nIENBAhAe 2O3yx5iqHh01HW7WK76QMA0GCSqGSIb3DQEBAQUABIIBABwRkU12H3dkadTHe4Pzbnxw+cL+HE4A FiyoigIcclbufPxZeyWvNTTGZYJ3yZ8wSgCT8zDkQbmQwpt2h3i+lrz12mO+xtBh9xfWGnKp5y71 d7aJnkxO/vAK6MgBRbXka/jABlUpQYTtP+zrh5fsBHroAjZn8fwihDr3rdTh+sPtkUqYyl2pGvXL Ta7lMrU4R4bAKRnG2Oy/Q3yWwuXPmyLIhK6FkihPAWFUjon/2mNIyA2T9cROtkj+agv3tnmZLDLE MquuLm9gGp7Zl+PNgTGJ7Edxsfo2ZwYAdSs6NsvSgEr0g7WiodltfRP3Z+wproMtAMZ3NnwJxojO bX/TqWgAAAAAAAA= --Apple-Mail-10--517491822--