-
1. Re: What are the differences between the JBoss 3.2.0 and 3.0
sysuser1 Apr 13, 2003 12:51 PM (in response to whyau)This is a really good question. I've searched through the site and can't find anything that answers it. Isn't there any release notes, release description, anything?
Doug -
3. Re: What are the differences between the JBoss 3.2.0 and 3.0
fbiaggi Apr 13, 2003 2:08 PM (in response to whyau)Hi,
Just installed, 2 big differences:
1. The ejb-jar.xml must contain a DOCTYPE
2. The 3.0.6 DB-service.xml do not work, repalced by -ds.xml
fyi... -
4. Re: What are the differences between the JBoss 3.2.0 and 3.0
usiwill Apr 14, 2003 3:46 PM (in response to whyau)The release notes list differences between RC4 and the final release, but it would be nice to be able to see the additional features that 3.2 has to offer over 3.0.6 and 3.0.7
-Will -
6. Re: What are the differences between the JBoss 3.2.0 and 3.0
juhalindfors Apr 15, 2003 3:23 AM (in response to whyau) -
7. Re: What are the differences between the JBoss 3.2.0 and 3.0
tobias Apr 17, 2003 9:07 AM (in response to whyau)In the tracker on sf.net select "descending" for sorting or "v3.2" for group. That should give you a nice list with detailed information to each topic.
-
8. Re: What are the differences between the JBoss 3.2.0 and 3.0
jonmartin Apr 29, 2003 12:43 PM (in response to whyau)That's "Changes between 3.2.0 and 3.2.0RC4", not between 3.0.X and 3.2.0 (unless the heading is misleading, ofcourse :-)
-
9. Re: What are the differences between the JBoss 3.2.0 and 3.0
doc_brown May 1, 2003 9:51 AM (in response to whyau)
Ok.. so this topic has the changes from 3.2.0RC4 to 3.2.0 (Final).
What are the changes and new additions if I am upgrading from 3.0.x to 3.2.0.
Is there a single document listing all the changes and additions? -
10. Re: What are the differences between the JBoss 3.2.0 and 3.0
tobias May 1, 2003 3:55 PM (in response to whyau)ARGH! Since using the given URL seems too hard for a lot of people I took all the change notes you get there and compiled one big text file. You owe me a beer now ! Here you go :
--------------------
ejb-jar.xml requires a Public ID
Any ejb-jar.xml file encountered now *requires* a valid DOCTYPE
Declaration and public Id as per the EJB 1.1 / 2.0 Specs. Acceptable
public Id's are:
- "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans
1.1" for EJB 1.1
- "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans
2.0" for EJB 2.0
if this breaks your deployments, fix your DOCTYPE declaration that
should be all that's necessary.
----
XSL based deployment w/datasource example
I've written a simple xsl based deployment system and used it to
provide a much simpler datasource configuration method. An example of
how to specify a xsl subdeployer is in jboss-jca.sar. You specify the
acceptable extension and the stylesheet and the delegate deployer, and
the xsl deployer transforms incoming dds into a format acceptable to
the delegate deployer.
This is applied to datasource configuration to allow configurations
like this:
<local-tx-datasource>
<jndi-name>InformixDS</jndi-name>
<connection-url>jdbc:informix-sqli://
myhost.mydomain.com:1557/mydb:INFORMIXSERVER=
myserver</connection-url>
<driver-class>com.informix.jdbc.IfxDriver</driver-class>
<user-name>x</user-name>
y
</local-tx-datasource>
<xa-tx-datasource>
<jndi-name>InformixXADS</jndi-name>
<xa-datasource-class>com.informix.jdbcx.IfxXADataSource</
xa-datasource-class>
<xa-datasource-property name="IfxWAITTIME">10</xa->
<xa-datasource-property name="Description">Something
Descriptive</xa-datasource-property>
<xa-datasource-property name="IfxIFXHOST">
myhost.mydomain.com</xa-datasource-property>
<xa-datasource-property name="PortNumber">1557</xa->
<xa-datasource-property name="DatabaseName">mydb</xa->
<xa-datasource-property name="ServerName">myserver</xa->
<!-- not sure if these should be here-->
<user-name>x</user-name>
y
</xa-tx-datasource>
----
farm service update
Farm service will now sync with cluster on startup. It has also been
rewritten as a URL Scanner so the configuration is different.
----
Strict Verification of EJB .jar Files
The EJBDeployer has a new boolean flag called "StrictVerifier" which
can be set both in jboss-service.xml as well as via JMX.
Setting this to 'true' (currently the default) will cause all EJB
Deployments which do *not* pass the Verifier mechanism to throw a
DeploymentException (and thus they will not be deployed ... :).
If this causes too many problems we might change this to 'false' for
the 3.2 branch but methinks that this should be defaulted to 'true'
for 4.0 and later.
----
JMX Serialization
Implemented JMX Serialization as specified in the 1.1 specification
The property jmx.serial.form is supported by JBossMX.
It has been tested with jmxri.jar versions 1.0 and 1.1
The jmxri 1.1 release has problems when
jmx.serial.form="1.0",
including crashing the VM when serializing DescriptorSupport on a java
1.3 VM
QueryExp is not serializable in a portable manner. The specification
does not define the classes or a serialization mechanism. This does
not affect queryMBeans on the ObjectName parameter.
----
Applied Common Interfaces of JMS 1.1
I added the common interfaces of the JMS 1.1 specification to JBossMQ.
----
Entity Lock Monitor added
look in jboss-service.xml and uncomment it. Allows you to find out num
lock contentions, time for lock contentions and other shit.
----
<sync-on-commit-only>
Added this boolean flag to standardjboss.xml and jboss.xml
If set to true, ejbStore will only be called on transaction commit.
----
interrupt threads on tx timeout
Threads involved with a timed out transaction are now interrupted.
----
JDBC parameter getting/setting overhaul
The getting and setting of JDBC parameters in the CMP2 engine has been
given a bit of an overhaul.
This will have two user visible impacts:
1. CLOBS/BLOBS and large objects in general are now fully operational
with Oracle. The code used is quite generic and should work against
all databases that support LOBs. It has been tested against Oracle
9i, Postgres 7.2 and MySQL 3.23.53, (and hsqldb of course). Don't try
to use CLOB mappings with MySQL because:
a) it doesn't have a native CLOB datatype;
b) the jboss code uses ResultSet.getCharacterStream which is not
implemented in the current mysql JDBC driver.
Really large LOBs are probably better handled using BMP, because the
CMP code needs to load the whole thing into memory.
2. For some reason, previous versions of JBoss mapped java.lang
.Object to a JDBC type of JAVA_OBJECT, and then proceeded to serialize
the object into a binary column. Some JDBC drivers would accept this
behaviour, but many would not. JAVA_OBJECT is intended to be mapped
to custom types on the database, and used in conjunction with the
java.sql.SQLData/ SQLInput/SQLOutput interfaces, which are managed by
the JDBC driver. Therefore JAVA_OBJECT types are now passed straight
through to the JDBC driver via set/getObject. The standard mappings
for java.lang.Object that I was able to test (as in item 1) have been
changed to have a binary JDBC type to preserve the previous behaviour.
NOTE: Anyone who has used JAVA_OBJECT in their jbosscmp- jdbc.xml will
need to change it to VARBINARY, LONGVARBINARY or BLOB to get the
previous behaviour.
IMPORTANT: I have only changed the standard mappings for the db
platforms that I could test. If your database is not mentioned above I
would appreciate feedback on which binary jdbc types are appropriate.
----
JBossMQ MessageCache changes Applies to 4.0 only for now.
The global locking on the MessageCache is gone. Locks are now on the
message and the LRUCache when required.
Softening is now done by the softening thread, except addMessage which
will soften one message when required to make room for the new
message.
Some fixes to the message cache processing under stress, mostly for
the joint CacheStore/PersistenceManager jdbc2.
Some fixes for jdbc2. Including changes to the SQL in
jbossmq-service.xml to correct the recovery process.
Added an update operation to the persistence managers so that the
redelivered flag is persisted across server reboots.
Removed the linear traversal of unacknowledgedMessages in BasicQueue,
Rollback the message cache entry when an addMessage transaction fails.
Fixed problems with rollingback when a transaction timeout interrupts
the thread for jdbc2.
Fixed the testsuite to clear undelivered messages and remove durable
subscriptions, making it easier to spot a message cache leak in
future.
----
FK fields mapped to PK fields support
It's possible to map foreign key fields in one-to-many and one-to-one
relationships to primary key fields. All is needed to assign the same
names to the corresponding foreign and primary key fields.
Relationships are assigned between ejbCreate and ejbPostCreate. This
means that relationships are accessible in ejbPostCreate and not in
ejbCreate. Relationships are established and removed only with
creation and removal of entities. Modifications with abstract CMR
accessors are not allowed as they change primary key values.
If ONE side doesn't exist CMR on the MANY side will return null value.
If MANY side doesn't exist CMR on the ONE side will return empty
collection.
If cascade-delete is specified then removal of the ONE side will
remove the related MANY side. In this case, ONE side is removed first
breaking the relationship, i.e. CMR field on the MANY side in
ejbRemove will return null.
----
Optimistic locking support
To setup optimistic locking, container configuration element
locking-policy should be set to
<locking-policy>org.jboss.ejb.plugins.lock.JDBCOptimisticLock</locking-policy>
and entity element in jbosscmp-jdbc.xml should have optimistic-locking
element.
Following are the possible configurations of optimistic- locking
element:
1. Fixed group of fields that will be used for optimistic
locking.
<optimistic-locking>
<group-name>optimisticLockingGroup</group->
</optimistic-locking>
where optimisticLockingGroup is one of the entity's load-
group-name's.
2. Modified strategy. The fields that were modified during transaction
will be used for optimistic locking.
<optimistic-locking>
<modified-strategy/>
</optimistic-locking>
3. Read strategy. The fields that were read during transaction will be
used for optimistic locking.
<optimistic-locking>
<read-strategy/>
</optimistic-locking>
4. Version (counter) column strategy. Additional version (counter)
field of type java.lang.Long will be added to entity which will be
used for optimistic locking. Each update of the entity will increase
the value of its version field by 1.
<optimistic-locking>
<version-column/>
<field-name>versionField</field-name>
<column-name>ol_version</column-name>
<jdbc-type>INTEGER</jdbc-type>
<sql-type>INTEGER(5)</sql-type>
</optimistic-locking>
5. Timestamp column strategy. Additional timestamp column field of
type java.util.Date will be added to entity which will be used for
optimistic locking. Each update of the entity will set the value of
its timestamp field to the current time.
<optimistic-locking>
<timestamp-column/>
<field-name>timestampField</field-name>
<column-name>ol_timestamp</column-name>
<jdbc-type>TIMESTAMP</jdbc-type>
<sql-type>DATETIME</sql-type>
</optimistic-locking>
6. Version column generated by KeyGenerator. Additional field will be
added to entity that will be used for optimistic locking. Each update
of the entity will update its version column with value generated by
KeyGenerator.
<optimistic-locking>
<key-generator-factory>UUIDKeyGeneratorFactory</key-generator-factory>
<field-type>java.lang.String</field-type>
<field-name>uuidField</field-name>
<column-name>ol_uuid</column-name>
<jdbc-type>VARCHAR</jdbc-type>
<sql-type>VARCHAR(32)</sql-type>
</optimistic-locking>
----
HTTP URL scanning support
Support has been added for scanning HTTP locations using the WebDAV
protocol. This allows locations to be scanned when the server has been
netbooted from a web server in the same manner as local directories
are scanned. This allows JBoss to be booted from an unmodified
configuration located on a WebDAV capable server such as Tomcat 4.1.X,
Apache 2.0 with mod_dav or even Microsoft IIS. Alternatively, a trival
DAV server is supplied in docs/examples/netboot that allows JBoss to
be booted from any J2EE WebContainer such as JBossWeb.
DAV scanning is supported for the SARDeployer element and
for the URLDeploymentScanner element. The latter requires
locations to be specified in accordance with RFC2518 - basically URLs
will be scanned if they end with a '/' character and deployed if they
do not. See the standard conf/jboss-service.xml for examples.
With this change URLDeploymentScanner is now able to provide the
functionality of URLDirectoryScanner and HttpURLDeploymentScanner and
these mbeans should no longer be used.
A current limitation is that locations to be scanned via HTTP/DAV must
not contain unpacked archives (especially SAR or WAR archives). This
limitation may be removed in the future.
Also WAR archives should contain in their lib or classes directories
all classes needed to compile JSP pages. Strictly, the javac compiler
invoked during JSP compilation uses a classpath derived from
ClassLoaders referencing the local filesystem; as a result
dependencies on classes loaded over the network may result in "cannot
resolve symbol" errors during JSP compilation.
----
JBossQL Limit/Offset support
Support has been added for restricting the amount of data fetched from
a JDBC database.
JBossQL now supports optional OFFSET and LIMIT parameters supplied at
the end of a query. An example would be
SELECT OBJECT(o) FROM Order o WHERE o.status = ?1 ORDER BY o.orderDate
OFFSET ?2 LIMIT ?3
This works by discarding rows until rows have been fetched
and then returning immedately once another rows have been
fetched. This simple mechanism is intended to preserve portability
across database vendors. Other approaches including scrollable cursors
or database-specific syntax may be considered later.
Currently the parameters passed to LIMIT and OFFSET must be int values
(or Integer for DynamicQL) as in the finder
Collection findAllOrders(String status, int offset, int limit) throws
FinderException;
----
JBossMQ now disconects clients with stale connections.
Sometimes clients disconnect from the server but the server does not
notice (This is especialy the case with stateless protocols like
RMI). Added an interceptor to the DestinationManager that keeps track
of when the client last accessed the server. If the client is idle for
too long, the client gets disconnected.
----
Container Managed Audit Fields
Initial support for Container Managed Audit Fields Initially in 3.2
for evaluation purposes.
Coding this in CMP2 is a pain and requires calculating the values on
every set, monitoring whether the set actually changed the value.
In jbosscmp-jdbc.xml add
<created-by/>
<created-time/>
<updated-by/>
<updated-time/>
to the relevent entity.
Four new fields are maintained by the CMP engine
audit_created_by, audit_created_time,
audit_updated_by, audit_updated_time
For created_by and updated_by the caller principal must be in the
entity context otherwise they are blank.
You can choose which of the fields you want to use e.g.
<updated-by/>
<updated-time/>
You can change the column names as follows
<updated-by><column-name>change_username></updated-by>
The field can also be a CMP field, by matching the field-name
<updated-by><field-name>changedBy</field-name><updated-by>
When the field is set programmatically this takes precedence over the
container managed values.
TODO
1) Decide and support relevent jdbc-type/sql-types.
2) Support date and time as separate fields for legacy data mappings
3) Add support for CMR tables.
----
New entity commands
Abstracted primary key fetching JDBCMySQLCreateCommand into
JDBCAbstractVendorCreateCommand and created implementations for
hsqldb, sybase and informix.
Entity commands name are :
o mysql-get-generated-keys
o hsqldb-fetch-key
o sybase-fetch-key
o informix-serial
-----
BeanShell JBoss sub-deployer added
A BeanShell (BSH, www.beanshell.org) sub-deployer in has been added to
3.2+. It is in module varia and you can find its lib in
varia/output/lib/bsh-deployer.sar.
It allows you to hot-deploy *.bsh files in /deploy.
SIMPLE USAGE: client-only
=========================
In its simple usage, the script will act as a simple client-script
making invocations on other objects. Each script can follow the
org.jboss.system.Service interface i.e. the create, start, stop and
destroy calls. You can implement only a subset of those. Thus, a very
simply one-line script can be: Simple.bsh:
void start() { System.out.println ("I'm called!"); }
that's it.
ADVANCED USAGE: server script!
==============================
But it is almost as easy to make your script a JBoss service fully
invocable/administrable through JMX! For this, your script can
implement any of the methods of the following interface:
public interface ScriptService
extends org.jboss.system.Service
{
public String objectName ();
public String[] dependsOn ();
public Class[] getInterfaces ();
public void setCtx (ServiceMBeanSupport wrapper);
}
You can implement the objectName method to choose your own MBean
ObjectName. You can implement the dependsOn method to return a set of
JMX MBean ObjectName (as string) on which you depends (for service
lifecyle). You can implement the getInterfaces method to return the
set of interfaces that you *say* your script do implement. Your
wrapper will analyse these interfaces and fully generate the
associated JMX MBeanInfo (the script wrapper is a Dynamic MBean).
Example, let's say you have this interface:
public interface MyIntf
{
public void doThat();
public String getRWString ();
public void setRWString (String val);
public String getROString ();
}
You could then provide this script:
String name = "bla";
String objectName () { return "jboss.scripts:service=myService"; }
Class[] getInterfaces () { return new Class[] {MyIntf.class}; }
void create () { System.out.println ("Create called on me"); }
void doThat () { System.out.println ("doThat called"); }
String getRWString() { return super.name; }
void setRWString(String bla) { super.name = bla; }
String getROString() { return "I am read-only!"; }
Then, not only can you invoke methods and get/set attributes on your
script using JMX, you can also browse your scripts using the
http://localhost:8080/jmx-console/ and see all available
methods/attributes (MBeanInfo is generated by the DynamicMBean script
wrapper)
Infos on BeanShell are available here: www.beanshell.org
----
CMP Create performance and SQLExceptionProcessing Service
To address bug 723908, a new <entity-command> has been added which
does not perform a SELECT to detect duplicate primary keys but instead
examines any SQLException thrown.
Prior to 3.2.1, CMP attempted to detect a DuplicateKey condition by
performing a SELECT for a row with the supplied primary key and
throwing DuplicateKeyException if any row existed. This required an
SQL operation, impacting performance, and suffered from a potential
race condition as no lock was taken on the PK value.
In 3.2.1 a new entity-command has been added that does not perform
this check but instead examines any SQLException thrown by the INSERT
to determine if a DuplicateKeyException should be thrown.
This eliminates the addition SQL operation, closes the race window and
guarantees that a DuplicateKeyException will be thrown if a suitable
database constraint is in place. For most databases, this will result
in DuplicateKeyException if any unique constraint is violated, even
for secondary keys.
As different JDBC drivers may indicate constraint violations in
different ways, an SQLExceptionProcessor service has been added that
can be used to classify an SQLException raised by the driver. The
supplied implementation uses the ANSI SQL99 standard SQLState code of
"23000" to detect constraint violations.
To avoid migration issues, the default configuration has not been
modified and exception-based detection must specifically be
activated. The SQLExceptionProcessor service is deployed only in the
"all" configuration. -
11. Re: What are the differences between the JBoss 3.2.0 and 3.0
doc_brown May 13, 2003 9:55 AM (in response to whyau)Tobias, yes those notes are what's on the URL.
However, that's not all the release notes.
The release notes from just 3.2.0rc4 to 3.2.0 contain many things not listed.
Also, now that 3.2.1 is out (with another long list of changes from 3.2.0), were can I find the changes from 3.0.6 to 3.2.0?