package com.googlecode.mycontainer.test.web;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.transaction.TransactionManager;
import com.googlecode.mycontainer.datasource.DataSourceDeployer;
import com.googlecode.mycontainer.ejb.SessionInterceptorDeployer;
import com.googlecode.mycontainer.ejb.StatelessScannableDeployer;
import com.googlecode.mycontainer.jpa.HibernateJPADeployer;
import com.googlecode.mycontainer.jpa.JPADeployer;
import com.googlecode.mycontainer.jpa.JPAInfoBuilder;
import com.googlecode.mycontainer.jta.MyTransactionManagerDeployer;
import com.googlecode.mycontainer.kernel.ShutdownCommand;
import com.googlecode.mycontainer.kernel.boot.ContainerBuilder;
import com.googlecode.mycontainer.kernel.deploy.ScannerDeployer;
import com.googlecode.mycontainer.test.ejb.CustomerBean;
import com.googlecode.mycontainer.test.ejb.EntityManagerWrapperBean;
import com.googlecode.mycontainer.web.ContextWebServer;
import com.googlecode.mycontainer.web.FilterDesc;
import com.googlecode.mycontainer.web.LogFilter;
import com.googlecode.mycontainer.web.Realm;
import com.googlecode.mycontainer.web.ServletDesc;
import com.googlecode.mycontainer.web.jetty.JettyServerDeployer;
import com.sun.faces.config.ConfigureListener;
public class MycontainerTestHelper {
private static final org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(MycontainerWebTest.class);
private ContainerBuilder builder;
private InitialContext ctx;
private TransactionManager tm;
public void bootBackend() throws Exception {
builder = new ContainerBuilder();
SessionInterceptorDeployer sessionInterceptorDeployer = builder.createDeployer(SessionInterceptorDeployer.class);
sessionInterceptorDeployer.deploy();
builder.createDeployer(MyTransactionManagerDeployer.class).setName("TransactionManager").deploy();
DataSourceDeployer ds = builder.createDeployer(DataSourceDeployer.class);
ds.setName("TestDS");
ds.setDriver("org.hsqldb.jdbcDriver");
ds.setUrl("jdbc:hsqldb:mem:.");
ds.setUser("sa");
ds.deploy();
JPADeployer jpa = builder.createDeployer(HibernateJPADeployer.class);
JPAInfoBuilder info = (JPAInfoBuilder) jpa.getInfo();
info.setPersistenceUnitName("test-pu");
info.setJtaDataSourceName("TestDS");
info.addJarFileUrl(CustomerBean.class);
info.setPersistenceUnitRootUrl(CustomerBean.class);
Properties props = info.getProperties();
props.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
props.setProperty("hibernate.hbm2ddl.auto", "create-drop");
props.setProperty("hibernate.show_sql", "true");
jpa.deploy();
ScannerDeployer scanner = builder.createDeployer(ScannerDeployer.class);
scanner.add(new StatelessScannableDeployer());
scanner.scan(EntityManagerWrapperBean.class);
scanner.deploy();
ctx = builder.getContext();
tm = (TransactionManager) ctx.lookup("TransactionManager");
}
public void bootFrontend() {
JettyServerDeployer webServer = builder.createDeployer(JettyServerDeployer.class);
webServer.bindPort(8380);
webServer.setName("WebServer");
Realm realm = new Realm("testRealm");
realm.config("teste", "pass", "admin", "user");
webServer.addRealm(realm);
ContextWebServer webContext = webServer.createContextWebServer();
webContext.setContext("/test");
webContext.setResources("src/main/webapp/");
webContext.getListeners().add(ConfigureListener.class);
webContext.getFilters().add(new FilterDesc(LogFilter.class, "/*"));
webContext.getServlets().add(new ServletDesc(WebTestServlet.class, "/test.txt"));
webContext.getFilters().add(new FilterDesc(WebTestFilter.class, "/*"));
webContext = webServer.createContextWebServer();
webContext.setContext("/test-other");
webContext.setResources("src/main/webapp/");
webContext.getListeners().add(ConfigureListener.class);
webContext.getFilters().add(new FilterDesc(LogFilter.class, "/*"));
webContext.getServlets().add(new ServletDesc(WebTestServlet.class, "/test.txt"));
webContext.getFilters().add(new FilterDesc(WebTestFilter.class, "/*"));
webServer.deploy();
}
public void shutdown() {
try {
ShutdownCommand shutdown = new ShutdownCommand();
shutdown.setContext(new InitialContext());
shutdown.shutdown();
} catch (Exception e) {
LOG.error("Error shutdown", e);
}
}
public ContainerBuilder getBuilder() {
return builder;
}
public InitialContext getCtx() {
return ctx;
}
public TransactionManager getTm() {
return tm;
}
}