Added: webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentStorageManager.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentStorageManager.java?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentStorageManager.java (added)
+++ webservices/sandesha/trunk/java/modules/persistence/src/main/java/org/apache/sandesha2/storage/jdbc/PersistentStorageManager.java Tue Oct 21 08:07:45 2008
@@ -0,0 +1,326 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sandesha2.storage.jdbc;
+
+import java.io.*;
+import java.util.HashMap;
+import java.sql.*;
+
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.AxisModule;
+import org.apache.axis2.description.Parameter;
+import org.apache.axis2.description.ModuleConfiguration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.policy.SandeshaPolicyBean;
+import org.apache.sandesha2.polling.PollingManager;
+import org.apache.sandesha2.storage.SandeshaStorageException;
+import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.Transaction;
+import org.apache.sandesha2.storage.beanmanagers.InvokerBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
+import org.apache.sandesha2.util.SandeshaUtil;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.workers.Invoker;
+import org.apache.sandesha2.workers.SandeshaThread;
+import org.apache.sandesha2.workers.Sender;
+
+/**
+ * A Storage Manager implementation for managing Sandesha2 beans.
+ *
+ * Needs this parameter in module.xml or axis2.xml :
+ *
+ * db.driver JDBC Driver class name
+ * db.connectionstring JDBC connection string
+ * db.user Data Base user name
+ * db.password Data Base user password
+ *
+ * Transactions are supposed to be attached to a thread (see inMemoryStorageManager)
+ * hence the ThreadLocal threadTransaction variable (instead of the transactions HashMap
+ * used by inMemoryStorageManager).
+ *
+ * MessageContexts are stored in a HashMap, as in inMemoryStorageManager, AND in DataBase
+ * as backup in case of failure.
+ */
+
+public class PersistentStorageManager extends StorageManager {
+
+ private Connection DbConnection = null;
+ private String DbConnectionString = null;
+ private String DbDriver = null;
+ private String DbUser = null;
+ private String DbPassword = null;
+ private PersistentRMSBeanMgr pRMSBeanMgr = null;
+ private PersistentRMDBeanMgr pRMDBeanMgr = null;
+ private PersistentSenderBeanMgr pSenderBeanMgr = null;
+ private PersistentInvokerBeanMgr pInvokerBeanMgr = null;
+ private Sender sender = null;
+ private Invoker invoker = null;
+ private PollingManager pollingManager = null;
+ private boolean useSerialization = false;
+ private HashMap<String,MessageContext> storageMap = null;
+ private static ThreadLocal threadTransaction = null;
+ private static final Log log = LogFactory.getLog(PersistentStorageManager.class);
+
+ public SandeshaThread getInvoker() {
+ return invoker;
+ }
+
+ public PollingManager getPollingManager() {
+ return pollingManager;
+ }
+
+ public SandeshaThread getSender() {
+ return sender;
+ }
+
+
+ public PersistentStorageManager(ConfigurationContext context)
+ throws SandeshaException
+ {
+ super (context);
+ log.info("create PersistentStorageManager");
+ storageMap = new HashMap ();
+ threadTransaction = new ThreadLocal();
+ pRMSBeanMgr = new PersistentRMSBeanMgr (this);
+ pRMDBeanMgr = new PersistentRMDBeanMgr (this);
+ pSenderBeanMgr = new PersistentSenderBeanMgr (this);
+ pInvokerBeanMgr = new PersistentInvokerBeanMgr (this);
+ sender = new Sender();
+ // Note that while inOrder is a global property we can decide if we need the
+ // invoker thread at this point. If we change this to be a sequence-level
+ // property then we'll need to revisit this.
+ SandeshaPolicyBean policy = SandeshaUtil.getPropertyBean(context.getAxisConfiguration());
+ useSerialization = policy.isUseMessageSerialization();
+ if(policy.isInOrder()) invoker = new Invoker();
+ if(policy.isEnableMakeConnection()) pollingManager = new PollingManager();
+ ModuleConfiguration mc = context.getAxisConfiguration().getModuleConfig("sandesha2");
+ Parameter param = mc.getParameter("db.connectionstring");
+ if ( param != null ) {
+ DbConnectionString = (String)param.getValue();
+ log.debug(param.getName() + "=" + DbConnectionString);
+ }
+ param = mc.getParameter("db.driver");
+ if ( param != null ) {
+ DbDriver = (String)param.getValue();
+ log.debug(param.getName() + "=" + DbDriver);
+ }
+ param = mc.getParameter("db.user");
+ if ( param != null ) {
+ DbUser = (String)param.getValue();
+ log.debug(param.getName() + "=" + DbUser);
+ }
+ param = mc.getParameter("db.password");
+ if ( param != null ) {
+ DbPassword = (String)param.getValue();
+ log.debug(param.getName() + "=" + DbPassword);
+ }
+ }
+ public void shutdown()
+ {
+ if ( DbConnection != null ) {
+ try {
+ DbConnection.close();
+ DbConnection = null;
+ } catch (Exception ex) {}
+ }
+ super.shutdown();
+ }
+
+ public InvokerBeanMgr getInvokerBeanMgr()
+ {
+ return pInvokerBeanMgr;
+ }
+
+ public RMDBeanMgr getRMDBeanMgr()
+ {
+ return pRMDBeanMgr;
+ }
+
+ public RMSBeanMgr getRMSBeanMgr()
+ {
+ return pRMSBeanMgr;
+ }
+
+ public SenderBeanMgr getSenderBeanMgr()
+ {
+ return pSenderBeanMgr;
+ }
+
+ public boolean requiresMessageSerialization() {
+ return useSerialization;
+ }
+
+ public boolean hasUserTransaction(MessageContext msg)
+ {
+ // Answer to : Is there a user transaction in play ?
+ // but what is a 'user transaction' ?
+ return false;
+ }
+
+ public Transaction getTransaction()
+ {
+ Transaction transaction = (Transaction) threadTransaction.get();
+ if (transaction == null) {
+ transaction = new JDBCTransaction(this);
+ threadTransaction.set(transaction);
+ } else {
+ // We don't want to overwrite or return an existing transaction, as someone
+ // else should decide if we commit it or not. If we get here then we probably
+ // have a bug.
+ if(log.isDebugEnabled()) log.debug("Possible re-used transaction: ");
+ transaction = null;
+ }
+ return transaction;
+ }
+
+ public void removeTransaction()
+ {
+ threadTransaction.set(null);
+ }
+
+ /**
+ * Returns the connection attached to the current transaction if exists
+ * or the "common" connection.
+ *
+ * @return Data Base Connection
+ */
+ public Connection getDbConnection()
+ {
+ JDBCTransaction transaction = (JDBCTransaction) threadTransaction.get();
+ if ( transaction == null )return DbConnection;
+ return transaction.getDbConnection();
+ }
+
+
+ public void initStorage (AxisModule moduleDesc)
+ throws SandeshaStorageException
+ {
+ log.info("init PersistentStorageManager");
+ if ( DbConnectionString == null || DbDriver == null )
+ throw new SandeshaStorageException ("Can't proceed. Needed properties are not set.");
+
+ DbConnection = dbConnect();
+ }
+
+ public Connection dbConnect ()
+ throws SandeshaStorageException
+ {
+ try {
+ Class.forName(DbDriver);
+ return DriverManager.getConnection(DbConnectionString,DbUser,DbPassword);
+ } catch (Exception ex) {
+ log.error("Unable to create DB connection ", ex);
+ throw new SandeshaStorageException(ex);
+ }
+ }
+
+ public MessageContext retrieveMessageContext(String key,ConfigurationContext configContext)
+ throws SandeshaStorageException
+ {
+ log.debug("Enter retrieveMessageContext for key " + key);
+ /**/
+ if (storageMap.containsKey(key)) {
+ log.debug("retrieveMessageContext get from cache");
+ return (MessageContext) storageMap.get(key);
+ }
+ /**/
+ try {
+ Statement stmt = getDbConnection().createStatement();
+ /**/
+ ResultSet rs = stmt.executeQuery("select * from wsrm_msgctx where ctx_key='" +
+ key + "'");
+ rs.next();
+ MessageContext msgCtx = new MessageContext();
+ msgCtx.readExternal(new ObjectInputStream(rs.getBinaryStream("ctx")));
+ msgCtx.activate(configContext);
+ msgCtx.setProperty(Sandesha2Constants.POST_FAILURE_MESSAGE,Sandesha2Constants.VALUE_TRUE);
+ rs.close();
+ stmt.close();
+ log.debug("RetrieveMessageContext get from DB");
+ return msgCtx;
+ } catch ( Exception ex) {
+ log.error("RetrieveMessageContext exception " + ex);
+ throw new SandeshaStorageException(ex);
+ }
+ }
+
+ synchronized public void storeMessageContext(String key,MessageContext msgContext)
+ throws SandeshaStorageException
+ {
+ if ( log.isDebugEnabled() ) log.debug("Enter storeMessageContext for key " + key + " context " + msgContext);
+ storageMap.put(key,msgContext);
+ try {
+ PreparedStatement pstmt = getDbConnection().prepareStatement("insert into wsrm_msgctx(ctx_key,ctx)values(?,?)");
+ pstmt.setString(1,key);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+ msgContext.writeExternal(oos);
+ oos.close();
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+ pstmt.setBinaryStream(2, bais, bais.available());
+ pstmt.execute();
+ pstmt.close();
+ } catch(Exception ex) {
+ throw new SandeshaStorageException(ex);
+ }
+ }
+
+ synchronized public void updateMessageContext(String key,MessageContext msgContext)
+ throws SandeshaStorageException
+ {
+ if ( log.isDebugEnabled() ) log.debug("updateMessageContext key : " + key);
+ storageMap.put(key,msgContext);
+ PreparedStatement pstmt = null;
+ try {
+ pstmt = getDbConnection().prepareStatement("update wsrm_msgctx set ctx=?" +
+ "where ctx_key='" + key + "'");
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+ msgContext.writeExternal(oos);
+ oos.close();
+ ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+ pstmt.setBinaryStream(1, bais, bais.available());
+ pstmt.executeQuery();
+ pstmt.close();
+ } catch(Exception ex) {
+ throw new SandeshaStorageException("Exception in updateMessageContext", ex);
+ }
+ }
+
+ public void removeMessageContext(String key)
+ throws SandeshaStorageException
+ {
+ if ( log.isDebugEnabled() ) log.debug("removeMessageContext key : " + key);
+ try {
+ Statement stmt = getDbConnection().createStatement();
+ MessageContext messageInCache = (MessageContext) storageMap.get(key);
+ if (messageInCache!=null) storageMap.remove(key);
+ stmt.executeUpdate("delete from wsrm_msgctx where ctx_key='" + key + "'");
+ stmt.close();
+ } catch (Exception ex ) {
+ throw new SandeshaStorageException("Exception in removeMessageContext", ex);
+ }
+ }
+
+}
Added: webservices/sandesha/trunk/java/modules/persistence/src/resources/ddl/sandesha2-derby.ddl
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/resources/ddl/sandesha2-derby.ddl?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/src/resources/ddl/sandesha2-derby.ddl (added)
+++ webservices/sandesha/trunk/java/modules/persistence/src/resources/ddl/sandesha2-derby.ddl Tue Oct 21 08:07:45 2008
@@ -0,0 +1,112 @@
+drop table wsrm_sender;
+create table wsrm_sender (
+ message_id varchar(255) not null,
+ message_context_ref_key varchar(255),
+ internal_sequence_id varchar(255),
+ sequence_id varchar(255),
+ to_address varchar(255),
+ inbound_sequence_id varchar(255),
+ send smallint,
+ sent_count integer,
+ message_number bigint,
+ resend smallint,
+ time_to_send bigint,
+ message_type integer,
+ last_message smallint,
+ inbound_message_number bigint,
+ transport_available smallint,
+ flags integer,
+ primary key (message_id)
+);
+
+drop table wsrm_rmd;
+create table wsrm_rmd (
+ sequence_id varchar(255) not null,
+ to_epr_addr varchar(255),
+ to_epr blob,
+ reply_to_epr_addr varchar(255),
+ reply_to_epr blob,
+ acks_to_epr_addr varchar(255),
+ acks_to_epr blob,
+ rm_version varchar(255),
+ security_token_data varchar(255),
+ last_activated_time bigint,
+ closed smallint,
+ terminated_flag smallint,
+ polling_mode smallint,
+ service_name varchar(255),
+ flags integer,
+ reference_message_key varchar(255),
+ highest_in_message_id varchar(255),
+ last_in_message_id varchar(255),
+ server_completed_messages clob,
+ outof_order_ranges clob,
+ to_address varchar(255),
+ outbound_internal_sequence varchar(255),
+ next_msgno_to_process bigint,
+ highest_in_message_number bigint,
+ rmd_flags integer,
+ primary key (sequence_id)
+);
+
+drop table wsrm_rms;
+create table wsrm_rms (
+ create_seq_msg_id varchar(255) not null,
+ sequence_id varchar(255),
+ to_epr_addr varchar(255),
+ to_epr blob,
+ reply_to_epr_addr varchar(255),
+ reply_to_epr blob,
+ acks_to_epr_addr varchar(255),
+ acks_to_epr blob,
+ rm_version varchar(255),
+ security_token_data varchar(255),
+ last_activated_time BIGINT,
+ closed smallint,
+ terminated_flag smallint,
+ polling_mode smallint,
+ service_name varchar(255),
+ flags integer,
+ id bigint,
+ internal_sequence_id varchar(255),
+ create_sequence_msg_store_key varchar(255),
+ reference_msg_store_key varchar(255),
+ last_send_error blob,
+ highest_out_relates_to varchar(255),
+ client_completed_messages clob,
+ transport_to varchar(255),
+ offered_endpoint varchar(255),
+ offered_sequence varchar(255),
+ anonymous_uuid varchar(255),
+ last_send_error_timestamp bigint,
+ last_out_message bigint,
+ highest_out_message_number bigint,
+ next_message_number bigint,
+ terminate_added smallint,
+ timed_out smallint,
+ sequence_closed_client smallint,
+ expected_replies bigint,
+ soap_version integer,
+ termination_pauser_for_cs smallint,
+ avoid_auto_termination smallint,
+ rms_flags integer,
+ primary key (create_seq_msg_id)
+);
+
+drop table wsrm_invoker;
+create table wsrm_invoker (
+ message_context_ref_key varchar(255) not null,
+ sequence_id varchar(255),
+ context blob,
+ msg_no bigint,
+ flags integer,
+ PRIMARY KEY (message_context_ref_key)
+);
+
+drop table wsrm_msgctx;
+create table wsrm_msgctx (
+ ctx_key varchar(255) not null,
+ ctx blob,
+ PRIMARY KEY (ctx_key)
+);
+
Added: webservices/sandesha/trunk/java/modules/persistence/src/resources/ddl/sandesha2-mysql.ddl
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/resources/ddl/sandesha2-mysql.ddl?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/src/resources/ddl/sandesha2-mysql.ddl (added)
+++ webservices/sandesha/trunk/java/modules/persistence/src/resources/ddl/sandesha2-mysql.ddl Tue Oct 21 08:07:45 2008
@@ -0,0 +1,113 @@
+drop table if exists wsrm_sender;
+create table wsrm_sender (
+ message_id varchar(255) not null,
+ message_context_ref_key varchar(255),
+ internal_sequence_id varchar(255),
+ sequence_id varchar(255),
+ to_address varchar(255),
+ inbound_sequence_id varchar(255),
+ send smallint,
+ sent_count integer,
+ message_number bigint,
+ resend smallint,
+ time_to_send bigint,
+ message_type integer,
+ last_message smallint,
+ inbound_message_number bigint,
+ transport_available smallint,
+ flags integer,
+ primary key (message_id)
+);
+
+drop table if exists wsrm_rmd;
+create table wsrm_rmd (
+ sequence_id varchar(255) not null,
+ to_epr_addr varchar(255),
+ to_epr blob,
+ reply_to_epr_addr varchar(255),
+ reply_to_epr blob,
+ acks_to_epr_addr varchar(255),
+ acks_to_epr blob,
+ rm_version varchar(255),
+ security_token_data varchar(255),
+ last_activated_time bigint,
+ closed smallint,
+ terminated_flag smallint,
+ polling_mode smallint,
+ service_name varchar(255),
+ flags integer,
+ reference_message_key varchar(255),
+ highest_in_message_id varchar(255),
+ last_in_message_id varchar(255),
+ server_completed_messages blob,
+ outof_order_ranges blob,
+ to_address varchar(255),
+ outbound_internal_sequence varchar(255),
+ next_msgno_to_process bigint,
+ highest_in_message_number bigint,
+ rmd_flags integer,
+ primary key (sequence_id)
+);
+
+drop table if exists wsrm_rms;
+create table wsrm_rms (
+ create_seq_msg_id varchar(255) not null,
+ sequence_id varchar(255),
+ to_epr_addr varchar(255),
+ to_epr blob,
+ reply_to_epr_addr varchar(255),
+ reply_to_epr blob,
+ acks_to_epr_addr varchar(255),
+ acks_to_epr blob,
+ rm_version varchar(255),
+ security_token_data varchar(255),
+ last_activated_time BIGINT,
+ closed smallint,
+ terminated_flag smallint,
+ polling_mode smallint,
+ service_name varchar(255),
+ flags integer,
+ id bigint,
+ internal_sequence_id varchar(255),
+ create_sequence_msg_store_key varchar(255),
+ reference_msg_store_key varchar(255),
+ last_send_error blob,
+ highest_out_relates_to varchar(255),
+ client_completed_messages blob,
+ transport_to varchar(255),
+ offered_endpoint varchar(255),
+ offered_sequence varchar(255),
+ anonymous_uuid varchar(255),
+ last_send_error_timestamp bigint,
+ last_out_message bigint,
+ highest_out_message_number bigint,
+ next_message_number bigint,
+ terminate_added smallint,
+ timed_out smallint,
+ sequence_closed_client smallint,
+ expected_replies bigint,
+ soap_version integer,
+ termination_pauser_for_cs smallint,
+ avoid_auto_termination smallint,
+ rms_flags integer,
+ primary key (create_seq_msg_id)
+);
+
+
+drop table if exists wsrm_invoker;
+create table wsrm_invoker (
+ message_context_ref_key varchar(255) not null,
+ sequence_id varchar(255),
+ context blob,
+ msg_no bigint,
+ flags integer,
+ PRIMARY KEY (message_context_ref_key)
+);
+
+drop table if exists wsrm_msgctx;
+create table wsrm_msgctx (
+ ctx_key varchar(255) not null,
+ ctx blob,
+ PRIMARY KEY (ctx_key)
+);
+
Added: webservices/sandesha/trunk/java/modules/persistence/src/resources/module_config_axis2.xml
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/resources/module_config_axis2.xml?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/src/resources/module_config_axis2.xml (added)
+++ webservices/sandesha/trunk/java/modules/persistence/src/resources/module_config_axis2.xml Tue Oct 21 08:07:45 2008
@@ -0,0 +1,15 @@
+<!-- Add something like this in axis2.xml for the right DB -->
+ <moduleConfig name="sandesha2">
+ <!-- MySQL
+ <parameter name="db.connectionstring">jdbc:mysql://localhost/wsrm</parameter>
+ <parameter name="db.driver">com.mysql.jdbc.Driver</parameter>
+ <parameter name="db.user"></parameter>
+ <parameter name="db.password"></parameter>
+ -->
+ <!-- Derby -->
+ <parameter name="db.connectionstring">jdbc:derby:derby/wsrm</parameter>
+ <parameter name="db.driver">org.apache.derby.jdbc.EmbeddedDriver</parameter>
+ <parameter name="db.user"></parameter>
+ <parameter name="db.password"></parameter>
+ <!-- -->
+ </moduleConfig>
Added: webservices/sandesha/trunk/java/modules/persistence/src/test/java/org/apache/sandesha2/RMScenariosTest.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/test/java/org/apache/sandesha2/RMScenariosTest.java?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/src/test/java/org/apache/sandesha2/RMScenariosTest.java (added)
+++ webservices/sandesha/trunk/java/modules/persistence/src/test/java/org/apache/sandesha2/RMScenariosTest.java Tue Oct 21 08:07:45 2008
@@ -0,0 +1,306 @@
+/*
+ * Copyright 2007 The Apache Software Foundation.
+ * Copyright 2007 International Business Machines Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sandesha2;
+
+import java.io.File;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.AssertionFailedError;
+
+import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.ConfigurationContextFactory;
+import org.apache.sandesha2.Sandesha2Constants;
+import org.apache.sandesha2.SandeshaTestCase;
+import org.apache.sandesha2.client.SandeshaClient;
+import org.apache.sandesha2.client.SandeshaClientConstants;
+import org.apache.sandesha2.client.SequenceReport;
+import org.apache.sandesha2.util.SandeshaUtil;
+
+public class RMScenariosTest extends SandeshaTestCase {
+
+ private boolean serverStarted = false;
+ protected ConfigurationContext configContext = null;
+
+ protected String to = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
+
+ protected String repoPath = "target" + File.separator + "repos" + File.separator + "persistence-server";
+ protected String axis2_xml = "target" + File.separator + "repos" + File.separator + "persistence-server" + File.separator + "server_axis2.xml";
+
+ protected String repoPathClient = "target" + File.separator + "repos" + File.separator + "persistence-client";
+ protected String axis2_xmlClient = "target" + File.separator + "repos" + File.separator + "persistence-client" + File.separator + "client_axis2.xml";
+
+ public RMScenariosTest () {
+ super ("RMScenariosTest");
+ }
+
+ public RMScenariosTest (String name) {
+ super(name);
+ }
+
+ public void setUp () throws Exception {
+ super.setUp();
+
+ if (!serverStarted) {
+ startServer(repoPath, axis2_xml);
+ configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPathClient,axis2_xmlClient);
+ }
+ serverStarted = true;
+ }
+
+ /**
+ * Override the teardown processing
+ */
+ public void tearDown () throws Exception {
+ super.tearDown();
+ }
+
+ public void testPing() throws Exception {
+ // Run a ping test with sync acks
+ runPing(false, false);
+
+ // Run a ping test with async acks
+ runPing(true, true);
+ }
+
+ public void testAsyncEcho() throws Exception {
+ // Test async echo with sync acks
+ Options clientOptions = new Options();
+ runEcho(clientOptions, true, false, false,true,false);
+
+ // Test async echo with async acks
+ clientOptions = new Options();
+ runEcho(clientOptions, true, true, false,true,false);
+
+ // Test async echo with async acks and offer
+ clientOptions = new Options();
+ clientOptions.setProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID,SandeshaUtil.getUUID());
+ runEcho(clientOptions, true, true, false,true,true);
+ }
+
+ public void testSyncEchoWithOffer() throws Exception {
+ // Test sync echo with an offer, and the 1.1 spec
+ Options clientOptions = new Options();
+ clientOptions.setProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID,SandeshaUtil.getUUID());
+ clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION,Sandesha2Constants.SPEC_VERSIONS.v1_1);
+ runEcho(clientOptions, false, false, true,true,false);
+
+// // Test sync echo with an offer, and the 1.0 spec. The offer is not automatic as this
+// // is a client that hasn't been built from WSDL. If the user's operations had been
+// // modelled properly then the offer would happen automatically.
+// clientOptions = new Options();
+// clientOptions.setProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID,SandeshaUtil.getUUID());
+// clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION,Sandesha2Constants.SPEC_VERSIONS.v1_0);
+// runEcho(clientOptions, false, false, true,false,false);
+ }
+
+ public void testSyncEcho() throws Exception {
+ // Test sync echo with no offer, and the 1.1 spec
+ Options clientOptions = new Options();
+ clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION,Sandesha2Constants.SPEC_VERSIONS.v1_1);
+ runEcho(clientOptions, false, false, true,true,true);
+ }
+
+ public void runPing(boolean asyncAcks, boolean stopListener) throws Exception {
+
+ Options clientOptions = new Options();
+
+ ServiceClient serviceClient = new ServiceClient (configContext,null);
+ serviceClient.setOptions(clientOptions);
+
+ String sequenceKey = SandeshaUtil.getUUID();
+
+ clientOptions.setAction(pingAction);
+ clientOptions.setTo(new EndpointReference (to));
+ clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
+ clientOptions.setProperty(SandeshaClientConstants.LAST_MESSAGE, Constants.VALUE_TRUE);
+
+ if(asyncAcks) {
+ clientOptions.setUseSeparateListener(true);
+ }
+
+ serviceClient.fireAndForget(getPingOMBlock("ping1"));
+
+ long limit = System.currentTimeMillis() + waitTime;
+ Error lastError = null;
+ while(System.currentTimeMillis() < limit) {
+ Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
+
+ try {
+ SequenceReport sequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);
+ System.out.println("Checking Outbound Sequence: " + sequenceReport.getSequenceID());
+ assertTrue("Checking completed messages", sequenceReport.getCompletedMessages().contains(new Long(1)));
+ assertEquals("Checking sequence terminated", SequenceReport.SEQUENCE_STATUS_TERMINATED, sequenceReport.getSequenceStatus());
+ assertEquals("Checking sequence direction", SequenceReport.SEQUENCE_DIRECTION_OUT, sequenceReport.getSequenceDirection());
+
+ lastError = null;
+ break;
+ } catch(Error e) {
+ e.printStackTrace();
+ System.out.println("Possible error:" + e);
+ lastError = e;
+ }
+ }
+
+ if(lastError != null) throw lastError;
+
+ if (stopListener)
+ configContext.getListenerManager().stop();
+
+ serviceClient.cleanup();
+
+ }
+
+ public void runEcho(Options clientOptions, boolean asyncReply, boolean asyncAcks, boolean explicitTermination, boolean checkInboundTermination, boolean stopListener) throws Exception {
+
+ String sequenceKey = SandeshaUtil.getUUID();
+
+ ServiceClient serviceClient = new ServiceClient (configContext,null);
+ serviceClient.setOptions(clientOptions);
+
+ clientOptions.setAction(echoAction);
+ clientOptions.setTo(new EndpointReference (to));
+ clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
+ clientOptions.setTransportInProtocol(Constants.TRANSPORT_HTTP);
+
+ if(asyncReply || asyncAcks) {
+ clientOptions.setUseSeparateListener(true);
+
+ if(asyncAcks) {
+ String acksTo = serviceClient.getMyEPR(Constants.TRANSPORT_HTTP).getAddress();
+ clientOptions.setProperty(SandeshaClientConstants.AcksTo,acksTo);
+ } else {
+ String acksTo = AddressingConstants.Final.WSA_ANONYMOUS_URL;
+ clientOptions.setProperty(SandeshaClientConstants.AcksTo,acksTo);
+ }
+ }
+
+ if(asyncAcks) {
+ String acksTo = serviceClient.getMyEPR(Constants.TRANSPORT_HTTP).getAddress();
+ clientOptions.setProperty(SandeshaClientConstants.AcksTo,acksTo);
+ } else {
+ String acksTo = AddressingConstants.Final.WSA_ANONYMOUS_URL;
+ clientOptions.setProperty(SandeshaClientConstants.AcksTo,acksTo);
+ }
+
+ // Establish a baseline count for inbound sequences
+ List oldIncomingReports = SandeshaClient.getIncomingSequenceReports(configContext);
+
+ TestCallback callback1 = new TestCallback ("Callback 1");
+ serviceClient.sendReceiveNonBlocking (getEchoOMBlock("echo1",sequenceKey),callback1);
+
+ TestCallback callback2 = new TestCallback ("Callback 2");
+ serviceClient.sendReceiveNonBlocking (getEchoOMBlock("echo2",sequenceKey),callback2);
+
+ if (!explicitTermination
+ &&
+ !Sandesha2Constants.SPEC_VERSIONS.v1_1.equals(clientOptions.getProperty(SandeshaClientConstants.RM_SPEC_VERSION))) {
+
+ clientOptions.setProperty(SandeshaClientConstants.LAST_MESSAGE, Constants.VALUE_TRUE);
+ }
+
+ TestCallback callback3 = new TestCallback ("Callback 3");
+ serviceClient.sendReceiveNonBlocking (getEchoOMBlock("echo3",sequenceKey),callback3);
+
+ if (explicitTermination) {
+ Thread.sleep(10000);
+ SandeshaClient.terminateSequence(serviceClient);
+ }
+
+ long limit = System.currentTimeMillis() + waitTime;
+ Error lastError = null;
+ while(System.currentTimeMillis() < limit) {
+ Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
+
+ try {
+
+ //assertions for the out sequence.
+ SequenceReport outgoingSequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);
+ System.out.println("Checking Outbound Sequence: " + outgoingSequenceReport.getSequenceID());
+ assertTrue("Outbound message #1", outgoingSequenceReport.getCompletedMessages().contains(new Long(1)));
+ assertTrue("Outbound message #2", outgoingSequenceReport.getCompletedMessages().contains(new Long(2)));
+ assertTrue("Outbound message #3", outgoingSequenceReport.getCompletedMessages().contains(new Long(3)));
+ assertEquals("Outbound sequence status: TERMINATED", SequenceReport.SEQUENCE_STATUS_TERMINATED, outgoingSequenceReport.getSequenceStatus());
+ assertEquals("Outbound sequence direction: OUT", SequenceReport.SEQUENCE_DIRECTION_OUT, outgoingSequenceReport.getSequenceDirection());
+
+ //assertions for the inbound sequence. The one we care about is a new sequence,
+ //so it will not exist in the oldSequences list.
+ List incomingSequences = SandeshaClient.getIncomingSequenceReports(configContext);
+ SequenceReport incomingSequenceReport = getNewReport(incomingSequences, oldIncomingReports);
+ System.out.println("Checking Inbound Sequence: " + incomingSequenceReport.getSequenceID());
+ String offer = (String) clientOptions.getProperty(SandeshaClientConstants.OFFERED_SEQUENCE_ID);
+ if(offer != null) assertEquals("Inbound seq id", offer, incomingSequenceReport.getSequenceID());
+ assertEquals ("Inbound message count", 3, incomingSequenceReport.getCompletedMessages().size());
+ assertTrue("Inbound message #1", incomingSequenceReport.getCompletedMessages().contains(new Long(1)));
+ assertTrue("Inbound message #2", incomingSequenceReport.getCompletedMessages().contains(new Long(2)));
+ assertTrue("Inbound message #3", incomingSequenceReport.getCompletedMessages().contains(new Long(3)));
+
+ if (checkInboundTermination)
+ assertEquals("Inbound sequence status: TERMINATED", SequenceReport.SEQUENCE_STATUS_TERMINATED, incomingSequenceReport.getSequenceStatus());
+
+ assertEquals("Inbound sequence direction: IN", SequenceReport.SEQUENCE_DIRECTION_IN, incomingSequenceReport.getSequenceDirection());
+
+ assertTrue("Callback #1", callback1.isComplete());
+ assertEquals("Callback #1 data", "echo1", callback1.getResult());
+
+ assertTrue("Callback #2", callback2.isComplete());
+ assertEquals("Callback #2 data", "echo1echo2", callback2.getResult());
+
+ assertTrue("Callback #3", callback3.isComplete());
+ assertEquals("Callback #3 data", "echo1echo2echo3", callback3.getResult());
+
+ lastError = null;
+ break;
+ } catch(Error e) {
+ e.printStackTrace();
+ System.out.println("Possible error:" + e);
+ lastError = e;
+ }
+ }
+ if(lastError != null) throw lastError;
+
+ if (stopListener)
+ configContext.getListenerManager().stop();
+
+ serviceClient.cleanup();
+ }
+
+ // Scan through lists of old and new incoming sequences, to find the sequence that
+ // was established by this test. Note that some of the old sequences may have timed out.
+ private SequenceReport getNewReport(List incomingSequences, List oldIncomingReports) {
+ HashSet sequenceIds = new HashSet();
+ for(Iterator oldSequences = oldIncomingReports.iterator(); oldSequences.hasNext(); ) {
+ SequenceReport report = (SequenceReport) oldSequences.next();
+ sequenceIds.add(report.getSequenceID());
+ }
+ for(Iterator currentSequences = incomingSequences.iterator(); currentSequences.hasNext(); ) {
+ SequenceReport report = (SequenceReport) currentSequences.next();
+ if(!sequenceIds.contains(report.getSequenceID())) {
+ return report;
+ }
+ }
+ throw new AssertionFailedError("Failed to find a new reply sequence");
+ }
+
+
+}
Added: webservices/sandesha/trunk/java/modules/persistence/src/test/java/org/apache/sandesha2/SandeshaTestCase.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/src/test/java/org/apache/sandesha2/SandeshaTestCase.java?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/src/test/java/org/apache/sandesha2/SandeshaTestCase.java (added)
+++ webservices/sandesha/trunk/java/modules/persistence/src/test/java/org/apache/sandesha2/SandeshaTestCase.java Tue Oct 21 08:07:45 2008
@@ -0,0 +1,272 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.sandesha2;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.Properties;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import junit.framework.TestCase;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.OMXMLParserWrapper;
+import org.apache.axiom.om.impl.llom.factory.OMXMLBuilderFactory;
+import org.apache.axiom.soap.SOAPBody;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axis2.client.async.AxisCallback;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.ConfigurationContextFactory;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisOperationFactory;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.engine.MessageReceiver;
+import org.apache.axis2.transport.http.SimpleHTTPServer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class SandeshaTestCase extends TestCase {
+
+ String resourceDir = ""; //"test-resources";
+ Properties properties = null;
+ final String PROPERTY_FILE_NAME = "sandesha2-test.properties";
+ public final int DEFAULT_SERVER_TEST_PORT = 8060;
+ public ConfigurationContext serverConfigurationContext = null;
+ private final String RMServiceName = "RMSampleService";
+ private Log log = LogFactory.getLog(getClass());
+
+ private final static String applicationNamespaceName = "http://tempuri.org/";
+ private final static String echoString = "echoString";
+ private final static String ping = "ping";
+ private final static String Text = "Text";
+ private final static String Sequence = "Sequence";
+ private final static String echoStringResponse = "echoStringResponse";
+ private final static String EchoStringReturn = "EchoStringReturn";
+
+ protected SimpleHTTPServer httpServer = null;
+ protected int serverPort = DEFAULT_SERVER_TEST_PORT;
+ protected int waitTime = 70000; // Each test will wait up to 70 seconds, unless we override it here
+ protected int tickTime = 10000; // Each wait will check the test assertions each second
+ protected String pingAction = "urn:wsrm:Ping";
+ protected String echoAction = "urn:wsrm:EchoString";
+
+ public SandeshaTestCase(String name) {
+ super(name);
+ String testRource = "target" + File.separator + "test-classes";
+ resourceDir = new File(testRource).getPath();
+
+ String propFileStr = resourceDir + File.separator + PROPERTY_FILE_NAME;
+ properties = new Properties ();
+
+ try {
+ FileInputStream propertyFile = new FileInputStream (new File(propFileStr));
+ properties.load(propertyFile);
+ } catch (FileNotFoundException e) {
+ log.error(e);
+ } catch (IOException e) {
+ log.error(e);
+ }
+ }
+
+ public void setUp () throws Exception {
+ super.setUp();
+
+ String serverPortStr = getTestProperty("test.server.port");
+ if (serverPortStr!=null) {
+ try {
+ serverPort = Integer.parseInt(serverPortStr);
+ } catch (NumberFormatException e) {
+ log.error(e);
+ }
+ }
+ }
+
+ public ConfigurationContext startServer(String repoPath, String axis2_xml)
+ throws Exception {
+
+ ConfigurationContext configContext =
+ ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
+
+ httpServer = new SimpleHTTPServer (configContext,serverPort);
+ httpServer.start();
+ Thread.sleep(300);
+
+ return configContext;
+ }
+
+ public void tearDown () throws Exception {
+ if (httpServer!=null) {
+ httpServer.stop();
+ }
+
+ Thread.sleep(300);
+ }
+
+ protected InputStreamReader getResource(String relativePath, String resourceName) {
+ String resourceFile = resourceDir + relativePath + File.separator + resourceName;
+ try {
+ FileReader reader = new FileReader(resourceFile);
+ return reader;
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException("cannot load the test-resource", e);
+ }
+ }
+
+ protected SOAPEnvelope getSOAPEnvelope() {
+ return OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope();
+ }
+
+ protected SOAPEnvelope getSOAPEnvelope(String relativePath, String resourceName) {
+ try {
+ XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(
+ getResource(relativePath, resourceName));
+ OMXMLParserWrapper wrapper = OMXMLBuilderFactory.createStAXSOAPModelBuilder(
+ OMAbstractFactory.getSOAP11Factory(), reader);
+ return (SOAPEnvelope) wrapper.getDocumentElement();
+
+ } catch (XMLStreamException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected SOAPEnvelope getEmptySOAPEnvelope() {
+ return OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope();
+ }
+
+ protected static OMElement getEchoOMBlock(String text, String sequenceKey) {
+ OMFactory fac = OMAbstractFactory.getOMFactory();
+ OMNamespace applicationNamespace = fac.createOMNamespace(applicationNamespaceName,"ns1");
+ OMElement echoStringElement = fac.createOMElement(echoString, applicationNamespace);
+ OMElement textElem = fac.createOMElement(Text,applicationNamespace);
+ OMElement sequenceElem = fac.createOMElement(Sequence,applicationNamespace);
+
+ textElem.setText(text);
+ sequenceElem.setText(sequenceKey);
+ echoStringElement.addChild(textElem);
+ echoStringElement.addChild(sequenceElem);
+
+ return echoStringElement;
+ }
+
+ protected OMElement getPingOMBlock(String text) {
+ OMFactory fac = OMAbstractFactory.getOMFactory();
+ OMNamespace namespace = fac.createOMNamespace(applicationNamespaceName,"ns1");
+ OMElement pingElem = fac.createOMElement(ping, namespace);
+ OMElement textElem = fac.createOMElement(Text, namespace);
+
+ textElem.setText(text);
+ pingElem.addChild(textElem);
+
+ return pingElem;
+ }
+
+ protected String checkEchoOMBlock(OMElement response) {
+ assertEquals("Response namespace", applicationNamespaceName, response.getNamespace().getNamespaceURI());
+ assertEquals("Response local name", echoStringResponse, response.getLocalName());
+
+ OMElement echoStringReturnElem = response.getFirstChildWithName(new QName (applicationNamespaceName,EchoStringReturn));
+ assertNotNull("Echo String Return", echoStringReturnElem);
+
+ String resultStr = echoStringReturnElem.getText();
+ return resultStr;
+ }
+
+ public String getTestProperty (String key) {
+ if (properties!=null)
+ return properties.getProperty(key);
+
+ return null;
+ }
+
+ public void overrideConfigurationContext (ConfigurationContext context,MessageReceiver messageReceiver, String operationName, boolean newOperation, int mep) throws Exception {
+
+
+ AxisService rmService = context.getAxisConfiguration().getService(RMServiceName);
+
+ AxisOperation operation = null;
+
+ if (newOperation) {
+ operation = rmService.getOperation(new QName (operationName));
+ if (operation==null)
+ throw new Exception ("Given operation not found");
+ } else {
+ operation = AxisOperationFactory.getAxisOperation(mep);
+ rmService.addOperation(operation);
+ }
+
+ operation.setMessageReceiver(messageReceiver);
+ }
+
+ protected class TestCallback implements AxisCallback {
+
+ String name = null;
+ boolean completed = false;
+ boolean errorReported = false;
+ String resultStr;
+
+ public boolean isComplete() {
+ return completed;
+ }
+
+ public boolean isErrorReported() {
+ return errorReported;
+ }
+
+ public String getResult () {
+ return resultStr;
+ }
+
+ public TestCallback (String name) {
+ this.name = name;
+ }
+
+ public void onComplete() {
+ completed = true;
+ }
+
+ public void onMessage(MessageContext result) {
+ SOAPBody body = result.getEnvelope().getBody();
+ OMElement contents = body.getFirstElement();
+ this.resultStr = checkEchoOMBlock(contents);
+ System.out.println("TestCallback got text: '" + resultStr + "'");
+ }
+
+ public void onFault(MessageContext result) {
+ errorReported = true;
+ System.out.println("TestCallback got fault: " + result.getEnvelope());
+ }
+
+ public void onError (Exception e) {
+ errorReported = true;
+ System.out.println("TestCallback got exception");
+ e.printStackTrace();
+ }
+ }
+
+}
Added: webservices/sandesha/trunk/java/modules/persistence/test-resources/client_axis2.xml
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/test-resources/client_axis2.xml?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/test-resources/client_axis2.xml (added)
+++ webservices/sandesha/trunk/java/modules/persistence/test-resources/client_axis2.xml Tue Oct 21 08:07:45 2008
@@ -0,0 +1,362 @@
+<!--
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<axisconfig name="AxisJava2.0">
+ <!-- ================================================= -->
+ <!-- Parameters -->
+ <!-- ================================================= -->
+ <parameter name="hotdeployment">true</parameter>
+ <parameter name="hotupdate">false</parameter>
+ <parameter name="enableMTOM">false</parameter>
+ <parameter name="enableSwA">false</parameter>
+
+ <!--Uncomment if you want to enable file caching for attachments -->
+ <!--parameter name="cacheAttachments">true</parameter>
+ <parameter name="attachmentDIR"></parameter>
+ <parameter name="sizeThreshold">4000</parameter-->
+
+ <!--This will give out the timout of the configuration contexts, in milliseconds-->
+ <parameter name="ConfigContextTimeoutInterval">30000</parameter>
+
+ <!--During a fault, stack trace can be sent with the fault message. The following flag will control -->
+ <!--that behavior.-->
+ <parameter name="sendStacktraceDetailsWithFaults">false</parameter>
+
+ <!--If there aren't any information available to find out the fault reason, we set the message of the exception-->
+ <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
+ <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
+ <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
+ <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>
+
+ <parameter name="userName">admin</parameter>
+ <parameter name="password">axis2</parameter>
+
+ <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
+ <!--<parameter name="ServicesDirectory">service</parameter>-->
+ <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
+ <!--<parameter name="ModulesDirectory">modules</parameter>-->
+
+
+
+ <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
+ <!--root which can configured using the following contextRoot parameter-->
+ <!--<parameter name="contextRoot">axis2</parameter>-->
+
+ <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints-->
+ <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
+ <!--context path to proper Axis2 servlets-->
+ <!--<parameter name="servicePath">services</parameter>-->
+ <!--<parameter name="restPath">rest</parameter>-->
+
+ <!-- Following parameter will completely disable REST handling in Axis2-->
+ <parameter name="disableREST" locked="true">false</parameter>
+
+ <!-- If you have a front end host which exposes this webservice using a different public URL -->
+ <!-- use this parameter to override autodetected url -->
+ <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>-->
+
+
+ <!-- The way of adding listener to the system-->
+ <!-- <listener class="org.apache.axis2.ObserverIMPL">-->
+ <!-- <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>-->
+ <!-- </listener>-->
+
+ <!-- ================================================= -->
+ <!-- Message Receivers -->
+ <!-- ================================================= -->
+ <!--This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for -->
+ <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
+ <!--any operation -->
+ <!--Note : You can ovrride this for a particular service by adding the same element with your requirement-->
+ <messageReceivers>
+ <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
+ class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
+ <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
+ class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
+ <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only"
+ class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
+ <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out"
+ class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
+ </messageReceivers>
+
+ <!-- ================================================= -->
+ <!-- Message Formatter -->
+ <!-- ================================================= -->
+ <!--Following content type to message formatter mapping can be used to implement support for different message -->
+ <!--format serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
+ <messageFormatters>
+ <messageFormatter contentType="application/x-www-form-urlencoded"
+ class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
+ <messageFormatter contentType="multipart/form-data"
+ class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
+ <messageFormatter contentType="application/xml"
+ class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
+ </messageFormatters>
+
+ <!-- ================================================= -->
+ <!-- Message Builders -->
+ <!-- ================================================= -->
+ <!--Following content type to builder mapping can be used to implement support for different message -->
+ <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
+ <messageBuilders>
+ <messageBuilder contentType="application/xml"
+ class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
+ <messageBuilder contentType="application/x-www-form-urlencoded"
+ class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
+ <messageBuilder contentType="multipart/form-data"
+ class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
+ </messageBuilders>
+
+ <!-- ================================================= -->
+ <!-- Transport Ins -->
+ <!-- ================================================= -->
+ <transportReceiver name="http"
+ class="org.apache.axis2.transport.http.SimpleHTTPServer">
+ <parameter name="port">6060</parameter>
+ <!-- Here is the complete list of supported parameters (see example settings further below):
+ port: the port to listen on (default 6060)
+ hostname: if non-null, url prefix used in reply-to endpoint references (default null)
+ originServer: value of http Server header in outgoing messages (default "Simple-Server/1.1")
+ requestTimeout: value in millis of time that requests can wait for data (default 20000)
+ requestTcpNoDelay: true to maximize performance and minimize latency (default true)
+ false to minimize bandwidth consumption by combining segments
+ requestCoreThreadPoolSize: number of threads available for request processing (unless queue fills up) (default 25)
+ requestMaxThreadPoolSize: number of threads available for request processing if queue fills up (default 150)
+ note that default queue never fills up: see HttpFactory
+ threadKeepAliveTime: time to keep threads in excess of core size alive while inactive (default 180)
+ note that no such threads can exist with default unbounded request queue
+ threadKeepAliveTimeUnit: TimeUnit of value in threadKeepAliveTime (default SECONDS) (default SECONDS)
+ -->
+ <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> -->
+ <!-- <parameter name="originServer">My-Server/1.1</parameter> -->
+ <!-- <parameter name="requestTimeout">10000</parameter> -->
+ <!-- <parameter name="requestTcpNoDelay">false</parameter> -->
+ <!-- <parameter name="requestCoreThreadPoolSize">50</parameter> -->
+ <!-- <parameter name="RequestMaxThreadPoolSize">100</parameter> -->
+ <!-- <parameter name="threadKeepAliveTime">240000</parameter> -->
+ <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter> -->
+ </transportReceiver>
+
+ <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ)
+ <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
+ <parameter name="myTopicConnectionFactory">
+ <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
+ <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
+ <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter>
+ </parameter>
+
+ <parameter name="myQueueConnectionFactory">
+ <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
+ <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
+ <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
+ </parameter>
+
+ <parameter name="default">
+ <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
+ <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter>
+ <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
+ </parameter>
+ </transportReceiver>-->
+
+ <!-- ================================================= -->
+ <!-- Mail Transport Listener -->
+ <!-- This is a sample configuration. It assumes a mail server running in localhost.
+ Listener pops messages that comes to the email address red@localhost. Users
+ password is red. Listener connect to the server every 3000 milliseconds.
+ Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API.
+ http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
+ -->
+ <!-- ================================================= -->
+ <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener">
+ <parameter name="mail.pop3.host">localhost</parameter>
+ <parameter name="mail.pop3.user">red</parameter>
+ <parameter name="mail.store.protocol">pop3</parameter>
+ <parameter name="transport.mail.pop3.password">red</parameter>
+ <parameter name="transport.mail.replyToAddress">red@localhost</parameter>
+ <parameter name="transport.listener.interval">3000</parameter>
+ </transportReceiver>-->
+
+ <!--Uncomment if you want to have TCP transport support-->
+ <!--transportReceiver name="tcp"
+ class="org.apache.axis2.transport.tcp.TCPServer">
+ <parameter name="port">6060</parameter-->>
+ <!--If you want to give your own host address for EPR generation-->
+ <!--uncomment the following paramter , and set it as you required.-->
+ <!--<parameter name="hostname">tcp://myApp.com/ws</parameter>-->
+ <!-- /transportReceiver -->
+
+ <!-- ================================================= -->
+ <!-- Transport Outs -->
+ <!-- ================================================= -->
+
+ <transportSender name="tcp"
+ class="org.apache.axis2.transport.tcp.TCPTransportSender"/>
+ <transportSender name="local"
+ class="org.apache.axis2.transport.local.LocalTransportSender"/>
+ <transportSender name="http"
+ class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
+ <parameter name="PROTOCOL">HTTP/1.1</parameter>
+ <parameter name="Transfer-Encoding">chunked</parameter>
+
+ <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages -->
+ <!-- <parameter name="OmitSOAP12Action">true</parameter> -->
+ </transportSender>
+
+ <transportSender name="https"
+ class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
+ <parameter name="PROTOCOL">HTTP/1.1</parameter>
+ <parameter name="Transfer-Encoding">chunked</parameter>
+ </transportSender>
+ <!--
+ <transportSender name="jms"
+ class="org.apache.axis2.transport.jms.JMSSender"/>
+ -->
+ <!-- ================================================= -->
+ <!-- Mail Transport Sender -->
+ <!--Only need to uncomment the sender. Configuration is achieved with every client.
+ At any instant mail host should be given. Sample configuration has been given.
+ http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html
+ -->
+ <!-- ================================================= -->
+ <!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender">
+ <parameter name="mail.smtp.host">localhost</parameter>
+ </transportSender>-->
+
+ <!-- ================================================= -->
+ <!-- Global Modules -->
+ <!-- ================================================= -->
+ <!-- Comment this to disable Addressing -->
+ <module ref="addressing"/>
+
+ <module ref="sandesha2"/>
+
+ <!--Configuring module , providing parameters for modules whether they refer or not-->
+ <!--<moduleConfig name="addressing">-->
+ <!--<parameter name="addressingPara">N/A</parameter>-->
+ <!--</moduleConfig>-->
+
+ <!-- ================================================= -->
+ <!-- Clustering -->
+ <!-- ================================================= -->
+ <!-- Configure and uncomment following for preparing Axis2 to a clustered environment -->
+ <!--
+ <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager">
+ <parameter name="param1">value1</parameter>
+ <configurationManager class="org.apache.axis2.cluster.tribes.configuration.TribesConfigurationManager">
+ <listeners>
+ </listeners>
+ </configurationManager>
+ <contextManager class="org.apache.axis2.cluster.tribes.context.TribesContextManager">
+ <listeners>
+ </listeners>
+ </contextManager>
+ </cluster>
+ -->
+
+ <!-- ================================================= -->
+ <!-- Phases -->
+ <!-- ================================================= -->
+ <phaseOrder type="InFlow">
+ <!-- System predefined phases -->
+ <phase name="Transport">
+ <handler name="RequestURIBasedDispatcher"
+ class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
+ <order phase="Transport"/>
+ </handler>
+ <handler name="SOAPActionBasedDispatcher"
+ class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
+ <order phase="Transport"/>
+ </handler>
+ </phase>
+ <phase name="Addressing">
+ <handler name="AddressingBasedDispatcher"
+ class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
+ <order phase="Addressing"/>
+ </handler>
+ </phase>
+ <phase name="Security"/>
+ <phase name="PreDispatch"/>
+ <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
+ <handler name="RequestURIBasedDispatcher"
+ class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
+ <handler name="SOAPActionBasedDispatcher"
+ class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
+ <handler name="RequestURIOperationDispatcher"
+ class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
+ <handler name="SOAPMessageBodyBasedDispatcher"
+ class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
+
+ <handler name="HTTPLocationBasedDispatcher"
+ class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
+ </phase>
+ <phase name="RMPhase"/>
+ </phaseOrder>
+ <phaseOrder type="OutFlow">
+ <!-- user can add his own phases to this area -->
+ <phase name="soapmonitorPhase"/>
+ <phase name="RMPhase"/>
+ <phase name="OperationOutPhase"/>
+ <!--system predefined phase-->
+ <!--these phase will run irrespective of the service-->
+ <phase name="PolicyDetermination"/>
+ <phase name="MessageOut"/>
+ <phase name="Security"/>
+ </phaseOrder>
+ <phaseOrder type="InFaultFlow">
+ <phase name="Transport">
+ <handler name="RequestURIBasedDispatcher"
+ class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
+ <order phase="Transport"/>
+ </handler>
+ <handler name="SOAPActionBasedDispatcher"
+ class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
+ <order phase="Transport"/>
+ </handler>
+ </phase>
+ <phase name="Addressing">
+ <handler name="AddressingBasedDispatcher"
+ class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
+ <order phase="Addressing"/>
+ </handler>
+ </phase>
+ <phase name="Security"/>
+ <phase name="PreDispatch"/>
+ <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
+ <handler name="RequestURIBasedDispatcher"
+ class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
+ <handler name="SOAPActionBasedDispatcher"
+ class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
+ <handler name="RequestURIOperationDispatcher"
+ class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
+ <handler name="SOAPMessageBodyBasedDispatcher"
+ class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
+
+ <handler name="HTTPLocationBasedDispatcher"
+ class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
+ </phase>
+ <phase name="RMPhase"/>
+ </phaseOrder>
+ <phaseOrder type="OutFaultFlow">
+ <!-- user can add his own phases to this area -->
+ <phase name="soapmonitorPhase"/>
+ <phase name="RMPhase"/>
+ <phase name="OperationOutFaultPhase"/>
+ <phase name="PolicyDetermination"/>
+ <phase name="MessageOut"/>
+ </phaseOrder>
+</axisconfig>
Added: webservices/sandesha/trunk/java/modules/persistence/test-resources/commons-logging.properties
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/test-resources/commons-logging.properties?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/test-resources/commons-logging.properties (added)
+++ webservices/sandesha/trunk/java/modules/persistence/test-resources/commons-logging.properties Tue Oct 21 08:07:45 2008
@@ -0,0 +1,30 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# This is the logging properties that goes to the war, there are two logging conf kept at the
+# svn, one for developement (one at src/test-resources) and other for producation
+
+# Uncomment the next line to disable all logging.
+#org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog
+
+# Uncomment the next line to enable the simple log based logging
+#org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
+
+# Uncomment the next line to enable log4j based logging
+org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
Added: webservices/sandesha/trunk/java/modules/persistence/test-resources/log4j.properties
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/test-resources/log4j.properties?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/test-resources/log4j.properties (added)
+++ webservices/sandesha/trunk/java/modules/persistence/test-resources/log4j.properties Tue Oct 21 08:07:45 2008
@@ -0,0 +1,34 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# Set root category priority to INFO and its only appender to CONSOLE.
+log4j.rootCategory=INFO, LOGFILE
+log4j.logger.org.apache.sandesha2=INFO
+
+# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
+log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
+log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
+log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %c - %m%n
+
+# LOGFILE is set to be a File appender using a PatternLayout.
+log4j.appender.LOGFILE=org.apache.log4j.FileAppender
+log4j.appender.LOGFILE.File=axis2.log
+log4j.appender.LOGFILE.Append=true
+log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
+log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
Added: webservices/sandesha/trunk/java/modules/persistence/test-resources/sandesha2-test.properties
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/persistence/test-resources/sandesha2-test.properties?rev=706650&view=auto
==============================================================================
--- webservices/sandesha/trunk/java/modules/persistence/test-resources/sandesha2-test.properties (added)
+++ webservices/sandesha/trunk/java/modules/persistence/test-resources/sandesha2-test.properties Tue Oct 21 08:07:45 2008
@@ -0,0 +1 @@
+test.server.port=8060
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.