Author: mriou
Date: Mon Oct 2 12:36:15 2006
New Revision: 452179
URL: http://svn.apache.org/viewvc?view=rev&rev=452179
Log:
[ODE-57] Made sure that doXslTranform works (including xsl params) and added a
test case for it.
Added:
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.bpel
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.wsdl
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.xsl
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/deploy.xml
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/test.properties
Modified:
incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelC.java
incubator/ode/trunk/bpel-test/src/test/java/org/apache/ode/test/BPELTest.java
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
Modified:
incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java?view=diff&rev=452179&r1=452178&r2=452179
==============================================================================
--- incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
(original)
+++ incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java
Mon Oct 2 12:36:15 2006
@@ -35,6 +35,7 @@
import org.apache.ode.bpel.dao.BpelDAOConnectionFactory;
import org.apache.ode.bpel.engine.BpelServerImpl;
import org.apache.ode.bpel.scheduler.quartz.QuartzSchedulerImpl;
+import org.apache.ode.bpel.xsl.XslTransformHandler;
import org.apache.ode.daohib.DataSourceConnectionProvider;
import org.apache.ode.daohib.HibernateTransactionManagerLookup;
import org.apache.ode.daohib.SessionManager;
@@ -58,6 +59,7 @@
import javax.transaction.TransactionManager;
import javax.wsdl.Definition;
import javax.xml.namespace.QName;
+import javax.xml.transform.TransformerFactory;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
@@ -124,6 +126,8 @@
__log.debug("Initializing BPEL server.");
initBpelServer();
+ initXslt();
+
try {
_server.start();
} catch (Exception ex) {
@@ -441,6 +445,10 @@
_server.init();
}
+ private void initXslt() {
+ TransformerFactory trsf = new net.sf.saxon.TransformerFactoryImpl();
+ XslTransformHandler.getInstance().setTransformerFactory(trsf);
+ }
@SuppressWarnings("unchecked")
private <T> T lookupInJndi(String objName) throws Exception {
Modified:
incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelC.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelC.java?view=diff&rev=452179&r1=452178&r2=452179
==============================================================================
---
incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelC.java
(original)
+++
incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelC.java
Mon Oct 2 12:36:15 2006
@@ -363,10 +363,7 @@
}
private void initializeXslEngine(BpelCompiler compiler) {
- System.setProperty("javax.xml.transform.TransformerFactory",
-
"com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");
-
- TransformerFactory trsf = TransformerFactory.newInstance();
+ TransformerFactory trsf = new net.sf.saxon.TransformerFactoryImpl();
XslTransformHandler.getInstance().setTransformerFactory(trsf);
XslCompilationErrorListener xe = new XslCompilationErrorListener(compiler);
Modified:
incubator/ode/trunk/bpel-test/src/test/java/org/apache/ode/test/BPELTest.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-test/src/test/java/org/apache/ode/test/BPELTest.java?view=diff&rev=452179&r1=452178&r2=452179
==============================================================================
---
incubator/ode/trunk/bpel-test/src/test/java/org/apache/ode/test/BPELTest.java
(original)
+++
incubator/ode/trunk/bpel-test/src/test/java/org/apache/ode/test/BPELTest.java
Mon Oct 2 12:36:15 2006
@@ -191,7 +191,10 @@
public void testCorrelationAsync() throws Exception {
go("target/test-classes/bpel/2.0/testCorrelationAsync");
}
-
+ public void testXslTransform() throws Exception {
+ go("target/test-classes/bpel/2.0/TestXslTransform");
+ }
+
/** These tests compile however they fail at runtime */
// public void testCompensationHandlers() throws Exception {
Added:
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.bpel
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.bpel?view=auto&rev=452179
==============================================================================
---
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.bpel
(added)
+++
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.bpel
Mon Oct 2 12:36:15 2006
@@ -0,0 +1,52 @@
+<process name="HelloXslWorld"
+ targetNamespace="http://pxe/bpel/unit-test"
+ xmlns:bpws="http://schemas.xmlsoap.org/ws/2004/03/business-process/"
+ xmlns="http://schemas.xmlsoap.org/ws/2004/03/business-process/"
+ xmlns:tns="http://pxe/bpel/unit-test"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:types="http://pxe/bpel/types"
+ xmlns:test="http://pxe/bpel/unit-test.wsdl">
+
+ <import location="HelloXslWorld.wsdl"
+ namespace="http://pxe/bpel/unit-test.wsdl"
+ importType="http://schemas.xmlsoap.org/wsdl/"/>
+
+ <partnerLinks>
+ <partnerLink name="helloXslPartnerLink"
+ partnerLinkType="test:HelloXslPartnerLinkType"
+ myRole="me" />
+ </partnerLinks>
+
+ <variables>
+ <variable name="myVar" messageType="test:HelloXslMessage"/>
+ <variable name="xslVar" type="xsd:string"/>
+ </variables>
+
+ <sequence>
+ <receive
+ name="start"
+ partnerLink="helloXslPartnerLink"
+ portType="test:HelloXslPortType"
+ operation="helloXsl"
+ variable="myVar"
+ createInstance="yes"/>
+ <assign name="assign1">
+ <copy>
+ <from><literal>Xsl</literal></from>
+ <to>$xslVar</to>
+ </copy>
+ <copy>
+ <from>
+ bpws:doXslTransform("HelloXslWorld.xsl", $myVar/TestPart,
'middle', $xslVar)
+ </from>
+ <to variable="myVar" part="TestPart"/>
+ </copy>
+ </assign>
+ <reply name="end"
+ partnerLink="helloXslPartnerLink"
+ portType="test:HelloXslPortType"
+ operation="helloXsl"
+ variable="myVar"/>
+ </sequence>
+
+</process>
Added:
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.wsdl
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.wsdl?view=auto&rev=452179
==============================================================================
---
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.wsdl
(added)
+++
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.wsdl
Mon Oct 2 12:36:15 2006
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8" ?>
+
+<wsdl:definitions
+ targetNamespace="http://pxe/bpel/unit-test.wsdl"
+ xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:tns="http://pxe/bpel/unit-test.wsdl"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:types="http://pxe/bpel/types"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:bpws="http://schemas.xmlsoap.org/ws/2004/03/business-process/"
+ xmlns:plnk="http://schemas.xmlsoap.org/ws/2004/03/partner-link/">
+
+ <wsdl:types>
+ <xsd:schema targetNamespace="http://pxe/bpel/types">
+ <xsd:complexType name="ContentCT">
+ <xsd:sequence>
+ <xsd:element name="content" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:schema>
+ </wsdl:types>
+
+ <wsdl:message name="HelloXslMessage">
+ <wsdl:part name="TestPart" type="types:ContentCT"/>
+ </wsdl:message>
+
+ <wsdl:portType name="HelloXslPortType">
+ <wsdl:operation name="helloXsl">
+ <wsdl:input message="tns:HelloXslMessage" name="TestIn"/>
+ <wsdl:output message="tns:HelloXslMessage" name="TestOut"/>
+ </wsdl:operation>
+ </wsdl:portType>
+
+ <wsdl:binding name="HelloXslSoapBinding" type="tns:HelloXslPortType">
+ <soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="helloXsl">
+ <soap:operation soapAction="" style="rpc"/>
+ <wsdl:input>
+ <soap:body
+ namespace="http://pxe/bpel/unit-test.wsdl"
+ use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body
+ namespace="http://pxe/bpel/unit-test.wsdl"
+ use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="HelloXslService">
+ <wsdl:port name="HelloXslPort"
binding="tns:HelloXslSoapBinding">
+ <soap:address
location="http://localhost:8080/pxe/soap/helloXslWorld"/>
+ </wsdl:port>
+ </wsdl:service>
+
+ <plnk:partnerLinkType name="HelloXslPartnerLinkType">
+ <plnk:role name="me" portType="tns:HelloXslPortType"/>
+ <plnk:role name="you" portType="tns:HelloXslPortType"/>
+ </plnk:partnerLinkType>
+</wsdl:definitions>
+
Added:
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.xsl
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.xsl?view=auto&rev=452179
==============================================================================
---
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.xsl
(added)
+++
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/HelloXslWorld.xsl
Mon Oct 2 12:36:15 2006
@@ -0,0 +1,16 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+ <xsl:output method="xml"/>
+ <xsl:param name = "middle"/>
+
+ <xsl:template match="content">
+ <!-- Per the WS-BPEL spec, only the single child of the root of the
+ result tree is considered (so the root element here is "suppressed"
+ in the engine) -->
+ <xsl:element name="root">
+ <xsl:element name="hello">
+ <xsl:value-of select="concat(text(), $middle, ' World')"/>
+ </xsl:element>
+ </xsl:element>
+ </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file
Added:
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/deploy.xml
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/deploy.xml?view=auto&rev=452179
==============================================================================
---
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/deploy.xml
(added)
+++
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/deploy.xml
Mon Oct 2 12:36:15 2006
@@ -0,0 +1,11 @@
+<deploy xmlns="http://ode.fivesight.com/schemas/2006/06/27/dd"
+ xmlns:pns="http://pxe/bpel/unit-test"
+ xmlns:wns="http://ode/bpel/unit-test.wsdl">
+
+ <process name="pns:HelloXslWorld">
+ <active>true</active>
+ <provide partnerLink="helloXslPartnerLink">
+ <service name="wns:HelloXslService" port="HelloXslPort"/>
+ </provide>
+ </process>
+</deploy>
Added:
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/test.properties
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/test.properties?view=auto&rev=452179
==============================================================================
---
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/test.properties
(added)
+++
incubator/ode/trunk/bpel-test/src/test/resources/bpel/2.0/TestXslTransform/test.properties
Mon Oct 2 12:36:15 2006
@@ -0,0 +1,6 @@
+namespace=http://ode/bpel/unit-test.wsdl
+service=HelloXslService
+operation=helloXsl
+request1=<message><TestPart><content>Hello</content></TestPart></message>
+response1=.*HelloXsl World.*
+
Modified:
incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
URL:
http://svn.apache.org/viewvc/incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java?view=diff&rev=452179&r1=452178&r2=452179
==============================================================================
--- incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
(original)
+++ incubator/ode/trunk/jbi/src/main/java/org/apache/ode/jbi/OdeLifeCycle.java
Mon Oct 2 12:36:15 2006
@@ -37,6 +37,7 @@
import javax.naming.InitialContext;
import javax.sql.DataSource;
import javax.transaction.TransactionManager;
+import javax.xml.transform.TransformerFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -44,6 +45,7 @@
import org.apache.ode.bpel.connector.BpelServerConnector;
import org.apache.ode.bpel.engine.BpelServerImpl;
import org.apache.ode.bpel.scheduler.quartz.QuartzSchedulerImpl;
+import org.apache.ode.bpel.xsl.XslTransformHandler;
import org.apache.ode.daohib.DataSourceConnectionProvider;
import org.apache.ode.daohib.HibernateTransactionManagerLookup;
import org.apache.ode.daohib.SessionManager;
@@ -62,481 +64,488 @@
*/
public class OdeLifeCycle implements ComponentLifeCycle {
- private static final String DEFAULT_HIBERNATE_DIALECT =
"org.hibernate.dialect.DerbyDialect";
+ private static final String DEFAULT_HIBERNATE_DIALECT =
"org.hibernate.dialect.DerbyDialect";
- private static final Messages __msgs = Messages.getMessages(Messages.class);
+ private static final Messages __msgs =
Messages.getMessages(Messages.class);
- private static final Log __log = LogFactory.getLog(OdeLifeCycle.class);
+ private static final Log __log = LogFactory.getLog(OdeLifeCycle.class);
- private OdeSUManager _suManager = null;
+ private OdeSUManager _suManager = null;
- private boolean _initSuccess = false;
-
- private OdeContext _ode;
-
- private Receiver _receiver;
-
- private boolean _started;
-
- private boolean _needDerbyShutdown;
-
- private String _derbyUrl;
-
- private BpelServerConnector _connector;
-
- ServiceUnitManager getSUManager() {
- return _suManager;
- }
-
- OdeContext getOdeContext() {
- return _ode;
- }
-
- public ObjectName getExtensionMBeanName() {
- return null;
- }
-
- public void init(ComponentContext context) throws JBIException {
- try {
- _ode = OdeContext.getInstance();
- _ode.setContext(context);
- _ode._consumer = new OdeConsumer(_ode);
-
-
- TempFileManager.setWorkingDirectory(new File(_ode.getContext()
- .getWorkspaceRoot()));
-
- __log.debug("Loading properties.");
- initProperties();
-
- __log.debug("Initializing message mappers.");
- initMappers();
-
-
- __log.debug("Creating data source.");
- initDataSource();
-
- __log.debug("Starting Hibernate.");
- initHibernate();
-
- __log.info("Hibernate started.");
-
- __log.debug("Starting BPEL server.");
- initBpelServer();
-
- __log.debug("Starting JCA connector.");
- initConnector();
-
- _suManager = new OdeSUManager(_ode);
- _initSuccess = true;
- __log.info(__msgs.msgOdeInitialized());
- } finally {
- if (!_initSuccess) {
- // TODO ..then what? at least shutdown the scheduler
- }
- }
- }
-
- private void initMappers() throws JBIException {
- Class mapperClass;
- try {
- mapperClass = Class.forName(_ode._config.getMessageMapper());
- } catch (ClassNotFoundException e) {
- String errmsg =
__msgs.msgOdeInitMapperClassNotFound(_ode._config.getMessageMapper());
- __log.error(errmsg);
- throw new JBIException(errmsg, e);
- } catch (Throwable t) {
- String errmsg =
__msgs.msgOdeInitMapperClassLoadFailed(_ode._config.getMessageMapper());
- __log.error(errmsg);
- throw new JBIException(errmsg, t);
- }
- try {
- _ode.registerMapper((Mapper) mapperClass.newInstance());
- } catch (Throwable t) {
- String errmsg =
__msgs.msgOdeInitMapperInstantiationFailed(_ode._config.getMessageMapper());
- __log.error(errmsg);
- throw new JBIException(errmsg, t);
- }
- }
-
- private void initDataSource() throws JBIException {
- switch (_ode._config.getDbMode()) {
- case EXTERNAL:
- initExternalDb();
- break;
- case EMBEDDED:
- initEmbeddedDb();
- break;
- case INTERNAL:
- initInternalDb();
- break;
- default:
- break;
- }
- }
-
- private void initExternalDb() throws JBIException {
- try {
- _ode._dataSource = lookupInJndi(_ode._config.getDbDataSource());
- __log.info(__msgs.msgOdeUsingExternalDb(_ode._config.getDbDataSource()));
- } catch (Exception ex) {
- String msg =
__msgs.msgOdeInitExternalDbFailed(_ode._config.getDbDataSource());
- __log.error(msg,ex);
- throw new JBIException(msg,ex);
- }
- }
-
- private void initInternalDb() throws JBIException {
- throw new JBIException("internalDb not supported!");
- }
-
- /**
- * Initialize embedded (DERBY) database.
- */
- private void initEmbeddedDb() throws JBIException {
- __log.info("Using DataSource Derby");
-
- String url =
- "jdbc:derby:" + _ode.getContext().getInstallRoot() + "/"
- + _ode._config.getDbEmbeddedName();
-
- __log.debug("creating Minerva pool for " + url);
-
- MinervaPool minervaPool = new MinervaPool();
- minervaPool.setTransactionManager(_ode.getTransactionManager());
- minervaPool.getConnectionFactory().setConnectionURL(url);
- minervaPool.getConnectionFactory().setUserName("sa");
- minervaPool.getConnectionFactory().setDriver(
- org.apache.derby.jdbc.EmbeddedDriver.class.getName());
-
- minervaPool.getPoolParams().maxSize = _ode._config.getPoolMaxSize();
- minervaPool.getPoolParams().minSize = _ode._config.getPoolMinSize();
- minervaPool.getPoolParams().blocking = false;
- minervaPool.setType(PoolType.MANAGED);
-
- try {
- minervaPool.start();
- } catch (Exception ex) {
- String errmsg = __msgs.msgOdeDbPoolStartupFailed(url);
- __log.error(errmsg,ex);
- throw new JBIException(errmsg,ex);
- }
-
- _ode._dataSource = minervaPool.createDataSource();
- _needDerbyShutdown = true;
- _derbyUrl = url;
- }
-
- /**
- * Load the "ode-jbi.properties" file from the install directory.
- *
- * @throws JBIException
- */
- private void initProperties() throws JBIException {
- OdeConfigProperties config = new OdeConfigProperties(_ode.getContext()
- .getInstallRoot());
- config.load();
- _ode._config = config;
- }
-
- private void initBpelServer() throws JBIException {
- if (__log.isDebugEnabled()) {
- __log.debug("ODE initializing");
- }
-
- _ode._server = new BpelServerImpl();
- // We don't want the server to automatically activate deployed processes,
- // we'll do that explcitly
- _ode._server.setAutoActivate(true);
- _ode._eprContext = new EndpointReferenceContextImpl(_ode);
- _ode._mexContext = new MessageExchangeContextImpl(_ode);
- _ode._executorService = Executors.newCachedThreadPool();
- _ode._scheduler = new QuartzSchedulerImpl();
- _ode._scheduler.setBpelServer(_ode._server);
- _ode._scheduler.setExecutorService(_ode._executorService, 20);
- _ode._scheduler.setTransactionManager((TransactionManager) _ode
- .getContext().getTransactionManager());
- _ode._scheduler.setDataSource(_ode._dataSource);
- _ode._scheduler.init();
-
- _ode._server.setDaoConnectionFactory(_ode._daocf);
- _ode._server.setEndpointReferenceContext(_ode._eprContext);
- _ode._server.setMessageExchangeContext(_ode._mexContext);
- _ode._server.setBindingContext(new BindingContextImpl(_ode));
- _ode._server.setScheduler(_ode._scheduler);
- _ode._server.init();
-
- }
-
- /**
- * Initialize the Hibernate data store.
- *
- * @throws JBIException
- */
- private void initHibernate() throws JBIException {
- Properties properties = new Properties();
- properties.put(Environment.CONNECTION_PROVIDER,
- DataSourceConnectionProvider.class.getName());
- properties.put(Environment.TRANSACTION_MANAGER_STRATEGY,
- HibernateTransactionManagerLookup.class.getName());
- properties.put(Environment.SESSION_FACTORY_NAME, "jta");
-
- try {
- properties.put(Environment.DIALECT, guessDialect(_ode._dataSource));
- } catch (Exception ex) {
- String errmsg = __msgs.msgOdeInitHibernateDialectDetectFailed();
- __log.error(errmsg,ex);
- throw new JBIException(errmsg,ex);
- }
-
- File hibernatePropFile = new File(_ode.getContext().getInstallRoot()
- + File.separatorChar + "hibernate.properties");
-
- if (hibernatePropFile.exists()) {
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(hibernatePropFile);
- properties.load(new BufferedInputStream(fis));
- } catch (IOException e) {
- String errmsg = __msgs
-
.msgOdeInitHibernateErrorReadingHibernateProperties(hibernatePropFile);
- __log.error(errmsg, e);
- throw new JBIException(errmsg, e);
- }
- } else {
- __log.info(__msgs
- .msgOdeInitHibernatePropertiesNotFound(hibernatePropFile));
- }
-
- SessionManager sm = new SessionManager(properties, _ode._dataSource, _ode
- .getTransactionManager());
- _ode._daocf = new BpelDAOConnectionFactoryImpl(sm);
- }
-
- private void initConnector() throws JBIException {
- int port = _ode._config.getConnectorPort();
- if (port == 0) {
- __log.info("Skipping connector initialization.");
- } else {
- _connector = new BpelServerConnector();
- _connector.setBpelServer(_ode._server);
- _connector.setPort(_ode._config.getConnectorPort());
- _connector.setId(_ode._config.getConnectorName());
- try {
- _connector.start();
- } catch (Exception e) {
- __log.error("Failed to initialize JCA connector.",e);
- }
- }
- }
-
- public synchronized void start() throws JBIException {
- if (_started)
- return;
-
- try {
- __log.info(__msgs.msgOdeStarting());
-
- if (!_initSuccess) {
- String errmsg = "attempt to call start() after init() failure.";
- IllegalStateException ex = new IllegalStateException(errmsg);
- __log.fatal(errmsg, ex);
- throw new JBIException(errmsg,ex);
- }
-
- if (_ode.getChannel() == null) {
- throw (new JBIException("No channel!", new NullPointerException()));
- }
-
- try {
- _ode._server.start();
- } catch (Exception ex) {
- String errmsg = __msgs.msgOdeBpelServerStartFailure();
- __log.error(errmsg,ex);
- throw new JBIException(errmsg, ex);
- }
-
- _receiver = new Receiver(_ode);
- _receiver.start();
- _started = true;
- __log.info(__msgs.msgOdeStarted());
- } finally {
- if (!_started) {
- if (_receiver != null) {
- _receiver.cease();
- }
- _receiver = null;
- }
- }
- }
-
- public synchronized void stop() throws JBIException {
- if (!_started) {
- return;
+ private boolean _initSuccess = false;
+
+ private OdeContext _ode;
+
+ private Receiver _receiver;
+
+ private boolean _started;
+
+ private boolean _needDerbyShutdown;
+
+ private String _derbyUrl;
+
+ private BpelServerConnector _connector;
+
+ ServiceUnitManager getSUManager() {
+ return _suManager;
}
- __log.info("Stopping ODE.");
+ OdeContext getOdeContext() {
+ return _ode;
+ }
- try {
+ public ObjectName getExtensionMBeanName() {
+ return null;
+ }
- if (_receiver != null) {
+ public void init(ComponentContext context) throws JBIException {
try {
- _receiver.cease();
- } catch (Exception ex) {
- __log.fatal("Error ceasing receiver.", ex);
+ _ode = OdeContext.getInstance();
+ _ode.setContext(context);
+ _ode._consumer = new OdeConsumer(_ode);
+
+
+ TempFileManager.setWorkingDirectory(new File(_ode.getContext()
+ .getWorkspaceRoot()));
+
+ __log.debug("Loading properties.");
+ initProperties();
+
+ __log.debug("Initializing message mappers.");
+ initMappers();
+
+ __log.debug("Creating data source.");
+ initDataSource();
+
+ __log.debug("Starting Hibernate.");
+ initHibernate();
+
+ __log.info("Hibernate started.");
+
+ __log.debug("Starting BPEL server.");
+ initBpelServer();
+
+ __log.debug("Starting JCA connector.");
+ initConnector();
+
+ initXslt();
+
+ _suManager = new OdeSUManager(_ode);
+ _initSuccess = true;
+ __log.info(__msgs.msgOdeInitialized());
} finally {
- _receiver = null;
+ if (!_initSuccess) {
+ // TODO ..then what? at least shutdown the scheduler
+ }
+ }
+ }
+
+ private void initMappers() throws JBIException {
+ Class mapperClass;
+ try {
+ mapperClass = Class.forName(_ode._config.getMessageMapper());
+ } catch (ClassNotFoundException e) {
+ String errmsg =
__msgs.msgOdeInitMapperClassNotFound(_ode._config.getMessageMapper());
+ __log.error(errmsg);
+ throw new JBIException(errmsg, e);
+ } catch (Throwable t) {
+ String errmsg =
__msgs.msgOdeInitMapperClassLoadFailed(_ode._config.getMessageMapper());
+ __log.error(errmsg);
+ throw new JBIException(errmsg, t);
+ }
+ try {
+ _ode.registerMapper((Mapper) mapperClass.newInstance());
+ } catch (Throwable t) {
+ String errmsg =
__msgs.msgOdeInitMapperInstantiationFailed(_ode._config.getMessageMapper());
+ __log.error(errmsg);
+ throw new JBIException(errmsg, t);
+ }
+ }
+
+ private void initDataSource() throws JBIException {
+ switch (_ode._config.getDbMode()) {
+ case EXTERNAL:
+ initExternalDb();
+ break;
+ case EMBEDDED:
+ initEmbeddedDb();
+ break;
+ case INTERNAL:
+ initInternalDb();
+ break;
+ default:
+ break;
+ }
+ }
+
+ private void initExternalDb() throws JBIException {
+ try {
+ _ode._dataSource = lookupInJndi(_ode._config.getDbDataSource());
+
__log.info(__msgs.msgOdeUsingExternalDb(_ode._config.getDbDataSource()));
+ } catch (Exception ex) {
+ String msg =
__msgs.msgOdeInitExternalDbFailed(_ode._config.getDbDataSource());
+ __log.error(msg,ex);
+ throw new JBIException(msg,ex);
+ }
+ }
+
+ private void initInternalDb() throws JBIException {
+ throw new JBIException("internalDb not supported!");
+ }
+
+ /**
+ * Initialize embedded (DERBY) database.
+ */
+ private void initEmbeddedDb() throws JBIException {
+ __log.info("Using DataSource Derby");
+
+ String url =
+ "jdbc:derby:" + _ode.getContext().getInstallRoot() + "/"
+ + _ode._config.getDbEmbeddedName();
+
+ __log.debug("creating Minerva pool for " + url);
+
+ MinervaPool minervaPool = new MinervaPool();
+ minervaPool.setTransactionManager(_ode.getTransactionManager());
+ minervaPool.getConnectionFactory().setConnectionURL(url);
+ minervaPool.getConnectionFactory().setUserName("sa");
+ minervaPool.getConnectionFactory().setDriver(
+ org.apache.derby.jdbc.EmbeddedDriver.class.getName());
+
+ minervaPool.getPoolParams().maxSize = _ode._config.getPoolMaxSize();
+ minervaPool.getPoolParams().minSize = _ode._config.getPoolMinSize();
+ minervaPool.getPoolParams().blocking = false;
+ minervaPool.setType(PoolType.MANAGED);
+
+ try {
+ minervaPool.start();
+ } catch (Exception ex) {
+ String errmsg = __msgs.msgOdeDbPoolStartupFailed(url);
+ __log.error(errmsg,ex);
+ throw new JBIException(errmsg,ex);
}
- }
- try {
- _ode._server.stop();
+ _ode._dataSource = minervaPool.createDataSource();
+ _needDerbyShutdown = true;
+ _derbyUrl = url;
+ }
+
+ /**
+ * Load the "ode-jbi.properties" file from the install directory.
+ *
+ * @throws JBIException
+ */
+ private void initProperties() throws JBIException {
+ OdeConfigProperties config = new OdeConfigProperties(_ode.getContext()
+ .getInstallRoot());
+ config.load();
+ _ode._config = config;
+ }
+
+ private void initBpelServer() throws JBIException {
+ if (__log.isDebugEnabled()) {
+ __log.debug("ODE initializing");
+ }
+
+ _ode._server = new BpelServerImpl();
+ // We don't want the server to automatically activate deployed
processes,
+ // we'll do that explcitly
+ _ode._server.setAutoActivate(true);
+ _ode._eprContext = new EndpointReferenceContextImpl(_ode);
+ _ode._mexContext = new MessageExchangeContextImpl(_ode);
+ _ode._executorService = Executors.newCachedThreadPool();
+ _ode._scheduler = new QuartzSchedulerImpl();
+ _ode._scheduler.setBpelServer(_ode._server);
+ _ode._scheduler.setExecutorService(_ode._executorService, 20);
+ _ode._scheduler.setTransactionManager((TransactionManager) _ode
+ .getContext().getTransactionManager());
+ _ode._scheduler.setDataSource(_ode._dataSource);
+ _ode._scheduler.init();
+
+ _ode._server.setDaoConnectionFactory(_ode._daocf);
+ _ode._server.setEndpointReferenceContext(_ode._eprContext);
+ _ode._server.setMessageExchangeContext(_ode._mexContext);
+ _ode._server.setBindingContext(new BindingContextImpl(_ode));
+ _ode._server.setScheduler(_ode._scheduler);
+ _ode._server.init();
+
+ }
+
+ /**
+ * Initialize the Hibernate data store.
+ *
+ * @throws JBIException
+ */
+ private void initHibernate() throws JBIException {
+ Properties properties = new Properties();
+ properties.put(Environment.CONNECTION_PROVIDER,
+ DataSourceConnectionProvider.class.getName());
+ properties.put(Environment.TRANSACTION_MANAGER_STRATEGY,
+ HibernateTransactionManagerLookup.class.getName());
+ properties.put(Environment.SESSION_FACTORY_NAME, "jta");
- } catch (Throwable ex) {
- __log.fatal("Error stopping services.", ex);
- }
-
- __log.info("ODE stopped.");
- } finally {
- _started = false;
- }
- }
-
- /**
- * Shutdown the service engine. This performs cleanup before the BPE is
- * terminated. Once this method has been called, init() must be called before
- * the transformation engine can be started again with a call to start().
- *
- * @throws javax.jbi.JBIException
- * if the transformation engine is unable to shut down.
- */
- public void shutDown() throws JBIException {
- ClassLoader old = Thread.currentThread().getContextClassLoader();
- Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
-
- if (_connector != null) {
- try {
- _connector.shutdown();
- } catch (Exception e) {
- __log.error("Error shutting down JCA server.",e);
- }
- _connector = null;
- }
-
- try {
-
- try {
- __log.debug("shutting down quartz scheduler.");
- _ode._scheduler.shutdown();
- } catch (Exception ex) {
-
- }
-
- __log.debug("cleaning up temporary files.");
- TempFileManager.cleanup();
-
- _suManager = null;
- _ode = null;
-
- if (_needDerbyShutdown) {
- __log.debug("shutting down derby.");
- EmbeddedDriver driver = new EmbeddedDriver();
try {
- driver.connect(_derbyUrl+";shutdown", new Properties());
+ properties.put(Environment.DIALECT,
guessDialect(_ode._dataSource));
} catch (Exception ex) {
- __log.error("Error shutting down derby.", ex);
+ String errmsg = __msgs.msgOdeInitHibernateDialectDetectFailed();
+ __log.error(errmsg,ex);
+ throw new JBIException(errmsg,ex);
+ }
+
+ File hibernatePropFile = new File(_ode.getContext().getInstallRoot()
+ + File.separatorChar + "hibernate.properties");
+
+ if (hibernatePropFile.exists()) {
+ FileInputStream fis = null;
+ try {
+ fis = new FileInputStream(hibernatePropFile);
+ properties.load(new BufferedInputStream(fis));
+ } catch (IOException e) {
+ String errmsg = __msgs
+
.msgOdeInitHibernateErrorReadingHibernateProperties(hibernatePropFile);
+ __log.error(errmsg, e);
+ throw new JBIException(errmsg, e);
+ }
+ } else {
+ __log.info(__msgs
+ .msgOdeInitHibernatePropertiesNotFound(hibernatePropFile));
}
- }
- __log.info("Shutdown completed.");
- } finally {
- Thread.currentThread().setContextClassLoader(old);
- }
- }
-
- @SuppressWarnings("unchecked")
- private <T> T lookupInJndi(String objName) throws Exception {
- ClassLoader old = Thread.currentThread().getContextClassLoader();
- Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
- try {
- InitialContext ctx = null;
- try {
- ctx = new InitialContext();
- return (T) ctx.lookup(objName);
- } finally {
- if (ctx != null)
- try {
- ctx.close();
- } catch (Exception ex1) {
- ; // swallow
- __log.error("Error closing JNDI connection.", ex1);
- }
- }
- } finally {
- Thread.currentThread().setContextClassLoader(old);
- }
-
- }
-
- private String guessDialect(DataSource dataSource) throws Exception {
- String dialect = null;
- // Open a connection and use that connection to figure out database
- // product name/version number in order to decide which Hibernate
- // dialect to use.
- Connection conn = dataSource.getConnection();
- try {
- DatabaseMetaData metaData = conn.getMetaData();
- if (metaData != null) {
- String dbProductName = metaData.getDatabaseProductName();
- int dbMajorVer = metaData.getDatabaseMajorVersion();
- __log.info("Using database " + dbProductName + " major version "
- + dbMajorVer);
- DialectFactory.DatabaseDialectMapper mapper =
(DialectFactory.DatabaseDialectMapper) HIBERNATE_DIALECTS
- .get(dbProductName);
- if (mapper != null) {
- dialect = mapper.getDialectClass(dbMajorVer);
+
+ SessionManager sm = new SessionManager(properties, _ode._dataSource,
_ode
+ .getTransactionManager());
+ _ode._daocf = new BpelDAOConnectionFactoryImpl(sm);
+ }
+
+ private void initConnector() throws JBIException {
+ int port = _ode._config.getConnectorPort();
+ if (port == 0) {
+ __log.info("Skipping connector initialization.");
} else {
- Dialect hbDialect = DialectFactory.determineDialect(
- dbProductName, dbMajorVer);
- if (hbDialect != null)
- dialect = hbDialect.getClass().getName();
- }
- }
- } finally {
- conn.close();
- }
-
- if (dialect == null) {
- __log
- .info("Cannot determine hibernate dialect for this database: using
the default one.");
- dialect = DEFAULT_HIBERNATE_DIALECT;
- }
-
- assert dialect != null;
-
- return dialect;
-
- }
-
- private static final HashMap<String,
DialectFactory.VersionInsensitiveMapper> HIBERNATE_DIALECTS = new
HashMap<String, DialectFactory.VersionInsensitiveMapper>();
-
- static {
- // Hibernate has a nice table that resolves the dialect from the database
- // product name,
- // but doesn't include all the drivers. So this is supplementary, and some
- // day in the
- // future they'll add more drivers and we can get rid of this.
- // Drivers already recognized by Hibernate:
- // HSQL Database Engine
- // DB2/NT
- // MySQL
- // PostgreSQL
- // Microsoft SQL Server Database, Microsoft SQL Server
- // Sybase SQL Server
- // Informix Dynamic Server
- // Oracle 8 and Oracle >8
- HIBERNATE_DIALECTS.put("Apache Derby",
- new DialectFactory.VersionInsensitiveMapper(
- "org.hibernate.dialect.DerbyDialect"));
- }
+ _connector = new BpelServerConnector();
+ _connector.setBpelServer(_ode._server);
+ _connector.setPort(_ode._config.getConnectorPort());
+ _connector.setId(_ode._config.getConnectorName());
+ try {
+ _connector.start();
+ } catch (Exception e) {
+ __log.error("Failed to initialize JCA connector.",e);
+ }
+ }
+ }
+
+ private void initXslt() {
+ TransformerFactory trsf = new net.sf.saxon.TransformerFactoryImpl();
+ XslTransformHandler.getInstance().setTransformerFactory(trsf);
+ }
+
+
+ public synchronized void start() throws JBIException {
+ if (_started)
+ return;
+
+ try {
+ __log.info(__msgs.msgOdeStarting());
+
+ if (!_initSuccess) {
+ String errmsg = "attempt to call start() after init()
failure.";
+ IllegalStateException ex = new IllegalStateException(errmsg);
+ __log.fatal(errmsg, ex);
+ throw new JBIException(errmsg,ex);
+ }
+
+ if (_ode.getChannel() == null) {
+ throw (new JBIException("No channel!", new
NullPointerException()));
+ }
+
+ try {
+ _ode._server.start();
+ } catch (Exception ex) {
+ String errmsg = __msgs.msgOdeBpelServerStartFailure();
+ __log.error(errmsg,ex);
+ throw new JBIException(errmsg, ex);
+ }
+
+ _receiver = new Receiver(_ode);
+ _receiver.start();
+ _started = true;
+ __log.info(__msgs.msgOdeStarted());
+ } finally {
+ if (!_started) {
+ if (_receiver != null) {
+ _receiver.cease();
+ }
+ _receiver = null;
+ }
+ }
+ }
+
+ public synchronized void stop() throws JBIException {
+ if (!_started) {
+ return;
+ }
+
+ __log.info("Stopping ODE.");
+
+ try {
+
+ if (_receiver != null) {
+ try {
+ _receiver.cease();
+ } catch (Exception ex) {
+ __log.fatal("Error ceasing receiver.", ex);
+ } finally {
+ _receiver = null;
+ }
+ }
+
+ try {
+ _ode._server.stop();
+
+ } catch (Throwable ex) {
+ __log.fatal("Error stopping services.", ex);
+ }
+
+ __log.info("ODE stopped.");
+ } finally {
+ _started = false;
+ }
+ }
+
+ /**
+ * Shutdown the service engine. This performs cleanup before the BPE is
+ * terminated. Once this method has been called, init() must be called
before
+ * the transformation engine can be started again with a call to start().
+ *
+ * @throws javax.jbi.JBIException
+ * if the transformation engine is unable to shut down.
+ */
+ public void shutDown() throws JBIException {
+ ClassLoader old = Thread.currentThread().getContextClassLoader();
+
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+
+ if (_connector != null) {
+ try {
+ _connector.shutdown();
+ } catch (Exception e) {
+ __log.error("Error shutting down JCA server.",e);
+ }
+ _connector = null;
+ }
+
+ try {
+
+ try {
+ __log.debug("shutting down quartz scheduler.");
+ _ode._scheduler.shutdown();
+ } catch (Exception ex) {
+
+ }
+
+ __log.debug("cleaning up temporary files.");
+ TempFileManager.cleanup();
+
+ _suManager = null;
+ _ode = null;
+
+ if (_needDerbyShutdown) {
+ __log.debug("shutting down derby.");
+ EmbeddedDriver driver = new EmbeddedDriver();
+ try {
+ driver.connect(_derbyUrl+";shutdown", new Properties());
+ } catch (Exception ex) {
+ __log.error("Error shutting down derby.", ex);
+ }
+ }
+ __log.info("Shutdown completed.");
+ } finally {
+ Thread.currentThread().setContextClassLoader(old);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private <T> T lookupInJndi(String objName) throws Exception {
+ ClassLoader old = Thread.currentThread().getContextClassLoader();
+
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+ try {
+ InitialContext ctx = null;
+ try {
+ ctx = new InitialContext();
+ return (T) ctx.lookup(objName);
+ } finally {
+ if (ctx != null)
+ try {
+ ctx.close();
+ } catch (Exception ex1) {
+ ; // swallow
+ __log.error("Error closing JNDI connection.", ex1);
+ }
+ }
+ } finally {
+ Thread.currentThread().setContextClassLoader(old);
+ }
+
+ }
+
+ private String guessDialect(DataSource dataSource) throws Exception {
+ String dialect = null;
+ // Open a connection and use that connection to figure out database
+ // product name/version number in order to decide which Hibernate
+ // dialect to use.
+ Connection conn = dataSource.getConnection();
+ try {
+ DatabaseMetaData metaData = conn.getMetaData();
+ if (metaData != null) {
+ String dbProductName = metaData.getDatabaseProductName();
+ int dbMajorVer = metaData.getDatabaseMajorVersion();
+ __log.info("Using database " + dbProductName + " major version
"
+ + dbMajorVer);
+ DialectFactory.DatabaseDialectMapper mapper =
(DialectFactory.DatabaseDialectMapper) HIBERNATE_DIALECTS
+ .get(dbProductName);
+ if (mapper != null) {
+ dialect = mapper.getDialectClass(dbMajorVer);
+ } else {
+ Dialect hbDialect = DialectFactory.determineDialect(
+ dbProductName, dbMajorVer);
+ if (hbDialect != null)
+ dialect = hbDialect.getClass().getName();
+ }
+ }
+ } finally {
+ conn.close();
+ }
+
+ if (dialect == null) {
+ __log
+ .info("Cannot determine hibernate dialect for this
database: using the default one.");
+ dialect = DEFAULT_HIBERNATE_DIALECT;
+ }
+
+ assert dialect != null;
+
+ return dialect;
+
+ }
+
+ private static final HashMap<String,
DialectFactory.VersionInsensitiveMapper> HIBERNATE_DIALECTS = new
HashMap<String, DialectFactory.VersionInsensitiveMapper>();
+
+ static {
+ // Hibernate has a nice table that resolves the dialect from the
database
+ // product name,
+ // but doesn't include all the drivers. So this is supplementary, and
some
+ // day in the
+ // future they'll add more drivers and we can get rid of this.
+ // Drivers already recognized by Hibernate:
+ // HSQL Database Engine
+ // DB2/NT
+ // MySQL
+ // PostgreSQL
+ // Microsoft SQL Server Database, Microsoft SQL Server
+ // Sybase SQL Server
+ // Informix Dynamic Server
+ // Oracle 8 and Oracle >8
+ HIBERNATE_DIALECTS.put("Apache Derby",
+ new DialectFactory.VersionInsensitiveMapper(
+ "org.hibernate.dialect.DerbyDialect"));
+ }
}