Release Notes CP08

JBoss Enterprise Application Platform 4.3

for Use with JBoss Enterprise Application Platform 4.3 Cumulative Patch 8

Laura Bailey

Abstract

These release notes contain important information related to JBoss Enterprise Application Platform 4.3.0.CP08 that may not be currently available in the Product Manuals. You should read these Release Notes in their entirety before installing JBoss Enterprise Application Platform 4.3.0.CP08.

1.  Introduction

These release notes contain important information related to JBoss Enterprise Application Platform 4.3.0.CP08. New features, known problems, resources, and other current issues are addressed here.

1.1. Overview

JBoss Enterprise Application Platform is the next evolutionary step in open source enterprise software. It is a powerful tool for developing rich, high performance, Web 2.0 applications on a pure Java Platform.
JBoss Enterprise Application Platform provides complete compatibility with existing J2EE 1.4 enterprise Java applications. At the same time, almost all the key features and components defined in the Java EE 5.0 specification are supported. So your new enterprise Java applications can take immediate advantage of the Java EE 5.0's significantly simpler POJO-based programming model.
Further, by integrating best-of-breed open source frameworks such as JBoss Seam, Hibernate, Tomcat, and JBoss Cache the Platform takes advantage of innovations in the open source community. As well, JBoss Enterprise Application Platform is fully tested and supported by Red Hat, and is certified to work on many leading enterprise hardware and software products.
All of which means you can develop your new application taking advantage of Java EE 5.0 technologies immediately and with the confidence of knowing it will remain forward-compatible with future versions of the JBoss Platform.

2. New Features in JBoss Enterprise Application Platform 4.3.0.CP08

2.1. Database Certifications

JBoss Enterprise Application Platform 5.0.1 is now certified for the Oracle 11g R2 and Oracle 11g R2 RAC databases when used with Oracle JDBC Driver version 11.2.0.1.0.
It is also certified for Sybase ASE 15.0.3 when used with JConnect driver version 6.0.5.

2.2. IPv6 Certification

JBoss Enterprise Application Platform 4.3.0 CP08 and onward can be used with IPv6 addresses. However, please be aware of the known issues associated with using IPv6 addresses listed in Section 7, “ Known Issues with this release ”.

2.3. Component Versions

This section details the versions of the components which create the Enterprise Application Platform 4.2 that can be found in this Cumulative Patch release.
  • JBoss Application Server 4.2.z
  • JBoss Microcontainer 1.0.2
  • Hibernate Core 3.2.4.SP1_CP09
  • Hibernate Annotations 3.3.1.GA_CP02
  • Hibernate Entity Manager 3.3.2.GA_CP01
  • Hibernate Validator 3.0.0.GA
  • Apache Xalan 2.7.0.patch02
  • JacORB 2.3.0jboss.patch7
  • JAF 1.1.0
  • JavaServer Faces 1.2_13
  • JBoss AOP 1.5.5.GA_CP05
  • JBoss Cache 1.4.1_SP14
  • JBoss JAXR 1.2.0.SP2
  • JBoss Messaging 1.4.0.SP3_CP10
  • JBoss Remoting 2.2.3.SP2
  • JBoss Serialization 1.0.3.GA
  • JBoss Transactions 4.2.3.SP5_CP07
  • JBoss XB 1.0.0.SP3
  • JBoss Web 2.0.0.GA_CP12
  • JBoss Web Services 2.0.1.SP2_CP07
  • JGroups 2.4.7.GA
  • Seam 1.2.1.GA
  • Seam 2.0.2.GA
    • includes RichFaces 3.3.1.SP1

Note

The Enterprise Application Platform Server has been redefined for the enterprise market to a level where direct association to a community release can no longer be drawn.

3. Installation and Migration Notes

This section contains information related to installing or upgrading to JBoss Enterprise Application Platform version 4.3.0.CP08, including hardware and platform requirements and prerequisites.

3.1. Installation Notes

You must have adequate disk space to install JDK and JBoss Enterprise Application Platform while also allowing enough space for your applications. You must have a working installation of JDK 1.5. For the latest information on supported Operating System / JVM combinations, supported Database platforms and current information on the revision level of included components, please refer to http://www.jboss.com/products/platforms/application/testedconfigurations. Refer to the installation guide available online from http://www.redhat.com/docs/en-US/JBoss_Enterprise_Application_Platform/ for detailed instructions to install and verify JBoss Enterprise Application Platform.

3.2. Upgrading from JBoss Enterprise Application Platform 4.3.0.CP07

Using CSP/JON

Installing a Cumulative Patch

  1. Use Browse Resources to navigate to the resource you wish to patch.
  2. Click on the Software tab. All patches applicable to your resource and all patches that have been previously installed by JON on this resource will be displayed.
  3. An Install link will be listed beside all patches that can be installed by JON. Any patches without this link must be installed manually. Any patch that appears beside a Manually Uninstall link must be uninstalled manually before the new patch can be installed.
    For more information about installing a patch with CSP/JON, see the JON documentation.

4. Important Notes

4.1. Oracle 9i is no longer supported

JBoss Enterprise Application Platform 4.3.0 CP08 and higher will no longer be tested for compatibility with Oracle 9i.

4.2. Changes to Naming Structure

There is no Feature Pack planned for release with Cumulative Patch 7 and onward. The previous naming structure (for example, seamfp) is therefore no longer relevant. The JBoss Installer now refers to Seam2 instead of SeamFP. The directory location for seam is now seam1, and the directory location for seam2 is now seam2.

4.3.  Running the example Seam Applications

It is recommended to run the example Seam applications that are included with the documentation using the production configuration. Using another configuration may result in memory issues. Note that the default configuration for the server to start with, if no other configuration is specified, is the production configuration.

Warning

To avoid memory issues, adjust the memory settings before deploying the applications. You can do this by updating JAVA_OPTS settings in the file JBOSS_DIST/jboss-as/server/production/run.conf with these recommended values:
-Xms1303m -Xmx1303m -XX:PermSize=256m -XX:MaxPermSize=256m
Refer to the "Seam Reference Guide" included in the documentation set (JBOSS_DIST/doc/seam/Seam_Reference_Guide.pdf) for important information regarding the deployment of Seam examples and detailed information on developing applications using Seam.

Note

Seam version used in this release is 1.2.1.GA.

4.4.  Default Security Settings

If you are using the rpm, or the zip distribution, please note that by default, authentication is enabled and no user accounts are set up. This is done to prevent unauthorized access to various services of JBoss AS. Please refer to the Installation Guide, or see http://kbase.redhat.com/faq/FAQ_107_9963.shtm for information on how to make the services accessible again.

4.5.  Embedded Hypersonic Database

Hypersonic SQL provides default "out of the box" database functionality for evaluation and development use only. It is NOT recommended or supported as a production-use database. Technical support is not available for this component, and while we are happy to accept bugs filed against this component, we do not make any commitment to fix them within a specific timeframe.

6.  Issues fixed in this release

Following is a list of issues fixed in this release:
Security

  • JBPAPP-3952: A security issue in the JMX Console configuration has been identified that allows an attacker to bypass security authentication.
    The JMX Console configuration only specified an authentication requirement for requests that used the GET and POST HTTP "verbs". An attacker could create a HTTP request that did not specify GET or POST and it would be executed by the default GET handler without authentication. This release contains a JMX Console with an updated configuration that no longer specifies the HTTP verbs. This means that the authentication requirement is applied to all requests.
    For additional information on this vulnerability refer to: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-0738
    All users are advised to upgrade to this release to resolve this issue.
    If an immediate upgrade is not possible or the server deployment has been customized then the fix can be applied by editing the deployment descriptor (WEB-INF/web.xml) of the JMX Console WAR. Details of how to apply this fix can be found at http://kbase.redhat.com/faq/docs/DOC-30741. Contact Red Hat JBoss Support for advice before making these changes.
    Red Hat would like to thank Stefano di Paola and Giorgio Fedon of Minded Security for responsibly reporting the CVE-2010-0738 issue.
  • JBPAPP-3979: Unauthenticated access to the JBoss Application Server Web Console (/web-console) is blocked by default. However, it was found that this block was incomplete, and only blocked GET and POST HTTP verbs. A remote attacker could use this flaw to gain access to sensitive information. This release contains a Web Console with an updated configuration that now blocks all unauthenticated access to it by default. (See CVE-2010-1428 for further information.)
  • JBPAPP-3633: JBPAPP-544 fixed a security issue by removing the mapping for /status servlet, leaving only the protected /web-console/status available. However, JBPAPP-1146 re-added the unsecured /status mapping. The /status servlet is now secured with the JMX console JAAS security domain.
  • JBPAPP-2872: Twiddle logged all command line arguments, including the JMX password, to twiddle.log, which has public read permissions, and is created in the current working directory. The password is now masked in the log, removing the risk to security. (This issue is related to CVE-2009-3554.)
  • JBPAPP-2500: When a stateless session bean annotated with @RunAs and @RunAsPrincipal invoked another stateless session bean, the second bean's EJBContext.getCallerPrincipal method returned the unauthenticated identity instead of the identity set with @RunAsPrincipal on the first bean. The correct identity is now returned.
  • JBPAPP-2312: A new PrincipalSessionAttributeFilter has been created to include the principal session as an attribute of the HTTP Session. This attribute is checked upon session expiry and the authenticated cache will be flushed if found. In order to use this filter, uncomment the filter in JBoss Web's web.xml.

JBoss Application Server

  • JBPAPP-4018: HSQLDB has been upgraded to version 1.8.0.8.patch03 to enable correct handling for IPv6 addresses.
  • JBPAPP-4017: Apache HTTP Client has been updated with a patch to enable corrent handling for IPv6 addresses.
  • JBPAPP-3925: When an EJBTimer is persisted and read back after a server restart, its timerId value is reset. This means that any TimerHandles that are persisted cannot reliably return the timer. This led to javax.ejb.NoSuchObjectLocalException: Timer not available.
    The fix for this issue requires that the UUIDTimerIdGenerator is set as the TimerIdGeneratorClassName in the $JBOSS_HOME/server/$PROFILE/deploy/ejb-deployer.xml file, like so:
    <mbean code="org.jboss.ejb.txtimer.EJBTimerServiceImpl"
      name="jboss.ejb:service=EJBTimerService">
      <attribute name="RetryPolicy">
        jboss.ejb:service=EJBTimerService,retryPolicy=fixedDelay
      </attribute>
      <attribute name="PersistencePolicy">
        jboss.ejb:service=EJBTimerService,persistencePolicy=database
      </attribute>
      <attribute name="TimerIdGeneratorClassName">
        org.jboss.ejb.txtimer.UUIDTimerIdGenerator
      </attribute>
    The system property jboss.ejb.txtimer.preserveTimerId must also be set upon server startup:
    $JBOSS_HOME/bin/run.sh -c default -Djboss.ejb.txtimer.preserveTimerId

    Important

    timerIds are not preserved by default. This behavior is kept because BigIntegerTimerIdGenerator, which was previously configured in $JBOSS_HOME/server/$PROFILE/deploy/ejb-deployer.xml, would not be updated when upgrading with JON, because JON does not update the XML file. When BigIntegerTimerIdGenerator is used with jboss.ejb.txtimer.preserveTimerId, timerId collisions are likely.
  • JBPAPP-3336: When unmarshalling a replicated HTTP session with JDK 6, a ClassNotFoundException is raised when MarshalledValueInputStream#resolveClass() attempts to resolve the array class with WebappClassLoader#loadClass(name). Since loadClass() cannot handle array syntax, it delegated to the parent class, which could not locate the class, and raised the exception. The loadClass() method has been replaced with Class.forName(name, false, WebappClassLoader), which understands array syntax, so the error no longer occurs.
  • JBPAPP-2905: The ScanPeriod in the production configuration is set to sixty seconds. If the deployment scanner thread was sleeping when shutdown was initiated, shutdown waited for the length of the deployment scanner's sleep time. The deployment scanner thread is now stopped when shutdown is initiated, and the wait no longer occurs.
  • JBPAPP-2764: LoadMgr3 logged a failure to load a class as an error, but in certain situations this should be regarded as correct. The ERROR message has been downgraded to a WARNING.
  • JBPAPP-2578: Configuration information for the JBoss Messaging service in sample-bindings.xml has been updated to make use of new settings.
  • JBPAPP-2451: Servlet statistics could not be reset with the JMX Console because the TimeStatisticImpl.reset() method was not being called correctly. This has been corrected and the reset function now works as expected.

Clustering

  • JBPAPP-2854: When multiple nodes were started concurrently, an address mismatch would occur between cluster members and message senders. This caused inconsistent internal state in NAKACK, which would log errors similar to the following:
    WARN [org.jgroups.protocols.pbcast.NAKACK] 
    (IncomingPacketHandler (channel=Tomcat-DefaultPartition):) 
    node2:1234] discarded message from non-member node3:1234, 
    my view is [node1:1234|2] [node1:1234, node2:1234, node3:1234]
    
    ERROR [org.jgroups.protocols.pbcast.NAKACK] (Timer-3:) 
    sender node3:1234 not found in received_msgs
    
    This mismatch has been corrected and the errors no longer present.
  • JBPAPP-2970: When optimistic locking was enabled, remove(String fqn) and remove(String fgn,Object key) did not act on other cluster members if the nodes did not exist in the local cache. This could occur when using invalidation or when a node had been evicted. The remove method now works cluster-wide with optimistic locking, even if the node does not exist in the local cache.
  • JBPAPP-2928: With buddy replication, when multiple concurrent requests are made with the same session ID after failover, the requests may abort with an org.jboss.cache.lock.UpgradeException while attempting to migrate the cache data to the local node. This no longer occurs, and multiple concurrent web requests made after failover with buddy replication enabled now works correctly.
  • JBPAPP-2013: To work around the incorrect processing of IPv6 addresses, the bind address was enclosed in square brackets:
    ./run.sh -b [$IPv6_ADDRESS] -c all
    However, this was not valid JGroups syntax for hostname and port combinations, so JGroups was unable to parse IPv6 literals in TCPPING protocol configuration. The fix for JBPAPP-3018 resolves this issue.

EJB3

  • JBPAPP-2811: The EJB3 timer service did not support retry as defined in the EJB3 Core Specification. This support has been included.
  • JBPAPP-2782: When EJB3 entities were used with optimistic caching, the newerThan method would incorrectly return true for A.newerThan ( A ). This caused a DataVersioningException when attempting to remove the entry from the cache. The EJB3 entity cache service is now configured to use pessimistic caching to avoid this issue.
  • JBPAPP-2290: If tx.registerSynchronization fails, then the bean is not attached to the transaction and thus should not take part in any transaction semantics.
  • JBPAPP-2248: EJB3 clients did not reuse existing socket connections on subsequent invocations.

JBoss Hibernate

  • JBPAPP-4088: When a column name is defined in backticks (`), @JoinTable and @JoinColumn mappings fail with a AnnotationException when the column name with backticks is referenced. The following fails:
    @JoinTable(name = "SYS_GROUPS_USERS", joinColumns = @JoinColumn(name = "USERID", referencedColumnName = "`uid`"), inverseJoinColumns = @JoinColumn(name = "GROUPID", referencedColumnName = "GROUPID"))
    Whereas the following succeeds:
    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "SYS_GROUPS_USERS", joinColumns = @JoinColumn(name = "USERID"), inverseJoinColumns = @JoinColumn(name = "GROUPID"))
    The workaround for this issue is not to specify the referencedColumnName where it refers to the primary key, since Hibernate will choose the primary key automatically.
  • JBPAPP-3487: AbstractCollectionPersister used the key column aliases generated by Column.getAlias(Dialect) rather than Column.getAlias(Dialect,Table), so Hibernate generates the wrong alias in the table-pre-class inheritance strategy. This incorrect alias then caused an exception when Hibernate retrieved data from the ResultSet. AbstractCollectionPersister now uses the key column aliases generated by Column.getAlias(Dialect,Table), so the table-pre-class inheritance strategy mapping is correct.
  • JBPAPP-3384: Hibernate collection mapping encountered exceptions if @MapKey was used without an explicit @Type annotation. Without an explicit @Type annotation, Hibernate assumed that the property key type was Serializable and attempted to deserialize an object stream from the database column value. With this update, if @MapKey is not given an explicit @Type, Hibernate uses the original property type instead of the serializable type.
  • JBPAPP-3371: The round function is meant to return values of the same type as the first argument provided (integer, double, or decimal). Previously, it rounded all values regardless of type. All values should now return as the correct type.
  • JBPAPP-3173: Using Javassist as the bytecode provider to instrument your domain model caused errors if an entity extended a parent class with an abstract method. Hibernate code used return instead of continue in a while statement, which caused the statement to skip all other attributes that should have been used. This has been corrected.
  • JBPAPP-3098: When a filter with a collection type parameter was used, and the number of parameters in that collection changed during the lifetime of the SessionFactory, the SQL would not be updated to reflect the change in the number of parameters. This typically resulted in the following error:
    java.sql.SQLException: Parameter index out of bounds.
      2 is not between valid values of 1 and 1
    This occurred only with HQL, not Criteria, and has now been corrected.
  • JBPAPP-3089: A long IN list could result in stack overflow during parsing. A query element like where x in (:x) or a manually-constructed where x in (1,2,3,...) could generate a stack overflow if the number of elements referenced by x exceeded a number dependent on available stack space. For Java Virtual Machines, the limit is between 9000 and 10000, assuming a relatively empty stack at the point of query execution.
    The stack overflow occurred in org.hibernate.hql.ast.util.NodeTraverser because it used a recursive algorithm to walk a parse tree. A long IN list generated a very deep sub-tree, so a sufficiently long list caused the stack overflow when NodeTraverser's internal method visitDepthFirst calls itself too many times. This recursive algorithm has been replaced with an iterative tree-walking implementation to fix this issue.
  • JBPAPP-3068: Mapping an Enum as @Id on MySQL caused a SchemaExport exception with error messages similar to the following:
    Unsuccessful: create table PlanetCheatSheet (planet tinyblob
    not null,mass double precision not null, numberOfInhabitants
    bigint not null, radius double precision not null, primary
    key (planet)) ENGINE=InnoDB
    BLOB/TEXT column 'planet' used in key specification without
    a key length
    
    This occurred because Hibernate bound the id property of an Enum type as a tinyBlob (on MySQL) without a length property. The fix for this issue ensures that bindId() in AnnotationBinder calls SimpleValueBinder.setType() to set the column type to string resp. int., preventing the issue.
  • JBPAPP-3060: @JoinColumn mapping assumed that the column definition was void even if it was also defined by @ManyToOne. Ejb3JoinColumn.java has been updated so that defined column properties like length, precision and scale are observed in @JoinColumn mapping.
  • JBPAPP-3052: When org.hibernate.id.enhanced.SequenceStyleGenerator generates identifiers, the select script generated is as follows:
    select next_val id_val from hibernate_sequence for update
    
    However, in PostgreSQL, as is required between next_val and id_val. See http://sql-info.de/en/postgresql/postgres-gotchas.html#1_1 for further details.
  • JBPAPP-3038: Hibernate Core has been upgraded to version 3.2.4.SP1.CP09. Hibernate Annotations has been upgraded to version 3.3.1.GA.CP02. Hibernate Entity Manager has been upgraded to version 3.3.2.GA.CP01.
  • JBPAPP-2900: MySQL uses the TEMPORARY keyword to bypass implicit transaction commits. Previously, Hibernate used <CREATE TEMPORARY TABLE> with <DROP TABLE>. Omitting the TEMPORARY keyword caused an implicit commit, and immediate failure within an XA Transaction. <DROP TEMPORARY TABLE> is now supported and this issue no longer presents.
  • JBPAPP-2082: Associations marked as mappedBy must not define database mappings like @JoinTable or @JoinColumn. This fix adds an AnnotationsException, which is thrown when Hibernate receives this invalid mapping.
  • JBPAPP-2049: The HQL translator attempted to render IS NULL and IS NOT NULL checks against a component by using tuple syntax. Exploded syntax is now used instead, to make SQL more readable.
  • JBPAPP-1998: EntityNotFoundException is incorrectly thrown upon an optimistic locking failure when one EntityManager tries to delete an entity that has been updated by a different EntityManager and hibernate.jdbc.batch_versioned_data is set to false (the default value). OptimisticLockException, the correct exception for this situation, is now thrown instead.
  • JBPAPP-1547: By default, Sybase ASE 15 string comparisons are case-insensitive. The org.hibernate.dialect.SybaseASE15Dialect.areStringComparisonsCaseInsensitive() method now returns true.
    If the Sybase database is configured to perform case-sensitive operations, this setting will be incorrect. However, since Hibernate only uses this method for unit tests, this change has no effect on Hibernate's internal processing.
  • JBPAPP-906: A bug exists within the Hibernate Core whereby the unstable synchronized Java 6 ClassLoader.loadClass method is utilized creating a deserialized String. This causes a problem where if multiple threads are loading database rows containing arrays of strings, one thread is forced to undertake all the procedure while the other threads are left dormant. The fix for this issue was to change SerializationHelper$CustomObjectInputStreaml to use the form Class.forName(String,Boolean,ClassLoader), and to alter the way that deserialization occurs so that the best effort classloader is used wherever possible, particularly the classloader or the returnedClass for various org.hibernate.type.Type implementations.

JBoss Messaging

  • JBPAPP-3593: If the application server failed and restarted after the prepare phase of a transaction, the rollback process would roll back the database, but would not restore or cancel the in-memory state of the message queue. Messages could therefore become 'stuck' in the queue until the JMS server was restarted and the database rolled back correctly. The rollback process has been corrected so that this issue no longer occurs.
  • JBPAPP-3157: When unicode multibyte characters were used in a message Selector, JBoss Messaging threw a TokenMgrError, even though the Java Message Service specification allows this. org.jboss.jms.server.selector.SelectorParser.jj has been modified to correct this.

Remoting

  • JBPAPP-3707: When org.jboss.remoting.marshal.MarshallerLoaderHandler receives a request for a class, it returns an instance of org.jboss.remoting.loading.ClassBytes. However, if MarshallerLoaderHandler cannot locate the requested class, the returned ClassBytes object has a null value for the class byte array. Because org.jboss.remoting.loading.ClassByteClassLoader did not check for the possibility of a null byte array, a NullPointerException occurred. ClassByteClassLoader now checks for null values and this issue no longer occurs.

JBoss Seam

  • JBPAPP-4093: The password could not be changed in the Seam Booking example because the transaction was aborted due to invalid validation. This occurred because the default password had a shorter length than the minimum valid length specified by the validation rule. This minimum valid length has been lowered to correspond with the default password of the demo user.
  • JBPAPP-4056: Seam-gen generated an incorrect .classpath file for Eclipse because a jboss-cache.jar upgrade was not reflected in all files.
  • JBPAPP-4054: Seam 2.0.2 requires Apache Ant 1.6.5. However, the build.xml file includes the searchparents attribute, which is allowed only from Ant 1.7.0 and onward.
  • JBPAPP-3188: Seam 2.0.2 core classes could not be compiled with IBM JDK 1.5 because of a javac bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6548436. The workaround for this issue has been applied to Seam 2.0.2.
  • JBPAPP-3185: Some stdout output was printed in the PDFs produced in the Seam iText example. This has been corrected.
  • JBPAPP-3182: The fix for JBPAPP-2272 caused a problem with the Seambay example such that the list of categories did not load. This has now been corrected and the Seambay example works as expected.
  • JBPAPP-3181: The Seam 2.0.2 documentation was not previously included in the documentation bundle. The documentation for both Seam versions is now included in the bundle.
  • JBPAPP-3176: The org.jboss.seam.test.RemotingTest testMapWrapper method failed because it attempted to compare marshalled XML output against a hard-coded sting value. This has been corrected and the method now compares the content of XML elements.
  • JBPAPP-3138: Several BlogTest unit test methods (test.BlogTest.testEntry() and test.BlogTest.testLatest()) failed on all platforms. In addition, test.BlogTest.testSearch() failed on certain platforms. (For further information, see the console output in the JIRA.) The classes that were causing the problems have been modified to correctly handle Blog unit test cases.
  • JBPAPP-2967: A shared value binding returned a null value when under load, which caused a javax.el.PropertyNotFoundException. The value binding is no longer shared and the issue no longer presents.

JBoss Web

  • JBPAPP-3343: org.apache.catalina.loader.WebappClassLoader makes a record each time a non-existent resource is requested, and stores them in notFoundResources. No limit was placed on this cache method, so large amounts of memory could be expended storing non-existent resources. A limit of 1000 has been placed on this cache to prevent this problem.
  • JBPAPP-2039: The fix for JBPAPP-1992 means that Version 1 cookies are used in JBoss Web instead of Version 0. This older version is linked to a security issue, described in CVE-2007-5333. To return to the previous behavior despite this, add a conf/catalina.properties file and set the following property in it:
    org.apache.tomcat.util.http.ServerCookie.VERSION_SWITCH=false
    

Web Services

  • JBPAPP-3457: The wsprovide tool did not work correctly. Upgrading the JAX-WS implementation corrected this issue.

7.  Known Issues with this release

Following is a list of known issues at the time of release.
General Known Issues

  • JBPAPP-4172: Attempting to install the IBM JDK 1.5 on 64-bit Red Hat Enterprise Linux 5 results in broken links to Java binaries. This prevents the application server from starting. The workaround for this issue is to use the Sun JDK 1.6 instead.
  • JBPAPP-4140: Xalan iterators do not update the cache correctly when they reach the end node. This results in incorrect transform output. More information about this bug is available from XALANJ-2204.
  • JBPAPP-4085: When probe.sh terminates, it produces a list of terms that match a given string and a summary line that reflects the number of responses that matched the -match <string> parameter, for example:
    Total responses=1, 1 matches, 3 non-matches
    This summary line does not appear because a thread set up to close the multicast socket upon timeout causes the multicast socket to generate an exception and return before the summary line can be printed.
  • JBPAPP-3365: UnifiedClassLoader3.cacheLoadedResource() is called from two paths, one of which did not check for a null value. When a non-existent resource was loaded, a cache entry was created with a null value, which resulted in a memory leak. A null value check has been added and the memory leak no longer occurs.
  • JBPAPP-3117: If an incorrect mcast_addr value is set, users are pointed to an outdated URL for information about cross talking. If you experience problems with mcast_addr and cross talking, the updated URL for further information is https://www.jboss.org/community/docs/DOC-9469.
  • JBPAPP-3050: When JBoss Enterprise Application Platform is started with the -b <hostname> flag, filtering by jboss.web:name=ajp-<hostname>/<ip_address>-8009,type=ThreadPool,* returns no results. This makes it impossible to use SNMP to export data to other monitoring tools because the configuration in deploy/snmp-adapter.sar/attributes.xml cannot find the bean.
    It is worth noting that while the following definition does not work:
    <mbean name="jboss.web:name=ajp-<hostname>/<ip_address>-8009,type=ThreadPool" oid-prefix=".1.2.3.4.1">
    The following definition does work as expected:
    <mbean name="jboss.web:name=ajp-<ip_address>-8009,type=ThreadPool" oid-prefix=".1.2.3.4.1">
  • JBPAPP-2306: The HP-UX init script, jboss_init_hpux.sh, does not let users define a bind address with the -b option.
  • JBPAPP-1774: The JBoss Enterprise Application Platform RPM cannot be installed with only the OpenJDK distribution.
  • JBPAPP-1286: Footnotes within documentation tables and lists do not appear within PDFs. This issue resides within FOP and currently no workaround exists. Where possible footnotes are not used in the circumstances mentioned, however in documents such as the Release Notes the web address of a documented issue is automatically generated as a footnote and places a number beside that of the documented issue, referencing a footnote that does not appear.

Documentation Known Issues

  • JBPAPP-4149: The JBoss Messaging User Guide PDF included in the documentation zip for this release includes the following incorrect paragraph:
    Before running these examples, you must deploy the example-destinations located under /docs/examples/jboss-messaging-examples/destinations.
    These destinations are already deployed in JBoss Enterprise Application Platform, so this step does not need to be performed.
  • JBPAPP-3335: The Seam 2.0.2 documentation included in the documentation bundle includes references to Meldware. Meldware is not supported for use with JBoss Enterprise Application Platform, and all references to it should be ignored.

EJB Known Issues

  • JBPAPP-3908: When ValidateDTD is set to true in EJB deployer, standardjboss.xml validation fails because the properties for Message Driven Beans (such as those in JMSContainerInvoker) do not exist in jboss_4_2.dtd. To work around this issue, remove the reference to jboss_4_2.dtd in standardjboss.xml.

Hibernate Known Issues

  • JBPAPP-4175: When Hibernate executes a cacheable query using a ResultTransformer, it will attempt to cache the results after applying the ResultTransformer. However, the data may be modified so that Hibernate cannot read it. In this case, a ClassCastException will occur when attempting to cache the results.
  • JBPAPP-4123: PostgreSQL fails to drop SchemaExport if constraint names change.
  • JBPAPP-4095: When scrolling a HQL query with join fetch on a collection, FetchingScrollableResultsImpl.last() does not move to the last result if the cursor is positioned after the last result. Instead, the cursor stays in position after the last result. This can cause org.hibernate.exception.GenericJDBCException: could not perform sequential read of results.
  • JBPAPP-3946: LikeExpression does not handle the ignoreCase flag properly when ignoreCase is set to false. It builds the correct SQL property like ?, but does not use the flag inside getTypedValues. A lowercase value is always produced.
  • JBPAPP-3913: In Oracle 11g R2 (both RAC and standalone), a sequence may start at 2 instead of 1. The root cause is still under analysis.
  • JBPAPP-3911: In Oracle 11g R2 (both RAC and standalone), a complex query with LockMode.UPGRADE (that is, "for update") may cause a "No more data to read from socket" error. The workaround for this issue is to avoid using LockMode.UPGRADE on such queries. The root cause analysis is still under investigation.
  • JBPAPP-3565: org.hibernate.cfg.OneToOneSecondPass metadata causes an org.hibernate.PropertyValueException at runtime. If JOINs exist but do not contain the property otherSideProperty, otherSideJoin will not be null and will retain old invalid data.
  • JBPAPP-3223: Hibernate does not currently support tuple syntax in HQL or Criteria on databases which do not support tuple syntax. For example, if a database does not support tuple syntax:
    where (a,b) in ( (1,2), (3,4) )
    Hibernate should translate to:
    where ( (a=1 AND b=2) OR ( (a=3 AND b=4) )
    There is currently no workaround for this issue except to avoid using this syntax query on databases that do not support tuple syntax.
  • JBPAPP-3105: The number of elements that can be included in a single IN expression is limited to a certain number (for Oracle, 1000). If an Array or Collection is passed into the IN method, Oracle throws an error stating that the IN clause must contain at most 1000 items. This affects both HQL and Criteria API. To work around this issue, users should split large arrays and collections into sub-arrays or sub-collections. If 'in', use the form in(1,2,...,1000) or in(1001+); if 'not in', use the form not(1,2,...,1000) or in(1001+), as described in the JIRA.
  • JBPAPP-3075: If a database reserved keyword is used as a property name with a Hibernate Validator annotation (for example, @Min or @Max), it will cause exceptions in SchemaExport, even if you specify a column name. This is because Hibernate ignores the name specified. The workaround is to map the property name to something that is not a database reserved keyword with the @Column annotation. The fix for this issue is expected in Hibernate 4.
  • JBPAPP-3069: The QueryByExampleTest.testJunctionNotExpressionQBE test fails in Sybase because ansinull is set to off by default. This test builds a disjunction predicate such as ( OR^ (ex) (NOT ex) ). This should match everything in the database, but because ANSI SQL evaluates all comparisons involving NULL values as UNKNOWN, not all matches are returned.
    To work around this issue, append this string to the JDBC URL:
    ?SQLINITSTRING=set ansinull on
    
    If this is not possible, an alternative is to execute the following Java code (or similar) after getting a Hibernate Session, s.
    s.connection().createStatement().execute("set ansinull on");
    
  • JBPAPP-3056: The Hibernate test org.hibernate.test.hql.ASTParserLoadingTest.java fails on DB2 with an SQL Error because of invalid use of a parameter marker. This occurs because DB2 does not support untyped parameters. To work around this issue, modify your queries so that the parameters are cast to an appropriate data type.
  • JBPAPP-2945: The Hibernate test org.hibernate.test.annotations.query.QueryAndSQLTest.java fails on PostgreSQL 8.3.7 with the following log messages:
    Caused by: org.postgresql.util.PSQLException: Method org.postgresql.jdbc3.Jdbc3PreparedStatement.setQueryTimeout(int) is not yet implemented.
    
    This occurs because PostgreSQL JDBC driver does not support the Statement.setQueryTimeout method.
  • JBPAPP-2839: Failing to re-inject the interceptors for instrumented entities causes NullPointerExceptions when entities are retrieved from a deserialized PersistenceContext.
  • JBPAPP-2440: When a cache provider cannot be found, a NoClassDefFoundError is thrown with the message:
    net/sf/ehcache/CacheException
    When a connection provider cannot be found, a HibernateException is thrown with the following message:
    Could not instantiate connection provider: " + providerClass
    If you experience these errors, we suggest checking the cache or connection provider configuration to ensure that the provider is included in the classpath.
  • JBPAPP-2316: Hibernate does not currently provide property types that enable applications to process data in a long string or binary column as a Java String. This feature is expected in JBoss Enterprise Application Platform 5.1.0.GA.
  • JBPAPP-2315: Hibernate does not currently provide property types that enable applications to process data in a java.sql.Types.LONGVARCHAR or java.sql.Types.CLOB column as a Java String. Processing of a java.sql.Types.LONGVARBINARY or java.sql.Types.BLOB as a Java byte[] is also unavailable. These features are expected in JBoss Enterprise Application Platform 5.1.0.GA.
  • JBPAPP-1895: The Hibernate tests JoinTest.java and QueryAndSQLTest.java fail when testing queries with untyped parameters for DB2, which does not support untyped parameters. You can work around this issue by modifying the queries so that the parameters are cast to an appropriate data type, as described on the JIRA.
  • JBPAPP-1722: Sybase fails to insert a new entity if the entity overflows the column. However, it does not throw an exception, so Hibernate cannot tell that the insert has failed. To work around this issue, your application must validate entity properties to ensure that the value will not overflow the underlying column.
  • JBPAPP-1709: The version of ejb3-persistence.jar shipped with the current version of JBoss Enterprise Application Platform 4.x is incorrect. Hibernate Entity Manager currently ships ejb3-persistence.jar 1.0.0.GA, but it should use ejb3-persistence.jar 1.0.1.GA.
    There are two changes between the 1.0.0.GA and 1.0.1.GA versions of the JAR:
    • The JPA specification defines the constant with a value that has a typo in the classname:
      javax.persistence.Persistence.PERSISTENCE_PROVIDER = "javax.persistence.spi.PeristenceProvider"
      Because the JAR inluded in the JBoss Enterprise Application Platform does not include this typo, it is not compliant with the JPA specification. See http://opensource.atlassian.com/projects/hibernate/browse/EJB-321 for details.
    • The Javadoc for javax.persistence.Query.getSingleResult() states that EntityNotFoundException will be thrown if there is no result. It should say NoResultException.
  • JBPAPP-1613: Null values for columns mapped as Boolean in Sybase are persisted as 0 instead of null. The current workaround for this issue is to map these values as type="org.hibernate.test.where.NumericTrueFalseType" instead of type="boolean".
  • JBPAPP-1555: Sybase uses image and text instead of Blob and Clob, so there is no support for Blob and Clob on Sybase. This feature is expected in JBoss Enterprise Application Platform 5.1.0.GA. Currently, user-defined types can be created to process Sybase text and image properties.
  • JBPAPP-1554: Sybase only allows only one entry (for example, column name or '*') in a subquery select list. The HQL function, elements(), fails when the collection elements have a composite ID, because the generated SQL contains a subquery select list with multiple entries. The workaround is to avoid using HQL elements() if the elements have a composite key. Instead, reformulate the HQL so that no subquery has multiple entries in its select list.
  • JBPAPP-1551: Embedded classes are not considered when batch insert statements are ordered. There are two possible workarounds for this issue:
    • Leave ORDER_INSERTS at the default value (FALSE) when embedded classes are used.
    • Explicitly call session.save() on child objects to enforce their SQL insertion orders.
  • JBPAPP-1546: When using Sybase, SchemaExport cannot be used to create stored procedures while in chained transaction mode. The suggested workaround for this case is to add the following code follwing the defining of the new stored procedure:
    <database-object>
    <create>
    sp_procxmode paramHandling, 'chained'
    </create>
    <drop/>
    </database-object>
    
  • JBPAPP-1545: On Sybase, when a query has an ANSI join with three or more joins, and one join involves a union subclass, the query may fail with SybSQLException because a column is not within the scope of the joined table expression. The current recommendation is to avoid using join fetches that involve union subclasses.
  • JBPAPP-1328: When attempting to perform a delete or update statement with a subselect, the generated SQL will refer to an unknown table alias and cause the query to fail.
    Currently the workaround is to reverse the conditions in the where clause.
    Incorrect:
    update Person set name = ?1 where id in (select c.id from Customer c) and name <> ?2
    Correct:
    update Person set name = ?1 where name <> ?2 and id in (select c.id from Customer c)
  • JBPAPP-1230: When a DetachedCriteria is used as a subquery, the generated SQL contains a column alias in the subquery. On Sybase, a SybSQLException is thrown because Sybase does not allow column aliases in subqueries. The workaround for this issue is to use an HQL query instead of a DetachedCriteria in a subquery.
  • JBPAPP-1229: On Sybase, the text current_timestamp is not being recognised as a method mode by the translator. Only SQL function calls with parentheses are recognized as method modes. There is no workaround for this issue except to avoid relying upon function replacement for current_timestamp.
  • JBPAPP-1123: When @OrderBy is used on joined classes (using a join table), the generated SQL is invalid on MySQL, PostgreSQL, Oracle, and MSSQL because the "order by" clause qualifies the columns using the actual table name. The "order by" clause should use the table alias instead.
  • JBPAPP-1082: When a char property is used and it is not initialized, then Hibernate initializes it to 0 and persists a string containing the character \u0000. PostgreSQL throws an exception because it does not allow character \u0000 embedded in a string. An email thread describing this problem is available from:
    • http://markmail.org/message/jvzlzxw6ui2rcsmv#query:\u0000%20postgresql+page:1+mid:gpu34f4iwanbyjqh+state:results
    There is currently no workaround for persisting \u0000 in a char column using PostgreSQL.
    If the user intends to persist a NULL for an uninitialized char property instead of \u0000, then java.lang.Character should be used instead of the primitive char type. This avoids the exception when the property is initialized. Attempting to persist a java.lang.Character property that is set to \u0000 still results in an exception.
  • JBPAPP-1075: SchemaExport fails on Oracle and Sybase when a redundant @Column( unique = true ) or @UniqueConstraint( columnNames = { ... } ) annotation is used for a column that is implicitly defined as unique by the declared model. The workaround is to remove the redundant @Column annotation.
  • JBPAPP-1071: In some cases, when there are foreign key constraints defined on columns in a primary key, SchemaExport incorrectly declares them as nullable when it generates CREATE TABLE statements. This fails on MSSQL, DB2, and Sybase because those databases require primary key columns to be non-nullable.
    The workaround for this issue is to explicitly indicate which columns should be non-nullable, such as:
    • Add nullable=false to @JoinColumn
    • Add optional=false to @ManyToOne
    • Add an @AttributeOverride with @Column(name="mapkey", nullable=false) in case of a @CollectionOfElements using a Map
    • Add nullable=false in @Column when inside a @CollectionId or inside @MapKey
  • JBPAPP-1063: Currently MySQL does not support millisecond and microsecond measurements when returning database values such as TIME and TIMESTAMP.
  • JBPAPP-1613: Null values for columns mapped as boolean in Hibernate, are persisted as zero instead of null. When the PreparedStatement.setNull( index, java.sql.Types.BIT ) method is executed in the Sybase environment, Sybase JDBC converts the null value to a zero because Sybase does not allow null bit columns.
  • JBPAPP-1555: Currently in Hibernate the SybaseDialect uses Blob and Clob where it should be set up to use image and text. Tests attaining to this currently fail with the message:
    							The method com.sybase.jdbc2.jdbc.SybResultSet.getBlob(String) is not supported and should not be called.
    
  • JBPAPP-1554: The FumTest.testCompositeKeyPathExpressions() method within Hibernate fails since Sybase currently only allows one column in a subquery select list, with the only exception to this being that a subquery in an EXISTS() predicate can have * as the select list.
    The current workaround for this is to not use the HQL elements() method if the elements have a composite key. Instead the HQL should be reformatted to ensure there is no subquery with more than one item in the select list.
  • JBPAPP-1082: A limitation in the PostgreSQL JDBC driver causes a javax.persistence.RollbackException. This occurs when the char property is used without a value set as Hibernate then persists a string containing the character \u0000, which causes PostgreSQL to generate an exception as it does not allow this character to be embedded in a string.
    Currently a workaround for persisting the \u0000 character in a char column using PostgreSQL does not exist. Instead it is reconmended that to persist a null value for the char property when it is uninitialized, the java.lang.Character method should be used.
  • JBPAPP-1068: When using Microsoft SQL and @Type(type="text") in creating a table, the field is correctly created as text however when a delete operation is issued the field becomes set as a varchar, forcing the Microsoft SQL driver to return the error:
    							The data types text and varchar are incompatible in the equal to operator.
    
  • JBPAPP-1063: Currently MySQL does not support millisecond and microsecond measurements when returning database values such as TIME and TIMESTAMP.
  • JBPAPP-946: Within the Hibernate Entity Manager three different NullPointerExceptions are being investigated in relation to the EJB3 configuration, transaction operations when they are extended and packaging.
  • JBPAPP-909: Within the Hibernate component of the Enterprise Application Platform the HashMap and HashSet iteration order changed from past releases because of support for JDK 1.6. However this has meant that the order of columns in union clauses and union-subclasses has changed, generating a slight impact on the components performance.

JBoss Messaging Known Issues

  • JBPAPP-4079: Two JBoss Messaging Test Suite tests fail on Oracle 11g R1, R2 and RAC with the latest JDBC driver, version 11.2.0.1.0:
    • QueueManagementTest.testDestroyDestinationProgrammatically
    • QueueManagementTest.testDestroyDestinationProgrammaticallyWithParams
    These tests use a large value for the fullSize queue configuration parameter, which is passed to the setFetchSize method on the java.sql.PreparedStatement. A problem with the JDBC driver means that more than the usual amount of memory is consumed when executeQuery() is called, which results in a java.lang.OutOfMemoryError, causing the test to fail.
  • JBPAPP-3352: If a message-driven bean is deployed with the default settings (useDLQ=true, DLQMaxResent=5) and message redelivery is prompted, messages remain in the queue in a "delivering" state even after the message is delivered to the dead letter queue. The workaround for this issue is to disable the use of the dead letter queue by setting useDLQ=false.
  • JBPAPP-3207: The Bridge example distributed with the documentation bundle does not work with the all or production profile.
  • JBPAPP-3206: The JBoss Messaging examples included in the documentation bundle contain incorrect configuration information and do not work with JBoss Enterprise Application Platform. A corrected example archive is available for use with JBoss Enterprise Application Platform 4.3.0 CP08 from http://www.redhat.com/docs/en-US/JBoss_Enterprise_Application_Platform/. Replace the /docs/examples/jboss-messaging-examples directory in your distribution with the extracted contents of this archive.
    Further information is available from the JIRA if you wish to correct these examples manually. Note that the web service example does not work regardless.

IPv6 Known Issues

  • JBPAPP-3146: JBoss Web Services does not handle IPv6 addresses correctly and has a number of compatibility issues.
  • JBPAPP-3096: JBoss Transactions does not support the use of IPv6 addresses.
  • JBPAPP-2005: IPv6 link-local addresses are not handled correctly when used as bind or multicast addresses. The workaround for this issue is to use IPv6 global addresses instead.

Seam Known Issues

  • JBPAPP-4153: Applications that use ajax4jsf do not work with IBM JDK 1.6. The workaround for this issue is to use a different cache, such as OSCache, by setting the following environment variable:
    org.ajax4jsf.cache.CacheFactory=org.ajax4jsf.cache.OSCacheCacheFactory
  • JBPAPP-4100: A problem with the IBM JDK means that the Spring key is not bound to the Seam entity manager. This means that the Seam Spring example deploys, but the home page is never displayed.
  • JBPAPP-4065: Several Seam 2.0.2 unit and integration tests fail on IBM JVM in Red Hat Enterprise Linux. The affected examples are the DVD store, booking, nested booking, register and seamdiscs examples.
  • JBPAPP-4064: An incorrect RichFaces build is bundled with Seam 2.0.2 in JBoss Enterprise Application Platform 4.3.0 CP08.
  • JBPAPP-4060: The Quartz Example.testTransactionSuccessEvents fails with a java.lang.AssertionError on Red Hat Enterprise Linux 4 when used with IBM JDK 1.6.
  • JBPAPP-3187: The junitreport Ant tag in the Seam build.xml did not work on IBM Java 1.5 or 1.6 because the JAXP processor was set incorrectly. In order to use IBM JVM with junitreport, create a jaxp.properties file in the IBM jre/lib directory, and set the javax.xml.transform.TransformerFactory key to the value of the org.apache.xalan.processor.TransformerFactoryImpl.

JBoss Web Known Issue

  • JBPAPP-4058: CacheEntry resources are not cleaned when ApplicationContexts are shut down, causing a memory leak.

A. Revision History

Revision History
Revision 4.3.8-17.4002013-10-31Rüdiger Landmann
Rebuild with publican 4.0.0
Revision 4.3.8-172012-07-18Anthony Towns
Rebuild for Publican 3.0
Revision 1.1-0Thu Oct 07 2010Laura Bailey
Updated document for docs.redhat.com .
Revision 1.0-0Mon Apr 26 2010Laura Bailey
Final draft.

Legal Notice

Copyright © 2010 Red Hat, Inc.
This document is licensed by Red Hat under the Creative Commons Attribution-ShareAlike 3.0 Unported License. If you distribute this document, or a modified version of it, you must provide attribution to Red Hat, Inc. and provide a link to the original. If the document is modified, all Red Hat trademarks must be removed.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.