Skip navigation.

Release Notes

  Previous Next vertical dots separating previous/next from contents/index/pdf Contents View as PDF   Get Adobe Reader

Resolved Problems for Service Pack 2

Service Packs are cumulative; Service Pack 2 contains all the fixes made in earlier Service Packs released for WebLogic Server 8.1.

The following sections describe problems that were resolved for the release of WebLogic Server 8.1 Service Pack 2.

Administration Console

Change
Request
Number

Description

Release
Fixed

CR076953

If you created a security role using the context-sensitive (right-click) menu item "Define Policies and Roles for individual beans..." and added the security role to the security policy (defined using the same context sensitive menu/form sequence), the desired WebLogic resource could not be used by an external JCom client.

The context-sensitive menu items create a scoped role, and clients outside the scoped role could not use the WebLogic resource.

Adding a "Define JCom Roles" menu item to the JCom node solved this problem by allowing revision of the scope to include the current client.

7.0 SP3

8.1 SP2

CR078764

Security settings in the Administration Console for Web services did not function properly.

A code change removed the ability to set policy and roles for Web services in the Administration Console.

7.0 SP3

8.1 SP2

CR081673

Realms created by the Administration Console lacked the UserLockoutManager on their RealmMBeans.

The Administration Console now creates a ULMbean when it creates a new realm.

7.0 SP3

8.1 SP2

CR082335

The cursors created by the Administration Console for listing users and groups caused potential memory leaks when they did not close.

Following a code fix, the cursors close.

7.0 SP3

8.1 SP2

CR091853

For a three-node cluster on separate Solaris 2.8 machines, the Administration Server threw an InstanceNotFound exception when accessing the default Execute Queue.

The problem has been resolved.

7.0 SP4

8.1 SP2

CR099721

After edits to Cookie Max Age Secs using the Administration Console, the value sometimes reverted to the value before the edit.

A code change removing a lower limit to the value fixed the problem.

7.0 SP3

8.1 SP2

CR100006

WebLogic Server sometimes displayed the following NullPointerException when a domain contained two Administration Servers and you tried to access the servers via the WebLogic Server Administration Console:

java.lang.NullPointerException at
weblogic.management.console.helpers.UrlHelper.buildIconList(UrlHelper.java:149) at
weblogic.management.console.helpers.UrlHelper.getIcon(UrlHelper.java:174) at
weblogic.management.console.tags.SmartNavNodeTag.getIcon(SmartNavNodeTag.jacva:111) at
weblogic.management.console.tags.SmartNavNodeTag.inferStuffFromContext(SmartNavNodeTag.java:96) at
weblogic.management.console.tags.SmartNavNodeTag.doStartTag(SmartNavNodeTag.java:44) at
weblogic.management.console.webapp._domain.__nav._jspService(__nav.java:301) at
weblogic.servlet.jsp.JspBase.service(JspBase.java:27) at
weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:262) at
weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:198) at
weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:250)
[...]

This problem was solved with a code fix.

6.1 SP6

8.1 SP2

CR103104

The UserReader MBean did not display users in the Administration Console. An Authentication provider can read users in the Administration Console while implementing the UserEditor but with UserReader, the message when trying to display users is "There are no Authentication providers available that support the creation of Users." The same thing was happening for Groups with the GroupEditor and GroupReader interfaces.

The Administration Console was still calling the userEditor.CreateUser method, and never getting to the UserReader.listUsers method.

The MBean has been fixed to look for appropriate provider type.

7.0 SP3

8.1 SP2

CR105598

New testing with an Active Directory LDAP uncovered a problem where a call to group.isMember() would fail if a member name contained a comma character (,).

This problem was solved with a code fix.

6.1 SP6

8.1 SP2

CR106027

Please review the security advisory information at http://dev2dev.bea.com/resourcelibrary/advisoriesnotifications/BEA03-28.01.jsp.

7.0 SP3

8.1 SP2

CR111321

If there is only one server in a WebLogic Server domain, the WebLogic Server Administration Console does not display virtual hosts as potential targets during the deployment of a Web application. This was done to save users the extra step of having to select a target when there is only one target. However, this prevented users from deploying a Web application to a virtual host directly. Users could only deploy the Web application to the server and then re-target it to a virtual host. This worked fine for the first Web application, but for the second Web application, an exception was thrown indicating that the context was already in use.

For Web applications, the Administration Console now checks for any virtual hosts configured in the domain and displays them as potential targets. As a result of this fix, customers should now be able to target Web applications to a virtual host directly from the Administration Console. If there are no virtual hosts, the Administration Console assumes that the lone server is the target for the Web application, just as it did prior to this fix.

8.1 SP2

CR112726

In the FileChooserControlTag, WebLogic Server defaulted to UTF-8 encoding for path settings.

This fix causes WebLogic Server to extract the correct charset from the catalog and use that instead of defaulting to UTF-8. As a result of this change, paths are now displayed correctly (without any garbled characters).

8.1 SP2

CR120537

Users of the WebLogic Server Administration Console could not delete foreign JMS destinations.

A trash can icon (delete) has been added to the foreign JMS destinations table. Users can now delete foreign JMS destinations.

8.1 SP2

CR120603

Editing the load order in the WebLogic Server Administration Console caused spaces to be embedded in the path attribute of the config.xml file's <Application> tag.

This problem occurred because the method pathToFormValue, which is used to breakdown long path strings to more manageable pieces, was rejoining the strings with extra spaces.

The code was changed to remove these extra spaces. As a result of this fix, the extra spaces in the path attribute will no longer be inserted when the config.xml is updated.

8.1 SP2

CR124344

Please review the security advisory information at http://dev2dev.bea.com/resourcelibrary/advisoriesnotifications/BEA03_41.00.jsp.

8.1 SP2

Classloader

Change
Request
Number

Description

Release
Fixed

CR124348

Client programs could not use java.lang.reflect.Proxy to access proxy objects deployed in WebLogic Server, unless the proxy classes were added to the system classpath. If an object did not reside in the system classpath, the client would receive a ClassNotFoundException.

The resolveProxyClass() method was implemented to load interfaces from the application-specific classloader as well as the system classloader.

6.1 SP6

8.1 SP2

Cluster

Change
Request
Number

Description

Release
Fixed

CR094837

The following sequence was causing a ClassCastException: define a server, assign that server to a cluster, create a Unix machine with the same name as the server, assign them to each other, stop and restart the Administration Server, and select the server name from the cluster or from the Servers list. Trying to bring up the Managed Server also caused a ClassCastException.

Fixing a problem in a process that resolves an UnresolvedMBean during startup solved this problem.

7.0 SP3

8.1 SP2

CR105698

If two clusters have between them two distributed queues with the same JNDI name, and a message-driven bean is deployed on both the clusters, messages were being consumed in only one of the clusters.

A message-driven bean now goes through the entire collection of distributed queues in a domain and adds their members appropriately.

7.0 SP3

8.1 SP2

CR108127

An error occurred when trying to update a secondary session. Given three clustered server instances: Server A, Server B, and Server C.

    1. Initiate a session on Server A, PRIMARY A, SECONDARY C

    2. Load balancing hardware migrates the session to Server C, PRIMARY C, SECONDARY B

    3. Load balancing hardware migrates the session to Server A again

This error occurred on Server A:

<Jun 4, 2003 4:24:56 PM PDT> <Debug> <Cluster> <Error updating secondary for 3535724191309537720 on 7312270160516507840S:<IPaddressdeleted>: [7005,7005,7002,7002,7005,7002,-1]:<IPaddressdeleted>:7005, <IPaddressdeleted>:7005,<IPaddressdeleted>:7005:mydomain:myserver3. Re-creating secondary.>

This error occurred on Server C:

<Jun 4, 2003 4:24:56 PM PDT> <Info> <Cluster> <Lost 0 replication updates of object 3535724191309537720. Re-fetching secondary.>

The problem was solved by a code change.

6.1 SP6

8.1 SP2

CR108893

The ClusterRuntime.getName() method returned the name of a server in the cluster, rather than the name of the cluster.

This method has been fixed to properly return the name of the cluster.

8.1 SP2

CR127643

When a dynamic proxy that implemented interfaces declared inside a Web application was put into the HttpSession and the session was replicable, WebLogic Server was not able to load the interface classes on the secondary server.

To correctly resolve the dynamic proxy, the secondary server needs the name of the application where the interface resides. An annotateProxyClass was implemented in MsgAbbrevOutputStream to write the applicationName in the stream. On the receiving side, resolveProxyClass uses this application name to load the interface classes from the application.

As a result of this change, dynamic proxies (implementing interfaces stored in the application archive) can be put into the HttpSession and be correctly replicated. There should be no side effects.

8.1 SP2

Connector

Change
Request
Number

Description

Release
Fixed

CR091818

There was no configuration parameter to disable Connection Proxy creation.

This problem was resolved by adding a property called use-connection-proxies in the weblogic-ra.xml deployment descriptor.

If the property is set to "true," then proxies will be used without performing the test for connection proxy viability. That is, the case where a resource adapter attempts to cast the wrapped connection (proxy) that WebLogic Server generates, and the cast fails. If the property is set to "false," then proxies will not be used. If no value is specified for the property, previous functionality will be used. (That is, the test for connection proxy viability will be performed and proxies will be used if and only if the test passes.)

The only caveat to a late transaction enlistment is that client code cannot first acquire a connection handle, then start a transaction and have that connection automatically enlisted. If the client starts a transaction first and then acquires a connection handle, everything works fine. The absence of late-transaction enlistment implies nothing about the use of bean-demarcated vs. container-managed transactions. Both will work.

8.1 SP2

CR105247

When trying to deploy a RAR component with a set of its utility classes packaged as JAR files, WebLogic Server was unable to load the properties file, which is included in the JAR file.

There was a "/" missing from the URL and this resulted in not being able to find the properties file. The code was modified to add the "/" when needed.

8.1 SP2

CR106388

During deployment of a RAR that uses the ra-link-ref element, called a 'logical' RAR, the logical RAR deployment was not getting the correct pool name or max-capacity as specified in its weblogic-ra.xml deployment descriptor. This caused unexpected behavior in WebLogic Integration.

The element now functions properly.

7.0 SP3

8.1 SP2

CR106663

New validation checks created incompatibility with previous versions.

Validation checks were changed to be backwards compatible. Entries that should be nullable are now allowed. The following parameters continue to prohibit null values:

  • connection-factory-name

  • jndi-name

  • shrinking-enabled (true|false only)

  • connection-profiling-enabled (true|false only)

  • match-connections-supported

  • logging-enabled (true|false only)

  • map-config-property-name

  • initiating-principal resource-principal

Also, log-filename does not allow null if logging-enabled is true.

Because of incompatible validation checks, some adapters that would deploy without error in 7.0 may not deploy in 8.1 or 8.1 SP1, because of null or empty values in the weblogic-ra.xml descriptor. The validation checks have been modified as of 8.1 SP2 so that it should now be backwards compatible with all previous versions.

8.1 SP2

CR106960

When a RAR was part of an EAR, redeployment of the EAR failed because the Connector Module code did not handle redeployment properly.

Fixing the redeploy logic in the Connector module resolved the problem.

7.0 SP4

8.1 SP2

CR111229

In WebLogic Server 8.1 SP1, with multiple clients using connections for an adapter, XAER_PROTO errors could occur while initializing a connection to be used in a transaction. The problem was caused by the fact that a connection and the state of its transaction was not always being completely resolved before releasing the connection back to the pool of available connections. This could allow another client to start using the connection before its state was completely reset by the previously calling thread.

In WebLogic Server 8.1SP2, the server ensures that the connection and transaction state are completely resolved before releasing the connection back to the pool of available connections. Thus, connection requests will no longer create XAER_PROTO exceptions while initializing the connection to be used in a transaction.

8.1 SP2

CR112162

If a resource adapter's implementation of ManagedConnectionFactory.matchConnections(connectionSet) sent the CONNECTION_ERROR_OCCURRED event for a ManagedConnection that was in the connectionSet, then the ManagedConnection instance would be destroyed by the Connector container calling ManagedConnection.destroy(), but it would not be properly removed from the pool of available managed connections.

This problem occurred because during the processing of the error event, the code was only looking in the set of reserved connections to perform the removal from the pool. In other words, when an error occurred, the Connector container assumed that the connection was currently in use.

During the processing of the CONNECTION_ERROR_OCCURRED event, the code will now check the set of available connections if the destroyed connection is not found in the set of reserved connections. With the fix, the ManagedConnection will be destroyed and removed from the pool appropriately when a CONNECTION_ERROR_OCCURRED event is invoked.

8.1 SP2

Core

Change
Request
Number

Description

Release
Fixed

CR092375

Manually doing a lookup and then persisting and caching the handle did not work when the methods were conversational.

Changes to serialization and deserialization of the EJBHandle object resolved the problem.

7.0 SP2

8.1 SP2

CR096091

When starting WebLogic Server as an Windows service using a classpath from a file, the error

"Thread created successfully! Exception in thread "main" java.lang.NoClassDefFoundError: weblogic/Server"

was thrown if classpath file is over about 2k length.

The problem was solved by correcting an error related to reading the classpath from a file.

6.1 SP6

8.1 SP2

CR102848

The CoreHealthMonitor was holding the ExecuteThreadManager lock while performing significant work, resulting in deadlocks and Administration Console freezes. The code was changed so that CoreHealthMontor now uses ExecuteThreadRuntimeMBean to get a list of stuck threads and avoids logging from all places in the ExecuteThreadManager if ETM lock is held.

7.0 SP3

8.1 SP2

CR105516

Stateful session EJB failover did not work when multiple failovers were required.

In a three node cluster a JSP creates or calls a replica-aware stateful session EJB. The remote EJB stub is stored in the http session. After each call to the stateful session EJB the updated EJB stub is also updated in the HTTPsession to reflect any changes for the EJB replica list (primary/secondary).

The following call sequence with the same browser window leads to a java.rmi.ConnectException when only one node of the cluster survives:

    1. All three cluster nodes are running.

    2. Making a call to node1, create EJB and store remote in HTTP session (HTTP session replication is enabled)

    3. Kill node1

    4. Make a call to the secondary node2, the EJB remote is retrieved from the replicated HTTP session and the call to the EJB works fine. After this EJB call again the remote is stored in the HTTP session.

    5. Kill node2

    6. Make a call to node3, get the EJB remote from HTTP session.

WebLogic Server tries to lookup the EJB on node2 and does not try to use node3 (this should now be the new secondary). The following exception is thrown on node3:

java.rmi.ConnectException: Could not establish a connection with -3088833905169218734S:172.23.64.38:[7001,7001,7002,7002 ,7001,7002,-1]:mydomain:managed2, java.rmi.ConnectException: Destination unreachable; nested exception is: java.net.ConnectException: Connection refused: connect; No available router to destination
at
weblogic.rjvm.RJVMImpl.getOutputStream(RJVMImpl.java:275)
at
weblogic.rjvm.RJVMImpl.getRequestStream(RJVMImpl.java:408) at
weblogic.rmi.internal.BasicRemoteRef.getOutboundRequest(BasicRemoteRef.java:97)
at
weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:255)

The problem was solved with a code fix.

6.1 SP6

8.1 SP2

CR105980

A memory leak occurred when creating a QueueReceiver for each message on a Distributed Queue and persisted even after the QueueReceiver had been shut down.

A code change corrected memory leaks in BasicServiceOffer and DistributedDestinationImpl objects.

7.0 SP3

8.1 SP2

CR110028

The functionality to detect stuck threads in user-configured thread queues was not complete in WebLogic Server 7.0 and its service packs.

Thread queues have been reworked and provisions made to identify an application thread from an internal server thread queue. Logic was added to loop through all application thread queues, checking for stuck threads. All application thread queues will now be monitored by the Core Health Monitoring Thread and proper warnings logged.

8.1 SP2

CR110367

User code such as servlet destroy() or ejbRemove() gets executed during shutdown. This fix ensures that lower order services like JMS and JDBC are available when this user code executes.

8.1 SP2

CR110887

When nodes in a cluster tried to get session information, they were attempting a lookup from a remote server, hence making a remote call that blocked a thread on the local server. When all nodes were doing the lookup under load, the execute thread queues became blocked and no server was in a position to send a response to the remote call (as all local threads were blocked).

WebLogic Server now creates the stubs locally to avoid a remote call, until the point where it is necessary. When WebLogic Server makes the remote call, it lands on a separate replication queue on the remote server and the process does not block there.

The replication behavior is still unchanged. As a result of this change, WebLogic Server only ensures less contention, avoids a deadlock situation, and reduces the number of remote calls.

8.1 SP2

CR110892

Please review the security advisory information at http://dev2dev.bea.com/resourcelibrary/advisoriesnotifications/BEA03-35.jsp.

6.1 SP6

8.1 SP2

CR120841

WebLogic Server did not collect timer threads during orderly shutdown. This did not result in any observable problems.

Shutting down the ORB now shuts down heartbeat threads. This change should not result in any changed behavior.

8.1 SP2

CR123846

ClassCastExceptions were being thrown when a transaction was started in a user thread.

This problem occurred because the parallel XA implementation was using a Kernel method, which was assuming that all requests would be executed on a ExecuteThread, and this method was casting the current thread as an ExecuteThread. When the work ran in a user thread on the server side, the exception would be thrown.

This problem was resolved by allowing the execution to happen on any thread.

8.1 SP2

Deployment

Change
Request
Number

Description

Release
Fixed

CR101760

Deleting a Web application from a Managed Server that had been stopped resulted in errors similar to the following:

<Warning> <Management> <149311> <Rejecting deployment operations to non-running server, mgd1>

<Warning> <Deployer> <149004> <Failures detected initiating weblogic.management.ManagementException: Rejecting deployment operations to non-running server, mgd1 task for application Remove application MyWebApp on mgd1>

The Web application was not deleted.

A code change fixed the problem by eliminating dangling WebAppComponentMBean references from the WebServer and VirtualHost MBeans.

7.0 SP3

8.1 SP2

CR102928

Web applications in an EAR deployed to a VirtualHost did not redeploy on domain restart.

A code change causes applications that target a Virtual Host to restart when the domain restarts.

7.0 SP3

8.1 SP2

CR109668

Running the following command caused all the modules in the application to transition from an active state to an inactive state, even though it was expected that only the specified module in the application would be undeployed.

java weblogic.Deployer
 -url <admin_url>
 -username <user_name>
 -password <passwd>
 -name <app_name>
 -undeploy
 -targets <module_name>@<cluster_name>

This problem occurred because in the SlaveDeployer, WebLogic Server did not factor in the possibility that a component could have been targeted to a cluster, and was performing checks based only on the server target type.

The code has been modified to add a check for the possibility of a component target being of type cluster. Partial undeployment should now work as expected.

8.1 SP2

CR111065

In certain instances, the DRS system is creating the delta list of deployment tasks for the SlaveDeployer initialization.

A code fix ensures that DRS always uses the MasterDeployer for creating the deployment task deltas.

8.1 SP2

CR113178

In the SlaveDeployer code, the applications are sorted and added to a HashSet (ApplicationsSet). The Iterator taken out of this HashSet does not retain the order of the elements that are added to it. A TreeSet was used to store these elements in a sorted order, but it could not store duplicate applications with the same deployment order. (One will overrode the other.)

Applications are now added to a List instead of a Set. As a result of this change, the Iterator preserves the order, and applications will be deployed per the loadOrder attribute of the config.xml file.

8.1 SP2

CR120714

The WLDeploy task was printing the password to stdout. For example, if build.xml contained:

<project name="cr120714" basedir=".">
<taskdef name="wldeploy" classname="weblogic.ant.taskdefs.management.WLDeploy"/> <target name="deploy-app" > <wldeploy action="redeploy" nostage="true" name="CR120714App" user = "system" password = "gumby1234" adminurl = "t3://172.17.24.109:7001" verbose = "false" debug = "false" />
</target>
</project>

the output of ant deploy-app was:

Buildfile: build.xml

deploy-app:
[wldeploy] weblogic.Deployer -nostage -noexit -name CR120714App -adminurl t3://172.17.24.109:7001 -user system -password gumby1234 -redeploy
[wldeploy] Initiated Task: [1] [Deployer:149026]Redeploy application CR120714App on myserver.
[wldeploy] Task 1 completed: [Deployer:149026]Redeploy application CR120714App on myserver.
[wldeploy] Deployment completed on Server myserver
[wldeploy]

The original password is now replaced with "********" before printing the command to stdout.

8.1 SP2

EJB

Change
Request
Number

Description

Release
Fixed

CR087151

For a stateless session bean, when the weblogic-ejb-jar.xml contained:

<stateless-bean-is-clusterable>False</stateless-bean-is-clusterable>

and the bean was deployed on a cluster, this error was generated:

<Mar 14, 2003 3:35:00 PM PST> <Error> <Cluster> <Conflict start: You tried to bind an object under the name ejb20-statelessSession-TraderHome_EO in the JNDI tree. The object you have bound from 172.17.24.112 is non clusterable and you have tried to bind more than once from two or more servers. Such objects can only deployed from one server.>

This problem was resolved by a code fix to ensure that JNDI bindings for non-clustered stubs are not replicated.

6.1 SP5

8.1 SP2

CR094073

Before running a finder method on the BMP beans, the EJB container was not synchronizing the bean state with the database.

BMP entity bean handling has been changed to conform to the EJB 2.0 specification. Per the EJB specification, the EJB container now synchronizes the entity bean state by invoking EJBStore before running a Finder method. This does not affect the findByPrimaryKey.

In a transaction, if a finder method is invoked on a BMP bean, it will now trigger the ejbStore of all modified beans (BMP and CMP beans) participating in the transaction. Thus, BMP beans might get more ejbStore callbacks within a transaction.

7.0 SP3

8.1 SP2

CR095173

The idle-timeout-seconds element determined how long the EJB container waits before passivating stateful session beans, that is, removing them from cache and writing them to disk. The EJB container also used this element to determine how long to wait before removing passivated EJBs from the disk. However, some customers wanted stateful session beans to remain on disk longer than idle-timeout-seconds. They wanted to specify how long stateful session beans stay idle in the cache and how long they stay idle on disk using two different elements.

This enhancement is made possible by introducing the new element session-timeout-seconds, which specifies how long the EJB container waits before removing an idle stateful session bean from disk.

7.0 SP3

8.1 SP2

CR096182

Dynamic EJB-QL incorrectly passed long arguments as MAX_INT to the underlying SQL, resulting in an unsuccessful search. A code fix resolved the problem.

7.0 SP3

8.1 SP2

CR096395

The container was failing to call unsetEntityContext when the entity bean was undeployed. An undeploy method was added to the BaseEntityManager to clean up the pool when an entity bean is undeployed. This resolved the problem.

7.0 SP3

8.1 SP2

CR097913

Combining COUNT and EXISTS in a dynamic EJB-QL request resulted in invalid SQL and this exception:

[java] javax.ejb.FinderException: Exception in dynamicQuery while preparing or executing statement: 'weblogic.jdbc.rmi.SerialStatement@62b30' [java] java.sql.SQLException: ORA-00937: not a single-group group function [java] [java] java.sql.SQLException: ORA-00937: not a single-group group function

An unnecessary column was being added to the main select list while parsing a subquery. A fix to the parser code solved the problem.

7.0 SP3

8.1 SP2

CR099626

ejbc generated invalid SQL for an ejbSelect query. The query failed because table aliases were generated incorrectly, resulting in this error:

ORA-00904: invalid column name

The problem was corrected with a code fix.

6.1 SP6

8.1 SP2

CR099760

A field optimization was implemented for EJB 1.1 CMP beans, so that fields that are updated, but whose value did not change, are not written to back to the database. The optimization is only done for primitives and immutable objects.

6.1 SP6

8.1 SP2

CR100832

Column version numbers were not updating correctly with Optimistic concurrency enabled, because blind writes were not checked . The code was changed so that blind writes are checked with Optimistic concurrency.

7.0 SP3

8.1 SP2

CR102481

In some bean-managed stateful session beans, an IllegalStateException occurred with bean-demarcated transactions when the number of bean instances is greater than max-beans-in-cache when the cache is full and activations and passivations occur.

A code change results in the creation of one replacer per passivation request, so that each thread has its own replacer.

7.0 SP3

8.1 SP2

CR103047

It was reported that transaction timeouts on MDBs were not logged. When the time an MDB takes to process a message from a JMS Destination exceeds the transaction timeout limit, the transaction is rolled-back and the message is place backed on the destination for re-delivery, but no transaction-timeout or transaction-rollback messages were logged.

This problem was resolved by a code change to the MDListener code to report the transaction timeouts.

6.1 SP6

8.1 SP2

CR103391

The JDBC driver from Microsoft has a limitation whereby for a given result set of rows and columns, the getXXX method can only be called once per row. This limitation applied only if the query columns included a text or image column. WebLogic Server-generated JDBC obtained the key value from a row—for example, using a getLong(1)—and then passed the result set to another routine that read all the column values, including the first, re-executing a getLong(1). This re-execution caused the Microsoft driver to throw an exception.

The problem is resolved by a code fix that avoids parsing the primary key columns in the resultSet twice.

7.0 SP4

8.1 SP2

CR105857

EJBs with Bean-Managed Persistence and with concurrency set to exclusive called ejbFindByPrimaryKey rather than finding the bean in the cache.

A code change resolved the problem so that the EJB finds the bean in the cache.

7.0 SP3

8.1 SP2

CR106041

ejbc now runs a compliance check that disallows optimistic concurrency for BMP (bean-managed persistence) beans.

Optimistic concurrency is a feature of CMP (container-managed persistence) beans in EJB 2.0. See Choosing a Concurrency Strategy in Programming WebLogic Enterprise JavaBeans.

7.0 SP4

8.1 SP2

CR106136

CR111025

Getter methods for a EJB 1.1 CMP bean did not call isModified() when delay-updates-until-end-of-tx was set to false.

A session EJB called an entity EJB's getter methods. Both EJBs had container managed transaction with transaction attribute set to Required. Each call to a getter method is followed by a call to ejbStore() and delay-updates-until-end-of-tx was false. However, before calling ejbStore on the bean the container did not call the isModified method. The isModified() method was only called when the transaction committed.

ejbStore should be called from postInvoke() depending on the result of the isModified method in the bean. The problem was solved with a code fix.

6.1 SP6

8.1 SP2

CR106711

Optimistic concurrency with a version column did not work in combination with bulk updates. (An "ORA-01008: not all variables bound" SQLException was thrown.)

This problem was resolved by using the correct bean state tracking variable so the EJB container sets all of the variables in the SQL statement, including the version column. Optimistic concurrency with a version column now works in combination with bulk updates.

8.1 SP2

CR107447

The EJB QL query generator could not handle:

SELECT OBJECT(target)

where target is collection member variable as in:

SELECT OBJECT(target) FROM EJBean AS bean, IN(bean.collection)target

This problem has been fixed. The EJB QL compiler now properly handles this case.

8.1 SP2

CR107455

The ROManager was forced to add duplicate entries to its internal LRU list. This resulted in unlimited growth of the list, which lead to OutOfMemoryErrors.

The duplicate entries occurred because of an unnecessary call to the initLastLoad() method in the DBManager method getBeanFromRS(). Removing the unnecessary call fixed the problem.

8.1 SP2

CR108456

With a CMR one-to-many relationship, in a single transaction, if the bean on the one side was accessed but not changed, the dependency between the database operations was not resolved properly by the container. This resulted in a java.sql.SQLException.

This problem was resolved by storing the related bean to the database before checking the state of the current bean.

8.1 SP2

CR109621

The EJB container automatically detects situations where an EJB has been changed in a possibly incompatible way since it was last compiled. If such a change is detected, the EJB is automatically recompiled. Previously, any change to a deployment descriptor would result in such recompilation. Some changes, however, are guaranteed not to change the EJB, such as adding whitespace to a deployment descriptor. Such a change should not have caused the EJB to be recompiled.

The algorithm used to determine whether an EJB needs to be recompiled now disregards whitespace in deployment descriptors when determining whether the descriptor has changed. Thus, an EJB is not recompiled needlessly when only whitespace is changed in a deployment descriptor.

8.1 SP2

CR110917

When using stateful session beans under load with home-is-clusterable set to true and replication-type set to InMemory, the proxy objects on the secondary server that call the bean were not being unexported and were therefore leaking. This resulted in an OutOfMemoryError.

WebLogic Server now unexports the proxy objects on the secondary server. When the Replicated bean receives a becomeUnregistered() callback from the ReplicationService, the corresponding proxy object on the secondary server is unexported in the StatefulEJBHome.removeSecondary() method.

There should not be any negative side-effects on existing user applications.

7.0 SP5

8.1 SP2

CR111233

CR122832

When a MDB and JMS server were targeted to different Weblogic Server instances, the MDB was not receiving messages.

This problem occurred because the EJB container was not creating the necessary MDB pool, as they are not co-located.

This problem has been fixed. When the MDB's destination is non-distributed and non-migratable, then the co-location rule is not applied.

8.1 SP2

CR111476

If an EJB uses container-managed transactions, the EJB specification requires transaction attributes to be set for all EJB methods (excluding methods of EJBObject\EJBLocalObject for session beans and all methods of the home\local-home interface for session beans). Previously, a method not assigned a transaction attribute would use a default value of Supports for interface methods and NotSupported for a message-driven bean's onMessage method. These default values did not result in transactions being started and this caught several customers by surprise.

If any EJB methods are missing a transaction attribute setting, the default transaction attribute is still used for the method. However, a warning is now issued to alert users to the situation. Users can eliminate the warning by setting an explicit transaction attribute for the affected method(s) in the ejb-jar.xml deployment descriptor. Thus, users may now see warnings about missing transaction attribute settings when they run the EJB compiler and during EJB deployment.

8.1 SP2

CR112225

For BLOBs, in the generated code, WebLogic Server calls ObjectOutputStream.writeObject and ObjectInputStream.readObject to serialize/deserialize the object before writing/reading it to the database. These calls add extra header information. The writeObject method writes the class of the object, the signature of the class, the values of the non-transient and non-static fields of the class, and all of its supertypes are written. (This is the reason for the extra header seen in the database.) These calls do not cause a problem when customers are using only WebLogic Server to set and get BLOBs, because it uses readObject to convert the bytes into the appropriate object, which needs that extra header information. However, if the BLOB has been inserted directly into the database by some other vendor or programmer using:

OutputStream os = ((weblogic.jdbc.common.OracleBlob) lob).getBinaryOutputStream(); os.write(this.tiffImage); // byte[] tiffImage

then problems may occur because WebLogic Server uses readObject and the header information is missing. For the data inserted using WebLogic Server , the other programs that would read the bytes directly get the extra header information and fail.

<serialize-byte-array-to-oracle-blob> has been added to control the persistence behavior. This element is used to specify whether a cmp-field of type byte[] mapped to an OracleBlob should be serialized. The tag has been added to a new compatibility stanza in the weblogic-cmp-rdbms descriptor.

Note that, in versions prior to SP2, the default behavior was to serialize a cmp-field of type byte[] mapped to an OracleBlob. Now, the byte[] is written directly to the OutputStream obtained from the BLOB. To revert to the old behavior, set the value of this tag to true.

8.1 SP2

CR112615

Use of the XA driver meant there was no guarantee that WebLogic Server obtained the same connection from the DataSource even when in the same transaction. The Insert was made using one connection and then queried with SELECT SCOPE_IDENTITY using another connection. The SCOPE_IDENTITY produced incorrect results in this case.

The auto-key-gen feature for SQLServer2000 required SELECT SCOPE_IDENTITY() to get the value of the auto-gen key.

The SCOPE_IDENTITY function can now used in the same scope (that is, in the same stored procedure, function, or batch). The code generation was changed to perform a batched query when the database is SQLServer or SQLServer2000 and AutoKeyGen is turned on. The GenKeyQuery will be fired immediately after the INSERT as follows:

__WL_query_array[0] = "INSERT INTO Employees (LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Photo, Notes, ReportsTo, PhotoPath) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) SELECT SCOPE_IDENTITY()";

and the cmp-field will be assigned the auto generated key value.

This change has no impact or side-effects other than resolving the problem of an incorrect primary key being returned when using SQLServer2000 with AutoKeyGen with a XA driver.

8.1 SP2

CR112661

The code to expand the size of the thread pool used for message-driven bean polling was failing due to a change in the "Kernel" APIs.

The code for the MDB container was fixed to properly use the kernel APIs. Customers will now be able to deploy more than one MDB that receives messages from a foreign JMS provider with XA and have each MDB successfully receive messages.

8.1 SP2

CR112703

The JMSConnectionPoller did not know the identity of the user that it needed to pass to the WebLogic Security Framework to get the remote username and password. This remote username and password is required for establishing a JMS connection with the remote JMS Server (MQ, WebLogic, and so on).

This fix resolves the problem, but customers need to configure a security identity for an MDB. For instructions on how to do this, see Configuring a Security Identity for Message-Driven Beans in Programming WebLogic Enterprise JavaBeans.

8.1 SP2

CR113172

When the AutoKey was specified in the cmp-rdbms.xml file as follows:

<automatic-key-generation>
   <generator-type>ORACLE</generator-type>
   <generator-name>scott.oracle_sequence</generator-name>
   <key-cache-size>10</key-cache-size>
</automatic-key-generation>

(that is, the generator name is schemaName.sequenceName) WebLogic Server was not taking the schema name into account while performing the query to select the increment value.

The schema name provided in the <generator-name> is now taken into account, and the queries are generated as follows:

If the users specify the <generator-name> as schemaName.sequenceName in the weblogic-cmp-rdbms-jar.xml, WebLogic Server generates the following query to read the INCREMENT_BY:

query = "SELECT INCREMENT_BY "+
"FROM ALL_SEQUENCES "+
"WHERE SEQUENCE_NAME = UPPER('"+sequenceName+"') " + "
AND SEQUENCE_OWNER = UPPER('"+schemaName+"')";

If users specify the <generator-name> without the schema, the query will be:

query = "SELECT INCREMENT_BY "+
"FROM USER_SEQUENCES "+
"WHERE SEQUENCE_NAME = UPPER('"+sequenceName+"')";

In the second query, WebLogic Server makes use of the USER_SEQUENCES view instead of ALL_SEQUENCES. This takes care of the case where two or more users have declared a sequence with the same name. A query to the USER_SEQUENCES view restricts the ResultSet to the user view with a connection to Oracle.

8.1 SP2

CR116696

The setBytes() method on the preparedStatement had issues when the byte[] data was greater than 4K.

This problem was resolved by replacing the setBinaryStream() method with the setBytes() method. As a result, the cmp11 generated code has changed. Customers wanting to take advantage of this fix will have to rerun ejbc on their EJBs to generate the new code. Otherwise, this change will not have any impact.

8.1 SP2

CR120257

The EJB container code was not expecting the "Adaptive Server Enterprise" string as the correct database product name for the Sybase database. It was expecting the "Sybase" string in the product name.

Because the WebLogic Sybase JDBC driver sends the database product name as "Adaptive Server Enterprise," this string is now considered in the database type verification code of the cmp descriptors.

8.1 SP2

CR120300

An extra AND was appended for ANSI compliant LEFT OUTER JOIN for the following databases: SqlServer2000, Pointbase and DB2.

The code was modified not to append AND while generating ANSI compliant LEFT OUTER JOIN for these databases. No side-effects should result from fixing this problem.

8.1 SP2

CR121143

The EJB was correctly failing to deploy because the database table it depended on did not exist. The EJB was configured so the table would be automatically created during deployment if it did not exist. However, the server was in production mode and the auto table creation feature is only supported when the server is in development mode, so the table was not created by the EJB container. There was a problem in that the EJB container was not communicating this information properly to customers.

A message was added, explaining auto table creation settings will be disregarded when the server is in production mode. In addition, each Managed Server now logs when an EJB deployment fails because of a missing database table.

8.1 SP2

CR122511

The wls510-read.xpi was not setting the PersistenceMBean.setFindersLoadBean() when the <finders-call-ejbload> element was encountered in the 5.1 weblogic-ejb-jar.xml deployment descriptor.

When the <finders-call-ejbload> element is encountered in the 5.1 weblogic-ejb-jar.xml deployment descriptor, WebLogic Server now sets it on the PersistenceMBean.

<processing-action element="finders-call-ejbload" element-context="persistence-descriptor">
   <validation nullable="false"
    values="true|True|false|False"/>
      <java>
      if(bd.isEntity()) {
         bd.getPersistence().setFindersLoadBean(
         "True".equalsIgnoreCase( @VALUE{} )); }
      </java>
</processing-action>

8.1 SP2

CR124954

The documentation for the procedure "Configure a Security Identity for a Message-Driven Bean" was missing some steps. This has been corrected, and the updated documentation can be found at http://edocs.bea.com/wls/docs81/ejb/message_beans.html#ConfiguringaSecurityIdentityforaMessage-DrivenBean.

8.1 SP2

Installation

Change
Request
Number

Description

Release
Fixed

CR105921

The state was not preserved on the "Choose BEA Home Directory" panel.

The state of controls on the above referenced panel is now retained. Paging back to the "Choose BEA Home Directory" panel will show expected UI control state based on prior user interaction.

8.1 SP2

CR111201

The internal URL format used for database loading was not normalized for all potential runtime platforms. This problem resulted, for example, in a java.lang.IllegalArgumentException when customers attempted to create an e2e domain from the e2e domain template using the Configuration Wizard on Solaris platforms.

The URL format used for database loading has been normalized to enable cross platform compatibility.

8.1 SP2

J2EE

Change
Request
Number

Description

Release
Fixed

CR110964

The J2EEApplicationContainer notifies the listeners of the application deployment phase. During this time, the thread had the system classloader as the contextclassloader.

The listener is now notified of the application deployment event with the application classloader as the thread's contextclassloader.

8.1 SP2

CR111138

J2EEApplicationContainer was not notifying the application listeners regarding the "PRESTOP" event on the applications during the server shutdown.

Code was added to fire the notifications. Application listeners now receive the PRESTOP notifications.

8.1 SP2

CR122772

JNDI lookup could not resolve an object because the EJB HomeImpl class was not found. This situation resulted in inconsistent assertions and occurred because the HomeImpl class was searched on a classloader different from the one with which the EJB was originally deployed.

The J2EEContainer code was fixed to ensure that the CLNode annotation is unique. One annotation should resolve to one CLNode.

If this service pack is used, then it should be used in all the clustered servers. Otherwise there are no side-effects.

8.1 SP2

JCOM

Change
Request
Number

Description

Release
Fixed

CR108495

When using com2wls, the security context was not getting propagated between client invocations.

A code fix now ensures that a cache is maintained on the server-side when NTLM authentication is not used. When a user is authenticated as a part of the first request from the JCOM client, the client's ThreadContext, the AuthenticatedSubject, and the LastAccesssedTime are stored in the cache. If a client remains idle for more than 5 minutes (configured via the weblogic.jcom.clientTimeout property), WebLogic Server removes that client entry from the cache. The trigger frequency is 1 minute by default (configured via weblogic.jcom.invalidationInterval property). This property controls how frequently WebLogic Server runs the trigger to check the cache and clean up idle clients. Note that the values for these properties must be specified in milliseconds.

8.1 SP2

CR120495

DCOM sockets were timing out based on the DefaultNetworkChannel's idle connection timeout value. This would result in the DCOM socket being closed.

Code was added to ensure that the DCOM connections will not timeout.

8.1 SP2

JDBC

Change
Request
Number

Description

Release
Fixed

CR093038

WebLogic Server now provides support for Oracle Virtual Private Databases (VPDs). A VPD is an aggregation of server-enforced, application-defined fine-grained access control, combined with a secure application context in the Oracle 9i database server.

For more information, see Programming with Oracle Virtual Private Databases in Programming WebLogic JDBC.

7.0 SP3

8.1 SP2

CR104968

WebLogic jDriver for Oracle/XA did not properly handle the NLS_NUMERIC_CHARACTERS parameter set by an Oracle RDBMS instance. This caused a java.sql.SQLException when retrieving double or float values if a comma (\Q,') was used as a decimal separator in the database:

java.sql.SQLException: java.lang.NumberFormatException - '1,2'
at weblogic.jdbc.oci.ResultSet.getFloat(ResultSet.java:312)
at weblogic.jdbc.jta.ResultSet.getFloat(ResultSet.java:190)
at
weblogic.jdbc.rmi.internal.ResultSetImpl.getFloat(ResultSetImpl.java:224)
at
weblogic.jdbc.rmi.internal.ResultSetStraightReader.getFloat(ResultSetStraightReader.java:67)
at
weblogic.jdbc.rmi.SerialResultSet.getFloat(SerialResultSet.java:219)
at examples.servlets.DBAccess.service(DBAccess.java:54)
at
[...]

The problem did not occur with the non-XA version of WebLogic jDriver for Oracle. This problem was solved with a code fix.

6.1 SP6

8.1 SP2

CR106522

The WebLogic Server jDriver for MS SQLServer can mistakenly accept the jdbc:microsoft:... URL for the Microsoft JDBC driver. If a JVM tries to use both drivers, loading the WebLogic Server driver first prevents the Microsoft driver from being used.

This jDriver has been deprecated.

7.0 SP4

8.1 SP2

CR107474

OciObjectStream did not nullify a buffer after a close() was performed.

This problem was resolved with a code fix.

6.1 SP6

8.1 SP2

CR108051

Using LDAP with SSL caused a NullPointerException.

This problem occurred because the MuxableSocketLDAP registered itself directly (instead of the SSLFilter for itself) with the socket muxer. Thus, when SSL was used, it was not accessing the right muxable socket instance.

This problem was resolved by a change the MuxableSocketLDAP code, so that it registers the SSLFilter with the socket muxer.

8.1 SP2

CR108436

A transactional (JTS) JDBC connection could falsely return true for the isClosed() method in a remote application.

The cause of the problem was an unnecessary and failure-prone delegation of the isClosed() call to the remote connection rather than simply reporting the already-known state of the RMI connection.

The RMI connection object was modified to return the known state. User code now works as expected with isClosed().

8.1 SP2

CR109268

When a JNDI lookup on a JDBC DataSource and then a ds.getConnection was performed in applet code, a Security Exception that indicated there was no privilege to generate code in the applet would be thrown.

JDBCWrapperFactory now detects whether the lookup is performed within the applet JVM. If it is, rather than generating a JDBC RMI wrapper class in the applet JVM, a request will be sent to ClasspathServlet. ClasspathServlet will generate the JDBC RMI wrapper classes on the server side, then ship them back to the applet. Applets do not work with JDBC RMI without this fix.

8.1 SP2

CR111136

WebLogic Server's Oracle jDriver now understands the non-standard Oracle CURSOR output parameter type, whose numerical value is -10. Customers wanting to use WebLogic Server's Oracle jDriver to accommodate a WebLogic extension will no longer get exceptions.

8.1 SP2

CR111230

During EJB deployment time, certain validations are done to verify the table, check if connection pools exist or not, and so on. If any of these validations fail, a DeploymentException is thrown. In this case, the DeploymentException was being thrown because the TableVerifier.checkPool() method returned false.

This problem occurred because in weblogic.jdbc.common.internal.ConnectionPoolManager.poolExists() method, WebLogic Server only checked whether the pool (used by the EJB) existed in the list of available connection pools, and failed to do the same for the list of MultiPools.

For the pool associated with the DataSource for the CMP EJB, WebLogic Server now checks that the pool exists in both the connection pool list and the MultiPool list. As a result, customers can use a DataSource mapped to a multipool inside a CMP EJB.

8.1 SP2

CR120224

Many of the Sybase JDBC driver's metadata methods, including getAutoCommit(), interacted with the DBMS in a way that caused the DBMS to think a transaction had been started. This precluded any further changes to transaction properties. For example, the following valid JDBC code caused an application to receive an exception stating: `can't call set CHAINED within a transaction':

Connection c = ... // get fresh connection
c.setAutCommit(false); // set connection for future multistatement tx's
// Now test connection (like after a tx) Change back to default mode if needed
if (c.getAutoCommit()) c.setAutoCommit(true); // fails here

Code that is enacted (only) when the initial call to setAutoCommit(true) fails has been added. In this case, WebLogic Server rolls back the transaction and retries the setAutoCommit(). BEA has worked with Sybase to improve their driver, and as of this writing, the latest EBFs of the Sybase driver should include changes that will also fix this problem.

8.1 SP2

CR121635

When running WebLogic Server with the WebLogic Sybase XA JDBC driver, attempts to create a table after suspending the current transaction and starting a new transaction failed, but no exception was thrown.

This problem occurred because of cleanup processing WebLogic Server does inside the JDBC layer. When application code calls commit(), WebLogic Server internally checks the Auto Commit setting for the connection. When running with Sybase XA, WebLogic Server needs to call a rollback() because the getAutoCommit() call starts a local transaction. This rollback() also causes the SQL DDL call to create the table to be rolled back. Thus, the table will appear to not have been created.

This problem was resolved by removing the call to rollback() after calls to get/setAutoCommit and get/setTransactionIsolation for the Sybase XA driver. Application code now gets the correct results.

8.1 SP2

CR125320


A server thread dump showed a deadlock with one thread calling JTSConnection.doClose(), which was blocked in this method.

This problem occurred because doClose() had a block synchronized on the JTSConnection with the purpose of ensuring only one thread went into the block at a time. Unfortunately, any other thread running any other synchronized JTSConnection method would stop a thread getting this doClose() block.

A private locking object for the doClose() block was provided. As a result of this fix, there will be no detectable change in behavior, except for fortunate cases where a deadlock is averted and normal function proceeds.

8.1 SP2

CR125496

Oracle-related JDBC operations hung when the ResourcePool maintenance thread locked the resource pool and attempted to obtain a connection that was being held by other threads.

This problem occurred because doClose() had a block synchronized on the JTSConnection with the purpose of ensuring only one thread went into the block at a time. Unfortunately, any other thread running any other synchronized JTSConnection method would stop a thread getting this doClose() block.

A private locking object for the doClose() block was provided. As a result of this fix, there will be no detectable change in behavior, except for fortunate cases where a deadlock is averted and normal function proceeds.

8.1 SP2

CR126038

Oracle OCI NativeXA does not allow a connection to be used by threads other than the one where it is created. The WebLogic Server connection pooling algorithm assumed that a connection could be used by any thread, as this is the behavior of all other JDBC drivers (including the Oracle Thin Driver). Customers who used Oracle OCI NativeXA with this connection pooling algorithm received an XAException.

This problem was resolved by pinning the connection to the thread. As a result of this fix, every thread now has its own connection for every connection pool.

8.1 SP2

CR127969

Applications with stringent RASP and HA requirements require Pools to be capable of gracefully recovering from failure conditions such as failure of the database server, the machine hosting the database server, network connectivity to the machine hosting the database server, and so on. The above requires applications to put upper bounds on:

    1. How long a request to create JDBC connections stays blocked

    2. How long a statement executes

and require support from the JDBC driver; the BEA WebLogic Type 4 JDBC drivers now provide this support. Item 1 is configurable by simply setting the corresponding driver property in the connection pool definition. Item 2 requires support from WebLogic Server and is exposed via the following pool attributes:

  • testStatementTimeout—the time after which the test statement query (specified by applications using the pool attribute TestTableName) currently being executed will be timed-out. The default value implies that this feature is disabled.

  • statementTimeout—the time after which a statement currently being executed will be timed-out. The default value implies that this feature is disabled.

For more information about the BEA WebLogic Type 4 JDBC drivers, see WebLogic Type 4 JDBC Drivers.

8.1 SP2

JMS

Change
Request
Number

Description

Release
Fixed

CR103213

When the server failed to send JMS messages, there was no error message on the client. The transaction manager had declared the messages unhealth