Skip to content

Commit

Permalink
Added methods to collect the count of the number of entries for each …
Browse files Browse the repository at this point in the history
…service in the datastore.

Implemented the counts methods for the morphia service.
Added a wait dialog to display when the database is being loaded via the web UI.
Modified the Loader to return the number of customers that were loaded and how long the load process took.
Added a ConnectionManager for the mongo/morphia service.
  • Loading branch information
dougrt committed Mar 28, 2015
1 parent 5a6a8f3 commit 4685925
Show file tree
Hide file tree
Showing 19 changed files with 440 additions and 151 deletions.
14 changes: 8 additions & 6 deletions acmeair-loader/src/main/java/com/acmeair/loader/Loader.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,9 @@ public class Loader {

@GET
@Produces("text/plain")
public Response loaddb() {
Loader loader = new Loader();
loader.execute();
return Response.ok("loaded db").build();
public Response loaddb() {
String message = execute();
return Response.ok(message).build();
}

public static void main(String args[]) throws Exception {
Expand All @@ -47,14 +46,14 @@ public static void main(String args[]) throws Exception {
}


private void execute() {
private String execute() {
FlightLoader flightLoader = new FlightLoader();
CustomerLoader customerLoader = new CustomerLoader();
Properties props = getProperties();

String numCustomers = props.getProperty("loader.numCustomers","100");
System.setProperty("loader.numCustomers", numCustomers);

double length = 0;
try {
long start = System.currentTimeMillis();
logger.info("Start loading flights");
Expand All @@ -63,10 +62,13 @@ private void execute() {
customerLoader.loadCustomers(Long.parseLong(numCustomers));
long stop = System.currentTimeMillis();
logger.info("Finished loading in " + (stop - start)/1000.0 + " seconds");
length = (stop - start)/1000.0;

}
catch (Exception e) {
e.printStackTrace();
}
return "Loaded flights and " + numCustomers + " customers in " + length + " seconds";
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,9 @@ public interface MorphiaConstants extends AcmeAirConstants {
public static final String KEY = "morphia";
public static final String KEY_DESCRIPTION = "mongoDB with morphia implementation";

public static final String HOSTNAME = "mongo/hostname";
public static final String PORT = "mongo/port";
public static final String DATABASE = "mongo/database";


}
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,14 @@

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.acmeair.entities.Booking;
import com.acmeair.entities.BookingPK;
import com.acmeair.entities.Customer;
import com.acmeair.entities.Flight;
import com.acmeair.entities.FlightPK;
import com.acmeair.morphia.MorphiaConstants;
import com.acmeair.morphia.services.util.MongoConnectionManager;
import com.acmeair.service.BookingService;
import com.acmeair.service.CustomerService;
import com.acmeair.service.DataService;
Expand All @@ -30,8 +29,6 @@ public class BookingServiceImpl implements BookingService, MorphiaConstants {

private final static Logger logger = Logger.getLogger(BookingService.class.getName());

//@Resource(name = JNDI_NAME)
protected DB db;

Datastore datastore;

Expand All @@ -43,20 +40,8 @@ public class BookingServiceImpl implements BookingService, MorphiaConstants {


@PostConstruct
public void initialization() {
Morphia morphia = new Morphia();
if(db == null){
try {
db = (DB) new InitialContext().lookup(JNDI_NAME);
} catch (NamingException e) {
logger.severe("Caught NamingException : " + e.getMessage() );
}
}
if(db == null){
logger.severe("Unable to retreive reference to database, please check the server logs.");
} else {
datastore = morphia.createDatastore(db.getMongo(), db.getName());
}
public void initialization() {
datastore = MongoConnectionManager.getConnectionManager().getDatastore();
}


Expand Down Expand Up @@ -107,4 +92,10 @@ public void cancelBooking(String user, String id) {
throw new RuntimeException(e);
}
}


@Override
public Long count() {
return datastore.find(Booking.class).countAll();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,43 +15,38 @@
import com.acmeair.entities.CustomerAddress;
import com.acmeair.entities.CustomerSession;
import com.acmeair.morphia.MorphiaConstants;
import com.acmeair.morphia.services.util.MongoConnectionManager;
import com.acmeair.service.DataService;
import com.acmeair.service.CustomerService;
import com.github.jmkgreen.morphia.Datastore;
import com.github.jmkgreen.morphia.Morphia;
import com.github.jmkgreen.morphia.query.Query;
import com.mongodb.DB;

//@MorphiaQualifier
@DataService(name=MorphiaConstants.KEY,description=MorphiaConstants.KEY_DESCRIPTION)
public class CustomerServiceImpl implements CustomerService, MorphiaConstants {

private final static Logger logger = Logger.getLogger(CustomerService.class.getName());

//@Resource(name = JNDI_NAME)
protected DB db;

protected Datastore datastore;

@Inject
DefaultKeyGeneratorImpl keyGenerator;


@PostConstruct
public void initialization() {
Morphia morphia = new Morphia();
if(db == null){
try {
db = (DB) new InitialContext().lookup(JNDI_NAME);
} catch (NamingException e) {
logger.severe("Caught NamingException : " + e.getMessage() );
}
}
if(db == null){
logger.severe("Unable to retreive reference to database, please check the server logs.");
} else {
datastore = morphia.createDatastore(db.getMongo(), db.getName());
}
public void initialization() {
datastore = MongoConnectionManager.getConnectionManager().getDatastore();
}

@Override
public Long count() {
return datastore.find(Customer.class).countAll();
}

@Override
public Long countSessions() {
return datastore.find(CustomerSession.class).countAll();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,31 +9,23 @@

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.acmeair.entities.AirportCodeMapping;
import com.acmeair.entities.Flight;
import com.acmeair.entities.FlightPK;
import com.acmeair.entities.FlightSegment;
import com.acmeair.morphia.MorphiaConstants;
import com.acmeair.morphia.services.util.MongoConnectionManager;
import com.acmeair.service.DataService;
import com.acmeair.service.FlightService;
import com.github.jmkgreen.morphia.Datastore;
import com.github.jmkgreen.morphia.Morphia;
import com.github.jmkgreen.morphia.query.Query;
import com.mongodb.DB;

//@MorphiaQualifier
@DataService(name=MorphiaConstants.KEY,description=MorphiaConstants.KEY_DESCRIPTION)
public class FlightServiceImpl implements FlightService, MorphiaConstants {

private final static Logger logger = Logger.getLogger(FlightService.class.getName());

//@Resource(name = JNDI_NAME)
protected DB db;



Datastore datastore;

@Inject
Expand All @@ -46,20 +38,19 @@ public class FlightServiceImpl implements FlightService, MorphiaConstants {


@PostConstruct
public void initialization() {
Morphia morphia = new Morphia();
if(db == null){
try {
db = (DB) new InitialContext().lookup(JNDI_NAME);
} catch (NamingException e) {
logger.severe("Caught NamingException : " + e.getMessage() );
}
}
if(db == null){
logger.severe("Unable to retreive reference to database, please check the server logs.");
} else {
datastore = morphia.createDatastore(db.getMongo(), db.getName());
}
public void initialization() {
datastore = MongoConnectionManager.getConnectionManager().getDatastore();
}


@Override
public Long countFlights() {
return datastore.find(Flight.class).countAll();
}

@Override
public Long countFlightSegments() {
return datastore.find(FlightSegment.class).countAll();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package com.acmeair.morphia.services.util;

import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Logger;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.acmeair.morphia.MorphiaConstants;
import com.github.jmkgreen.morphia.Datastore;
import com.github.jmkgreen.morphia.Morphia;
import com.mongodb.DB;
import com.mongodb.MongoClient;
import com.mongodb.ServerAddress;

public class MongoConnectionManager implements MorphiaConstants{

private static AtomicReference<MongoConnectionManager> connectionManager = new AtomicReference<MongoConnectionManager>();

private final static Logger logger = Logger.getLogger(MongoConnectionManager.class.getName());
protected DB db;
protected MongoClient mongo;
protected Datastore datastore;

public static MongoConnectionManager getConnectionManager() {
if (connectionManager.get() == null) {
synchronized (connectionManager) {
if (connectionManager.get() == null) {
connectionManager.set(new MongoConnectionManager());
}
}
}
return connectionManager.get();
}


private MongoConnectionManager (){
if(db == null){
try {
db = (DB) new InitialContext().lookup(JNDI_NAME);
} catch (NamingException e) {
logger.severe("Caught NamingException : " + e.getMessage() );
}
}

if(db == null){
String host;
String port;
String database;
logger.fine("Creating the MongoDB Client connection. Looking up host and port information " );
try {
host = (String) new InitialContext().lookup(HOSTNAME);
port = (String) new InitialContext().lookup(PORT);
database = (String) new InitialContext().lookup(DATABASE);
ServerAddress server = new ServerAddress(host, Integer.parseInt(port));
MongoClient mongo = new MongoClient(server);
db = mongo.getDB(database);
} catch (NamingException e) {
logger.severe("Caught NamingException : " + e.getMessage() );
} catch (Exception e) {
logger.severe("Caught Exception : " + e.getMessage() );
}
}

if(db == null){
logger.severe("Unable to retreive reference to database, please check the server logs.");
} else {
Morphia morphia = new Morphia();
datastore = morphia.createDatastore(db.getMongo(), db.getName());
}
}

public DB getDB(){
return db;
}

public Datastore getDatastore(){
return datastore;
}

public void close(){
mongo.close();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.acmeair.entities.Booking;
import com.acmeair.entities.BookingPK;
Expand All @@ -37,7 +35,9 @@
import com.acmeair.service.FlightService;
import com.acmeair.service.ServiceLocator;
import com.acmeair.wxs.WXSConstants;
import com.acmeair.wxs.utils.WXSSessionManager;
import com.ibm.websphere.objectgrid.ObjectGrid;
import com.ibm.websphere.objectgrid.ObjectGridException;
import com.ibm.websphere.objectgrid.ObjectMap;
import com.ibm.websphere.objectgrid.Session;

Expand All @@ -58,15 +58,11 @@ public class BookingServiceImpl implements BookingService, WXSConstants {


@PostConstruct
private void initialization() {
if(og == null) {

try {
InitialContext ic = new InitialContext();
og = (ObjectGrid) ic.lookup(JNDI_NAME);
} catch (NamingException e) {
logger.severe("Error looking up the ObjectGrid reference" + e.getMessage());
}
private void initialization() {
try {
og = WXSSessionManager.getSessionManager().getObjectGrid();
} catch (ObjectGridException e) {
logger.severe("Unable to retreive the ObjectGrid reference " + e.getMessage());
}
}

Expand Down Expand Up @@ -191,4 +187,9 @@ public List<Booking> getBookingsByUser(String user) {
}

}

@Override
public Long count () {
return -1L;
}
}
Loading

0 comments on commit 4685925

Please sign in to comment.