Skip to content

Commit 0f16774

Browse files
committed
bulk changes. Now fullstack helloworld app running successfully!
1 parent 1bf0b49 commit 0f16774

64 files changed

Lines changed: 1647 additions & 467 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

pom.xml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<groupId>org.osgl</groupId>
2323
<artifactId>osgl-mvc-server</artifactId>
2424
<packaging>jar</packaging>
25-
<version>0.1-SNAPSHOT</version>
25+
<version>0.0.1-SNAPSHOT</version>
2626

2727
<name>OSGL MVC Server</name>
2828
<description>MVC Server</description>
@@ -73,6 +73,8 @@
7373
<configuration>
7474
<source>1.6</source>
7575
<target>1.6</target>
76+
<debug>true</debug>
77+
<debuglevel>lines,vars,source</debuglevel>
7678
</configuration>
7779
</plugin>
7880
<plugin>
@@ -157,13 +159,13 @@
157159
<dependency>
158160
<groupId>org.osgl</groupId>
159161
<artifactId>osgl-tool</artifactId>
160-
<version>0.4.3-SNAPSHOT</version>
162+
<version>0.5.3a-SNAPSHOT</version>
161163
</dependency>
162164

163165
<dependency>
164166
<groupId>org.osgl</groupId>
165167
<artifactId>osgl-mvc</artifactId>
166-
<version>0.2-SNAPSHOT</version>
168+
<version>0.2.2-SNAPSHOT</version>
167169
</dependency>
168170

169171
<dependency>
@@ -193,7 +195,7 @@
193195
<dependency>
194196
<groupId>org.osgl</groupId>
195197
<artifactId>osgl-http</artifactId>
196-
<version>0.2-SNAPSHOT</version>
198+
<version>0.2.2-SNAPSHOT</version>
197199
</dependency>
198200

199201
<dependency>

src/main/java/org/osgl/oms/Bootstrap.java

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/main/java/org/osgl/oms/BytecodeEnhancerManager.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ public class BytecodeEnhancerManager {
1616
private List<AsmBytecodeEnhancer> generalEnhancers = C.newList();
1717

1818
public BytecodeEnhancerManager() {
19-
registerBuiltInPlugins();
2019
}
2120

2221
public void register(AsmBytecodeEnhancer enhancer) {
@@ -41,10 +40,6 @@ public BytecodeVisitor generalEnhancer(String className, _.Var<ClassWriter> cw)
4140
return l.isEmpty() ? null : BytecodeVisitor.chain(cw, l);
4241
}
4342

44-
private void registerBuiltInPlugins() {
45-
register(new ControllerEnhancer());
46-
}
47-
4843
private List<AppBytecodeEnhancer> appFilter(App app, String className) {
4944
List<AppBytecodeEnhancer> l = C.newList();
5045
for (AppBytecodeEnhancer e : appEnhancers) {

src/main/java/org/osgl/oms/Constants.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
public enum Constants {
44
;
55
public static final String OMS_HOME = "OMS_HOME";
6-
public static final String ASM_PKG = "org.osgl.oms.asm.";
7-
public static final String OMS_PKG = "org.osgl.oms.";
6+
public static final String OMS_PKG = Constants.class.getPackage().getName();
7+
public static final String ASM_PKG = OMS_PKG + ".asm";
88

99
public static final String LIST_SEPARATOR = "[\\s,;:]+";
1010
}

src/main/java/org/osgl/oms/OMS.java

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package org.osgl.oms;
22

3+
import io.undertow.UndertowLogger;
4+
import io.undertow.UndertowMessages;
35
import org.osgl._;
46
import org.osgl.exception.NotAppliedException;
57
import org.osgl.logging.L;
68
import org.osgl.logging.Logger;
79
import org.osgl.oms.app.*;
10+
import org.osgl.oms.boot.PluginClassProvider;
811
import org.osgl.oms.conf.OmsConfLoader;
912
import org.osgl.oms.conf.OmsConfig;
1013
import org.osgl.oms.controller.meta.ActionMethodMetaInfo;
@@ -19,8 +22,11 @@
1922
import org.osgl.oms.xio.NetworkClient;
2023
import org.osgl.oms.xio.NetworkService;
2124
import org.osgl.oms.xio.undertow.UndertowService;
25+
import org.osgl.util.C;
2226
import org.osgl.util.E;
2327

28+
import java.util.List;
29+
2430
/**
2531
* The OSGL MVC Server
2632
*/
@@ -30,7 +36,7 @@ public enum Mode {
3036
PROD, UAT, SIT, DEV() {
3137
@Override
3238
public AppScanner appScanner() {
33-
return AppScanner.DEV_MODE_SCANNER;
39+
return AppScanner.SINGLE_APP_SCANNER;
3440
}
3541

3642
@Override
@@ -96,9 +102,14 @@ public static Mode valueOfIgnoreCase(String mode) {
96102
private static BytecodeEnhancerManager enhancerManager;
97103
private static SessionManager sessionManager;
98104

99-
100-
public static BootstrapClassLoader classLoader() {
101-
return (BootstrapClassLoader) OMS.class.getClassLoader();
105+
public static List<Class<?>> pluginClasses() {
106+
ClassLoader cl = OMS.class.getClassLoader();
107+
if (cl instanceof PluginClassProvider) {
108+
return ((PluginClassProvider) cl).pluginClasses();
109+
} else {
110+
logger.warn("Class loader of OMS is not a PluginClassProvider");
111+
return C.list();
112+
}
102113
}
103114

104115
public static Mode mode() {
@@ -129,7 +140,20 @@ public static SessionManager sessionManager() {
129140
return sessionManager;
130141
}
131142

132-
public static void start() {
143+
public static AppManager applicationManager() {
144+
return appManager;
145+
}
146+
147+
public static void startServer() {
148+
start(false);
149+
}
150+
151+
public static void startApp() {
152+
mode = Mode.DEV;
153+
start(true);
154+
}
155+
156+
private static void start(boolean singleAppServer) {
133157
Banner.print("0.0.1-SNAPSHOT");
134158
loadConfig();
135159
//initExecuteService();
@@ -139,7 +163,14 @@ public static void start() {
139163
loadPlugins();
140164
initNetworkLayer();
141165
initApplicationManager();
166+
if (singleAppServer) {
167+
appManager.loadSingleApp();
168+
} else {
169+
appManager.scan();
170+
}
142171
startNetworkLayer();
172+
173+
Thread.currentThread().setContextClassLoader(OMS.class.getClassLoader());
143174
}
144175

145176
public static RequestServerRestart requestRestart() {
@@ -201,7 +232,7 @@ private static void startNetworkLayer() {
201232
network.start();
202233
}
203234

204-
public static enum F {
235+
public enum F {
205236
;
206237
public static final _.F0<Mode> MODE_ACCESSOR = new _.F0<Mode>() {
207238
@Override

src/main/java/org/osgl/oms/app/App.java

Lines changed: 143 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,28 @@
99
import org.osgl.oms.conf.AppConfig;
1010
import org.osgl.oms.route.RouteTableRouterBuilder;
1111
import org.osgl.oms.route.Router;
12+
import org.osgl.oms.util.Files;
13+
import org.osgl.oms.util.FsChangeDetector;
14+
import org.osgl.oms.util.FsEvent;
15+
import org.osgl.oms.util.FsEventListener;
16+
import org.osgl.util.C;
1217
import org.osgl.util.Crypto;
1318
import org.osgl.util.IO;
19+
import org.osgl.util.S;
1420

1521
import java.io.File;
1622
import java.util.List;
23+
import java.util.Map;
1724

1825
/**
1926
* {@code App} represents an application that is deployed in a OMS container
2027
*/
2128
public class App {
2229

2330
private static Logger logger = L.get(App.class);
31+
public static _.Predicate<String> JAVA_SOURCE = S.F.endsWith(".java");
32+
private static _.Predicate<String> JAR_FILE = S.F.endsWith(".jar");
33+
private static _.Predicate<String> CONF_FILE = S.F.endsWith(".conf").or(S.F.endsWith(".properties"));
2434

2535
private File appBase;
2636
private File appHome;
@@ -29,6 +39,11 @@ public class App {
2939
private AppClassLoader classLoader;
3040
private ProjectLayout layout;
3141
private AppBuilder builder;
42+
private Map<String, Source> sources = C.newMap();
43+
private FsChangeDetector confChangeDetector;
44+
private FsChangeDetector libChangeDetector;
45+
private FsChangeDetector resourceChangeDetector;
46+
private FsChangeDetector sourceChangeDetector;
3247

3348
protected App() {
3449
}
@@ -74,11 +89,28 @@ public ProjectLayout layout() {
7489
return layout;
7590
}
7691

77-
void refresh() {
92+
public void detectChanges() {
93+
if (!OMS.isDev()) return;
94+
detectChanges(confChangeDetector);
95+
detectChanges(libChangeDetector);
96+
detectChanges(resourceChangeDetector);
97+
detectChanges(sourceChangeDetector);
98+
}
99+
100+
private void detectChanges(FsChangeDetector detector) {
101+
if (null != detector) {
102+
detector.detectChanges();
103+
}
104+
}
105+
106+
public void refresh() {
78107
loadConfig();
79108
initRouter();
80109
loadClasses();
81110
loadRoutes();
111+
if (OMS.isDev()) {
112+
setupFsChangeDetectors();
113+
}
82114
}
83115

84116
void build() {
@@ -105,6 +137,46 @@ public String decrypt(String message) {
105137
return Crypto.decryptAES(message, config.secret());
106138
}
107139

140+
public boolean isSourceClass(String className) {
141+
return sources.containsKey(className);
142+
}
143+
144+
public Source source(String className) {
145+
return sources.get(className);
146+
}
147+
148+
public void preloadSources() {
149+
final File sourceRoot = layout().source(base());
150+
Files.filter(sourceRoot, JAVA_SOURCE, new _.Visitor<File>() {
151+
@Override
152+
public void visit(File file) throws _.Break {
153+
Source source = Source.ofFile(sourceRoot, file);
154+
if (null != source) {
155+
if (null == sources) {
156+
sources = C.newMap();
157+
}
158+
sources.put(source.className(), source);
159+
}
160+
}
161+
});
162+
}
163+
164+
public void scanForActionMethods() {
165+
AppConfig conf = config();
166+
SourceCodeActionScanner scanner = new SourceCodeActionScanner();
167+
Router router = router();
168+
for (String className : sources.keySet()) {
169+
if (conf.possibleControllerClass(className)) {
170+
Source source = sources.get(className);
171+
boolean isController = scanner.scan(className, source.code(), router);
172+
if (isController) {
173+
source.markAsController();
174+
classLoader().scanForActionMethods(className);
175+
}
176+
}
177+
}
178+
}
179+
108180
@Override
109181
public int hashCode() {
110182
return appBase.hashCode();
@@ -151,9 +223,79 @@ private void loadRoutes() {
151223

152224
private void loadClasses() {
153225
classLoader = OMS.mode().classLoader(this);
226+
classLoader.init();
227+
}
228+
private void setupFsChangeDetectors() {
229+
ProjectLayout layout = layout();
230+
File appBase = base();
231+
232+
File src = layout.source(appBase);
233+
if (null != src) {
234+
sourceChangeDetector = new FsChangeDetector(src, App.JAVA_SOURCE, sourceChangeListener);
235+
}
236+
237+
File lib = layout.lib(appBase);
238+
if (null != lib && lib.canRead()) {
239+
libChangeDetector = new FsChangeDetector(lib, JAR_FILE, libChangeListener);
240+
}
241+
242+
File conf = layout.conf(appBase);
243+
if (null != conf && conf.canRead()) {
244+
confChangeDetector = new FsChangeDetector(conf, CONF_FILE, confChangeListener);
245+
}
246+
247+
File rsrc = layout.resource(appBase);
248+
if (null != rsrc && rsrc.canRead()) {
249+
resourceChangeDetector = new FsChangeDetector(rsrc, null, resourceChangeListener);
250+
}
154251
}
155252

156253
static App create(File appBase, ProjectLayout layout) {
157254
return new App(appBase, layout);
158255
}
256+
257+
private final FsEventListener sourceChangeListener = new FsEventListener() {
258+
@Override
259+
public void on(FsEvent... events) {
260+
throw RequestRefreshClassLoader.INSTANCE;
261+
}
262+
};
263+
264+
private final FsEventListener libChangeListener = new FsEventListener() {
265+
@Override
266+
public void on(FsEvent... events) {
267+
int len = events.length;
268+
if (len < 0) return;
269+
OMS.requestRefreshClassLoader();
270+
}
271+
};
272+
273+
private final FsEventListener confChangeListener = new FsEventListener() {
274+
@Override
275+
public void on(FsEvent... events) {
276+
OMS.requestRestart();
277+
}
278+
};
279+
280+
private final FsEventListener resourceChangeListener = new FsEventListener() {
281+
@Override
282+
public void on(FsEvent... events) {
283+
int len = events.length;
284+
for (int i = 0; i < len; ++i) {
285+
FsEvent e = events[i];
286+
if (e.kind() == FsEvent.Kind.CREATE) {
287+
List<String> paths = e.paths();
288+
File[] files = new File[paths.size()];
289+
int idx = 0;
290+
for (String path : paths) {
291+
files[idx++] = new File(path);
292+
}
293+
builder().copyResources(files);
294+
} else {
295+
OMS.requestRestart();
296+
}
297+
}
298+
}
299+
};
300+
159301
}

0 commit comments

Comments
 (0)