|
You can download the latest version of the SDK here App Engine Java SDK - Release Notes Version 1.3.5 - June 30, 2010¶- Ability to configure the Task Queue storage limit with the total-storage-limit field in the queue.xml file.
- Task Queues now support up to 50 qps per queue, up from 50 qps per app.
- Developers can programmatically access Blobs with BlobstoreInputStream, which provides an InputStream view of a blob in Blobstore.
- Bulkloader transform helpers for lists and hierarchical keys were added.
- remote_api_shell commands can be sent over HTTPS or HTTP.
- Admin Console logs now include information on request time latency.
- The datastore now supports end cursors.
- Fixed an issue where requesting /appstats would not properly direct to /appstats/.
- Fixed an issue with inconsistent URL mappings between the SDK and production.
Version 1.3.4 - May 19, 2010¶- Client side bulkloader available with the Python SDK that has a new configuration syntax and wizard for easier import/export with the datastore. Can be used by enabling remote_api in your Java application
- Applications can now be configured to authenticate with OpenID by selecting the OpenID option when creating your application in the admin console
- New API to allow App Engine apps to act as OAuth service providers
- The version update check in the Java SDK now uses https
- Allow full access to javax.el.*
- Increased the timeout during deployment to 15 minutes
- Fixed an issue with JPA where an illegal cast exception was thrown during the fetch of integer fields
- MemcacheService.setNamespace() is deprecated in favor of MemcacheServiceFactory.getMemcacheManager(namespace)
- Support in the SDK for Java 1.5 is being deprecated. These warnings now appear when starting the SDK
Version 1.3.3 - April 21, 2010¶- Added two new system properties com.google.appengine.application.id and com.google.appengine.application.version
- DeadlineExceededException is now always thrown before HardDeadlineExceededError
- Decreased likelihood of "Too many URLMap" deployment errors for complex web apps
- Fixed an error where QuotaService.getCpuTimeInMegaCycles() was returning cycles instead of megacycles
- Fixed an issue between differing behavior of jsp in the production and development environments
- Fixed an issue uploading webapps with .tag files
Version 1.3.2 - March 25, 2010¶- New API to read the contents of uploaded Blobs (fetch_data)
- URLFetch now supports accessing ports 80-90, 440-450, and 1024-65535
- Mail API now allows common document formats as attachments
- The Task Queue API now supports adding multiple tasks in a single call to Queue.add()
- Fixed charset handling for inbound emails
- Fixed issue with compositing background colors in dev_appserver
- New feature in the datastore to specify whether to use strong or eventually consistent reads (the default is strong)
- New datastore feature allows setting deadlines for operations
- Increased the maximum Task Queue refill rate from 20/s to 50/s
- Support for IP blacklisting to prevent denial of service (DoS) attacks
- App Stats is now available for the Java SDK in addition to Python
- Fix issue with expiration times not being reset on Put on the Memchache API
- Fix issue preventing static files from being served when a servlet is mapped to root
JDO/JPA Changes¶- Support default rpc deadlines and query-specific deadlines
- Support default read consistency config and query-specific read consistency config
Version 1.3.1 - February 10, 2010¶- Datastore Query Cursors
- Transactional Tasks
- Support for Custom Admin Console pages
- Java Precompilation is now on by default
- Developers can opt-out of precompilation by setting the flag in appengine-web.xml: <precompilation-enabled>false</precompilation-enabled>
- New built-in support for unit testing (see appengine-testing.jar)
- net.sf.jsr107 package included as an alternative to the low-level Memcache API
- javax.annotation.Resource/Resources added to the package whitelist
- New "month" and "synchronized" syntax for Cron configuration
- URLFetch supports asynchronous requests
- appcfg.sh uses HTTPS for application deployment
- appcfg.sh adds request_logs --append
- Changes to the order queries without a specified sort order are returned
- Only queries that use IN will see different results.
- Added support for multiple != filters on the same property
- Improved support for keys-only queries when using IN and != filters
- Support for ETags, If-matches, If-not-matches HTTP Headers, as well as 304 status codes now available on static files (not yet available on the dev_appserver or Blobstore blobs)
- Fixed issue where the maximum transform count was enforced for composite operations
- Fixed issue with whitespace on the end of strings in web.xml
- Fixed web.xml <error-page> entries for 404 error codes
- Added validation prevent welcome-files with absolute paths
- Fixed issue where cancelling a deployment in progress could unintentionally corrupt the SDK
- Fixed issue with QuotaService.getCpuTimeInMegaCycles() returning 0
- Fixed issue where JSP exceptions will be incorrectly cast causing a ClassCastException
JDO/JPA Changes¶- Child object with custom pk column can't be saved
- Queries with multiple contains() where one filter is on pk don't work
- Throw exception when filtering or sorting by pk-id or pk-name fields
- Throw exception when filtering or sorting by pk-id or pk-name fields
- Store child keys in a multi-value property on the parent
- Incorrect exception for multiple fields of same type
- Non-persistent base classes do not work
- Relationships in abstract base classes don't work
- Explicitly disallow multiple relationships of the same type
- Occasional ArrayOutOfBoundsIndexException
- Support inheritance
- Support != queries
- Support IN queries
- Support datastore cursors
- Inheritance is working for simple fields and embedded fields. Relationships in base classes are completely untested and probably do not work.
- Cannot add child to existing one-to-many if parent has Long or unencoded String pk
- Can't query by embedded fields at depth > 1
- Positional parameters don't work (JPQL)
- Throw JDOCanRetryException when ConcurrentMod hit during txn commit
- Respect JDOQL/JPQL case sensitivity for keywords, in particular "count"
- Put all native datastore types in the default fetch group
- Empty Set gets loaded from datastore as null
- Cannot remove element of one to many when parent has pk of type Long or unencoded String
- Severe problem when deleting a child object from an owned relationship (JDO)
- NPE resulting from corrupt JDOQL query
- Embedded, multi-value fields don't work
Version 1.3.0 - December 14, 2009¶- Adds support for the new Blobstore API
- New com.google.appengine.runtime.{version,environment} system properties (and a SystemProperty accessor class)
- New sample applications for GWT 2.0
- Optimizations for many reflection operations
- Incorrect exception for multiple fields of same type
- Non-persistent base classes do not work
Service Changes¶- Added new Blobstore Viewer to Admin Console
Version 1.2.8 - December 3, 2009¶- Support for JAXB. JAXB is included in JDK 1.6 (and App Engine's production servers). If you're using JDK 1.5 with your local dev_appserver, you will need to include the JAXB libraries with your application to use it.
- New support for application pre-compilation to reduce the length of loading requests. To enable pre-compilation on your application, add this flag to your appengine-web.xml:
- <precompilation-enabled>true</precompilation-enabled>
- If you have trouble deploying your application, you should remove this flag or set it to false.
- Added Quota API (com.google.appengine.api.quota) to match Python
- Low-level Memcache API now supports incrementAll()
- HTTPResponse object now has getFinalUrl() method for 302 redirects.
- Java Dev Appserver now automatically executes tasks. If you prefer the old behavior where tasks do not automatically execute you can use the --jvm_flag=-Dtask_queue.disable_auto_task_execution flag when starting the server.
- Additional file extensions permitted when sending mail.
- Fixed issue with Java mail handler not processing multipart messages correctly
- Fixed agent code included in appengine-local-runtime.jar results in RuntimeException
- Fixed issue with sort orders defined on properties that allow multiple values
- Fixed problem with dropped query strings after requiring log-in
- Removed limitation preventing multiple parameters with the same name
- Fixed issue with local datastore incorrectly sorting results of ancestor queries
Version 1.2.6 - October 13, 2009¶- Add support for handling incoming email
- New AllocateIDs method for pre-allocating IDs as part of a large batch write
- Default queue URL changed to match Python
- New Appcfg.sh actions: cron_info, update_queues
- Development Appserver Admin Console changes: Task Queue tweaks and new XMPP Admin page
- Class whitelisting support added to the development appserver which support should bring the local environment closer to hosted environment
- ssl-enabled set to true by default
- New Datastore stats api. Stats are also visible in the admin console.
Version 1.2.5 - September 3, 2009¶- Ability to send and receive instant messages via the XMPP protocol.
- API for the experimental Task Queue service, matching the existing API in Python.
- Support for new datastore types such as GeoPt, Link, and Email.
- Adds new datastore method AllocateIds() for allocating a block of numeric IDs to use for creating new entities
- Adds ability to start key names with a digit.
- Support for setting the Referrer header in URL Fetch requests.
- Support for extending the deadline on URL Fetch requests up to 10 seconds using the java.net.URLConnection interface.
- Support for adjusting the MIME types used with static files.
- Support for controlling the browser cache expiration duration of static files.
- XPath is now usable without requiring additional workarounds.
- Support for the Stax API, javax.xml.stream. You can now use both the JDK's Stax parser as well as third-party Stax libraries like Woodstox.
- Fixed issues with deserialization of certain classes often encountered while using HttpSessions
JDO/JPA Changes¶- Support delete by query (JPA)
- Support delete by query (JDO)
- pm.makePersistentAll() should use batch puts
- Query by key name when pk is encoded String or Key
- Exception: {Primary keys are immutable} thrown when cascadingly deleting of children with "gae.pk-name" field
- Make it clear that @Unique and @Uniques are not supported
- Warn when child fields marked for Eager/Lazy fetching
- Better error message for JPQL update statements
- Queries don't respect fetch groups
- Exception deleting object with gae.parent-pk field
- Allow embedded field restrictions in queries (JDO/JPA)
- Cannot modify two fields in the embedded class in one transaction
- Add operator LIKE support for JPA
- fail to serialize field that is PC -- message "Specified class class com.google.appengine.api.datastore.Blob is not persistable"
- Collection<Byte> anomaly
- Upgrade to DataNucleus 1.1.5
- More sensible error when ancestor query param is null.
- JPQL: MEMBER OF only supported when args are in the wrong order
- Make it clear that ManyToMany is not supported
- Issuing an ancestor query when a jdo/jpa txn has been started does not actually start a txn
- pm.deletePersistentAll() should use batch deletes
- Support sequences
- JPA support for JPQL functions CURRENT_TIMESTAMP, CURRENT_DATE
- Support 'is not null' in queries
Version 1.2.2 - July 13, 2009¶- Fix memcache stub to not allow decrementing below 0.
- Allow cron tasks to be sent to admin-only servlets.
- The images API no longer goes into an infinite loop parsing certain images.
- Replicate static file handling in the DevAppServer more correctly.
- Prefix all built-in servlets with _ah to ensure they don't interact with user-supplied servlets.
- Add OverQuotaException and RequestTooLargeException for API calls.
- Fix generation of indexes that query by the same property multiple times.
- Fix generation of indexes kind queries that sort in descending order.
- Provide a servlet for session cleanup.
- Try to prompt for a password using Swing in AppCfg if running Java 1.5.
- Better emulate datastore transaction support in the DevAppServer.
- New -p option to AppCfg for connecting to App Engine via a HTTP proxy.
- Increase file limit from 1000 files to 3000 files, and check the limit up-front.
- Allow ancestor queries to be made inside of transactions.
- AppCfg should re-prompt users for authentication after an unauthorized error.
- Allow Entity objects to be cloned and their properties reset.
- Implement a local data viewer for the DevAppServer.
- Slight performance enhancement to datastore queries.
- Improve performance of applications that do a large number of File stat operations.
- Added com.google.apphosting.api.ApiProxy.CapabilityDisabledException which developers can catch in the event of a datastore outage or when the datastore goes into read-only mode.
JDO/JPA Changes¶- Fetched objects with multi-value props incorrectly marked dirty
- UnsupportedOperationException when updating one-to-many
- StartsWith doesn't work
- Ancestor queries execute in txn if txn is available
- Added support for gae.exclude-query-from-txn query extension
- Work around DataNucleus bug preventing app from loading persistence.xml in a path containing spaces.
- Upgrade to DataNucleus 1.1.4
- Short entity name cannot be used in JPQL Query
- NullPointerException when adding setFirstResult or setMaxResults to query
- Adding a child to a unidirectional one-to-many when the parent is detached doesn't work
- Support long and int as substitute for child object when querying
- Support fields of type Collection
- JPQL queries with single character literals enclosed in single quotes not properly handled
- Embedded classes not working in JPA
- NPE when saving bidirectional child that hasn't been added to parent.
- ClassCastException when explicitly setting parent of child
- Support "MEMBER OF" in jpql
- Detached objects have SCO fields
- Cannot filter by parent if parent has a parent
- Race condition initializing datanucleus meta-data
- Take advantage of keys-only queries
- Support unindexed properties
- results.size() must be called before closing JPA Entity Manager to avoid 'NucleusUserException: Object Manager has been closed'
Version 1.2.1 - May 13, 2009¶- Added validation of appengine-web.xml, cron.xml, and datastore-indexes.xml.
- New <user-permissions> element added to appengine-web.xml to grant custom third-party permissions (e.g. OgnlInvokePermission).
- Support for unindexed datastore properties of arbitrary types.
- Added HTTP Proxy support to appcfg.sh.
- Response limit raised from 1MB to 10MB
- Some methods from Servlet 2.5 were missing
- Individual bytes read from ServletInputStream were incorrectly signed
- Expect header is now ignored, rather than causing 500 errors
- Bundled commons-logging-1.2.1.jar can conflict with user-provided jars
- Groovy permissions are granted in the local runtime:
- Reflection on some JRE classes did not work properly
- <url-pattern> elements are now allowed in <jsp-property-group>
- JSPs with embedded UTF-8 content are not compiled properly
- Static welcome files now take precedence over dynamic welcome files in SDK
- Thread.setContextClassLoader() is now supported
- Content-Type not set in local implementation of URLFetch API
- AppCfg request_logs command is limited to 100 lines
- Timestamp added to datastore indexes file uses current locale
JDO/JPA Changes¶- Fix handling of user-defined @Order
- Support field restrictions in queries
- Fix NPE when querying for null parent
- Support contains operator in JDOQL
- Support doubles as query literals
- Support BigDecimal fields
- Support persisting classes with superclasses
- Support Collection fields with serialized="true"
- Support @Lob JPA annotation
- Support @Serialized on byte member
- Bidirectional one-to-many when parent has long or unencoded String pk fails
- Cannot fetch many side of one-to-many when pk is Key, Long, or unencoded String
- JDOQL: Support implicit params
- Cannot add child to existing one-to-many if parent has Long or unencoded String pk
- Expose batch gets
- Can't reattach detached objects with Date props
- Fetching 1 to 1 needs to differentiate between direct and indirect children
- Support embedded classes with Key primary key
|