<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>Andy Piper</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/andypiper/" />
   <link rel="self" type="application/atom+xml" href="http://blogs.oracle.com/andypiper/xml/rss.xml" />
   <id>tag:blogs.oracle.com,2009:/andypiper//180</id>
   <updated>2008-07-28T12:46:34Z</updated>
   
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type Enterprise 4.23-en</generator>


<entry>
   <title>SpringSource announces SpringSource Application Platform (S2AP)</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/andypiper/2008/07/springsource_announces_springs.html" />
   <id>tag:blogs.oracle.com,2008:/andypiper//180.5575</id>
   
   <published>2008-07-28T12:46:26Z</published>
   <updated>2008-07-28T12:46:34Z</updated>
   
   <summary>On April 30th SpringSource announced their application platform - a lightweight server framework based on OSGi, Spring and Spring-DM. Oh wait that sounds like BEA Event Server ...</summary>
   <author>
      <name>andy.piper</name>
      
   </author>
   
   
   <content type="html" xml:lang="en-us" xml:base="http://blogs.oracle.com/andypiper/">
      <![CDATA[<p>So Billy Newport <a href="http://www.devwebsphere.com/devwebsphere/2008/05/springsource-ap.html">beat me to it</a>, blogging about SpringSource's (formerly Interface21) <a href="http://blog.springsource.com/main/2008/04/30/introducing-the-springsource-application-platform/">application platform</a>. Nevertheless I thought I would share a few thoughts on this since BEA has been shipping a <a href="http://edocs.bea.com/wlevs/docs20/get_started/overview.html">lightweight application platform</a> for a year now.   <p>First of all congratulations to all the folk at SpringSource on the release! I know many of them personally and they are all great guys, great engineers and forward thinking innovators. Shipping an application platform is the next natual evolution for them and I look forward to their release stimulating further innovation from all the vendors in this space. </p>  <p>Now of course I don't personally see this as innovation. Event Server (WLEvS) is a lightweight application platform built using <a href="http://edocs.bea.com/wlevs/docs20/index.html">OSGi, Spring and Spring-DM</a>. Indeed, as someone pointed out on TSSJ, BEA has been an active contributor to the Spring-DM project - and we have been using it in BEA products - since its inception. Spring-DM is central to WLEvS, it represents the programming model for WLEvS developers, much like it does in S2AS, and we have <a href="http://edocs.bea.com/wlevs/docs20/create_apps/overview.html#programming_model">extended</a> it using standard Spring hooks. Likewise we have a <a href="http://edocs.bea.com/wlevs/docs20/create_apps/deploy.html">deployment model based on OSGi bundles</a>, moniitoring, logging, management - the list goes on and I won't bore you with all the URLs. So you can see why claims that S2AS is ground-breaking in some way leave me a little nonplussed. Even OSGi-based LTW, which I think is one of the truly cool features of S2AS, <a href="http://www.eclipse.org/equinox/incubator/aspects/comparison_ajeer_aosgi.php">has been around for a while</a>. And the TSSJ comment that accessing OSGi services from webapps was a game-changing innovation, we have been doing for two years now! (We actually found that publishing OSGi services inside a webapp's JNDI tree made a lot more sense to users.) </p>  <p>I do like the dynamic provisioning features of S2AS, although this is not a great deal different to the maven integration done by <a href="http://geronimo.apache.org/xbean/">xbean</a> and initially integrated into Spring-DM by your truly. The key thing is that the SpringSource guys have productized it with a <a href="http://www.springsource.com/repository">bundle repository</a> backing it. Indeed, that's really the essence of what they have done - taken a set of existing technologies, in various states of readiness, and integrated them into a cohesive, production-quality whole. When I talk to customers that's one of the things they like about Spring in general - it pulls together other open source projects in a way that makes them easy-to-use, with all of the integration issues resolved. </p>  <p>I must talk a little about the choice of GPL3 license since it has generated a fair amount of controversy. In my opinion the use of GPL is a mistake. Here's why - SpringSource are a commercial outfit, ultimately they are valued on how well they are able to generate returns on their assets (consultants, IPR, user base etc). Free does not contribute to this. If something is free, regardless of whether it is GPL3 or ASL licensed, it does not contribute directly to this financial return. What matters is what is called in the literature &quot;strategic complimentaries&quot; (if you want the full story read my upcoming MBA thesis ;)) - basically stuff that you control (and can protect) that you can make money off that is driven by the usage of the free stuff. Things like training, consultancy, other proprietary software, support, subscriptions etc - all the things that SpringSource do so well. But the value derived from these things is dependent on one key ingredient - <em>market penetration of the free stuff</em>. The more the free stuff is accepted by the market, the more the stuff you make money off is worth. In fact it gets better than this - get enough penetration and customers will hesitate to use a competitor, a host of 3rd-party services will grow up around your free stuff (what are called &quot;network effects&quot;) and customers will end up with switching costs that are too high to be worth contemplating - things like retraining all your developers, getting different tools etc, etc. So penetration is the key. Now you tell me, which license - GPL3 or ASL - is likely to achieve more penetration? The answer is self-evident. So what if some big competitor copies your invention - your invention is free anyway so who cares - what matters is that it's increasing the value of the stuff that matters do you. So I'm with Billy - the application platform will become commodity and <em>its in SpringSource's interest for this to be the case</em>. </p>  <p>Ok I'll get off my soapbox. Just to round this out, look out for the upcoming WLEvS 3.0 release, due out in the summer, which incorporates many of the features - and more - being considered by SpringSource for S2AS 2.0. Clustering, management console, single system image just to name a few.</p></p>]]>
      
   </content>
</entry>

<entry>
   <title>Co-operative Open Source</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/andypiper/2008/07/cooperative_open_source.html" />
   <id>tag:blogs.oracle.com,2008:/andypiper//180.5574</id>
   
   <published>2008-07-28T12:45:12Z</published>
   <updated>2008-07-28T12:45:19Z</updated>
   
   <summary>When open source works well it Really Works.</summary>
   <author>
      <name>andy.piper</name>
      
   </author>
   
   
   <content type="html" xml:lang="en-us" xml:base="http://blogs.oracle.com/andypiper/">
      <![CDATA[<p>I just finished fixing a bug in the unreleased development version of <a href="http://edocs.bea.com/wlevs/docs20/index.html">WebLogic Event Server</a>. The code in question leveraged some advanced features of the <a href="http://www.springframework.org/">Spring Framework</a> and was something that I had had to code around in EvS 2.0. Fortunately, for me, I had spent a bunch of time with <a href="http://blog.springsource.com/main/author/juergenh/">Juergen Hoeller</a> at <a href="http://www.springone.com/display/SpringOne08/Home">SpringOne</a> last year discussing some of the ways we were trying to use Spring in EvS and how we were running into a few problems. The free beer that BEA provided at the event was a great persuader and I subsequently raised a bunch of enhancement JIRA's which Juergen fixed for me (<a href="http://opensource.atlassian.com/projects/spring/browse/SPR-3609">SPR-3609</a>, <a href="http://opensource.atlassian.com/projects/spring/browse/SPR-3364">SPR-3364</a>, <a href="http://opensource.atlassian.com/projects/spring/browse/SPR-3608">SPR-3608</a> for the curious).   <p>The great thing is that since EvS is essentially an open platform, we can leverage these technologies bringing value-added functionality to market more quickly. Even better SPR-3608 turned out to be absolutely essential for EvS 2.0 and so, since Spring is open source, I was able to make the fix myself and allow EvS 2.0 to ship on time. Now that we are working on EvS 3.0 - which is based on Spring 2.5.x - I am able to pick up the official fix from Juergen and don't have to maintain a forked version of Spring 2.0.5. </p>  <p>This experience is not unique. Many features in <a href="http://www.springframework.org/osgi">Spring-DM</a>, which we use heavily in EvS, were influenced by EvS requirements (or coded by me!). Although the SpringSource folks are quick to challenge stupid ideas, they are also cognizant of the fact that customers drive their business, and <a href="http://blog.springsource.com/main/author/costinl/">Costin</a> graciously accepted the majority of my requests and submissions for Spring-DM. In fact one of the key features of Spring-DM - <a href="http://static.springframework.org/osgi/docs/1.0.1/reference/html/bnd-app-ctx.html#bnd-app-ctx:extender">automatic activation of application contexts</a>, which is essentially the <a href="http://edocs.bea.com/wlevs/docs20/create_apps/deploy.html">EvS deployment model</a> - was conceived and implemented by a BEA engineer. </p>  <p>As an engineer who has had to deal with a somewhat more glacial approach from other organizations, the approach is a breath of fresh air. And the key is open-ness - the open-ness of the EvS platform approach and the opensourciness [?] of many of the technologies that we leverage - not just Spring. This gives a great deal of comfort to our customers, since their commitment to our platform is not a case of vendor lock-in, but more a synergistic union of open technologies. They benefit not just from a fast turnaround on development, but wider understanding and support of the underlying technologies. </p>  <p>And the bug? Too embarrassing to discuss.</p></p>]]>
      
   </content>
</entry>

<entry>
   <title>WebLogic Event Server - Why we used Spring</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/andypiper/2008/07/weblogic_event_server_why_we_u.html" />
   <id>tag:blogs.oracle.com,2008:/andypiper//180.5573</id>
   
   <published>2008-07-28T12:44:10Z</published>
   <updated>2008-07-28T12:44:17Z</updated>
   
   <summary>WebLogic Event Server (WLEvS) makes heavy use of the Spring framework and Spring-OSGi. Why did we do this? What benefits does it give us?</summary>
   <author>
      <name>andy.piper</name>
      
   </author>
   
   
   <content type="html" xml:lang="en-us" xml:base="http://blogs.oracle.com/andypiper/">
      <![CDATA[<p>I have now been working on WLEvS for about 8 months. Before that time I was heavily involved with the development of <a href="http://www.springframework.org/osgi">Spring-OSGi</a> and making sure that it met the needs of WLEvS.   <p>Why the interest in Spring? What has BEA to gain by so extensively using an Open Source technology in one of its products? Well the answer is actually pretty easy. Event Driven Architectures (EDA) are now reaching the mainstream both in terms of interest and in terms of development. They are a key part of Gartner's Extreme Transaction Processing (XTP) vision for the future - a vision in which BEA is currently in pole position. But enough of the marketing, developers want to know what it means for them in terms of their day-to-day jobs. At a development level EDA is significantly different to things like Java EE and thus requires new programming paradigms and environments. So building event driven applications requires something other than Java EE, but Java EE has a key advantage - its a standard and everyone is familiar with it. Love it or hate it is pretty easy to find developers with Java EE experience. But what happens when you need to do something new? Proprietary APIs are no good - all customers are wary of &quot;vendor lock-in&quot;, and developers especially so. The answer is pretty simple - <em>use something that developers are already familiar with</em>. Hence, in a word, Spring. </p>  <p>BEA has a pretty long and positive history with Spring, as evidenced on our <a href="http://dev2dev.bea.com/spring/">Spring resource page</a>. But more than just providing a familiar programming environment, Spring provides a powerful extension mechanism for event server developers and a user friendly way of accessing <a href="http://www.osgi.org">OSGI services</a> via Spring-OSGI. Furthermore we have used Spring 2.x's extension mechanism to implement WLEvS' <a href="http://edocs.bea.com/wlevs/docs20/create_apps/overview.html#programming_model">domain specific language for network assembly</a>. The nice thing about this is that if you don't know Spring you don't have to use it, but if you want to go deeper you still can. </p>  <p>The simple things are easy and the difficult things are possible, or as the Spring folks are fond of saying, &quot;simple <em>and</em> powerful.&quot;</p></p>]]>
      
   </content>
</entry>

<entry>
   <title>Spring 2.0 and Message Driven POJOs</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/andypiper/2008/07/spring_20_and_message_driven_p.html" />
   <id>tag:blogs.oracle.com,2008:/andypiper//180.5572</id>
   
   <published>2008-07-28T12:42:48Z</published>
   <updated>2008-08-14T11:35:50Z</updated>
   
   <summary>Message Driven POJOs are a new feature in Spring 2.0. In my SpringOne talk I demonstrated Message Driven POJOs running on WebLogic Server. Here I describe the example in more detail and its deployment.</summary>
   <author>
      <name>andy.piper</name>
      
   </author>
   
   
   <content type="html" xml:lang="en-us" xml:base="http://blogs.oracle.com/andypiper/">
      <![CDATA[<p>One of the new features of Spring 2.0 is message driven-POJO's or MDP's. These are like MDB's but do not require the EJB framework. In Spring 2.0 you get a lot of different options for creating MDP's but in general you simply need to implement a JMS message listener and wire it into Spring.   <p>I have implemented an <a href="http://blogs.oracle.com/andypiper/mdp.jar">MDP sample</a> attached to this arcticle. It requires <a href="http://maven.apache.org/">maven2</a> to build, so make sure you download and install that first. </p>  <p>Take a look at MessageTraderBean.java in the sample. The guts of the implementation is onMessage() which simply receives a quote on a JMS topic and prints it out: </p>  <pre>  public void onMessage(Message msg) {<br />
    ObjectMessage tm = (ObjectMessage) msg;<br />
    try {<br />
      Quote quote = (Quote)tm.getObject();<br />
      if (quote.getShares() &gt; tradeLimit) {<br />
        log(&quot;Trade &quot; + quote.toString() + &quot; was denied&quot;);<br />
      }<br />
      else {<br />
        lastQuote = quote.toString();<br />
        log(&quot;Received new quote : &quot; + lastQuote);<br />
      }<br />
    }<br />
    catch(JMSException ex) {<br />
      ex.printStackTrace();<br />
    }<br />
  }</pre><br />
Note how there is no extraneous framework code and indeed no references to Spring at all - the beauty of dependency injection! </p>

<p>In order to the wire up the MDP we need a Spring configuration file which is src/main/webapp/WEB-INF/applicationContext.xml. Inside you can see various Spring classes being wired together, in this instance I am using <code>org.springframework.jms.listener.DefaultMessageListenerContainer</code>. For more information on these consult the <a href="http://static.springframework.org/spring/docs/2.0.x/api/index.html">Spring documentation</a>. The one important thing to note here is the use of commonJ WorkManagers (I'm not going to show the code here since putting XML in a blog entry is such a pain!). Since we are going to be running the sample on WebLogic Server we don't want to start creating threads inside the application. Fortunately Spring 2.0 provides a way of deferring the asynchronous execution required by MDP's to WorkManagers as well as simpler thread pooling schemes. The WorkManager we are referencing is defined in web.xml (in the same directory) with WebLogic specific configuration in weblogic.xml. For more information on configuring WorkManagers consult the <a href="http://e-docs.bea.com/wls/docs92/config_wls/self_tuned.html#understanding_work_managers">WLS documentation</a>. For more information on Spring 2.0's TaskExecutor support consult the <a href="http://static.springframework.org/spring/docs/2.0.x/reference/scheduling.html">reference manual</a>. </p>

<p>In order to use the example you need to create an appropriate JMS topic for publishing messages to. So fire up a server and start the console. </p>

<p>First of all you will need to create a persistent store for the server, so select Services-&gt;Persistent Stores and create a new FileStore. The name doesn't matter. You can select &quot;.&quot; as the directory. </p>

<p>Next, you will need to create a JMS server using that persistent store. This is where the names start getting important in order for the Spring application to find the right topic. You will notice that I have called the destinationName in the applicationContext.xml &quot;myserverJMSServer/spring-jms!quotes&quot; which in English is translated as &quot;the JMS server myserverJMSServer with JMS module spring-jms and topic quotes&quot;, so make sure that you call the new JMS server &quot;myserverJMSServer&quot;. So select Services-&gt;Messaging-&gt; JMS Servers and create a new JMSServer with that name and targetted at the persistent store you just created. Make sure also that you select the running server as a target. </p>

<p>Now you need a JMS module targetted at the JMS server. So select Services-&gt;Messaging-&gt; JMS Modules and create a new JMS module called &quot;spring-jms&quot; and targetted at the running server. When asked if you would like to add resources, accept and create a new Topic resource called &quot;quotes&quot; and target it at myserverJMSServer. You don't need to set the JNDI-name for the topic. </p>

<p>You are now ready to deploy the application. Copy target/mdp-1.0-SNAPSHOT.war into the server's autodeploy directory. You should get a flurry of debug messages, but no exceptions. If you get an exception most likely you got one of the names wrong when setting up JMS. You may have to kill the server and start again if this happens since there was a bug in earlier releases of Spring 2.0 that caused the server to spew endless exceptions if the deployment names did not match. Hopefully this will not happen to you! </p>

<p>Once you have the app deployed, all that remains to do is to run the client. You can see that the guts of the client is to publish a message to a topic: </p>

<pre>  public void example() throws RemoteException, JMSException, NamingException {
    Topic newTopic = null;
    TopicSession session = null;
    try {
      session =
        m_topicConnection.createTopicSession(false,   // non transacted
                                             Session.AUTO_ACKNOWLEDGE);
      
      newTopic = (Topic) m_context.lookup(TOPIC_JNDI_NAME);
    }
    catch(NamingException ex) {
      newTopic = session.createTopic(TOPIC_NAME);
      m_context.bind(TOPIC_JNDI_NAME, newTopic);
    }

<p>    TopicPublisher sender = session.createPublisher(newTopic);<br />
    ObjectMessage tm = session.createObjectMessage();<br />
    String[] symbols = new String[] {<br />
      &quot;BEAS&quot;, &quot;SUNW&quot;, &quot;IBM&quot;<br />
    };<br />
    float[] price = new float[] {<br />
      13.10F, 4.50F, 89.89F<br />
    };<br />
    int[] shares = new int[] {<br />
      1000, 50, 3000<br />
    };<br />
    for (int i = 0; i &lt; symbols.length; i++) {<br />
    tm.setObject( new Quote(symbols[i], price[i], shares[i]));<br />
      sender.publish(tm);<br />
    }<br />
  }</pre><br />
Note that here too there is no reference to Spring 2.0 in the code. The client does not even know it is interacting with a Spring application. To run the client you will need to include target/classes in your classpath to pick up the client classes, so something like: </p>

<pre>eagle Andrew Piper&gt; java -classpath &quot;target/classes;$CLASSPATH&quot; com.bea.spring.Client t3://eagle:7001

<p>Beginning message.Client...</p>

<p>Success!  created topic: myserverJMSServer/spring-jms!quotes and published a message.</p>

<p>End message.Client...</pre><br />
You should also see a message in the server console window: </p>

<pre>Received new quote : 1000 of BEAS@13.1
Received new quote : 50 of SUNW@4.5
Received new quote : 3000 of IBM@89.89</pre>
Congratulations! Your message driven POJO works! 

<p>If you have problems with the example let me know. I ran this with Spring 2.0 rc2 which is available from the maven repositories as well as WebLogic Server 9.1. There shouldn't be any problem running the example on later releases of either Spring 2.0 or WebLogic Server.</p>]]>
      
   </content>
</entry>

<entry>
   <title>Spring Console Extension</title>
   <link rel="alternate" type="text/html" href="http://blogs.oracle.com/andypiper/2008/07/spring_console_extension.html" />
   <id>tag:blogs.oracle.com,2008:/andypiper//180.5571</id>
   
   <published>2008-07-28T12:40:09Z</published>
   <updated>2008-08-14T11:38:56Z</updated>
   
   <summary>Several folks have asked how to get the spring console extension working, and well they might since it can be tricky. Here I describe how to get it going.</summary>
   <author>
      <name>andy.piper</name>
      
   </author>
   
   
   <content type="html" xml:lang="en-us" xml:base="http://blogs.oracle.com/andypiper/">
      <![CDATA[<p>The <a href="http://dev2dev.bea.com/pub/a/2005/09/spring_integration_weblogic_server.html">Spring on WebLogic Server</a> paper described a new console extension that can be downloaded with the <a href="http://commerce.bea.com/showproduct.jsp?family=SPRING&amp;major=1.2.6&amp;minor=0">Spring on WebLogic kit</a>. Many folks have had trouble getting this working, so I thought I would go over the setup once again and describe some of the gotchas.   <br />  <br />Essentially the console extension displays registered spring beans in a table and allows you to call the accessors and mutators. In order to do this the beans needs to be exported via JMX and then registered with the console extension. The extension comes in two pieces, a client piece that gets packaged with your spring application and does the registration, and a server piece that gets packaged with the server and adds the extension page.   <br />  <br />The first step in configuration is to add the relevant configuration to your spring applicationContext.xml. The config will look something like this:   <pre>&lt;bean id=&quot;jmxExporter&quot; class=&quot;org.springframework.jmx.export.MBeanExporter&quot;&gt;<br />
  &lt;property name=&quot;beans&quot;&gt;<br />
    &lt;map&gt;<br />
      &lt;entry key=&quot;petclinic:service=clinic&quot; value-ref=&quot;clinic&quot;/&gt;<br />
    &lt;/map&gt;<br />
  &lt;/property&gt;<br />
  &lt;property name=&quot;assembler&quot;&gt;<br />
    &lt;bean class=&quot;org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler&quot;&gt;<br />
      &lt;property name=&quot;interfaceMappings&quot;&gt;<br />
        &lt;props&gt;<br />
          &lt;prop key=&quot;petclinic:service=clinic&quot;&gt;org.springframework.samples.petclinic.jdbc.CachingClinic&lt;/prop&gt;<br />
        &lt;/props&gt;<br />
      &lt;/property&gt;<br />
    &lt;/bean&gt;<br />
  &lt;/property&gt;<br />
  &lt;property name=&quot;listeners&quot;&gt;<br />
    &lt;list&gt;<br />
      &lt;ref local=&quot;mediator&quot;/&gt;<br />
    &lt;/list&gt;<br />
  &lt;/property&gt;<br />
  &lt;property name=&quot;autodetect&quot; value=&quot;true&quot;/&gt;<br />
  &lt;property name=&quot;server&quot;&gt;<br />
    &lt;bean class=&quot;org.springframework.jndi.JndiObjectFactoryBean&quot;&gt;<br />
      &lt;property name=&quot;jndiName&quot; value=&quot;java:comp/env/jmx/runtime&quot;/&gt;<br />
    &lt;/bean&gt;<br />
  &lt;/property&gt;<br />
&lt;/bean&gt;<br />
  <br />
&lt;bean id=&quot;mediator&quot; class=&quot;com.interface21.wl9.jmx.mediator.Mediator&quot;&gt;<br />
  &lt;property name=&quot;applicationName&quot; value=&quot;petclinic&quot;/&gt;<br />
&lt;/bean&gt;</pre><br />
The first part of the config identifies which beans you will be exporting, so value-ref should refer to another bean in your config. However note that it is also crucial that the true application name be used for the ObjectName &quot;petclinic:service=clinic&quot; (i.e. the petclinic part). The console extension looks up beans based on special JMX ObjectNames built from the application name, and if these are not in sync you will see no beans. </p>

<p><br /></p>

<p><br />The same applies to the interface mappings section further down. Note too that you must expose you beans via an interface, you cannot simply export a regular JavaBean. It is this interface that appears in the interfaceMappings section. </p>

<p><br /></p>

<p><br />Finally the JMX exporter refers to a mediator that listens to events and publishes beans to the console as they are exported to JMX. The mediator section appears at the bottom, and again the applicationName must exactly match your application name, otherwise you will see no beans. </p>

<p><br /></p>

<p><br />We plan to make the configuration of this much simpler very soon, so stay tuned. You can see the full set of properties for the <a href="http://static.springframework.org/spring/docs/1.2.x/api/org/springframework/jmx/export/MBeanExporter.html">MBeanExporter here</a>. Likewise you can see the configuration properties for the <a href="http://static.springframework.org/spring/docs/1.2.x/api/org/springframework/jmx/export/assembler/InterfaceBasedMBeanInfoAssembler.html">InterfaceBasedMBeanInfoAssembler here</a>. </p>

<p><br /></p>

<p><br />Once you have your config sorted, you need to build your application and include the console client extension. Unfortunately there was a bug in earlier builds of this and doubly unfortunately the builds of client and server pieces need to match. So I include both the <a href="http://blogs.oracle.com/andypiper/spring-ext-server.jar">server jar</a> and <a href=""http://blogs.oracle.com/andypiper/spring-console-1.0.jar">client jar</a> libraries here. I have verified these with WebLogic Server 9.1 and Spring 2.0-m5. They should work fine with earlier versions of Spring. The extension has been designed so that the version of Sping used by the server piece does not need to match that used by the client piece. You will however need to bundle the appropriate Spring jars with your application also. </p>

<p><br /></p>

<p><br />Finnaly you need to configure the server extension, this simply involves dropping the server jar into the console-ext directory of your WebLogic Server configuration. Start the server run the app and you should be good to go. The extension appears as an extra tab called &quot;Spring Management Objects&quot; under the deployment entry for your application in the console. </p>

<p><br /></p>

<p><br />Gotchas - there are a bunch of things that can go wrong here: </p>

<p><br /></p>

<ul>
  <li>If the tab does not appear then you likely have not configured the server extension correctly. The other possibility is that you are using autodeployment. autodeployment does <em>not</em> work with the console extension, you must use regular deployment. 

<p>    <br /></li></p>

<p>  <li>If you get the tab but no managed objects then most likely your application name does not match the one you configured. Also check that you are using the correct versions of the console extension, both server and client shown above. <br />
    <br /></li></p>

<p>  <li>Clustering is not really supported at present - the beans are exported to the JMX server of the server on which they reside. The console must therefore also be running on this server. Its probably possible to use WebLogic Server's federated JMX server to look up beans remotely, but I have not tried that as yet. </li><br />
</ul></p>]]>
      
   </content>
</entry>

</feed>
