beerman.scheduler.BeermanScheduler.java Source code

Java tutorial

Introduction

Here is the source code for beerman.scheduler.BeermanScheduler.java

Source

/**
 * Author: Eric Beerman (ebeerman@asu.edu), Joseph Milazzo (Joseph.Milazzo@asu.edu), Christophe Faucon (pfaucon@asu.edu)
 *
 * Creative Commons Attribution 3.0 Unported
 *
 * CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
 * LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
 * ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION
 * ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE
 * INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
 * ITS USE.
 *
 * License
 *
 * THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
 * COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
 * COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
 * AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
 *
 * BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
 * TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
 * BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
 * CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
 * CONDITIONS.
 *
 * 1. Definitions
 *
 * a. "Adaptation" means a work based upon the Work, or upon the Work and
 * other pre-existing works, such as a translation, adaptation, derivative
 * work, arrangement of music or other alterations of a literary or
 * artistic work, or phonogram or performance and includes cinematographic
 * adaptations or any other form in which the Work may be recast,
 * transformed, or adapted including in any form recognizably derived from
 * the original, except that a work that constitutes a Collection will not
 * be considered an Adaptation for the purpose of this License. For the
 * avoidance of doubt, where the Work is a musical work, performance or
 * phonogram, the synchronization of the Work in timed-relation with a
 * moving image ("synching") will be considered an Adaptation for the
 * purpose of this License.
 *
 * b. "Collection" means a collection of literary or artistic works, such
 * as encyclopedias and anthologies, or performances, phonograms or
 * broadcasts, or other works or subject matter other than works listed in
 * Section 1(f) below, which, by reason of the selection and arrangement of
 * their contents, constitute intellectual creations, in which the Work is
 * included in its entirety in unmodified form along with one or more other
 * contributions, each constituting separate and independent works in
 * themselves, which together are assembled into a collective whole. A work
 * that constitutes a Collection will not be considered an Adaptation (as
 * defined above) for the purposes of this License.
 *
 * c. "Distribute" means to make available to the public the original and
 * copies of the Work or Adaptation, as appropriate, through sale or other
 * transfer of ownership.
 *
 * d. "Licensor" means the individual, individuals, entity or entities that
 * offer(s) the Work under the terms of this License.
 *
 * e. "Original Author" means, in the case of a literary or artistic work,
 * the individual, individuals, entity or entities who created the Work or
 * if no individual or entity can be identified, the publisher; and in
 * addition (i) in the case of a performance the actors, singers,
 * musicians, dancers, and other persons who act, sing, deliver, declaim,
 * play in, interpret or otherwise perform literary or artistic works or
 * expressions of folklore; (ii) in the case of a phonogram the producer
 * being the person or legal entity who first fixes the sounds of a
 * performance or other sounds; and, (iii) in the case of broadcasts, the
 * organization that transmits the broadcast.
 *
 * f. "Work" means the literary and/or artistic work offered under the
 * terms of this License including without limitation any production in the
 * literary, scientific and artistic domain, whatever may be the mode or
 * form of its expression including digital form, such as a book, pamphlet
* and other writing; a lecture, address, sermon or other work of the same
* nature; a dramatic or dramatico-musical work; a choreographic work or
* entertainment in dumb show; a musical composition with or without words;
* a cinematographic work to which are assimilated works expressed by a
* process analogous to cinematography; a work of drawing, painting,
* architecture, sculpture, engraving or lithography; a photographic work
* to which are assimilated works expressed by a process analogous to
* photography; a work of applied art; an illustration, map, plan, sketch
* or three-dimensional work relative to geography, topography,
* architecture or science; a performance; a broadcast; a phonogram; a
* compilation of data to the extent it is protected as a copyrightable
* work; or a work performed by a variety or circus performer to the extent
* it is not otherwise considered a literary or artistic work.
*
* g. "You" means an individual or entity exercising rights under this
* License who has not previously violated the terms of this License with
* respect to the Work, or who has received express permission from the
* Licensor to exercise rights under this License despite a previous
* violation.
*
* h. "Publicly Perform" means to perform public recitations of the Work
* and to communicate to the public those public recitations, by any means
* or process, including by wire or wireless means or public digital
* performances; to make available to the public Works in such a way that
* members of the public may access these Works from a place and at a place
* individually chosen by them; to perform the Work to the public by any
* means or process and the communication to the public of the performances
* of the Work, including by public digital performance; to broadcast and
* rebroadcast the Work by any means including signs, sounds or images.
*
* i. "Reproduce" means to make copies of the Work by any means including
* without limitation by sound or visual recordings and the right of
* fixation and reproducing fixations of the Work, including storage of a
* protected performance or phonogram in digital form or other electronic
* medium.
*
* 2. Fair Dealing Rights. Nothing in this License is intended to reduce,
* limit, or restrict any uses free from copyright or rights arising from
* limitations or exceptions that are provided for in connection with the
* copyright protection under copyright law or other applicable laws.
*
* 3. License Grant. Subject to the terms and conditions of this License,
* Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
* perpetual (for the duration of the applicable copyright) license to
* exercise the rights in the Work as stated below:
*
* a. to Reproduce the Work, to incorporate the Work into one or more
* Collections, and to Reproduce the Work as incorporated in the
* Collections;
*
* b. to create and Reproduce Adaptations provided that any such
* Adaptation, including any translation in any medium, takes reasonable
* steps to clearly label, demarcate or otherwise identify that changes
* were made to the original Work. For example, a translation could be
* marked "The original work was translated from English to Spanish," or a
* modification could indicate "The original work has been modified.";
*
* c. to Distribute and Publicly Perform the Work including as incorporated
* in Collections; and,
*
* d. to Distribute and Publicly Perform Adaptations.
*
* e. For the avoidance of doubt:
*
* i. Non-waivable Compulsory License Schemes. In those jurisdictions in
* which the right to collect royalties through any statutory or compulsory
* licensing scheme cannot be waived, the Licensor reserves the exclusive
* right to collect such royalties for any exercise by You of the rights
* granted under this License;
*
* ii. Waivable Compulsory License Schemes. In those jurisdictions in which
* the right to collect royalties through any statutory or compulsory
* licensing scheme can be waived, the Licensor waives the exclusive right
* to collect such royalties for any exercise by You of the rights granted
* under this License; and,
*
* iii. Voluntary License Schemes. The Licensor waives the right to collect
* royalties, whether individually or, in the event that the Licensor is a
* member of a collecting society that administers voluntary licensing
* schemes, via that society, from any exercise by You of the rights
* granted under this License.
*
* The above rights may be exercised in all media and formats whether now
* known or hereafter devised. The above rights include the right to make
* such modifications as are technically necessary to exercise the rights
* in other media and formats. Subject to Section 8(f), all rights not
* expressly granted by Licensor are hereby reserved.
*
*
* 4. Restrictions. The license granted in Section 3 above is expressly
* made subject to and limited by the following restrictions:
*
* a. You may Distribute or Publicly Perform the Work only under the terms
* of this License. You must include a copy of, or the Uniform Resource
* Identifier (URI) for, this License with every copy of the Work You
* Distribute or Publicly Perform. You may not offer or impose any terms on
* the Work that restrict the terms of this License or the ability of the
* recipient of the Work to exercise the rights granted to that recipient
* under the terms of the License. You may not sublicense the Work. You
* must keep intact all notices that refer to this License and to the
* disclaimer of warranties with every copy of the Work You Distribute or
* Publicly Perform. When You Distribute or Publicly Perform the Work, You
* may not impose any effective technological measures on the Work that
* restrict the ability of a recipient of the Work from You to exercise the
* rights granted to that recipient under the terms of the License. This
* Section 4(a) applies to the Work as incorporated in a Collection, but
* this does not require the Collection apart from the Work itself to be
* made subject to the terms of this License. If You create a Collection,
* upon notice from any Licensor You must, to the extent practicable,
* remove from the Collection any credit as required by Section 4(b), as
* requested. If You create an Adaptation, upon notice from any Licensor
* You must, to the extent practicable, remove from the Adaptation any
* credit as required by Section 4(b), as requested.
*
* b. If You Distribute, or Publicly Perform the Work or any Adaptations or
* Collections, You must, unless a request has been made pursuant to
* Section 4(a), keep intact all copyright notices for the Work and
* provide, reasonable to the medium or means You are utilizing: (i) the
* name of the Original Author (or pseudonym, if applicable) if supplied,
* and/or if the Original Author and/or Licensor designate another party or
* parties (e.g., a sponsor institute, publishing entity, journal) for
* attribution ("Attribution Parties") in Licensor's copyright notice,
* terms of service or by other reasonable means, the name of such party or
* parties; (ii) the title of the Work if supplied; (iii) to the extent
* reasonably practicable, the URI, if any, that Licensor specifies to be
* associated with the Work, unless such URI does not refer to the
* copyright notice or licensing information for the Work; and (iv) ,
* consistent with Section 3(b), in the case of an Adaptation, a credit
* identifying the use of the Work in the Adaptation (e.g., "French
        * translation of the Work by Original Author," or "Screenplay based on
        * original Work by Original Author"). The credit required by this Section
* 4 (b) may be implemented in any reasonable manner; provided, however,
* that in the case of a Adaptation or Collection, at a minimum such credit
* will appear, if a credit for all contributing authors of the Adaptation
* or Collection appears, then as part of these credits and in a manner at
* least as prominent as the credits for the other contributing authors.
* For the avoidance of doubt, You may only use the credit required by this
* Section for the purpose of attribution in the manner set out above and,
* by exercising Your rights under this License, You may not implicitly or
* explicitly assert or imply any connection with, sponsorship or
* endorsement by the Original Author, Licensor and/or Attribution Parties,
* as appropriate, of You or Your use of the Work, without the separate,
* express prior written permission of the Original Author, Licensor and/or
* Attribution Parties.
*
* c. Except as otherwise agreed in writing by the Licensor or as may be
* otherwise permitted by applicable law, if You Reproduce, Distribute or
* Publicly Perform the Work either by itself or as part of any Adaptations
* or Collections, You must not distort, mutilate, modify or take other
* derogatory action in relation to the Work which would be prejudicial to
* the Original Author's honor or reputation. Licensor agrees that in those
* jurisdictions (e.g. Japan), in which any exercise of the right granted
* in Section 3(b) of this License (the right to make Adaptations) would be
* deemed to be a distortion, mutilation, modification or other derogatory
* action prejudicial to the Original Author's honor and reputation, the
* Licensor will waive or not assert, as appropriate, this Section, to the
* fullest extent permitted by the applicable national law, to enable You
* to reasonably exercise Your right under Section 3(b) of this License
* (right to make Adaptations) but not otherwise.
*
* 5. Representations, Warranties and Disclaimer
*
* UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
* OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
* KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
* INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
* FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
* LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
* WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE
* EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
*
* 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
* LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
* ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
* ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS
* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*
* 7. Termination
*
* a. This License and the rights granted hereunder will terminate
* automatically upon any breach by You of the terms of this License.
* Individuals or entities who have received Adaptations or Collections
* from You under this License, however, will not have their licenses
* terminated provided such individuals or entities remain in full
* compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
* survive any termination of this License.
*
* b. Subject to the above terms and conditions, the license granted here
* is perpetual (for the duration of the applicable copyright in the Work).
* Notwithstanding the above, Licensor reserves the right to release the
* Work under different license terms or to stop distributing the Work at
* any time; provided, however that any such election will not serve to
* withdraw this License (or any other license that has been, or is
        * required to be, granted under the terms of this License), and this
* License will continue in full force and effect unless terminated as
* stated above.
*
* 8. Miscellaneous
*
* a. Each time You Distribute or Publicly Perform the Work or a
* Collection, the Licensor offers to the recipient a license to the Work
* on the same terms and conditions as the license granted to You under
* this License.
*
* b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
* offers to the recipient a license to the original Work on the same terms
* and conditions as the license granted to You under this License.
*
* c. If any provision of this License is invalid or unenforceable under
* applicable law, it shall not affect the validity or enforceability of
* the remainder of the terms of this License, and without further action
* by the parties to this agreement, such provision shall be reformed to
* the minimum extent necessary to make such provision valid and
* enforceable.
*
* d. No term or provision of this License shall be deemed waived and no
* breach consented to unless such waiver or consent shall be in writing
* and signed by the party to be charged with such waiver or consent. This
* License constitutes the entire agreement between the parties with
* respect to the Work licensed here. There are no understandings,
* agreements or representations with respect to the Work not specified
* here. Licensor shall not be bound by any additional provisions that may
* appear in any communication from You.
*
* e. This License may not be modified without the mutual written agreement
* of the Licensor and You.
*
* f. The rights granted under, and the subject matter referenced, in this
* License were drafted utilizing the terminology of the Berne Convention
* for the Protection of Literary and Artistic Works (as amended on
        * September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
* Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and
* the Universal Copyright Convention (as revised on July 24, 1971). These
* rights and subject matter take effect in the relevant jurisdiction in
* which the License terms are sought to be enforced according to the
* corresponding provisions of the implementation of those treaty
* provisions in the applicable national law. If the standard suite of
* rights granted under applicable copyright law includes additional rights
* not granted under this License, such additional rights are deemed to be
* included in the License; this License is not intended to restrict the
* license of any rights under applicable law.
*
*
* Creative Commons Notice
*
* Creative Commons is not a party to this License, and makes no warranty
* whatsoever in connection with the Work. Creative Commons will not be
* liable to You or any party on any legal theory for any damages
* whatsoever, including without limitation any general, special,
* incidental or consequential damages arising in connection to this
* license. Notwithstanding the foregoing two (2) sentences, if Creative
* Commons has expressly identified itself as the Licensor hereunder, it
* shall have all rights and obligations of Licensor.
*
* Except for the limited purpose of indicating to the public that the Work
* is licensed under the CCPL, Creative Commons does not authorize the use
* by either party of the trademark "Creative Commons" or any related
* trademark or logo of Creative Commons without the prior written consent
* of Creative Commons. Any permitted use will be in compliance with
* Creative Commons' then-current trademark usage guidelines, as may be
* published on its website or otherwise made available upon request from
* time to time. For the avoidance of doubt, this trademark restriction
* does not form part of this License.
*
* Creative Commons may be contacted at http://creativecommons.org/.
*/
package beerman.scheduler;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Random;

import org.apache.axis2.clustering.Member;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.MessageContext;
import org.apache.synapse.endpoints.Endpoint;
import org.apache.synapse.endpoints.algorithms.AlgorithmContext;
import org.apache.synapse.endpoints.algorithms.LoadbalanceAlgorithm;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;

public class BeermanScheduler implements LoadbalanceAlgorithm {

    private static final int NUMBER_SERVERS = 2;

    private static final Log log = LogFactory.getLog(BeermanScheduler.class);

    private Connection connect = null;
    private Statement statement = null;
    private PreparedStatement preparedStatement = null;
    private ResultSet resultSet = null;

    private List endpoints = null;

    private List<Member> members;

    public BeermanScheduler() {

    }

    public BeermanScheduler(List endpoints) {
        this.endpoints = endpoints;
    }

    @Override
    public void setApplicationMembers(List<Member> members) {
        this.members = members;
    }

    @Override
    public void setEndpoints(List<Endpoint> endpoints) {
        this.endpoints = endpoints;
    }

    @Override
    public void setLoadBalanceEndpoint(Endpoint endpoint) {
        // Nothing to do here
    }

    @Override
    public Endpoint getNextEndpoint(MessageContext synapseMessageContext, AlgorithmContext algorithmContext) {
        String destString = synapseMessageContext.getTo().toString();
        String[] components = destString.split("\\?");
        String user = components[components.length - 1];

        // this will load the MySQL driver, each DB has its own driver
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }

        try {
            connect = (Connection) DriverManager
                    .getConnection("jdbc:mysql://54.84.225.2/SD_Proj_DB?" + "user=SD_Proj&password=PasswordSD");
            return this.getEndpointFromDB(connect, user);
        } catch (SQLException e) {
            log.error("Server 1 could not be accessed! " + e.getMessage());
            // First server is down! Try the second one!!!!!!!
            try {
                connect = (Connection) DriverManager
                        .getConnection("jdbc:mysql://54.85.111.6/SD_Proj_DB?" + "user=SD_Proj&password=PasswordSD");
                return this.getEndpointFromDB(connect, user);
            } catch (SQLException e1) {
                // Both of them are down. Just return the first one
                log.error("Both servers cannot be accessed! " + e1.getMessage());
            }
        }

        int userNum = Integer.parseInt(user);
        int index = userNum % NUMBER_SERVERS;
        return (Endpoint) this.endpoints.get(index);
    }

    private Endpoint getEndpointFromDB(Connection connect, String user) throws SQLException {
        // statements allow to issue SQL queries to the database
        statement = (Statement) connect.createStatement();
        // resultSet gets the result of the SQL query
        preparedStatement = (PreparedStatement) connect
                .prepareStatement("select endpoint from endpoints where user=?");
        preparedStatement.setString(1, user);
        resultSet = preparedStatement.executeQuery();

        String endpoint = ""; // defaults to 0
        while (resultSet.next()) {
            endpoint = resultSet.getString("endpoint");
        }

        int index;
        if (endpoint.equals("")) {
            Random rand = new Random();
            index = rand.nextInt() % NUMBER_SERVERS;

            preparedStatement = (PreparedStatement) connect
                    .prepareStatement("insert into endpoints (user, endpoint) values (?,?)");
            preparedStatement.setString(1, user);
            preparedStatement.setInt(2, index);
            preparedStatement.executeUpdate();
        } else {
            index = Integer.parseInt(endpoint);
        }

        return (Endpoint) this.endpoints.get(index);
    }

    @Override
    public Member getNextApplicationMember(AlgorithmContext algorithmContext) {
        return (Member) this.members.get(0);
    }

    @Override
    public void reset(AlgorithmContext algorithmContext) {
        // Nothing to do here
    }

    @Override
    public String getName() {
        return "BeermanScheduler";
    }

    public LoadbalanceAlgorithm clone() {
        return new BeermanScheduler();
    }

}