Are you an experienced BEA Weblogic Server administrator ?
Are you looking for a Project ?
Please let me know.
Are you an experienced BEA Weblogic Server administrator ?
Are you looking for a Project ?
Please let me know.
In the past the picture was clear.
On one hand there were “open” standards like the J2SE/J2EE maintained via the Java Community Process(JCP) and hosted by Sun Microsystems.
Other vendors participated and helped the standards evolve.
On the other hand were de facto standards, mainly set by Microsoft, for instance MFC or the .NET technology stack.
Currently the picture is changing.
In my perception the pace in the Java world has become slower. How long did it take to finish for instance the EJB2.1 specification ?
In the meantime Microsoft inceased their effort to elaborate their technologies.
Beside that new boards like WS-I to were founded to help establish the WS-* standards. If you have a look at the specifications you will notice that the key players are IBM, Microsoft and BEA.
In addition to that BEA and IBM work closely together to write Java Joint Specifications.
Quote from the announcement:
“In response to requests from customers and joint Independent Software Vendor (ISV) partners, BEA and IBM are collaborating on specifications for programming models and APIs for Java(tm) 2 Enterprise Edition (J2EE) application servers that provide programmers with simpler and more powerful ways of building portable server applications.”
Why not submitting proposals to the JCP first ?
Many of the upcoming standards are mainly driven by IBM, Microsoft and BEA.
In my opinion the benefit is, that it’s no more everyone against Microsoft but everyone for innovation.
The german dotnetpro magazine published my latest article about the new C++ template features in VS.NET.
With the 2003 release C++.NET achieved nearly 100% standards conformance.
This might be interesting news for the virtual machine vendors, because certainly they won’t write their VM’s from scratch for every new operating system. This can be achieved for instance by using ANSI C++.
What are the strengths of browser based applications ?
Sophisticated user interfaces ? No ! (slow server roundtrips)
Easy development ? No ! (a lot of scripts)
Offline capability ? No !
Easy deployment ? Yes !
The most important feature of browser based applications is the easy deployment.
You just have to update the server to update your clients as well.
But everything is based on the HTTP which is relatively simple and not suitable to support rich clients.
Sure there is Java Webstart and .NET Zero Touch Deployment which enables you to type something like
http://ww.pleus.net/MyRichClient.jnlp
or
http://ww.pleus.net/MyRichClient.exe
in your browser to start your managed application.
By using this approach it’s possible to enable rich user experience and user server based deployment.
But that’s not all…
During this years PDC Microsoft announced their next model for the development of user interfaces called Avalon.
This technology is based on XAML (XML Application Markup Language). This enables us to develop rich clients in a declarative way like HTML.
The following snippet is an example of how to write the HelloWorld application with XAML:
<TextPanel xmlns=”http://schemas.microsoft.com/2003/xaml” Background=”BlanchedAlmond” FontFamily=”Comic sans MS” FontSize=”36pt” HorizontalAlignment=”Center”>
Hello, world!
</TextPanel>
This document can be distributed over HTTP. The client uses it to create a UI which runs into the browser or standalone.
This is only a new version of HTML, you might say.
But in contrast to HTML it enables you to develop fully-fledged rich clients in a mostly declarative way.
That’s promising, I think.
The following document gives a good overview about the different encoding styles, and it’s strenghts and weaknesses:
http://www-106.ibm.com/developerworks/webservices/library/ws-whichwsdl/
Wouldn’t it be nice to have an editor other than notepad.exe to write WSDL files from scratch ?
Have a look at:
http://www.capescience.com/downloads/wsdleditor/
It’s free !
Do you remember the times when C++ was the mainstream programming language in enterprise level projects ?
A popular approach was to simplify the code by defining a lot of macros.
Even Microsoft did that very extensively in their MFC implementation for instance in their ubiquitous messagemaps.
The benefit was an easy progamming model – just add a few macros and be happy.
On the other hand it was very difficult to understand what really happened in the background.
This was especially true for user defined macros which could only be used in the context of a certain project.
Later languages like Java and C# took over and macros became history (C# has a preprocessor but no macros). The nightmare was over.
Todays software systems aren’t easier than in the past. Therefore the language engineers considered it to be a good idea to support some metainformation facility in form of attributed programming.
In .NET you have attributes.
[WebMethod]
public string HelloWorld()
{
return “Hello, .World!”;
}
Java introduces the Language metadata facility (JSR175) which is currently a community draft. This approach is based on javadoc comments.
/**
* @common:operation
*/
public String HelloWorld()
{
return “Hello, World!”;
}
Looks somehow similar, right ?
But it’s not.
In .NET the attributes are stored in the assemblies metadata and therefore can be accessed at runtime.
They can be determined by reflection as shown in the following example:
class Test
{
static void Main(string[] args)
{
Type t = typeof (Test);
MemberInfo[] members = t.GetMember(“DoIt”);
object[] attrs = members[0].GetCustomAttributes(false);
Console.WriteLine(attrs[0].ToString());
}
[Cool()]
public static void DoIt()
{
}
[AttributeUsage(AttributeTargets.All)]
public class CoolAttribute : Attribute
{
}
}
In Java they merely serve to generate code at compile time.
Java supports reflection as well. But due to the fact that the attributes are not stored in the metadata they can’t be determined by reflection at runtime.
What’s the conclusion ?
On one hand both approaches are very useful to simplify the programming model for the developer.
On the other hand they are like C++ macros. A developer can define his/her own attributes which nobody outside a project might know.
This leads to applications which are hard to maintain.
In order to create maintainable software systems I think developers should define their own attributes/annotations as little as possible.
This will ease the job especially for new team members which join a project at a later time.
When you read different forums there is a lot of talk about serialisation of plattform dependent types.
Pepole are asking how to get a .NET Type (e.g. DataSet) from Java or vice versa (e.g. Resultset).
If you are developing end to end .NET or J2EE applications you don’t have to worry about that. The runtime does most of the work for you and if you ask for a DataSet you will get one.
But when it comes to cross plattform what will you get when you ask for a DataSet from an J2EE application ?
To answer this Question we have ask another one.
What makes up an object ? Answer: It’s state and behaviour.
When you request a DataSet you will only get the state and type information. But what makes a DataSet so powerful ? It’s the behaviour.
If you don’t have the concept of a DataSet on the J2EE platform you can get only the half of the object representation. It’s a cripple object.
The same it true when you request a Java Resultset from .NET.
In order to develop interoperable Web Services you have to rely on XML Schema types only. First define the schema and wsdl contract and then generate the service from it.
It’s the same as you might know from CORBA or COM Interface Definition Language (IDL).
Tool support is available:
.NET -> wsdl.exe /server …
JWSDP -> wscompile -gen:server …
This article on MSDN gives a good overview over the most important upcoming Web Service standards. It’s worth a look.
As we know Web Services are about interoperability.
Let’s prove it I thought and tried to figure out how far we can get when we try to write interoperable Web Services.
On the .NET side I used WSE2.0. On the J2EE it’s a little bit more complicated.
You have to choose amongst Axis, IBM WSDK, Sun’s JWSDP,BEA WLS, Glue, etc. etc.
Although I know that it’s not the most powerful SDK, I chose Sun’s JWSDP1.2 because it is what we will see in all the other products earlier or later.
In general interop works if you follow some best practices.
Here are my first insights:
1. Document/Literal with SoapAction routing does not work for cross plattform interoperability.
In the first attempt we used VS.NET to generate the WSDL contract. It produced a document/literal style.
The document contained the soapaction attribute in the soapbinding:operation element. The JWSDP didn’t recognise this attribute to generate client proxies.
Therefore the service was called with the http soapaction-header of “”. This caused the service to raise an error.
When we used JWSDP to generate the WSDL it produced an RPC/encoded version. Using this as a basis for the service generation worked for both platforms.
But using RPC/encoded is not recommended due to the fact that document/literal will be the standard of the future because of it’s selfdecribing nature.
2. SOAP attachments
JWSDP dows not support DIME for SOAP attachments. The application/dime mime type is missing from the HTTP accept-header when sending a request.
On the other hand WSE does not support MIME attachments. Axis supports DIME. Therefore it’s not possible to write interoperable Web Services with DIME or MIME attachments. In order to be interoperable avoid attachments until a standard has been established.
DIME support in WSE is pretty good.
It’s not possible to write an J2EE service with attachments (MIME) with the help of JAX-RPC. One has to use a the lower level API SAAJ and create a servlet to process the message on the HTTP level.
3. JWSDP does not support WS-Security. Only HTTP based Authentication is possible.
Conclusion:
WSE2.0 supports a lot of features and opportunities but for interoperability you need two parties. The most important aspect of Web Services is that you can connect different platforms in a secure and reliable way. My impression is to make this reality there is still a long way to go. Let’s see…