Friday, December 12, 2008
Service Component Architecture GA
In addition to the code download, here are some other useful links:
SCA Feature Pack InfoCenter
SCA Feature Pack Release Notes
SCA Feature Pack developerWorks Roadmap (available here soon)
As an early Holiday Present for developers, Rational has announced an open beta program which demonstrates among other things, a new visual composite editor for Open SCA. Details about the program can be found here.
Happy coding!
Wednesday, November 19, 2008
Properties File Based Configuration for WebSphere
The following commands are provided to perform properties file based configuration:
1. extractConfigProperties : To extract configuration of entire cell or a specified configuration object's properties to a file.
2. applyConfigProperties : To apply properties specified in the properties file to the system.
3. validateConfigProperties : To validate a properties file before applying the properties file to the System.
4. deleteConfigProperties : To delete properties specified in the properties file from the system.
5. createPropertiesFileTemplates: To create template properties files to use to create or delete specific object types.
For more information can be found here:
http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/rxml_7propbasedconfig.html
Tuesday, November 18, 2008
Customer feedback in Barcelona
![]() |
| From 2008-November-Barcelona |
Yes, there are worse things than spending a week in Barcelona. I've never been there before, and I definitely needed at least another week to see everything I wanted to see.
![]() |
| From 2008-November-Barcelona |
I was there to run our Customer Feedback Program, which is a new track that debuted last spring at Impact 2008. The idea is that at most IBM conferences, the attendees naturally spend most of the week listening to IBMers speak. Where are we headed? What's new in the products? What's our newest three letter acronym? We wanted to turn this around and have sessions where the customers do the talking and the IBMers do the listening.
![]() |
| From 2008-November-Barcelona |
These are small roundtable sessions with a couple of IBMers (usually a technical architect, designer, and/or product manager) and around four customers. After the sessions, we consistently hear from customers that they are the most valuable sessions of the week from their perspective, and the IBMers always walk away with great feedback about our products.
![]() |
| From 2008-November-Barcelona |
We're trying to make these customer feedbacks sessions a staple for all of our conferences - so the next time you attend a conference (like Impact 2009 at the Venetion in Las Vegas) look for the feedback sessions. It's time well spent.
And if you ever get an opportunity to go to Barcelona, take it!
But watch out for the pigeons...
![]() |
| From 2008-November-Barcelona |
Speaking tomorrow at the Charlotte WUG
Friday, November 14, 2008
Centralized Installation Manager (CIM)
The CIM program can be installed into a v7 ND Deployment Manager, and then can easily install and maintain the workstations in a WebSphere cell. An administrator can remotely install or uninstall product packages and maintenance to specific nodes directly from the administrative console without having to repetitively log in and perform these tasks on each individual remote machine. CIM operations can be done through its Graphical User Interface or can be scripted for full automation. Since CIM only previously shipped with XD-6.1, almost no "ND" WebSphere customers currently know about it. For details about CIM and how you can leverage to simplify and automate your enterprise servers please see the WebSphere v7 InfoCenter CIM information. If you are an ND cell administrator then CIM is something you need to seriously consider, it is certainly a way to significantly simply your day-to-day operations.
Thursday, November 13, 2008
Videos available that quickly walk you through WAS V7 functionality
I just found out that there is a series of about 50 videos available in the WAS V7 InfoCenter that cover many of the new features of WAS V7. I have watched a few of them and find them very clear and short enough to consume on breaks between other work.
Go here to find the IBM Education Assistant videos for WAS V7.
Saturday, November 8, 2008
More information on the TPC SOA benchmark
On SOA, Mike explains, "TPC's SOA benchmark is only in the proposal stage, but the tentative plan is to focus on common industry-accepted portions of SOA infrastructure, mainly Web services, the enterprise service bus, and business process choreography. As advanced SOA practices become more standard in the industry, TPC will expand the benchmark to incorporate additional SOA infrastructural services".
I'm excited to work within the TPC to continue driving this SOA performance benchmark to reality. There are no other standard benchmarks that tackle these common SOA infrastructural components. If you have interest in seeing such a benchmark or comments on how it would help you, please post a comment. I'll relay them back to the TPC.
Wednesday, November 5, 2008
WebSphere Application Server V7.0 What new for Security
Our new WebSphere Security Domains provide greater granularity management of security controls by offers more flexibility in configuring security under centralized management. WebSphere Security Domains is designed to allow for a separation of WebSphere administrative security and your business application security. For example, Business applications can be configured to use your external LDAP registry while the WebSphere administration can use your Federated Repository’s file base registry containing internal user. Further granularity can be further expanded between business applications by allowing separate security configuration between business applications using new security configuration scoping to a cell, a cluster, or application server level. This new level of security granularity provides significant new flexibility in the security mechanism implemented across various application portfolios.
Our new WebSphere Security Auditing feature offer enhanced complicacy and auditing capabilities. The auditing capabilities allow tracks a number of security related events. For Example of administrative actions that can be logged include: security configuration changes, key and certificate management, and access control policy changes. Business applications can be audited to record a number of security events such as authentication or authorization attempts. This new security logging and auditing capability ensures accountability for administrative actions. In addition, we offer a temper proof audit file to prevent any tempering of recorded audit data. For z/OS customers, the generated Auditing data optionally intergrades with the z/OS System Management Facility leveraging by recording the WebSphere Auditing data as part of the Auditing Type 83 records.
Our WebSphere Secure Proxy has been become a lot easier and more. The WebSphere Secure proxy offers a new DMZ Hardened Proxy profile option. The DMZ Hardened Proxy improves security by minimizing the number of external ports opened, loading only signed JARs, and running as an unprivileged user when binding to well known ports. Both static and dynamic routes are supported by the DMZ Hardened Proxy.
We encourage you to visit our WebSphere Application Server’s Infocenter under What New for more information on these features as well as the many other exciding features we are offering for WebSphere Application Server V7. http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.nd.multiplatform.doc/info/ae/ae/welc_newsecurity.html
Monday, November 3, 2008
EJB 3.0 and Web Services in WebSphere App Server v7.0
@WebService
@Stateless
public class MyEJB3WebServiceBean implements MyCoolService {
...
}
Unfortunately, we weren't able to directly support this scenario via the v6.1 feature packs, since doing so would have required that each feature pack depend on function in the other feature pack -- something that wasn't allowed in the overall definition for the v6.1 feature packs. We published a workaround for this, where you use a "helper class" as the JAX-WS implementation and have that class just forward the incoming requests to the target EJB 3.0 bean. It works just fine, but is nowhere near as nice as just having a single class that's both the endpoint definition and implementation.
The good news is that with WebSphere App Server v7.0, you can directly annotate your EJB 3.0 beans with the @WebService or @WebMethod annotation (just like the code above) and have them directly accessible via a JAX-WS endpoint; no "helper" class required. The Rational Application Developer (RAD) 7.5 tooling also makes it easy to code up your EJB 3.0 beans this way.
The ease-of-use combination of EJB 3.0 and JAX-WS is really, really nice. WebSphere App Server v7.0 makes it easy to implement this powerful combination of function.
Monday, October 27, 2008
New SIP RFCs Supported by WebSphere 7 (Join, Replace and Update)
From abstract of RFC 3911:
This document defines a new header for use with SIP multi-party applications and call control. The Join header is used to logically join an existing SIP dialog with a new SIP dialog. This primitive can be used to enable a variety of features, for example: "Barge-In", answering-machine-style "Message Screening" and "Call Center Monitoring".
From abstract of RFC 3891:
The Replaces header is used to logically replace an existing SIP dialog with a new SIP dialog. This primitive can be used to enable a variety of features, for example: Attended Transfer and Call Pickup.
In terms of RFC 3911, the Join header contains information used to match an existing SIP dialog (call-id, to-tag, and from-tag) to the new dialog being created. From the JSR 116 perspective, the join header can be used to add a new dialog/SIP session to an existing SIP Application session in much the same way that an encoded URI is used. This is achieved by setting the call-id, to-tag and from-tag in the join header of the INVITE to match that of an existing dialog.
In terms of RFC 3991, the Replaces header contains information used to match and replace an existing SIP dialog (call-id, to-tag, and from-tag) to the new dialog being created. From the JSR 116 perspective, the join header can be used to replace an existing SIP session associated with a SIP Application Session with a new dialog/session. This is achieved by setting the call-id, to-tag and from-tag in the replaces header of the INVITE to match that of an existing dialog. Note that it is up to the application to send a BYE on the original dialog, the container will not take care of this for you so that from the JSR perspective there really is not much difference between Join and Replaces.
RFC 3311 support was also added to WAS 7. This RFC defines the use of the Update method. From abstract of RFC 3311:
UPDATE allows a client to update parameters of a session (such as the set of media streams and their codecs) but has no impact on the state of a dialog. In that sense, it is like a re-INVITE, but unlike re-INVITE, it can be sent before the initial INVITE has been completed. This makes it very useful for updating session parameters within early dialogs.
Wednesday, October 22, 2008
Asynchronous Request Dispaching, Part 2
This is part two of my previous blog where I said I would discuss the differences between WebSphere’s Asynchronous Request Dispatcher and the Asynchronous Servlet Proposal from the Java Community Process.
The initial Servlet EG proposal introduced a different model of asynchronous servlet processing through suspend, resume, and complete methods. The basic idea is to allow a servlet to initiate asynchronous operations and re-dispatch to the same servlet once these operations are complete. A suspend tells the container to disable the response so that additional logic in the initial dispatch doesn’t affect the response. Meanwhile, the application programmer uses another thread to do some asynchronous work required by the request. Once that is complete, resume is called which tells the container to schedule a dispatch of the request back through the filters and servlets. Alternatively, complete can be called to simply close the output without a re-dispatch. This has been debated thoroughly, and there are still competing proposals which are arguably less powerful. However, since this is the only publicly discussed proposal, I will use that for comparison.
I will present a few scenarios and show the way they can be solved in ARD and the Servlet EG proposal. This should help you understand the pluses and minuses of using one paradigm over the other.
Example 1: A request needs to print out a table that will be filled in with the results of two slow queries to external resources.
EG Proposal:
1. Original servlet prints out the table up to the point query 1 results are required
2. Suspend the request
3. Kick off query 1
4. Resume/re-dispatch the request after query 1 completion
5. Write results of query 1
6. Write next portion of the table
7. Suspend the request
8. Kick off query 2
9. Resume/re-dispatch the request after query 2 completion
10. Write results of query 2
11. Finish writing the table from the original servlet
ARD:
- Original servlet prints out the table up to the point the query results are required on thread 0
- Do async include on thread 1 to the servlet that does query 1
- Concurrently, thread 0 continues writing the table
- Do async include on thread 2 to the servlet that does query 2
- Concurrently, thread 0 continues writing the table
- Thread 1 returns and flushes content to the client up to query 2
- Thread 2 returns and finishes the response
ARD Advantages:
- ARD can finish sooner because query 1 and 2 are running simultaneously. The EG Proposal kicks them off 1 at a time.
- With the EG Proposal, the application programmer could emulate query 1 and 2 running simultaneously, but they would have to do their own threading.
- With ARD, the original thread can write out the full outline of the page because the container has the smarts to go back in and find the correct position for the response content. The EG Proposal does not.
- The EG Proposal would have more issues with tracking state because the resume goes back through the filter and servlet request handling methods. The filters and servlets would have to make sure they are not duplicating output that was written before the initial or subsequent suspend.
- Order of completion is not important when using ARD.
ARD Disadvantages
- ARD only allows asynchronous operations inside of includes.
- More threads are used.
Example 2: A request requires the results of two slow queries to external resources where state from query 1 is required for query 2 to work.
EG Proposal:
- Enter the original servlet
- Suspend the request and kick off query 1
- Resume the request after query 1 completion
- Re-enter the original servlet
- Suspend the request and kick off query 2 with state from query 1
- Resume the request after query 2 completion
- Re-enter the original servlet and finish
ARD:
- Enter the original servlet using thread pool A.
- Do async include using thread pool B to the servlet that does query 1
- Concurrently, the original servlet processing continues
- Thread from thread pool A waits for results from query 1.
- Do async include using thread pool B to the servlet that does query 2
- Query 2 returns and finishes the response
ARD Disadvantages:
- Because ARD does not have the ability to re-dispatch, we end up blocking the original thread to wait on the results of query 1.
From these examples, I conclude that ARD is best used for executing requests that each have multiple asynchronous operations that are independent of one another. Also, the context propagation that ARD provides is an added benefit. Similar context propagation may be introduced as an additional specification in Java EE 6, but it will not likely be a prerequisite for asynchronous servlets.
There are certain caveats that should be considered in both the ARD and RRD features and they are not one size fits all solutions. Feel free to check out details in the
Tuesday, October 21, 2008
Using WS-Policy to configure WS-ReliableMessaging
Did I mention that WS-ReliableMessaging has just shipped in WebSphere Application Server v7.0? Previously delivered as part of the Web Services Feature Pack for WebSphere Application Server v6.1, the function has been enhanced by conformance to the WS-I Reliable Secure Profile and the impact of WS-Policy on configuring WS-ReliableMessaging.
Using WS-Policy with WS-ReliableMessaging provides improved levels of flexibility on when this quality of service is applied to your Web Service messages. We have introduced a new 'strictlyEnforceWSRM' property that can be applied to the client and the service.
It enables you to chose whether your service and client want to enforce Reliable Messaging or simply support Reliable Messaging. WS-Policy then determines what the common configuration option is between the client and server. For example, if your server policy states that it supports WS-ReliableMessaging , and the client is configured to enforce WS-ReliableMessaging , then WS-ReliableMessaging will be used. However, if the client has no WS-ReliableMessaging configured then the server will not use it.
Finally, unlike Real Snail Mail, we have been working hard on WS-ReliableMessaging performance this release as well. I hope you'll appreciate the results.
Using the Spring Framework with WebSphere Application Server v7.0
AspectJ support
From Spring 2.5 onwards, Spring’s AspectJ support can be utilised. In this example we first define a <tx:advice> that indicates that all methods starting with "get" are PROPAGATION_REQUIRED and all methods starting with "set" are PROPAGATION_REQUIRES_NEW. All other methods use the default transaction settings.
|
|
Another alternative mechanism for declaring transaction settings is to use the Spring annotation-based transaction support. This requires the use of Java 5+, and therefore cannot be used with WebSphere Application Server V6.0.2.x.
First add the following to the spring.xml configuration:
<tx:annotation-driven/>
|
The EJB 3.0 specification defines the Java Persistence API (JPA) as the means for providing portable persistent Java entities. WebSphere Application Server V7 and the WebSphere Application Server V6.1 EJB 3 feature pack both provide implementations of EJB 3 and JPA; it is also possible to use the Apache OpenJPA implementation of JPA with WebSphere Application Server V6.1
Using an Annotation style injection of a JPA EntityManager is possible:
@PersistenceContext |
<!-- bean post-processor for JPA annotations --> |
For JMS message sending or synchronous JMS message receipt, JMSTemplates can be used. This includes the use of Spring’s dynamic destination resolution functionality both via JNDI and true dynamic resolution.
The following example shows the configuration of a resource reference for a ConnectionFactory. This reference is mapped during application deployment to point to a configured, managed ConnectionFactory stored in the application server’s JNDI namespace. The ConnectionFactory is required to perform messaging and should be injected into the Spring JMSTemplate.
<resource-ref> |
<jee:jndi-lookup id="jmsConnectionFactory" jndi-name=" jms/myCF "/> |
JNDI resolution:
jmsTemplate.send("java:comp/env/jms/myQueue", messageCreator);
Dynamic resolution:
jmsTemplate.send("myQueue", messageCreator);
If you have been using the Spring Framework with WebSphere Application Server already, you may have come across this developerWorks article http://www.ibm.com/developerworks/websphere/techjournal/0609_alcott/0609_alcott.html
It has had a facelift recently, and is updated with new content including further configuration details of using WebSphere Application Server with the Spring Framework.
Friday, October 17, 2008
Asynchronous Request Dispatching, Part 1
This is my first blog so I should say a little about myself before I get into things. My name is Maxim, or Max for short, and I’ve been working on the WebContainer since 2003 in various capacities. In Version 7 of WebSphere Application Server (WAS), I acted as the WebContainer architect and the Servlet Expert Group (EG) member representing IBM.
If you have been following the latest in Servlet technology, you would know that the expert group has finally decided to try to standardize asynchronous servlet support for Servlet 3.0. This came as somewhat of a surprise because I had already been working with my colleague Erinn Koonce on a related feature for WAS version 7 called the Asynchronous Request Dispatcher (ARD). Naturally, as options are discussed in the Servlet EG, I compare them to ARD and think about why you’d want to adopt one over the other.
ARD came about as a result of another feature we put in WAS Version 6.1 called the Remote Request Dispatcher (RRD). RRD was a requirement from WebSphere Portal to help them support Web Services for Remote Portlets (WSRP). The problem that WSRP tries to solve is that in some Portal environments one problem web module can bring down the entire application server and its applications. The natural response is to just add more resources to the deployment. However, this may be overkill for the web modules that are well behaved. Since many applications consist of multiple web modules that interact with one another through request dispatcher includes, each web module had to reside on the same server.
RRD provided the mechanism to separate up these applications into other servers or clusters without having to rewrite the interaction logic between web modules. However, there was a major drawback resulting from the cost of packaging and sending of the metadata across the network that each remote request dispatch required. To help alleviate this, Portal wanted a mechanism to execute these remote request dispatches asynchronously. Thus, ARD was born.
The Asynchronous Request Dispatcher does the following:
- Allows request dispatch includes to execute asynchronously and concurrently
- Maintains proper ordering of response output
- Propagates request and thread context
- Allows decoupling of the dispatching of the request with the position where the content should be inserted
- Allows for client side aggregation of results
In my next blog, I will discuss the differences between the two proposals.
Monday, October 13, 2008
New WAS v7.0 Web Services Functionality
The work (from a technology perspective) focused on 2 specific areas:
- JCP-based programming model updates
- Continuation of filling out the Web Services Roadmap
Extending beyond what's in just the JCP specification, the combination of EJB 3.0 beans and JAX-WS annotations also brings support for SOAP/JMS-based beans to JAX-WS-based services. This makes it consistent for those developers looking to use existing reliable transports as a way to send/receive their web services requests. As part of that support, we are tracking the emerging SOAP/JMS standard being developed at W3C.
With respect to filling out the Web Services roadmap, WebSphere v7.0 upgrades support for numerous OASIS and W3C specifications to their official standardized levels (as well as providing support for their pre-OASIS levels for versions previously introduced within WebSphere). OASIS WS-AtomicTransactions and WS-BusinessActivity were both upgraded to their 1.1 levels (so WebSphere supports both 1.0 and 1.1 levels now). The OASIS WS-Trust and WS-SecureConversation specifications have also been upgraded to their OASIS 1.3 levels as well as support for OASIS WS-SecurityPolicy 1.2 being introduced. The OASIS Kerberos Token Profile 1.1 is also now supported in v7.0 providing support for single signon with Keberos tokens.
With the addition of WS-SecurityPolicy also means that we've introduced support for W3C's WS-Policy 1.5 specification. As such, WebSphere now supports the ability to expose WS-Policy assertions for services exposing WSDL endpoints supporting the qualities of service attached at that endpoint (including Security, ReliableMessaging, Addressing, and Transactions). That information is available via the typical ?wsdl exposed for the service as well as a WS-MetadataExchange request to the service endpoint too.
To continue focusing on improving the ease-of-use experience for WS-Policy, WebSphere has also exposed the ability on the client side to configure itself based on the policy assertions exposed in the published service's WSDL file. This makes it easy to have the client configure itself (or calculate an effective policy based on the clients capabilities).
In addition to the standards upgrades, v7.0 continues to focus on other enhancements to the existing functionality (both functional and non-functional) which continues to enhance the maturity and ease-of-use to the development and adminstration of web services. For example, WS-Notification services now can take advantage of PolicySets. PolicySets themselves have been enhanced to support naming the configurations as well as the bindings. These can now be imported and exported easily to allow these pre-configured systems to be moved from one topology to another. For example, moving from a development environment to a test environment to a production environment.
Andrew Spyker had already talked about some of the dramatic performance improvements introduced in v7.0 for web services.
I guess to make a long story short, there's lots of good new stuff in the web services space. I hope that you find the links provided above as a good starting point to quickly get pointers to more information on the topics discussed.
New WAS v7.0 SIP Function
First, we added support for the following RFCs:
- 3263 - Locating SIP Servers
- 3311 - The SIP Update method
- 3325 - Private Extensions to the Session Initiation Protocol (SIP) for Asserted Identity within Trusted Networks
- 3891 - The SIP Replaces Header
- 3911 - The SIP Join Header
- 4475 - SIP Torture Test Messages
In WAS v6.1, we had supported RFC 3263 aside from section 5 but completed section 5 in this release. The final RFC there, the SIP torture test messages, refers more to a testing effort than function. This torture testing combined with our already rigorous telco carrier grade testing will help WAS v7.0 be one of the most stabile SIP application servers on the market.
Beyond the additional standards support, our SIP Proxy which fronts the application server had several enhancements. It can now support DMZ deployments as discussed here, clustering of the proxy servers when behind the firewall, and an improved load balancing to further reduce call loss in some error conditions associated with retransmissions. Finally, also in our converged Servlet Container, users will notice that the digest authentication support has been made much better.
Friday, October 10, 2008
What's NEW in WebSphere v7
Here are links to the developerWorks PodCast site and a little teaser posted as a podcast announcing the chat.
Tuesday, October 7, 2008
DMZ-hardened WebSphere Proxy
In WAS v7, customers have access to a DMZ-hardened version of the proxy server. This server ships on a separate installer that contains a subset of the full WAS ND installation. It contains a few notable differences from the ND install that make it suitable for installation in a DMZ:
- No JDK: The secure proxy utilizes only the JRE, so no compiler is available in the DMZ.
- Fewer Listening Ports: The security proxy can be configured to have as few as two listening ports (HTTP and HTTPS).
- Slimmer set of jars: Since the proxy does not require certain functionality (e.g. web container, EJB container, web services, etc.), jars containing this function are omitted from the install for security and memory footprint purposes.
- Slimmer set of active services: The secure proxy utilizes runtime provisioning (new in v7) to start only the required services. Services like JNDI, application install, and ORB are not started.
The DMZ Secure Proxy Server is a nice upgrade over the IHS plug-in and Edge Proxy in terms of feature set, scalability, performance, and WAS integration and I am very excited to see customers begin reaping the benefits of deploying it.
Friday, October 3, 2008
Join me in Harrisburg, PA on the 15th to talk about BPM and SOA
Thursday, October 2, 2008
v7 UPDI "Update Installer" and v7 IF "Installation Factory" (a really nifty tool)
Since UPDI is the only way to update WebSphere servers, every customer already knows about it (if you really don't, please immediately see the WebSphere v7 InfoCenter UPDI information).
Many (most?) customers have still not discovered the nifty "Installation Factory" (IF) tool. In a nutshell, IF is a way for a customer to merge an initial WebSphere 6.1.0.0 (or 7.0.0.0) plus a FixPack (say 6.1.0.17) plus multiple interim fixes (iFixes) into a single, smaller, install called a "Customized Install Package" (CIP). The resulting CIP can be used to do a "scratch" install of that combination, or it can do a "slip" upgrade of an existing installation. IF is even capable of merging several product CIPs into a combined single "Integrated Install Package" (IIP). If you are not familiar with IF the I suggest you browse the WebSphere v7 InfoCenter IF information, and also read the DeveloperWorks article "Using Custom Installation Packages to install and update WebSphere Application Server in large development environments". Even if you are still on v6.1, you can download and use the IF-v7 to great advantage. Give the preceeding IF-v6.1 article (but still fully applicable to v7) a read and I guarantee you will be pleasantly surprised. The most common comment I hear from customers is "why didn't someone tell me about IF" - so, you have now been told. :-)




