Archive for the ‘Enterprise Integration’ Category

Magnolia OEM’d

Posted by jonholmes on September 28th, 2009

As well as being System Integrators, Sceneric also have a Software Development arm, currently developing products for the Financial Services industry.

Therefore, at the Magnolia Conference, it was interesting to see the proposition the guys from NRG Edge are putting together. They are currently building an online banking solution, the Marketing Portal aspect of which is driven by Magnolia.

We like this on a number of levels.

Firstly, it’s another great example of how Magnolia is being used outside of it’s ‘comfort zone’ web CMS area, it’s really encouraging to see an intermediary organisation making a commitment like this to the Magnolia solution. It all acts as further validation as to the quality of the Magnolia product for when we find ourselves speaking to potential clients.

Further, for us maybe in the future, it gives us some ideas about how we can leverage our knowledge of the Magnolia solution within our own offerings, providing the means for clients to publish and maintain products, brands and web content through a single holistic experience for both authors and users.

Plenty of food for thought.

Bookmark and Share | Digg! | del.icio.us | Facebook | Twitter | Stumble

Tags: ,
Posted in Content Management, Enterprise Integration, Financial Services, Java, Magnolia | No Comments »

Magnolia On Air – A Demonstration in Adaptability

Posted by jonholmes on September 28th, 2009

So, I’ve seen it on the Magnolia website, but this was the first time I’d seen in detail the On Air solution.

I’m not the editor of a large scale Broadcast website, so may not be the best person to comment, however, from Peter’s demonstration, it was possible to see the ease with which the Rich Media publication process could be managed.

I can only assume this is exactly the kind of ease of use that will endear it to time pressed journalists – It was  very simple to operate, it was very ‘Magnolia’.

As well as being impressed by the product, was was also great to see was the fact that Magnolia was being integrated with another impressive solution.
It’s this kind of approach that demonstrates that Magnolia exists as more than ‘just’ a Web CMS – It demonstrates the capability of magnolia to be transformed from a generic product to one that supports very specific industry verticals.

As Systems Integrators ourselves, it acts as a great standard bearer for the potential of Magnolia to be integrated with other products and systems.

Congratulations to the Magnolia and futureLAB teams.

Bookmark and Share | Digg! | del.icio.us | Facebook | Twitter | Stumble

Tags: , ,
Posted in Content Management, Enterprise Integration, Magnolia | No Comments »

Quality not quantity

Posted by jimherbert on March 15th, 2009

As an SME consulting company, we often come up against large offshore development set-ups and the classic accountancy argument “We’ll use them as their day rates are a fraction of yours”.  There is an obvious problem with this – software development is complicated and expertise gained over years of coding, integrating and testing can lead to orders of magnitude of improvement in speed of development and subsequent quality.

We’ve recently come up against an excellent example of this.  While on client site, we were integrating to a credit card provider in Mule via web services.  Mule supports CXF, Axis 1 and Axis 2 as Java WS frameworks, and they all have positives and negatives so we advised the client to use the same framework as their offshore supplier had used in the back-office system to ensure support and maintenance was made easier.  We subsequently discovered that, as they had no experience of Web Service integration, the offshore supplier had used HTTPConnection and DOM – i.e. they were hard-coding each web service call.

That afternoon, we integrated all 5 webservices and used Mule’s definition XML to model the control process.  In 4 hours work we had acheived the equivalent of over 200 man days of offshore development.

Expertise was obviously the clear winner here!

Bookmark and Share | Digg! | del.icio.us | Facebook | Twitter | Stumble

Tags: , , , , , , , , ,
Posted in Delivery, Enterprise Integration, Financial Services, Industries, Investment Banking, Java, Life and Pensions, Methodology, Mule, SOA, Technology | No Comments »

Integrate Axis into Magnolia

Posted by jimherbert on February 5th, 2009

A few months ago we created a proof of concept to access the Magnolia JCR container using Webservices so that a PHP based site we were building could access new items within an Enterprise Class CMS.  It turned out to be remarkably easy:

To integrate Axis 1.4 into Magnolia:

  1. Download the Axis distribution
  2. Copy the jars into the magnoliaAuthor and magnoliaPublic WEB-INF/lib directories
  3. Copy the servlet declarations from the axis web.xml into the magnolia web.xml in both auth and pub
  4. Open AdminCentral and browse to Configuration
  5. Open server/filters/servlets and copy log4j node, rename to AxisServlet
  6. Open AxisServlet/mappings/–magnolia-pages–/patten and change to /services/*
  7. Change AxisServlet/servletClass to org.apache.axis.transport.http.AxisServlet
  8. Change AxisServlet/servletName to AxisServet (to match the web.xml servletname)

If you now deploy a class through jws or wsdl methods (by coping the classes, wsdl and .wsdd files) into Magnolia you will be able to access it through <host>/<maginstance>/services/ServiceName?wsdl

You might want to bypass Magnolia security during development, to do that:

  1. Open AdminCentral and browse to Configuration
  2. Open server/filters/uriSecurity/bypasses
  3. Create a new content node “services”
  4. Create 2 new data nodes; “services/class” with data info.magnolia.voting.voters.URIStartsWithVoter and “services/pattern” with data /services

For our demo, we simply queried the API for a “text” content node based on a path that was passed into the method:

public String getContent (String name) throws Exception {
String returnContent = new String();
returnContent="";
try {
//get the current context
Context context = MgnlContext.getSystemContext();
//get a hierarchy manager and lookup the content node
HierarchyManager mgr = context.getHierarchyManager(ContentRepository.WEBSITE);
Content uriContent = mgr.getContent(name);
if(uriContent==null){
//oops
returnContent+=" content is null";
} else {
//get the data collection and return the text node
for(Iterator i = uriContent.getNodeDataCollection().iterator(); i.hasNext();) {
NodeData nodeData = (NodeData) i.next();
String nodeName = nodeData.getName();
if (nodeName.equals("text")) {
returnContent=nodeData.getString();
}
}
}
} catch (RepositoryException e) {
throw new Exception(e.getMessage());
}
return returnContent;
}

Axis presents this with the following WSDL:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://test.sceneric.com" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://test.sceneric.com" xmlns:intf="http://test.sceneric.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
 <wsdl:types>
  <schema elementFormDefault="qualified" targetNamespace="http://test.sceneric.com" xmlns="http://www.w3.org/2001/XMLSchema">
   <element name="getContent">
    <complexType>
     <sequence>
      <element name="name" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
   <element name="getContentResponse">
    <complexType>
     <sequence>
      <element name="getContentReturn" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
  </schema>
 </wsdl:types>

   <wsdl:message name="getContentResponse">

      <wsdl:part element="impl:getContentResponse" name="parameters"/>

   </wsdl:message>

   <wsdl:message name="getContentRequest">
      <wsdl:part element="impl:getContent" name="parameters"/>

   </wsdl:message>

   <wsdl:portType name="TestWebService">

      <wsdl:operation name="getContent">

         <wsdl:input message="impl:getContentRequest" name="getContentRequest"/>

         <wsdl:output message="impl:getContentResponse" name="getContentResponse"/>
      </wsdl:operation>

   </wsdl:portType>

   <wsdl:binding name="TestWebServiceSoapBinding" type="impl:TestWebService">

      <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

      <wsdl:operation name="getContent">

         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="getContentRequest">

            <wsdlsoap:body use="literal"/>

         </wsdl:input>

         <wsdl:output name="getContentResponse">

            <wsdlsoap:body use="literal"/>

         </wsdl:output>
      </wsdl:operation>

   </wsdl:binding>

   <wsdl:service name="TestWebServiceService">

      <wsdl:port binding="impl:TestWebServiceSoapBinding" name="TestWebService">

         <wsdlsoap:address location="http://localhost:8800/magnoliaAuthor/services/TestWebService"/>

      </wsdl:port>
   </wsdl:service>

</wsdl:definitions>

and an example of this in action is:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope>
−
<soapenv:Body>
−
<getContentResponse>
−
<ns1:getContentReturn>
<p>yadda yadda yadda</p>
</ns1:getContentReturn>
</getContentResponse>
</soapenv:Body>
</soapenv:Envelope>

Of course, a twist to this approach would be to wrap the JSP rendering with Axis to take advantage of the tag libraries. We tested this with PHP 5’s SOAP Client and successfully read data from Magnolia.  In a production environment we would obviously use XPath or the Query Builder in order to search the repository, and return more complex results.

You can see a video demonstration of this here: http://www.sceneric.com/index.php?page=magnolia-web-services

Bookmark and Share | Digg! | del.icio.us | Facebook | Twitter | Stumble

Tags: , , ,
Posted in Architecture, Content Management, Enterprise Integration, JSR170, Java, Magnolia, Open Source, Package Implementation, Technology, Web 2.0 | No Comments »