use of com.manydesigns.portofino.code.JavaCodeBase in project Portofino by ManyDesigns.
the class SessionFactoryBuilder method buildSessionFactory.
public SessionFactoryAndCodeBase buildSessionFactory(FileObject root) throws Exception {
List<Table> mappableTables = database.getAllTables();
mappableTables.removeIf(this::checkInvalidPrimaryKey);
List<Table> externallyMappedTables = mappableTables.stream().filter(t -> {
boolean externallyMapped = t.getActualJavaClass() != null;
if (externallyMapped) {
logger.debug("Skipping table explicitly mapped with {}", t.getActualJavaClass());
}
return externallyMapped;
}).collect(Collectors.toList());
mappableTables.removeAll(externallyMappedTables);
// Use a new classloader as scratch space for Javassist
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
URLClassLoader scratchClassLoader = new URLClassLoader(new URL[0], contextClassLoader);
Thread.currentThread().setContextClassLoader(scratchClassLoader);
try {
CtClass baseClass = generateBaseClass();
FileObject databaseDir = root.resolveFile(database.getDatabaseName());
databaseDir.deleteAll();
databaseDir.createFolder();
FileObject baseClassFile = databaseDir.resolveFile("BaseEntity.class");
try (OutputStream outputStream = baseClassFile.getContent().getOutputStream()) {
outputStream.write(baseClass.toBytecode());
}
for (Table table : mappableTables) {
generateClass(table);
}
for (Table table : mappableTables) {
mapRelationships(table);
}
for (Table table : mappableTables) {
byte[] classFile = getClassFile(table);
FileObject location = getEntityLocation(root, table);
try (OutputStream outputStream = location.getContent().getOutputStream()) {
outputStream.write(classFile);
}
}
} finally {
Thread.currentThread().setContextClassLoader(contextClassLoader);
}
return buildSessionFactory(new JavaCodeBase(root), mappableTables, externallyMappedTables);
}
use of com.manydesigns.portofino.code.JavaCodeBase in project Portofino by ManyDesigns.
the class JavaResourceResolver method resolveJavaFile.
protected Class resolveJavaFile(final FileObject fileObject) throws ClassNotFoundException, IOException {
try {
JavaType<?> result = Roaster.parse(fileObject.getContent().getInputStream());
String className = result.getQualifiedName();
return new JavaCodeBase(fileObject.getParent(), codeBase).loadJavaFile(fileObject, className);
} finally {
fileObject.close();
}
}
use of com.manydesigns.portofino.code.JavaCodeBase in project Portofino by ManyDesigns.
the class DispatcherInitializer method createCodeBase.
protected CodeBase createCodeBase() throws IOException {
// TODO auto discovery?
FileObject codeBaseRoot = getCodeBaseRoot();
JavaCodeBase javaCodeBase = new JavaCodeBase(codeBaseRoot, null, getClass().getClassLoader());
CodeBase codeBase = javaCodeBase;
try {
Class<?> gcb = Class.forName("com.manydesigns.portofino.code.GroovyCodeBase");
Constructor<?> gcbConstructor = gcb.getConstructor(FileObject.class, CodeBase.class);
codeBase = (CodeBase) gcbConstructor.newInstance(codeBaseRoot, javaCodeBase);
logger.info("Groovy is available");
} catch (Exception e) {
logger.debug("Groovy not available", e);
}
return codeBase;
}
use of com.manydesigns.portofino.code.JavaCodeBase in project Portofino by ManyDesigns.
the class TestJavaResourceResolver method testCodebase.
@Test
public void testCodebase() throws Exception {
ResourceResolver resourceResolver = getResourceResolver(new JavaCodeBase(VFS.getManager().resolveFile("res:java-codebase")));
FileObject root = getRoot();
// A.java
Class<?> c = resourceResolver.resolve(root.resolveFile("codebase"), Class.class);
assertEquals("Test", c.getName());
Field string = c.getField("string");
Object a = c.newInstance();
assertEquals("it works!", string.get(a));
}
use of com.manydesigns.portofino.code.JavaCodeBase in project Portofino by ManyDesigns.
the class GrizzlyMain method main.
public static void main(String[] args) throws Exception {
File currentDirectory = new File("");
FileSystemManager manager = VFS.getManager();
if (manager instanceof DefaultFileSystemManager) {
((DefaultFileSystemManager) manager).setBaseFile(currentDirectory);
}
String rootPath = currentDirectory.getAbsolutePath();
if (args.length > 0) {
rootPath = args[0];
}
FileObject codeBaseRoot;
try {
codeBaseRoot = VFS.getManager().resolveFile("res:");
} catch (Exception e) {
codeBaseRoot = VFS.getManager().resolveFile("res:com/manydesigns/portofino/dispatcher/main/GrizzlyMain.class").getParent().getParent().getParent().getParent().getParent().getParent();
}
CodeBase codeBase = new JavaCodeBase(codeBaseRoot);
codeBase = new GroovyCodeBase(codeBaseRoot, codeBase);
ResourceResolvers resourceResolver = new ResourceResolvers();
resourceResolver.resourceResolvers.add(new JavaResourceResolver(codeBase));
resourceResolver.resourceResolvers.add(new GroovyResourceResolver(codeBase));
FileObject root = manager.resolveFile(rootPath);
logger.info("Codebase rootFactory: " + codeBaseRoot.getURL());
logger.info("Root path: " + root.getURL());
DocumentedApiRoot.setRootFactory(() -> Root.get(root, resourceResolver));
String host = System.getProperty("portofino.web.host", "0.0.0.0");
String port = System.getProperty("portofino.web.port", "8090");
ResourceConfig config = new ResourceConfig(ApplicationRoot.class, OpenApiResource.class);
config.property(ServletProperties.FILTER_FORWARD_ON_404, true);
try {
config.register(Class.forName("org.glassfish.jersey.jackson.JacksonFeature"));
ResourceResolver jacksonRR = (ResourceResolver) Class.forName("com.manydesigns.portofino.dispatcher.resolvers.JacksonResourceResolver").newInstance();
resourceResolver.resourceResolvers.add(new CachingResourceResolver(jacksonRR));
} catch (ClassNotFoundException e) {
// Jackson not available
}
try {
config.register(Class.forName("com.manydesigns.portofino.dispatcher.security.ShiroResourceFilter"));
} catch (ClassNotFoundException e) {
// Shiro not available
}
/* TODO
BeanConfig beanConfig = new BeanConfig();
beanConfig.setSchemes(new String[]{"http"});
beanConfig.setHost(host + ":" + port);
beanConfig.setBasePath("/");
beanConfig.setResourcePackage(ApplicationRoot.class.getPackage().getName());
beanConfig.setScan(true);*/
URI uri = URI.create("http://" + host + ":" + port + "/");
HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(uri, config);
// https://scalajamsession.wordpress.com/2015/06/27/how-to-serve-static-files-with-jerseygrizzly-setup-and-control-access-to-static-content/
ClassLoader loader = GrizzlyMain.class.getClassLoader();
CLStaticHttpHandler webjarsHandler = new CLStaticHttpHandler(loader, "META-INF/resources/webjars/");
httpServer.getServerConfiguration().addHttpHandler(webjarsHandler, "/webjars/");
httpServer.start();
}
Aggregations