roo00 6 лет назад
Родитель
Сommit
4452a05d32
100 измененных файлов с 2807 добавлено и 1598 удалено
  1. 78 11
      o2server/build_common.xml
  2. 1 0
      o2server/console_neokylin_loongson.sh
  3. 8 4
      o2server/gulpfile.js
  4. 100 25
      o2server/pom.xml
  5. 15 0
      o2server/start_aix.sh
  6. 15 0
      o2server/start_linux.sh
  7. 15 0
      o2server/start_macos.sh
  8. 114 0
      o2server/start_neokylin_loongson.sh
  9. 15 0
      o2server/start_windows.bat
  10. 1 0
      o2server/stop_neokylin_loongson.sh
  11. 4 0
      o2server/x_attendance_assemble_control/pom.xml
  12. 1 0
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ActionListWithEmployee.java
  13. 1 10
      o2server/x_attendance_assemble_control/src/main/webapp/WEB-INF/web.xml
  14. 4 0
      o2server/x_attendance_core_entity/pom.xml
  15. 4 0
      o2server/x_base_core_project/pom.xml
  16. 0 21
      o2server/x_base_core_project/src/main/java/com/x/base/core/container/EntityManagerContainer.java
  17. 4 26
      o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/EntityManagerContainerFactory.java
  18. 119 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/PersistenceXmlHelper.java
  19. 191 107
      o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/SliceEntityManagerContainerFactory.java
  20. 359 253
      o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/SlicePropertiesBuilder.java
  21. 1 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/entity/StorageType.java
  22. 1 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/entity/tools/JpaObjectTools.java
  23. 2 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/entity/tools/PersistenceXmlWriter.java
  24. 0 3
      o2server/x_base_core_project/src/main/java/com/x/base/core/openjpa/jdbc/sql/DMDictionary.java
  25. 33 10
      o2server/x_base_core_project/src/main/java/com/x/base/core/openjpa/jdbc/sql/Kingbase8Dictionary.java
  26. 64 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/openjpa/jdbc/sql/Kingbase8DictionaryBack.java
  27. 0 124
      o2server/x_base_core_project/src/main/java/com/x/base/core/openjpa/jdbc/sql/KingbaseDictionary2.java
  28. 12 5
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/AbstractContext.java
  29. 9 5
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/Application.java
  30. 0 12
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/Applications.java
  31. 0 5
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/AssembleA.java
  32. 0 5
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/AssembleC.java
  33. 0 5
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/AssembleM.java
  34. 3 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/Compilable.java
  35. 34 54
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/Context.java
  36. 0 5
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/CoreA.java
  37. 0 5
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/CoreC.java
  38. 0 5
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/CoreM.java
  39. 0 26
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/Dependency.java
  40. 9 14
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/Deployable.java
  41. 14 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/annotation/Module.java
  42. 35 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CheckAssemble.java
  43. 242 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CheckCore.java
  44. 35 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CheckService.java
  45. 180 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CreateWebXml.java
  46. 28 25
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/cache/ApplicationCache.java
  47. 53 189
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Config.java
  48. 188 108
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DataMapping.java
  49. 14 14
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DataMappings.java
  50. 11 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DataServer.java
  51. 67 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DataServers.java
  52. 44 80
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ExternalDataSource.java
  53. 85 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ExternalDataSources.java
  54. 121 27
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Node.java
  55. 1 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/CacheJaxrsFilter.java
  56. 0 8
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/DruidFilter.java
  57. 1 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/EchoJaxrsFilter.java
  58. 1 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/LoggerJaxrsFilter.java
  59. 0 4
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/TokenFilter.java
  60. 6 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/logger/Logger.java
  61. 13 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/message/MessageConnector.java
  62. 10 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/organization/Group.java
  63. 30 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/organization/OrganizationDefinition.java
  64. 4 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/queue/AbstractQueue.java
  65. 1 12
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/schedule/ReportToCenter.java
  66. 34 24
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_attendance_assemble_control.java
  67. 2 3
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_attendance_core_entity.java
  68. 3 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_base_core_project.java
  69. 34 27
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_bbs_assemble_control.java
  70. 2 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_bbs_core_entity.java
  71. 18 14
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_calendar_assemble_control.java
  72. 2 3
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_calendar_core_entity.java
  73. 53 36
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_cms_assemble_control.java
  74. 2 3
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_cms_core_entity.java
  75. 0 21
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_collaboration_assemble_websocket.java
  76. 0 10
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_collaboration_core_entity.java
  77. 0 10
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_collaboration_core_message.java
  78. 0 16
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_collaboration_service_message.java
  79. 8 7
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_component_assemble_control.java
  80. 2 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_component_core_entity.java
  81. 15 14
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_file_assemble_control.java
  82. 2 3
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_file_core_entity.java
  83. 11 11
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_general_assemble_control.java
  84. 2 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_general_core_entity.java
  85. 18 15
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_hotpic_assemble_control.java
  86. 2 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_hotpic_core_entity.java
  87. 16 14
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_meeting_assemble_control.java
  88. 2 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_meeting_core_entity.java
  89. 15 12
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_message_assemble_communicate.java
  90. 2 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_message_core_entity.java
  91. 20 17
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_mind_assemble_control.java
  92. 2 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_mind_core_entity.java
  93. 46 34
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_okr_assemble_control.java
  94. 2 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_okr_core_entity.java
  95. 16 12
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_organization_assemble_authentication.java
  96. 21 16
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_organization_assemble_control.java
  97. 22 16
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_organization_assemble_express.java
  98. 28 20
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_organization_assemble_personal.java
  99. 2 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_organization_core_entity.java
  100. 2 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_organization_core_express.java

+ 78 - 11
o2server/build_common.xml

@@ -43,14 +43,18 @@
 		</delete>
 		<echo message="metamodel complete." />
 	</target>
-	<!--
-	<target name="createPersistenceXml">
-		<mkdir dir="${basedir}/src/main/resources/META-INF" />
-		<java classname="com.x.base.core.entity.tools.PersistenceXmlWriter" fork="true">
+
+	<target name="checkAssemble">
+		<echo>checkAssemble project:${project}</echo>
+		<java classname="com.x.base.core.project.build.CheckAssemble" fork="true">
 			<sysproperty key="file.encoding" value="utf-8" />
+			<arg value="{
+					path:'${basedir}',
+					project:'${project}'
+				}" />
 			<classpath>
-				<pathelement path="${basedir}/target/classes" />
-				<pathelement path="${basedir}/src/main/java" />
+				<pathelement location="${basedir}/target/classes" />
+				<pathelement location="${basedir}/src/main/resources" />
 				<fileset dir="${o2server.dir}/commons/ext">
 					<include name="*.jar" />
 				</fileset>
@@ -59,13 +63,55 @@
 				</fileset>
 			</classpath>
 			<arg value="{
-				project:'${project}',
-				path:'${basedir}/src/main/resources/META-INF'
-			}" />
+					path:'${basedir}',
+					project:'${project}'
+				}" />
 		</java>
-		<echo>${project} create persistence xml: ${basedir}/src/main/resources/META-INF/x_persistence.xml</echo>
 	</target>
--->
+
+	<target name="checkSerivce">
+		<echo>checkAssemble project:${project}</echo>
+		<java classname="com.x.base.core.project.build.CheckSerivce" fork="true">
+			<sysproperty key="file.encoding" value="utf-8" />
+			<arg value="{
+					path:'${basedir}',
+					project:'${project}'
+				}" />
+			<classpath>
+				<pathelement location="${basedir}/target/classes" />
+				<pathelement location="${basedir}/src/main/resources" />
+				<fileset dir="${o2server.dir}/commons/ext">
+					<include name="*.jar" />
+				</fileset>
+				<fileset dir="${o2server.dir}/store/jars">
+					<include name="*.jar" />
+				</fileset>
+			</classpath>
+		</java>
+	</target>
+
+	<target name="checkCore">
+		<echo>checkAssemble project:${project}</echo>
+		<java classname="com.x.base.core.project.build.CheckCore" fork="true">
+			<sysproperty key="file.encoding" value="utf-8" />
+			<arg value="{
+					path:'${basedir}',
+					project:'${project}'
+				}" />
+			<classpath>
+				<pathelement location="${basedir}/target/classes" />
+				<pathelement location="${basedir}/src/main/resources" />
+				<fileset dir="${o2server.dir}/commons/ext">
+					<include name="*.jar" />
+				</fileset>
+				<fileset dir="${o2server.dir}/store/jars">
+					<include name="*.jar" />
+				</fileset>
+			</classpath>
+
+		</java>
+	</target>
+
 	<target name="describe">
 		<echo>describe project:${project}</echo>
 		<mkdir dir="${basedir}/src/main/webapp/describe" />
@@ -115,4 +161,25 @@
 		</java>
 	</target>
 
+	<target name="createWebXml">
+		<java classname="com.x.base.core.project.build.CreateWebXml" fork="true">
+			<sysproperty key="file.encoding" value="utf-8" />
+			<classpath>
+				<pathelement path="${basedir}/target/classes" />
+				<pathelement path="${basedir}/src/main/java" />
+				<fileset dir="${o2server.dir}/commons/ext">
+					<include name="*.jar" />
+				</fileset>
+				<fileset dir="${o2server.dir}/store/jars">
+					<include name="x_base_core_project.jar" />
+					<exclude name="${project}.jar" />
+				</fileset>
+			</classpath>
+			<arg value="{
+					path:'${basedir}',
+					project:'${project}'
+				}" />
+		</java>
+	</target>
+
 </project>

+ 1 - 0
o2server/console_neokylin_loongson.sh

@@ -0,0 +1 @@
+$(cd "$(dirname "$0")"; pwd)/jvm/neokylin_loongson/bin/java -cp $(cd "$(dirname "$0")"; pwd)/console.jar com.x.server.console.Shadow

+ 8 - 4
o2server/gulpfile.js

@@ -15,9 +15,7 @@ var gulp = require('gulp'),
 var apps = [
     {"folder": "o2_lib",                                    "tasks": ["move", "clean"]},
     {"folder": "o2_core",                                   "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_desktop",                                 "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Common",                        "tasks": ["move", "min", "clean", "watch"]},
-    {"folder": "x_component_Template",                      "tasks": ["move", "min", "clean", "watch"]},
+    {"folder": "x_component_ANN",                           "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_AppCenter",                     "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_AppMarket",                     "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_Attendance",                    "tasks": ["move", "min", "clean", "watch"]},
@@ -36,6 +34,7 @@ var apps = [
     {"folder": "x_component_cms_ViewDesigner",              "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_cms_Xform",                     "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_Collect",                       "tasks": ["move", "min", "clean", "watch"]},
+    {"folder": "x_component_Common",                        "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_Console",                       "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_ControlPanel",                  "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_CRM",                           "tasks": ["move", "min", "clean", "watch"]},
@@ -88,6 +87,8 @@ var apps = [
     {"folder": "x_component_query_QueryManager",            "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_query_StatDesigner",            "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_query_ViewDesigner",            "tasks": ["move", "min", "clean", "watch"]},
+    {"folder": "x_component_query_TableDesigner",           "tasks": ["move", "min", "clean", "watch"]},
+    {"folder": "x_component_query_StatementDesigner",       "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_Report",                        "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_ReportDocument",                "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_ReportMinder",                  "tasks": ["move", "min", "clean", "watch"]},
@@ -99,9 +100,12 @@ var apps = [
     {"folder": "x_component_service_InvokeDesigner",        "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_service_ServiceManager",        "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_Setting",                       "tasks": ["move", "min", "clean", "watch"]},
+    {"folder": "x_component_SmartOfficeRoom",               "tasks": ["move", "min", "clean", "watch"]},
+    {"folder": "x_component_Snake",                         "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_Strategy",                      "tasks": ["move", "min", "clean", "watch"]},
+    {"folder": "x_component_Template",                      "tasks": ["move", "min", "clean", "watch"]},
     {"folder": "x_component_Weixin",                        "tasks": ["move", "min", "clean", "watch"]},
-	{"folder": "x_component_ANN",                	        "tasks": ["move", "min", "clean", "watch"]},
+    {"folder": "x_desktop",                                 "tasks": ["move", "min", "clean", "watch"]}
 ];
 
 var sourcePrefix = '../o2web/';

+ 100 - 25
o2server/pom.xml

@@ -13,7 +13,7 @@
 		<module>x_bbs_core_entity</module>
 		<module>x_calendar_core_entity</module>
 		<module>x_cms_core_entity</module>
-		<module>x_collaboration_core_entity</module>
+		<!--module>x_collaboration_core_entity</module -->
 		<module>x_component_core_entity</module>
 		<module>x_file_core_entity</module>
 		<module>x_general_core_entity</module>
@@ -26,16 +26,16 @@
 		<module>x_portal_core_entity</module>
 		<module>x_processplatform_core_entity</module>
 		<module>x_query_core_entity</module>
-		<!-- <module>x_report_core_entity</module> <module>x_strategydeploy_core_entity</module> -->
+		<module>x_teamwork_core_entity</module>
 		<module>x_program_center_core_entity</module>
-		<module>x_collaboration_core_message</module>
+		<!--module>x_collaboration_core_message</module -->
 		<module>x_organization_core_express</module>
 		<module>x_query_core_express</module>
 		<module>x_bbs_assemble_control</module>
 		<module>x_calendar_assemble_control</module>
 		<module>x_cms_assemble_control</module>
-		<module>x_collaboration_assemble_websocket</module>
-		<module>x_collaboration_service_message</module>
+		<!--module>x_collaboration_assemble_websocket</module -->
+		<!--module>x_collaboration_service_message</module -->
 		<module>x_component_assemble_control</module>
 		<module>x_file_assemble_control</module>
 		<module>x_general_assemble_control</module>
@@ -46,7 +46,6 @@
 		<module>x_okr_assemble_control</module>
 		<module>x_organization_assemble_authentication</module>
 		<module>x_organization_assemble_control</module>
-		<!-- module>x_organization_assemble_custom</module> -->
 		<module>x_organization_assemble_express</module>
 		<module>x_organization_assemble_personal</module>
 		<module>x_portal_assemble_designer</module>
@@ -58,7 +57,7 @@
 		<module>x_query_assemble_designer</module>
 		<module>x_query_assemble_surface</module>
 		<module>x_query_service_processing</module>
-		<!-- <module>x_report_assemble_control</module> <module>x_strategydeploy_assemble_control</module> -->
+		<module>x_teamwork_assemble_control</module>
 		<module>x_program_center</module>
 		<module>x_console</module>
 	</modules>
@@ -141,6 +140,18 @@
 			<version>2.2</version>
 			<scope>provided</scope>
 		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-dbcp2</artifactId>
+			<version>2.6.0</version>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-pool2</artifactId>
+			<version>2.6.2</version>
+			<scope>provided</scope>
+		</dependency>
 		<dependency>
 			<groupId>org.apache.commons</groupId>
 			<artifactId>commons-text</artifactId>
@@ -165,6 +176,12 @@
 			<version>9.3.25.v20180904</version>
 			<scope>provided</scope>
 		</dependency>
+		<dependency>
+			<groupId>org.eclipse.jetty</groupId>
+			<artifactId>jetty-quickstart</artifactId>
+			<version>9.4.18.v20190429</version>
+			<scope>provided</scope>
+		</dependency>
 		<dependency>
 			<groupId>com.google.zxing</groupId>
 			<artifactId>core</artifactId>
@@ -333,12 +350,8 @@
 			<version>2.10.6</version>
 			<scope>provided</scope>
 		</dependency>
-		<dependency>
-			<groupId>com.alibaba</groupId>
-			<artifactId>druid</artifactId>
-			<version>1.1.12</version>
-			<scope>provided</scope>
-		</dependency>
+		<!-- dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> 
+			<version>1.1.12</version> <scope>provided</scope> </dependency -->
 		<dependency>
 			<groupId>org.slf4j</groupId>
 			<artifactId>slf4j-api</artifactId>
@@ -458,6 +471,14 @@
 					<skipTests>true</skipTests>
 				</configuration>
 			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-war-plugin</artifactId>
+				<version>2.6</version>
+				<configuration>
+					<failOnMissingWebXml>false</failOnMissingWebXml>
+				</configuration>
+			</plugin>
 		</plugins>
 		<pluginManagement>
 			<plugins>
@@ -604,6 +625,66 @@
 								<goal>run</goal>
 							</goals>
 						</execution>
+						<execution>
+							<id>createWebXml</id>
+							<!-- <phase>generate-sources</phase> -->
+							<phase>none</phase>
+							<configuration>
+								<target>
+									<ant antfile="../build_common.xml">
+										<target name="createWebXml" />
+									</ant>
+								</target>
+							</configuration>
+							<goals>
+								<goal>run</goal>
+							</goals>
+						</execution>
+						<execution>
+							<id>checkAssemble</id>
+							<!-- <phase>generate-sources</phase> -->
+							<phase>none</phase>
+							<configuration>
+								<target>
+									<ant antfile="../build_common.xml">
+										<target name="checkAssemble" />
+									</ant>
+								</target>
+							</configuration>
+							<goals>
+								<goal>run</goal>
+							</goals>
+						</execution>
+						<execution>
+							<id>checkService</id>
+							<!-- <phase>generate-sources</phase> -->
+							<phase>none</phase>
+							<configuration>
+								<target>
+									<ant antfile="../build_common.xml">
+										<target name="checkService" />
+									</ant>
+								</target>
+							</configuration>
+							<goals>
+								<goal>run</goal>
+							</goals>
+						</execution>
+						<execution>
+							<id>checkCore</id>
+							<!-- <phase>generate-sources</phase> -->
+							<phase>none</phase>
+							<configuration>
+								<target>
+									<ant antfile="../build_common.xml">
+										<target name="checkCore" />
+									</ant>
+								</target>
+							</configuration>
+							<goals>
+								<goal>run</goal>
+							</goals>
+						</execution>
 					</executions>
 				</plugin>
 				<plugin>
@@ -769,18 +850,6 @@
 				<version>${project.version}</version>
 				<scope>provided</scope>
 			</dependency>
-			<dependency>
-				<groupId>o2oa</groupId>
-				<artifactId>x_collaboration_core_entity</artifactId>
-				<version>${project.version}</version>
-				<scope>provided</scope>
-			</dependency>
-			<dependency>
-				<groupId>o2oa</groupId>
-				<artifactId>x_collaboration_core_message</artifactId>
-				<version>${project.version}</version>
-				<scope>provided</scope>
-			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_component_core_entity</artifactId>
@@ -895,6 +964,12 @@
 				<version>${project.version}</version>
 				<scope>provided</scope>
 			</dependency>
+			<dependency>
+				<groupId>o2oa</groupId>
+				<artifactId>x_teamwork_core_entity</artifactId>
+				<version>${project.version}</version>
+				<scope>provided</scope>
+			</dependency>
 			<dependency>
 				<groupId>o2oa</groupId>
 				<artifactId>x_build_and_scratch</artifactId>

+ 15 - 0
o2server/start_aix.sh

@@ -56,6 +56,9 @@ if [ -d ${current_dir}/local/update ]; then
 		if [ -f ${current_dir}/local/update/o2server/index.html ]; then
 			cp -f ${current_dir}/local/update/o2server/index.html ${current_dir}/
 		fi
+		if [ -f ${current_dir}/local/update/o2server/src.zip ]; then
+			cp -f ${current_dir}/local/update/o2server/src.zip ${current_dir}/
+		fi
 		if [ -f ${current_dir}/start_windows.bat ]; then
 			cp -f ${current_dir}/local/update/o2server/start_windows.bat ${current_dir}/
 		fi
@@ -65,6 +68,9 @@ if [ -d ${current_dir}/local/update ]; then
 		if [ -f ${current_dir}/console_windows.bat ]; then
 			cp -f ${current_dir}/local/update/o2server/console_windows.bat ${current_dir}/
 		fi
+		if [ -f ${current_dir}/service_windows.bat ]; then
+			cp -f ${current_dir}/local/update/o2server/service_windows.bat ${current_dir}/
+		fi
 		if [ -f ${current_dir}/start_linux.sh ]; then
 			cp -f ${current_dir}/local/update/o2server/start_linux.sh ${current_dir}/
 		fi
@@ -92,6 +98,15 @@ if [ -d ${current_dir}/local/update ]; then
 		if [ -f ${current_dir}/console_aix.sh ]; then
 			cp -f ${current_dir}/local/update/o2server/console_aix.sh ${current_dir}/
 		fi
+		if [ -f ${current_dir}/start_neokylin_loongson.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/start_neokylin_loongson.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/stop_aix.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/stop_neokylin_loongson.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/console_aix.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/console_neokylin_loongson.sh ${current_dir}/
+		fi
 		cp ${current_dir}/local/update/o2server/version.o2 ${current_dir}/
 		rm -Rf ${current_dir}/local/update
 	fi

+ 15 - 0
o2server/start_linux.sh

@@ -56,6 +56,9 @@ if [ -d ${current_dir}/local/update ]; then
 		if [ -f ${current_dir}/local/update/o2server/index.html ]; then
 			cp -f ${current_dir}/local/update/o2server/index.html ${current_dir}/
 		fi
+		if [ -f ${current_dir}/local/update/o2server/src.zip ]; then
+			cp -f ${current_dir}/local/update/o2server/src.zip ${current_dir}/
+		fi
 		if [ -f ${current_dir}/start_windows.bat ]; then
 			cp -f ${current_dir}/local/update/o2server/start_windows.bat ${current_dir}/
 		fi
@@ -65,6 +68,9 @@ if [ -d ${current_dir}/local/update ]; then
 		if [ -f ${current_dir}/console_windows.bat ]; then
 			cp -f ${current_dir}/local/update/o2server/console_windows.bat ${current_dir}/
 		fi
+		if [ -f ${current_dir}/service_windows.bat ]; then
+			cp -f ${current_dir}/local/update/o2server/service_windows.bat ${current_dir}/
+		fi
 		if [ -f ${current_dir}/start_linux.sh ]; then
 			cp -f ${current_dir}/local/update/o2server/start_linux.sh ${current_dir}/
 		fi
@@ -92,6 +98,15 @@ if [ -d ${current_dir}/local/update ]; then
 		if [ -f ${current_dir}/console_aix.sh ]; then
 			cp -f ${current_dir}/local/update/o2server/console_aix.sh ${current_dir}/
 		fi
+		if [ -f ${current_dir}/start_neokylin_loongson.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/start_neokylin_loongson.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/stop_aix.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/stop_neokylin_loongson.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/console_aix.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/console_neokylin_loongson.sh ${current_dir}/
+		fi
 		cp ${current_dir}/local/update/o2server/version.o2 ${current_dir}/
 		rm -Rf ${current_dir}/local/update
 	fi

+ 15 - 0
o2server/start_macos.sh

@@ -57,6 +57,9 @@ if [ -d ${current_dir}/local/update ]; then
 		if [ -f ${current_dir}/local/update/o2server/index.html ]; then
 			cp -f ${current_dir}/local/update/o2server/index.html ${current_dir}/
 		fi
+		if [ -f ${current_dir}/local/update/o2server/src.zip ]; then
+			cp -f ${current_dir}/local/update/o2server/src.zip ${current_dir}/
+		fi
 		if [ -f ${current_dir}/start_windows.bat ]; then
 			cp -f ${current_dir}/local/update/o2server/start_windows.bat ${current_dir}/
 		fi
@@ -66,6 +69,9 @@ if [ -d ${current_dir}/local/update ]; then
 		if [ -f ${current_dir}/console_windows.bat ]; then
 			cp -f ${current_dir}/local/update/o2server/console_windows.bat ${current_dir}/
 		fi
+		if [ -f ${current_dir}/service_windows.bat ]; then
+			cp -f ${current_dir}/local/update/o2server/service_windows.bat ${current_dir}/
+		fi
 		if [ -f ${current_dir}/start_linux.sh ]; then
 			cp -f ${current_dir}/local/update/o2server/start_linux.sh ${current_dir}/
 		fi
@@ -93,6 +99,15 @@ if [ -d ${current_dir}/local/update ]; then
 		if [ -f ${current_dir}/console_aix.sh ]; then
 			cp -f ${current_dir}/local/update/o2server/console_aix.sh ${current_dir}/
 		fi
+		if [ -f ${current_dir}/start_neokylin_loongson.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/start_neokylin_loongson.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/stop_aix.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/stop_neokylin_loongson.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/console_aix.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/console_neokylin_loongson.sh ${current_dir}/
+		fi
 		cp ${current_dir}/local/update/o2server/version.o2 ${current_dir}/
 		sudo rm -Rf ${current_dir}/local/update
 	fi

+ 114 - 0
o2server/start_neokylin_loongson.sh

@@ -0,0 +1,114 @@
+current_dir=$(cd "$(dirname "$0")"; pwd);
+if [ -d ${current_dir}/local/update ]; then
+	if [ ! -d ${current_dir}/commons ]; then
+	mkdir ${current_dir}/commons
+	fi
+	if [ ! -d ${current_dir}/config ]; then
+		mkdir ${current_dir}/config
+	fi
+	if [ ! -d ${current_dir}/config/sample ]; then
+		mkdir ${current_dir}/config/sample
+	fi
+	if [ ! -d ${current_dir}/local ]; then
+		mkdir ${current_dir}/local
+	fi
+	if [ ! -d ${current_dir}/local ]; then
+		mkdir ${current_dir}/local
+	fi
+	if [ ! -d ${current_dir}/local/sample ]; then
+		mkdir ${current_dir}/local/sample
+	fi
+	if [ ! -d ${current_dir}/jvm ]; then
+		mkdir ${current_dir}/jvm
+	fi
+	if [ ! -d ${current_dir}/servers ]; then
+		mkdir ${current_dir}/servers
+	fi
+	if [ ! -d ${current_dir}/store ]; then
+		mkdir ${current_dir}/store
+	fi
+	if [ -f ${current_dir}/local/update/o2server/version.o2 ]; then
+		if [ -d ${current_dir}/local/update/o2server/config ]; then
+			if [ -d ${current_dir}/local/update/o2server/config/sample ]; then
+				cp -Rf ${current_dir}/local/update/o2server/config/sample ${current_dir}/config/
+			fi
+		fi
+		if [ -d ${current_dir}/local/update/o2server/local ]; then
+			if [ -d ${current_dir}/local/update/o2server/local/sample ]; then
+				cp -Rf ${current_dir}/local/update/o2server/local/sample ${current_dir}/local/
+			fi
+		fi
+		if [ -d ${current_dir}/local/update/o2server/commons ]; then
+			cp -Rf ${current_dir}/local/update/o2server/commons ${current_dir}/
+		fi
+		if [ -d ${current_dir}/local/update/o2server/jvm ]; then
+			cp -Rf ${current_dir}/local/update/o2server/jvm ${current_dir}/
+		fi
+		if [ -d ${current_dir}/local/update/o2server/servers ]; then
+			cp -Rf ${current_dir}/local/update/o2server/servers ${current_dir}/
+		fi
+		if [ -d ${current_dir}/local/update/o2server/store ]; then
+			cp -Rf ${current_dir}/local/update/o2server/store ${current_dir}/
+		fi
+		if [ -f ${current_dir}/local/update/o2server/console.jar ]; then
+			cp -f ${current_dir}/local/update/o2server/console.jar ${current_dir}/
+		fi
+		if [ -f ${current_dir}/local/update/o2server/index.html ]; then
+			cp -f ${current_dir}/local/update/o2server/index.html ${current_dir}/
+		fi
+		if [ -f ${current_dir}/local/update/o2server/src.zip ]; then
+			cp -f ${current_dir}/local/update/o2server/src.zip ${current_dir}/
+		fi
+		if [ -f ${current_dir}/start_windows.bat ]; then
+			cp -f ${current_dir}/local/update/o2server/start_windows.bat ${current_dir}/
+		fi
+		if [ -f ${current_dir}/stop_windows.bat ]; then
+			cp -f ${current_dir}/local/update/o2server/stop_windows.bat ${current_dir}/
+		fi
+		if [ -f ${current_dir}/console_windows.bat ]; then
+			cp -f ${current_dir}/local/update/o2server/console_windows.bat ${current_dir}/
+		fi
+		if [ -f ${current_dir}/service_windows.bat ]; then
+			cp -f ${current_dir}/local/update/o2server/service_windows.bat ${current_dir}/
+		fi
+		if [ -f ${current_dir}/start_linux.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/start_linux.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/stop_linux.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/stop_linux.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/console_linux.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/console_linux.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/start_macos.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/start_macos.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/stop_macos.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/stop_macos.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/console_macos.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/console_macos.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/start_aix.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/start_aix.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/stop_aix.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/stop_aix.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/console_aix.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/console_aix.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/start_neokylin_loongson.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/start_neokylin_loongson.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/stop_aix.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/stop_neokylin_loongson.sh ${current_dir}/
+		fi
+		if [ -f ${current_dir}/console_aix.sh ]; then
+			cp -f ${current_dir}/local/update/o2server/console_neokylin_loongson.sh ${current_dir}/
+		fi
+		cp ${current_dir}/local/update/o2server/version.o2 ${current_dir}/
+		rm -Rf ${current_dir}/local/update
+	fi
+fi
+setsid ${current_dir}/jvm/neokylin_loongson/bin/java -Djava.awt.headless=true -Xms2g -XX:+UseConcMarkSweepGC -jar ${current_dir}/console.jar

+ 15 - 0
o2server/start_windows.bat

@@ -53,6 +53,9 @@ if exist "%~dp0local\update" (
 		if exist "%~dp0local\update\o2server\index.html" (
 			copy "%~dp0local\update\o2server\index.html" "%~dp0"
 		)
+		if exist "%~dp0local\update\o2server\src.zip" (
+			copy "%~dp0local\update\o2server\src.zip" "%~dp0"
+		)
 		if exist "%~dp0start_windows.bat" (
 			copy "%~dp0local\update\o2server\start_windows.bat" "%~dp0"
 		)
@@ -62,6 +65,9 @@ if exist "%~dp0local\update" (
 		if exist "%~dp0console_windows.bat" (
 			copy "%~dp0local\update\o2server\console_windows.bat" "%~dp0"
 		)
+		if exist "%~dp0service_windows.bat" (
+			copy "%~dp0local\update\o2server\service_windows.bat" "%~dp0"
+		)
 		if exist "%~dp0start_linux.sh" (
 			copy "%~dp0local\update\o2server\start_linux.sh" "%~dp0"
 		)
@@ -89,6 +95,15 @@ if exist "%~dp0local\update" (
 		if exist "%~dp0console_aix.sh" (
 			copy "%~dp0local\update\o2server\console_aix.sh" "%~dp0"
 		)
+		if exist "%~dp0start_neokylin_loongson.sh" (
+			copy "%~dp0local\update\o2server\start_neokylin_loongson.sh" "%~dp0"
+		)
+		if exist "%~dp0stop_neokylin_loongson.sh" (
+			copy "%~dp0local\update\o2server\stop_neokylin_loongson.sh" "%~dp0"
+		)
+		if exist "%~dp0console_neokylin_loongson.sh" (
+			copy "%~dp0local\update\o2server\console_neokylin_loongson.sh" "%~dp0"
+		)
 		copy "%~dp0local\update\o2server\version.o2" "%~dp0"
 		rmdir /S/Q "%~dp0local\update"
 	)

+ 1 - 0
o2server/stop_neokylin_loongson.sh

@@ -0,0 +1 @@
+$(cd "$(dirname "$0")"; pwd)/jvm/neokylin_loongson/bin/java -cp $(cd "$(dirname "$0")"; pwd)/console.jar com.x.server.console.swapcommand.Exit

+ 4 - 0
o2server/x_attendance_assemble_control/pom.xml

@@ -34,6 +34,10 @@
 						<id>describe</id>
 						<phase>prepare-package</phase>
 					</execution>
+					<execution>
+						<id>checkAssemble</id>
+						<phase>prepare-package</phase>
+					</execution>
 				</executions>
 			</plugin>
 			<plugin>

+ 1 - 0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ActionListWithEmployee.java

@@ -12,6 +12,7 @@ import com.x.attendance.assemble.control.ExceptionWrapInConvert;
 import com.x.attendance.assemble.control.jaxrs.attendancedetail.exception.ExceptionAttendanceDetailProcess;
 import com.x.attendance.entity.AttendanceDetail;
 import com.x.base.core.entity.JpaObject;
+import com.x.base.core.project.annotation.FieldDescribe;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
 import com.x.base.core.project.gson.GsonPropertyObject;

+ 1 - 10
o2server/x_attendance_assemble_control/src/main/webapp/WEB-INF/web.xml

@@ -1,10 +1 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<web-app id="x_attendance_assemble_control"
-	metadata-complete="false" version="3.0">
-	<display-name>x_attendance_assemble_control</display-name>
-	<context-param>
-		<param-name>project</param-name>
-		<param-value>com.x.base.core.project.x_attendance_assemble_control
-		</param-value>
-	</context-param>
-</web-app>
+<?xml version="1.0" encoding="UTF-8"?><web-app id="x_attendance_assemble_control" metadata-complete="false" version="3.0"><display-name>x_attendance_assemble_control</display-name><context-param><param-name>project</param-name><param-value>com.x.base.core.project.x_attendance_assemble_control</param-value></context-param></web-app>

+ 4 - 0
o2server/x_attendance_core_entity/pom.xml

@@ -30,6 +30,10 @@
 						<id>createEnhancePersistenceXml</id>
 						<phase>generate-resources</phase>
 					</execution>
+					<execution>
+						<id>checkCore</id>
+						<phase>prepare-package</phase>
+					</execution>
 				</executions>
 			</plugin>
 			<plugin>

+ 4 - 0
o2server/x_base_core_project/pom.xml

@@ -26,6 +26,10 @@
 						<id>createEnhancePersistenceXml</id>
 						<phase>process-classes</phase>
 					</execution>
+					<execution>
+						<id>checkCore</id>
+						<phase>prepare-package</phase>
+					</execution>
 				</executions>
 			</plugin>
 			<plugin>

+ 0 - 21
o2server/x_base_core_project/src/main/java/com/x/base/core/container/EntityManagerContainer.java

@@ -1237,27 +1237,6 @@ public class EntityManagerContainer extends EntityManagerContainerBasic {
 		return list;
 	}
 
-//	public <T extends JpaObject> String conflict(Class<T> clz, T t) throws Exception {
-//		EntityManager em = this.get(clz);
-//		CriteriaBuilder cb = em.getCriteriaBuilder();
-//		for (Field field : this.entityManagerContainerFactory.getFlagFields(clz)) {
-//			Object value = t.get(field.getName());
-//			if ((null != value) && StringUtils.isNotEmpty(Objects.toString(value))) {
-//				CriteriaQuery<Long> cq = cb.createQuery(Long.class);
-//				Root<T> root = cq.from(clz);
-//				Predicate p = cb.disjunction();
-//				for (Field f : this.entityManagerContainerFactory.getFlagFields(clz)) {
-//					p = cb.or(p, cb.equal(root.get(f.getName()), value));
-//				}
-//				p = cb.and(p, cb.notEqual(root.get(JpaObject.id_FIELDNAME), t.getId()));
-//				if (em.createQuery(cq.select(cb.count(root)).where(p)).getSingleResult() > 0) {
-//					return field.getName() + ":" + Objects.toString(value);
-//				}
-//			}
-//		}
-//		return null;
-//	}
-
 	public <T extends JpaObject> String conflict(Class<T> clz, T t) throws Exception {
 		EntityManager em = this.get(clz);
 		CriteriaBuilder cb = em.getCriteriaBuilder();

+ 4 - 26
o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/EntityManagerContainerFactory.java

@@ -14,29 +14,17 @@ import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.entity.JpaObject;
 import com.x.base.core.entity.annotation.CheckPersist;
 import com.x.base.core.entity.annotation.CheckRemove;
-import com.x.base.core.project.AbstractContext;
-import com.x.base.core.project.config.DataMappings;
 
 public class EntityManagerContainerFactory extends SliceEntityManagerContainerFactory {
 
 	private volatile static EntityManagerContainerFactory instance;
 
-//	public static void init(String webApplicationDirectory, DataMappings dataMappings) throws Exception {
-//		synchronized (EntityManagerContainerFactory.class) {
-//			if (instance != null) {
-//				EntityManagerContainerFactory.close();
-//			}
-//			instance = new EntityManagerContainerFactory(webApplicationDirectory, dataMappings);
-//		}
-//	}
-
-	public static void init(String webApplicationDirectory, DataMappings dataMappings, List<String> entities)
-			throws Exception {
+	public static void init(String webApplicationDirectory, List<String> entities) throws Exception {
 		synchronized (EntityManagerContainerFactory.class) {
 			if (instance != null) {
 				EntityManagerContainerFactory.close();
 			}
-			instance = new EntityManagerContainerFactory(webApplicationDirectory, dataMappings, entities);
+			instance = new EntityManagerContainerFactory(webApplicationDirectory, entities);
 		}
 	}
 
@@ -65,15 +53,10 @@ public class EntityManagerContainerFactory extends SliceEntityManagerContainerFa
 		return instance;
 	}
 
-	private EntityManagerContainerFactory(String webApplicationDirectory, DataMappings dataMappings,
-			List<String> entities) throws Exception {
-		super(webApplicationDirectory, dataMappings, entities);
+	private EntityManagerContainerFactory(String webApplicationDirectory, List<String> entities) throws Exception {
+		super(webApplicationDirectory, entities);
 	}
 
-//	private EntityManagerContainerFactory(String webApplicationDirectory, DataMappings dataMappings) throws Exception {
-//		super(webApplicationDirectory, dataMappings);
-//	}
-
 	private EntityManagerContainerFactory(String source) throws Exception {
 		super(source);
 	}
@@ -91,14 +74,9 @@ public class EntityManagerContainerFactory extends SliceEntityManagerContainerFa
 				instance.checkRemoveFieldMap.clear();
 			}
 			/* 注销驱动程序 */
-			// Set<Driver> drivers = new HashSet<>();
-			// for (String url : instance.jdbcUrls) {
-			// drivers.add(DriverManager.getDriver(url));
-			// }
 			Enumeration<Driver> drivers = DriverManager.getDrivers();
 			while (drivers.hasMoreElements()) {
 				Driver driver = drivers.nextElement();
-				// System.out.println("deregisterDriver:" + driver);
 				DriverManager.deregisterDriver(driver);
 			}
 			/* 由于可能重新载入 */

+ 119 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/PersistenceXmlHelper.java

@@ -0,0 +1,119 @@
+package com.x.base.core.container.factory;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openjpa.persistence.PersistenceProviderImpl;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.QName;
+import org.dom4j.io.OutputFormat;
+import org.dom4j.io.XMLWriter;
+
+import com.x.base.core.container.FactorDistributionPolicy;
+import com.x.base.core.entity.JpaObject;
+import com.x.base.core.entity.tools.JpaObjectTools;
+import com.x.base.core.project.config.Config;
+import com.x.base.core.project.tools.ListTools;
+
+public class PersistenceXmlHelper {
+
+	public static List<String> write(String path, List<String> entities) throws Exception {
+		List<String> names = new ArrayList<>();
+		String name = "";
+		try {
+			names.addAll((List<String>) Config.resource(Config.RESOUCE_CONTAINERENTITYNAMES));
+			names = ListTools.includesExcludesWildcard(names, entities, null);
+			Document document = DocumentHelper.createDocument();
+			Element persistence = document.addElement("persistence", "http://java.sun.com/xml/ns/persistence");
+			persistence.addAttribute(QName.get("schemaLocation", "xsi", "http://www.w3.org/2001/XMLSchema-instance"),
+					"http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd");
+			persistence.addAttribute("version", "2.0");
+			for (String className : names) {
+				name = className;
+				Class<? extends JpaObject> clazz = (Class<JpaObject>) Class.forName(className);
+				Element unit = persistence.addElement("persistence-unit");
+				unit.addAttribute("name", className);
+				unit.addAttribute("transaction-type", "RESOURCE_LOCAL");
+				Element provider = unit.addElement("provider");
+				provider.addText(PersistenceProviderImpl.class.getName());
+				for (Class<?> o : JpaObjectTools.scanMappedSuperclass(clazz)) {
+					Element mapped_element = unit.addElement("class");
+					mapped_element.addText(o.getName());
+				}
+			}
+			OutputFormat format = OutputFormat.createPrettyPrint();
+			format.setEncoding("UTF-8");
+			File file = new File(path);
+			FileUtils.touch(file);
+			XMLWriter writer = new XMLWriter(new FileWriter(file), format);
+			writer.write(document);
+			writer.close();
+			return names;
+		} catch (Exception e) {
+			throw new Exception("registContainerEntity error.className:" + name, e);
+		}
+	}
+
+	public static Properties properties(String className) throws Exception {
+		if (Config.externalDataSources().enable()) {
+			return properties_external(className);
+		} else {
+			return properties_internal(className);
+		}
+	}
+
+	private static Properties properties_base(String className) throws Exception {
+		Properties properties = new Properties();
+		properties.put("openjpa.BrokerFactory", "slice");
+		/* 如果是DB2 添加 Schema,mysql 不需要Schema 如果用了Schema H2数据库就会报错说没有Schema */
+		properties.put("openjpa.slice.Lenient", "false");
+		properties.put("openjpa.slice.DistributionPolicy", FactorDistributionPolicy.class.getName());
+		properties.put("openjpa.QueryCompilationCache", "false");
+		properties.put("openjpa.IgnoreChanges", "true");
+		properties.put("openjpa.QueryCache", "false");
+		properties.put("openjpa.QueryCompilationCache", "false");
+		properties.put("openjpa.LockManager", "none");
+		properties.put("openjpa.jdbc.ResultSetType", "scroll-insensitive");
+		/* 如果启用本地初始化会导致classLoad的问题 */
+		properties.put("openjpa.DynamicEnhancementAgent", "false");
+		properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=false)");
+		properties.put("openjpa.Log", "DefaultLevel=WARN");
+		return properties;
+	}
+
+	private static Properties properties_external(String className) throws Exception {
+		Properties properties = properties_base(className);
+		properties.put("openjpa.jdbc.DBDictionary", Config.externalDataSources().dictionary());
+		/* 如果是DB2 添加 Schema,mysql 不需要Schema 如果用了Schema H2数据库就会报错说没有Schema */
+		if (Config.externalDataSources().hasSchema()) {
+			properties.put("openjpa.jdbc.Schema", JpaObject.default_schema);
+		}
+		properties.put("openjpa.slice.Names",
+				StringUtils.join(Config.externalDataSources().findNamesOfContainerEntity(className), ","));
+		for (String name : Config.externalDataSources().findNamesOfContainerEntity(className)) {
+			properties.put("openjpa.slice." + name + ".ConnectionFactoryName", Config.RESOUCE_JDBC_PREFIX + name);
+			properties.put("openjpa.slice." + name + ".Log", Config.externalDataSources().log(name));
+		}
+		return properties;
+	}
+
+	private static Properties properties_internal(String className) throws Exception {
+		Properties properties = properties_base(className);
+		properties.put("openjpa.jdbc.DBDictionary", SlicePropertiesBuilder.dictionary_h2);
+		properties.put("openjpa.slice.Names",
+				StringUtils.join(Config.nodes().dataServers().findNamesOfContainerEntity(className), ","));
+		for (String name : Config.nodes().dataServers().findNamesOfContainerEntity(className)) {
+			properties.put("openjpa.slice." + name + ".ConnectionFactoryName", Config.RESOUCE_JDBC_PREFIX + name);
+			properties.put("openjpa.slice." + name + ".Log", Config.nodes().dataServers().log(name));
+		}
+		return properties;
+	}
+
+}

+ 191 - 107
o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/SliceEntityManagerContainerFactory.java

@@ -1,7 +1,6 @@
 package com.x.base.core.container.factory;
 
 import java.io.File;
-import java.io.FileWriter;
 import java.lang.reflect.Field;
 import java.net.URL;
 import java.util.ArrayList;
@@ -10,41 +9,31 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
+import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.Id;
 
-import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.reflect.FieldUtils;
 import org.apache.openjpa.persistence.OpenJPAPersistence;
 import org.apache.openjpa.persistence.PersistenceProductDerivation;
-import org.apache.openjpa.persistence.PersistenceProviderImpl;
 import org.dom4j.Document;
-import org.dom4j.DocumentHelper;
 import org.dom4j.Element;
-import org.dom4j.QName;
-import org.dom4j.io.OutputFormat;
 import org.dom4j.io.SAXReader;
-import org.dom4j.io.XMLWriter;
 
 import com.x.base.core.entity.JpaObject;
 import com.x.base.core.entity.annotation.CheckPersist;
 import com.x.base.core.entity.annotation.CheckRemove;
 import com.x.base.core.entity.annotation.Flag;
 import com.x.base.core.entity.annotation.RestrictFlag;
-import com.x.base.core.entity.tools.JpaObjectTools;
-import com.x.base.core.project.config.DataMappings;
-import com.x.base.core.project.tools.ListTools;
 
 public abstract class SliceEntityManagerContainerFactory {
 
-	// protected static String persistence_xml_path = "META-INF/x_persistence.xml";
-	protected static String PERSISTENCE_XML_PATH = "META-INF/persistence.xml";
 	protected static String META_INF = "META-INF";
+	protected static String PERSISTENCE_XML_PATH = META_INF + "/persistence.xml";
 
 	/* class 与 entityManagerFactory 映射表 */
 	protected Map<Class<? extends JpaObject>, EntityManagerFactory> entityManagerFactoryMap = new ConcurrentHashMap<Class<? extends JpaObject>, EntityManagerFactory>();
@@ -57,39 +46,69 @@ public abstract class SliceEntityManagerContainerFactory {
 	/* class 与 class 中需要检查 Remove 字段的对应表 */
 	protected Map<Class<? extends JpaObject>, Map<Field, CheckRemove>> checkRemoveFieldMap = new ConcurrentHashMap<Class<? extends JpaObject>, Map<Field, CheckRemove>>();
 
-//	protected SliceEntityManagerContainerFactory(String webApplicationDirectory, DataMappings dataMappings)
-//			throws Exception {
-////		Set<Class<? extends JpaObject>> classes = mergePersistenceXml(webApplicationDirectory, dataMappings);
-//		Set<Class<? extends JpaObject>> classes = persistenceXml(webApplicationDirectory, dataMappings,);
+	protected SliceEntityManagerContainerFactory(String webApplicationDirectory, List<String> entities)
+			throws Exception {
+		File path = new File(webApplicationDirectory + "/WEB-INF/classes/" + PERSISTENCE_XML_PATH);
+		List<String> classNames = PersistenceXmlHelper.write(path.getAbsolutePath(), entities);
+		for (String className : classNames) {
+			Class<? extends JpaObject> clz = (Class<? extends JpaObject>) Class.forName(className);
+			checkPersistFieldMap.put(clz, this.loadCheckPersistField(clz));
+			checkRemoveFieldMap.put(clz, this.loadCheckRemoveField(clz));
+			Properties properties = PersistenceXmlHelper.properties(clz.getName());
+			entityManagerFactoryMap.put(clz,
+					OpenJPAPersistence.createEntityManagerFactory(clz.getName(), PERSISTENCE_XML_PATH, properties));
+			List<Field> flagFields = new ArrayList<>();
+			List<Field> restrictFlagFields = new ArrayList<>();
+			for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, Id.class)) {
+				flagFields.add(o);
+				restrictFlagFields.add(o);
+			}
+			for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, Flag.class)) {
+				flagFields.add(o);
+				restrictFlagFields.add(o);
+			}
+			for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, RestrictFlag.class)) {
+				restrictFlagFields.add(o);
+			}
+			flagMap.put(clz, Collections.unmodifiableList(flagFields));
+			restrictFlagMap.put(clz, Collections.unmodifiableList(restrictFlagFields));
+		}
+	}
+
+//	protected SliceEntityManagerContainerFactory(String webApplicationDirectory, DataMappings dataMappings,
+//			List<String> entities) throws Exception {
+//		Set<Class<? extends JpaObject>> classes = persistenceXml(webApplicationDirectory, dataMappings, entities);
 //		for (Class<? extends JpaObject> clz : classes) {
 //			checkPersistFieldMap.put(clz, this.loadCheckPersistField(clz));
 //			checkRemoveFieldMap.put(clz, this.loadCheckRemoveField(clz));
 //			entityManagerFactoryMap.put(clz,
-//					OpenJPAPersistence.createEntityManagerFactory(clz.getCanonicalName(), PERSISTENCE_XML_PATH));
-//			flagMap.put(clz, new ArrayList<Field>());
-//			restrictFlagMap.put(clz, new ArrayList<Field>());
+//					OpenJPAPersistence.createEntityManagerFactory(clz.getName(), PERSISTENCE_XML_PATH));
+//			List<Field> flagFields = new ArrayList<>();
+//			List<Field> restrictFlagFields = new ArrayList<>();
 //			for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, Id.class)) {
-//				flagMap.get(clz).add(o);
-//				restrictFlagMap.get(clz).add(o);
+//				flagFields.add(o);
+//				restrictFlagFields.add(o);
 //			}
 //			for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, Flag.class)) {
-//				flagMap.get(clz).add(o);
-//				restrictFlagMap.get(clz).add(o);
+//				flagFields.add(o);
+//				restrictFlagFields.add(o);
 //			}
 //			for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, RestrictFlag.class)) {
-//				restrictFlagMap.get(clz).add(o);
+//				restrictFlagFields.add(o);
 //			}
+//			flagMap.put(clz, Collections.unmodifiableList(flagFields));
+//			restrictFlagMap.put(clz, Collections.unmodifiableList(restrictFlagFields));
 //		}
 //	}
 
-	protected SliceEntityManagerContainerFactory(String webApplicationDirectory, DataMappings dataMappings,
-			List<String> entities) throws Exception {
-		Set<Class<? extends JpaObject>> classes = persistenceXml(webApplicationDirectory, dataMappings, entities);
+	protected SliceEntityManagerContainerFactory(String source) throws Exception {
+		Set<Class<? extends JpaObject>> classes = this.listUitClass(source);
 		for (Class<? extends JpaObject> clz : classes) {
 			checkPersistFieldMap.put(clz, this.loadCheckPersistField(clz));
 			checkRemoveFieldMap.put(clz, this.loadCheckRemoveField(clz));
+			Properties properties = PersistenceXmlHelper.properties(clz.getName());
 			entityManagerFactoryMap.put(clz,
-					OpenJPAPersistence.createEntityManagerFactory(clz.getName(), PERSISTENCE_XML_PATH));
+					OpenJPAPersistence.createEntityManagerFactory(clz.getName(), source, properties));
 			List<Field> flagFields = new ArrayList<>();
 			List<Field> restrictFlagFields = new ArrayList<>();
 			for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, Id.class)) {
@@ -108,95 +127,90 @@ public abstract class SliceEntityManagerContainerFactory {
 		}
 	}
 
-	protected SliceEntityManagerContainerFactory(String source) throws Exception {
-		Set<Class<? extends JpaObject>> classes = this.listUitClass(source);
-		for (Class<? extends JpaObject> clz : classes) {
-			checkPersistFieldMap.put(clz, this.loadCheckPersistField(clz));
-			checkRemoveFieldMap.put(clz, this.loadCheckRemoveField(clz));
-			entityManagerFactoryMap.put(clz, OpenJPAPersistence.createEntityManagerFactory(clz.getName(), source));
-		}
-	}
-
-	/** 扫描受管实体,生成 x_perisitence.xml */
-	@SuppressWarnings("unchecked")
-	private Set<Class<? extends JpaObject>> persistenceXml(String webApplicationDirectory, DataMappings dataMappings,
-			List<String> entities) throws Exception {
-		String name = "";
-		Set<Class<? extends JpaObject>> classes = new HashSet<>();
-		try {
-			List<String> names = new ArrayList<>();
-			names.addAll(dataMappings.keySet());
-			names = ListTools.includesExcludesWildcard(names, entities, null);
-			Document document = DocumentHelper.createDocument();
-			Element persistence = document.addElement("persistence", "http://java.sun.com/xml/ns/persistence");
-			persistence.addAttribute(QName.get("schemaLocation", "xsi", "http://www.w3.org/2001/XMLSchema-instance"),
-					"http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd");
-			persistence.addAttribute("version", "2.0");
-			for (String className : names) {
-				name = className;
-				Class<? extends JpaObject> clazz = (Class<JpaObject>) Class.forName(className);
-				Element unit = persistence.addElement("persistence-unit");
-				unit.addAttribute("name", className);
-				unit.addAttribute("transaction-type", "RESOURCE_LOCAL");
-				Element provider = unit.addElement("provider");
-				provider.addText(PersistenceProviderImpl.class.getName());
-				for (Class<?> o : JpaObjectTools.scanMappedSuperclass(clazz)) {
-					Element mapped_element = unit.addElement("class");
-					mapped_element.addText(o.getName());
-				}
-				Element slice_unit_properties = unit.addElement("properties");
-				for (Entry<String, String> entry : SlicePropertiesBuilder.getPropertiesDBCP(dataMappings.get(className))
-						.entrySet()) {
-					Element property = slice_unit_properties.addElement("property");
-					property.addAttribute("name", entry.getKey());
-					property.addAttribute("value", entry.getValue());
-				}
-				classes.add(clazz);
-			}
-			OutputFormat format = OutputFormat.createPrettyPrint();
-			format.setEncoding("UTF-8");
-			File dir = new File(webApplicationDirectory + "/WEB-INF/classes/" + META_INF);
-			FileUtils.forceMkdir(dir);
-			File file = new File(webApplicationDirectory + "/WEB-INF/classes/" + PERSISTENCE_XML_PATH);
-			XMLWriter writer = new XMLWriter(new FileWriter(file), format);
-			writer.write(document);
-			writer.close();
-			return classes;
-		} catch (Exception e) {
-			throw new Exception("registContainerEntity error.className:" + name, e);
-		}
-	}
-
 //	/** 扫描受管实体,生成 x_perisitence.xml */
 //	@SuppressWarnings("unchecked")
-//	private Set<Class<? extends JpaObject>> mergePersistenceXml(String webApplicationDirectory,
-//			DataMappings dataMappings) throws Exception {
-//		String name = null;
+//	private Set<Class<? extends JpaObject>> persistenceXml(String webApplicationDirectory, DataMappings dataMappings,
+//			List<String> entities) throws Exception {
+//		String name = "";
+//		Set<Class<? extends JpaObject>> classes = new HashSet<>();
 //		try {
-//			Set<Class<? extends JpaObject>> classes = new HashSet<>();
-//			File file = new File(webApplicationDirectory + "/WEB-INF/classes/" + persistence_xml_path);
-//			SAXReader reader = new SAXReader();
-//			Document document = reader.read(file);
-//			for (Object o : document.getRootElement().elements("persistence-unit")) {
-//				Element unit = (Element) o;
-//				name = unit.attribute("name").getValue();
-//				// System.out.println("try to load entity class:" + name);
-//				Element properties = unit.element("properties");
-//				if (null != properties) {
-//					properties.clearContent();
-//				} else {
-//					properties = unit.addElement("properties");
+//			List<String> names = new ArrayList<>();
+//			names.addAll(dataMappings.keySet());
+//			names = ListTools.includesExcludesWildcard(names, entities, null);
+//			Document document = DocumentHelper.createDocument();
+//			Element persistence = document.addElement("persistence", "http://java.sun.com/xml/ns/persistence");
+//			persistence.addAttribute(QName.get("schemaLocation", "xsi", "http://www.w3.org/2001/XMLSchema-instance"),
+//					"http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd");
+//			persistence.addAttribute("version", "2.0");
+//			for (String className : names) {
+//				name = className;
+//				Class<? extends JpaObject> clazz = (Class<JpaObject>) Class.forName(className);
+//				Element unit = persistence.addElement("persistence-unit");
+//				unit.addAttribute("name", className);
+//				unit.addAttribute("transaction-type", "RESOURCE_LOCAL");
+//				Element provider = unit.addElement("provider");
+//				provider.addText(PersistenceProviderImpl.class.getName());
+//				for (Class<?> o : JpaObjectTools.scanMappedSuperclass(clazz)) {
+//					Element mapped_element = unit.addElement("class");
+//					mapped_element.addText(o.getName());
 //				}
-//				for (Entry<String, String> entry : SlicePropertiesBuilder.getPropertiesDBCP(dataMappings.get(name))
+//				Element slice_unit_properties = unit.addElement("properties");
+//				for (Entry<String, String> entry : SlicePropertiesBuilder.getPropertiesDBCP(dataMappings.get(className))
 //						.entrySet()) {
-//					Element property = properties.addElement("property");
+//					Element property = slice_unit_properties.addElement("property");
 //					property.addAttribute("name", entry.getKey());
 //					property.addAttribute("value", entry.getValue());
 //				}
-//				classes.add((Class<JpaObject>) Class.forName(name));
+//				classes.add(clazz);
+//			}
+//			OutputFormat format = OutputFormat.createPrettyPrint();
+//			format.setEncoding("UTF-8");
+//			File dir = new File(webApplicationDirectory + "/WEB-INF/classes/" + META_INF);
+//			FileUtils.forceMkdir(dir);
+//			File file = new File(webApplicationDirectory + "/WEB-INF/classes/" + PERSISTENCE_XML_PATH);
+//			XMLWriter writer = new XMLWriter(new FileWriter(file), format);
+//			writer.write(document);
+//			writer.close();
+//			return classes;
+//		} catch (Exception e) {
+//			throw new Exception("registContainerEntity error.className:" + name, e);
+//		}
+//	}
+//
+//	/** 扫描受管实体,生成 x_perisitence.xml */
+//	@SuppressWarnings("unchecked")
+//	private Set<Class<? extends JpaObject>> persist1enceXml(String webApplicationDirectory, List<String> entities)
+//			throws Exception {
+//		String name = "";
+//		Set<Class<? extends JpaObject>> classes = new HashSet<>();
+//		try {
+//			List<String> names = new ArrayList<>();
+//			names.addAll((List<String>) Config.resource(Config.RESOUCE_CONTAINERENTITYNAMES));
+//			names = ListTools.includesExcludesWildcard(names, entities, null);
+//			Document document = DocumentHelper.createDocument();
+//			Element persistence = document.addElement("persistence", "http://java.sun.com/xml/ns/persistence");
+//			persistence.addAttribute(QName.get("schemaLocation", "xsi", "http://www.w3.org/2001/XMLSchema-instance"),
+//					"http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd");
+//			persistence.addAttribute("version", "2.0");
+//			for (String className : names) {
+//				name = className;
+//				Class<? extends JpaObject> clazz = (Class<JpaObject>) Class.forName(className);
+//				Element unit = persistence.addElement("persistence-unit");
+//				unit.addAttribute("name", className);
+//				unit.addAttribute("transaction-type", "RESOURCE_LOCAL");
+//				Element provider = unit.addElement("provider");
+//				provider.addText(PersistenceProviderImpl.class.getName());
+//				for (Class<?> o : JpaObjectTools.scanMappedSuperclass(clazz)) {
+//					Element mapped_element = unit.addElement("class");
+//					mapped_element.addText(o.getName());
+//				}
+//				classes.add(clazz);
 //			}
 //			OutputFormat format = OutputFormat.createPrettyPrint();
 //			format.setEncoding("UTF-8");
+//			File dir = new File(webApplicationDirectory + "/WEB-INF/classes/" + META_INF);
+//			FileUtils.forceMkdir(dir);
+//			File file = new File(webApplicationDirectory + "/WEB-INF/classes/" + PERSISTENCE_XML_PATH);
 //			XMLWriter writer = new XMLWriter(new FileWriter(file), format);
 //			writer.write(document);
 //			writer.close();
@@ -263,4 +277,74 @@ public abstract class SliceEntityManagerContainerFactory {
 		}
 	}
 
+//	private Properties properties(String className) throws Exception {
+//		if (Config.externalDataSources().enable()) {
+//			return properties_external(className);
+//		} else {
+//			return properties_internal(className);
+//		}
+//	}
+//
+//	private Properties properties_external(String className) throws Exception {
+//		Properties properties = new Properties();
+//		properties.put("openjpa.jdbc.DBDictionary", Config.externalDataSources().dictionary());
+//		properties.put("openjpa.BrokerFactory", "slice");
+//		/* 如果是DB2 添加 Schema,mysql 不需要Schema 如果用了Schema H2数据库就会报错说没有Schema */
+//		if (Config.externalDataSources().hasSchema()) {
+//			properties.put("openjpa.jdbc.Schema", JpaObject.default_schema);
+//		}
+//		properties.put("openjpa.slice.Lenient", "false");
+//		properties.put("openjpa.slice.DistributionPolicy", FactorDistributionPolicy.class.getName());
+//		properties.put("openjpa.slice.Names",
+//				StringUtils.join(Config.externalDataSources().findNamesOfContainerEntity(className), ","));
+//		// properties.put("openjpa.ConnectionDriverName",
+//		// DruidDataSource.class.getName());
+//		properties.put("openjpa.QueryCompilationCache", "false");
+//		properties.put("openjpa.IgnoreChanges", "true");
+//		properties.put("openjpa.QueryCache", "false");
+//		properties.put("openjpa.QueryCompilationCache", "false");
+//		properties.put("openjpa.LockManager", "none");
+//		properties.put("openjpa.jdbc.ResultSetType", "scroll-insensitive");
+//		/* 如果启用本地初始化会导致classLoad的问题 */
+//		properties.put("openjpa.DynamicEnhancementAgent", "false");
+//		properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=false)");
+//		/* 锁 */
+//		properties.put("openjpa.Log", "DefaultLevel=WARN");
+//		// properties.put("openjpa.ConnectionFactoryProperties", "PrettyPrint=true,
+//		// PrettyPrintLineLength=72");
+//		for (String name : Config.externalDataSources().findNamesOfContainerEntity(className)) {
+//			properties.put("openjpa.slice." + name + ".ConnectionFactoryName", Config.RESOUCE_JDBC_PREFIX + name);
+//		}
+//		return properties;
+//	}
+//
+//	private Properties properties_internal(String className) throws Exception {
+//		Properties properties = new Properties();
+//		properties.put("openjpa.jdbc.DBDictionary", SlicePropertiesBuilder.dictionary_h2);
+//		properties.put("openjpa.BrokerFactory", "slice");
+//		properties.put("openjpa.slice.Lenient", "false");
+//		properties.put("openjpa.slice.DistributionPolicy", FactorDistributionPolicy.class.getName());
+//		properties.put("openjpa.slice.Names",
+//				StringUtils.join(Config.nodes().dataServers().findNamesOfContainerEntity(className), ","));
+//		properties.put("openjpa.QueryCompilationCache", "false");
+//		properties.put("openjpa.IgnoreChanges", "true");
+//		properties.put("openjpa.QueryCache", "false");
+//		properties.put("openjpa.QueryCompilationCache", "false");
+//		properties.put("openjpa.LockManager", "none");
+//		properties.put("openjpa.jdbc.ResultSetType", "scroll-insensitive");
+//		/* 如果启用本地初始化会导致classLoad的问题 */
+//		properties.put("openjpa.DynamicEnhancementAgent", "false");
+//		properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=false)");
+//		// properties.put("openjpa.ConnectionDriverName",
+//		// "com.alibaba.druid.pool.DruidDataSource");
+//		/* 锁 */
+//		properties.put("openjpa.Log", "DefaultLevel=WARN");
+//		for (String name : Config.nodes().dataServers().findNamesOfContainerEntity(className)) {
+//			properties.put("openjpa.slice." + name + ".ConnectionFactoryName", Config.RESOUCE_JDBC_PREFIX + name);
+//			// properties.put("openjpa.slice." + name + ".ConnectionDriverName",
+//			// "com.alibaba.druid.pool.DruidDataSource");
+//		}
+//		return properties;
+//	}
+
 }

+ 359 - 253
o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/SlicePropertiesBuilder.java

@@ -1,16 +1,7 @@
 package com.x.base.core.container.factory;
 
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.commons.lang3.StringUtils;
 
-import com.alibaba.druid.pool.DruidDataSource;
-import com.x.base.core.container.FactorDistributionPolicy;
-import com.x.base.core.entity.JpaObject;
-import com.x.base.core.project.config.DataMapping;
-
 public class SlicePropertiesBuilder {
 
 	public static String driver_db2 = "com.ibm.db2.jcc.DB2Driver";
@@ -23,7 +14,8 @@ public class SlicePropertiesBuilder {
 	public static String driver_sqlserver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
 	public static String driver_gbase = "com.gbasedbt.jdbc.IfxDriver";
 	public static String driver_kingbase = "com.kingbase.Driver";
-	/** 避免db2在aix版本和lwl版本字段长度不一致的问题 */
+	public static String driver_kingbase8 = "com.kingbase8.Driver";
+	/* 避免db2在aix版本和lwl版本字段长度不一致的问题 */
 	public static String dictionary_db2 = "db2(createPrimaryKeys=false,characterColumnSize=255,maxColumnNameLength=128,maxIndexNameLength=128,maxConstraintNameLength=128)";
 	public static String dictionary_oracle = "oracle(maxTableNameLength=128,maxColumnNameLength=128,maxIndexNameLength=128,maxConstraintNameLength=128,maxEmbeddedClobSize=-1,maxEmbeddedBlobSize=-1)";
 	public static String dictionary_mysql = "mysql(clobTypeName=LONGTEXT,blobTypeName=LONGBLOB,createPrimaryKeys=false,maxIndexesPerTable=64)";
@@ -33,8 +25,9 @@ public class SlicePropertiesBuilder {
 	public static String dictionary_dm = "com.x.base.core.openjpa.jdbc.sql.DMDictionary";
 	public static String dictionary_sqlserver = "sqlserver(schemaCase=preserve)";
 	public static String dictionary_gbase = "com.x.base.core.openjpa.jdbc.sql.GBaseDictionary";
+//	public static String dictionary_kingbase = "com.x.base.core.openjpa.jdbc.sql.KingbaseDictionary";
 	public static String dictionary_kingbase = "com.x.base.core.openjpa.jdbc.sql.KingbaseDictionary";
-//	public static String dictionary_kingbase = "org.apache.openjpa.jdbc.sql.KingbaseDictionary";
+	public static String dictionary_kingbase8 = "com.x.base.core.openjpa.jdbc.sql.Kingbase8Dictionary";
 
 	public static String validationQuery_db2 = "select 1 from sysibm.sysdummy1";
 	public static String validationQuery_oracle = "select 1 from dual";
@@ -45,92 +38,94 @@ public class SlicePropertiesBuilder {
 	public static String validationQuery_dm = "select getdate()";
 	public static String validationQuery_sqlserver = "select 1";
 	public static String validationQuery_gbase = "select 1";
-	public static String validationQuery_kingbase = "select 1";
-
-	public static Map<String, String> getPropertiesDBCP(List<DataMapping> list) throws Exception {
-		try {
-			if (list.isEmpty()) {
-				throw new Exception("parameter data list is empty.");
-			}
-			Map<String, String> properties = new LinkedHashMap<String, String>();
-			properties.put("openjpa.BrokerFactory", "slice");
-			properties.put("openjpa.jdbc.DBDictionary", determineDBDictionary(list.get(0)));
-			/**
-			 * 如果是DB2 添加 Schema,mysql 不需要Schema 如果用了Schema H2数据库就会报错说没有Schema
-			 */
+	public static String validationQuery_kingbase = "select now()";
+	public static String validationQuery_kingbase8 = "select now()";
 
-			if ((StringUtils.equals(determineDBDictionary(list.get(0)), dictionary_db2))
-					|| (StringUtils.equals(determineDBDictionary(list.get(0)), dictionary_informix))
-					|| (StringUtils.equals(determineDBDictionary(list.get(0)), dictionary_gbase))
-					|| (StringUtils.equals(determineDBDictionary(list.get(0)), dictionary_dm))
-					|| (StringUtils.equals(determineDBDictionary(list.get(0)), dictionary_dm))
-					|| (StringUtils.equals(determineDBDictionary(list.get(0)), dictionary_kingbase))) {
-				properties.put("openjpa.jdbc.Schema", JpaObject.default_schema);
-			}
-			properties.put("openjpa.slice.Lenient", "false");
-			// properties.put("openjpa.Multithreaded", "true");
-			properties.put("openjpa.slice.DistributionPolicy", FactorDistributionPolicy.class.getName());
-			properties.put("openjpa.slice.Names", getSliceNames(list));
-			// properties.put("openjpa.ConnectionDriverName",
-			// org.apache.commons.dbcp2.BasicDataSource.class.getName());
-			properties.put("openjpa.ConnectionDriverName", DruidDataSource.class.getName());
-			// properties.put("openjpa.ConnectionDriverName",
-			// org.apache.commons.dbcp2.managed.BasicManagedDataSource.class.getCanonicalName());
-			properties.put("openjpa.QueryCompilationCache", "false");
-			properties.put("openjpa.IgnoreChanges", "true");
-			properties.put("openjpa.QueryCache", "false");
-			properties.put("openjpa.jdbc.ResultSetType", "scroll-insensitive");
-			/* 如果启用本地初始化会导致classLoad的问题 */
-			properties.put("openjpa.DynamicEnhancementAgent", "false");
-			properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=false)");
-			// properties.put("openjpa.jdbc.SchemaFactory",
-			// "native(ForeignKeys=false)");
-			// properties.put("openjpa.Compatibility",
-			// "StrictIdentityValues=true");
-			/* 事务管理 */
-			// properties.put("openjpa.ManagedRuntime",
-			// "jndi(TransactionManagerName=java:/TransactionManager)");
-			/* 锁 */
-			properties.put("openjpa.LockManager", "none");
-			properties.put("openjpa.Log", "DefaultLevel=WARN");
-			for (int i = 0; i < list.size(); i++) {
-				String slice = getName(i);
-				DataMapping dataMapping = list.get(i);
-				properties.put("openjpa.slice." + slice + ".ConnectionProperties",
-						getConnectionPropertiesDruid(dataMapping));
-				// properties.put("openjpa.slice." + slice +
-				// ".ConnectionDriverName",
-				// org.apache.commons.dbcp.BasicDataSource.class.getCanonicalName());
-				properties.put("openjpa.slice." + slice + ".ConnectionDriverName", DruidDataSource.class.getName());
-				// properties.put("openjpa.slice." + slice +
-				// ".ConnectionDriverName",
-				// org.apache.commons.dbcp2.managed.BasicManagedDataSource.class.getCanonicalName());
-				properties.put("openjpa.slice." + slice + ".Log", getLog(dataMapping));
-				properties.put("openjpa.slice." + slice + ".IgnoreChanges", "true");
-				properties.put("openjpa.slice." + slice + ".QueryCache", "false");
-				properties.put("openjpa.slice." + slice + ".QueryCompilationCache", "false");
-				properties.put("openjpa.slice." + slice + ".LockManager", "none");
-				properties.put("openjpa.slice." + slice + ".ConnectionFactoryProperties",
-						"PrettyPrint=true, PrettyPrintLineLength=72");
-			}
-			return properties;
-		} catch (Exception e) {
-			throw new Exception("can not convert connection to slice properties", e);
-		}
-	}
+//	public static Map<String, String> getPropertiesDBCP(List<DataMapping> list) throws Exception {
+//		try {
+//			if (list.isEmpty()) {
+//				throw new Exception("parameter data list is empty.");
+//			}
+//			Map<String, String> properties = new LinkedHashMap<String, String>();
+//			properties.put("openjpa.BrokerFactory", "slice");
+//			properties.put("openjpa.jdbc.DBDictionary", determineDBDictionary(list.get(0)));
+//			/**
+//			 * 如果是DB2 添加 Schema,mysql 不需要Schema 如果用了Schema H2数据库就会报错说没有Schema
+//			 */
+//
+//			String driver = getConnectionDriverName(list.get(0));
+//			if ((StringUtils.equals(driver, driver_db2)) || (StringUtils.equals(driver, driver_informix))
+//					|| (StringUtils.equals(driver, driver_gbase)) || (StringUtils.equals(driver, driver_dm))
+//					|| (StringUtils.equals(driver, driver_kingbase))
+//					|| (StringUtils.equals(driver, driver_kingbase8))) {
+//				properties.put("openjpa.jdbc.Schema", JpaObject.default_schema);
+//			}
+//			properties.put("openjpa.slice.Lenient", "false");
+//			// properties.put("openjpa.Multithreaded", "true");
+//			properties.put("openjpa.slice.DistributionPolicy", FactorDistributionPolicy.class.getName());
+//			properties.put("openjpa.slice.Names", getSliceNames(list));
+//			// properties.put("openjpa.ConnectionDriverName",
+//			// org.apache.commons.dbcp2.BasicDataSource.class.getName());
+//			// properties.put("openjpa.ConnectionDriverName",
+//			// DruidDataSource.class.getName());
+//			// properties.put("openjpa.ConnectionDriverName",
+//			// org.apache.commons.dbcp2.managed.BasicManagedDataSource.class.getCanonicalName());
+//			properties.put("openjpa.QueryCompilationCache", "false");
+//			properties.put("openjpa.IgnoreChanges", "true");
+//			properties.put("openjpa.QueryCache", "false");
+//			properties.put("openjpa.jdbc.ResultSetType", "scroll-insensitive");
+//			/* 如果启用本地初始化会导致classLoad的问题 */
+//			properties.put("openjpa.DynamicEnhancementAgent", "false");
+//			properties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=false)");
+//			// properties.put("openjpa.jdbc.SchemaFactory",
+//			// "native(ForeignKeys=false)");
+//			// properties.put("openjpa.Compatibility",
+//			// "StrictIdentityValues=true");
+//			/* 事务管理 */
+//			// properties.put("openjpa.ManagedRuntime",
+//			// "jndi(TransactionManagerName=java:/TransactionManager)");
+//			/* 锁 */
+//			properties.put("openjpa.LockManager", "none");
+//			properties.put("openjpa.Log", "DefaultLevel=WARN");
+//			for (int i = 0; i < list.size(); i++) {
+//				String slice = getName(i);
+//				DataMapping dataMapping = list.get(i);
+//				properties.put("openjpa.slice." + slice + ".ConnectionProperties",
+//						getConnectionPropertiesDruid(dataMapping));
+//				// properties.put("openjpa.slice." + slice +
+//				// ".ConnectionDriverName",
+//				// org.apache.commons.dbcp.BasicDataSource.class.getCanonicalName());
+//				// properties.put("openjpa.slice." + slice + ".ConnectionDriverName",
+//				// DruidDataSource.class.getName());
+//				// properties.put("openjpa.slice." + slice +
+//				// ".ConnectionDriverName",
+//				// org.apache.commons.dbcp2.managed.BasicManagedDataSource.class.getCanonicalName());
+//				properties.put("openjpa.slice." + slice + ".Log", getLog(dataMapping));
+//				properties.put("openjpa.slice." + slice + ".IgnoreChanges", "true");
+//				properties.put("openjpa.slice." + slice + ".QueryCache", "false");
+//				properties.put("openjpa.slice." + slice + ".QueryCompilationCache", "false");
+//				properties.put("openjpa.slice." + slice + ".LockManager", "none");
+//				properties.put("openjpa.slice." + slice + ".ConnectionFactoryProperties",
+//						"PrettyPrint=true, PrettyPrintLineLength=72");
+//			}
+//			return properties;
+//		} catch (Exception e) {
+//			throw new Exception("can not convert connection to slice properties", e);
+//		}
+//	}
 
-	// openjpa.slice.Names 属性值
-	public static String getSliceNames(List<DataMapping> list) throws Exception {
-		try {
-			String[] arr = new String[list.size()];
-			for (int j = 0; j < list.size(); j++) {
-				arr[j] = getName(j);
-			}
-			return StringUtils.join(arr, ", ");
-		} catch (Exception e) {
-			throw new Exception("can not create slice names", e);
-		}
-	}
+//	// openjpa.slice.Names 属性值
+//	public static String getSliceNames(List<DataMapping> list) throws Exception {
+//		try {
+//			String[] arr = new String[list.size()];
+//			for (int j = 0; j < list.size(); j++) {
+//				arr[j] = getName(j);
+//			}
+//			return StringUtils.join(arr, ", ");
+//		} catch (Exception e) {
+//			throw new Exception("can not create slice names", e);
+//		}
+//	}
 
 	// 单个slice名称
 	public static String getName(Integer i) throws Exception {
@@ -141,174 +136,285 @@ public class SlicePropertiesBuilder {
 		}
 	}
 
-	/* 使用DBCP2连接池时产生的属性 */
-	protected static String getConnectionPropertiesDBCP2(DataMapping dataMapping) throws Exception {
-		try {
-			String str = "maxTotal=4, maxIdle=2, minIdle=0, maxWaitMillis=30000, timeBetweenEvictionRunsMillis=300000, minEvictableIdleTimeMillis=300000, maxConnLifetimeMillis=1200000, Username="
-					+ dataMapping.getUsername() + ", Password=" + dataMapping.getPassword();
-			if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_db2)) {
-				str += ",validationQuery=" + validationQuery_db2 + ", driverClassName=" + driver_db2 + ", url="
-						+ dataMapping.getUrl();
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_oracle)) {
-				String url = dataMapping.getUrl();
-				str += ",validationQuery=" + validationQuery_oracle + ", driverClassName=" + driver_oracle + ", url="
-						+ url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_mysql)) {
-				String url = dataMapping.getUrl();
-				// url += "?autoReconnect=true";
-				str += ",validationQuery=" + validationQuery_mysql + ", driverClassName=" + driver_mysql + ", url="
-						+ url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_postgresql)) {
-				String url = dataMapping.getUrl();
-				str += ",validationQuery=" + validationQuery_postgresql + ", driverClassName=" + driver_postgresql
-						+ ", url=" + url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_informix)) {
-				String url = dataMapping.getUrl();
-				str += ",validationQuery=" + validationQuery_informix + ", driverClassName=" + driver_informix
-						+ ", url=" + url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_gbase)) {
-				String url = dataMapping.getUrl();
-				str += ",validationQuery=" + validationQuery_gbase + ", driverClassName=" + driver_gbase + ", url="
-						+ url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_h2)) {
-				String url = dataMapping.getUrl();
-				str += ",validationQuery=" + validationQuery_h2 + ", driverClassName=" + driver_h2 + ", url=" + url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_dm)) {
-				String url = dataMapping.getUrl();
-				str += ",validationQuery=" + validationQuery_oracle + ", driverClassName=" + driver_dm + ", url=" + url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_sqlserver)) {
-				String url = dataMapping.getUrl();
-				str += ",validationQuery=" + validationQuery_sqlserver + ", driverClassName=" + driver_sqlserver
-						+ ", url=" + url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_kingbase)) {
-				String url = dataMapping.getUrl();
-				str += ",validationQuery=" + validationQuery_kingbase + ", driverClassName=" + driver_kingbase
-						+ ", url=" + url;
-			}
-			return str;
-		} catch (Exception e) {
-			throw new Exception("can not create connection properites", e);
-		}
-	}
+//	/* 使用DBCP2连接池时产生的属性 */
+//	protected static String getConnectionPropertiesDBCP2(DataMapping dataMapping) throws Exception {
+//		try {
+//			String str = "maxTotal=4, maxIdle=2, minIdle=0, maxWaitMillis=30000, timeBetweenEvictionRunsMillis=300000, minEvictableIdleTimeMillis=300000, maxConnLifetimeMillis=1200000, Username="
+//					+ dataMapping.getUsername() + ", Password=" + dataMapping.getPassword();
+//			if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_db2)) {
+//				str += ",validationQuery=" + validationQuery_db2 + ", driverClassName=" + driver_db2 + ", url="
+//						+ dataMapping.getUrl();
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_oracle)) {
+//				String url = dataMapping.getUrl();
+//				str += ",validationQuery=" + validationQuery_oracle + ", driverClassName=" + driver_oracle + ", url="
+//						+ url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_mysql)) {
+//				String url = dataMapping.getUrl();
+//				// url += "?autoReconnect=true";
+//				str += ",validationQuery=" + validationQuery_mysql + ", driverClassName=" + driver_mysql + ", url="
+//						+ url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_postgresql)) {
+//				String url = dataMapping.getUrl();
+//				str += ",validationQuery=" + validationQuery_postgresql + ", driverClassName=" + driver_postgresql
+//						+ ", url=" + url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_informix)) {
+//				String url = dataMapping.getUrl();
+//				str += ",validationQuery=" + validationQuery_informix + ", driverClassName=" + driver_informix
+//						+ ", url=" + url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_gbase)) {
+//				String url = dataMapping.getUrl();
+//				str += ",validationQuery=" + validationQuery_gbase + ", driverClassName=" + driver_gbase + ", url="
+//						+ url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_h2)) {
+//				String url = dataMapping.getUrl();
+//				str += ",validationQuery=" + validationQuery_h2 + ", driverClassName=" + driver_h2 + ", url=" + url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_dm)) {
+//				String url = dataMapping.getUrl();
+//				str += ",validationQuery=" + validationQuery_oracle + ", driverClassName=" + driver_dm + ", url=" + url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_sqlserver)) {
+//				String url = dataMapping.getUrl();
+//				str += ",validationQuery=" + validationQuery_sqlserver + ", driverClassName=" + driver_sqlserver
+//						+ ", url=" + url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_kingbase)) {
+//				String url = dataMapping.getUrl();
+//				str += ",validationQuery=" + validationQuery_kingbase + ", driverClassName=" + driver_kingbase
+//						+ ", url=" + url;
+//			}
+//			return str;
+//		} catch (Exception e) {
+//			throw new Exception("can not create connection properites", e);
+//		}
+//	}
 
-	/* 使用Druid连接池时产生的属性 */
-	protected static String getConnectionPropertiesDruid(DataMapping dataMapping) throws Exception {
-		try {
-			String str = "filters=stat, poolPreparedStatements=true, maxActive=4, minIdle=0, testOnBorrow=true, Username="
-					+ dataMapping.getUsername() + ", Password=" + dataMapping.getPassword();
-			if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_db2)) {
-				str += ", validationQuery=" + validationQuery_db2 + ", driverClassName=" + driver_db2 + ", url="
-						+ dataMapping.getUrl();
-			}
-			if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_oracle)) {
-				str += ", validationQuery=" + validationQuery_oracle + ", driverClassName=" + driver_oracle + ", url="
-						+ dataMapping.getUrl();
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_mysql)) {
-				String url = dataMapping.getUrl();
-				// url += "?autoReconnect=true";
-				str += ", validationQuery=" + validationQuery_mysql + ", driverClassName=" + driver_mysql + ", url="
-						+ url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_postgresql)) {
-				String url = dataMapping.getUrl();
-				str += ", validationQuery=" + validationQuery_postgresql + ", driverClassName=" + driver_postgresql
-						+ ", url=" + url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_informix)) {
-				String url = dataMapping.getUrl();
-				str += ", validationQuery=" + validationQuery_informix + ", driverClassName=" + driver_informix
-						+ ", url=" + url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_gbase)) {
-				String url = dataMapping.getUrl();
-				str += ", validationQuery=" + validationQuery_gbase + ", driverClassName=" + driver_gbase + ", url="
-						+ url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_h2)) {
-				String url = dataMapping.getUrl();
-				str += ", validationQuery=" + validationQuery_h2 + ", driverClassName=" + driver_h2 + ", url=" + url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_dm)) {
-				String url = dataMapping.getUrl();
-				str += ", validationQuery=" + validationQuery_dm + ", driverClassName=" + driver_dm + ", url=" + url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_sqlserver)) {
-				String url = dataMapping.getUrl();
-				str += ", validationQuery=" + validationQuery_sqlserver + ", driverClassName=" + driver_sqlserver
-						+ ", url=" + url;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_kingbase)) {
-				String url = dataMapping.getUrl();
-				str += ", validationQuery=" + validationQuery_kingbase + ", driverClassName=" + driver_kingbase
-						+ ", url=" + url;
-			}
-			return str;
-		} catch (Exception e) {
-			throw new Exception("can not create connection properites", e);
+//	/* 使用Druid连接池时产生的属性 */
+//	protected static String getConnectionPropertiesDruid(DataMapping dataMapping) throws Exception {
+//		try {
+//			String str = "filters=stat, poolPreparedStatements=true, maxActive=4, minIdle=0, testOnBorrow=true, Username="
+//					+ dataMapping.getUsername() + ", Password=" + dataMapping.getPassword();
+//			if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_db2)) {
+//				str += ", validationQuery=" + validationQuery_db2 + ", driverClassName=" + driver_db2 + ", url="
+//						+ dataMapping.getUrl();
+//			}
+//			if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_oracle)) {
+//				str += ", validationQuery=" + validationQuery_oracle + ", driverClassName=" + driver_oracle + ", url="
+//						+ dataMapping.getUrl();
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_mysql)) {
+//				String url = dataMapping.getUrl();
+//				// url += "?autoReconnect=true";
+//				str += ", validationQuery=" + validationQuery_mysql + ", driverClassName=" + driver_mysql + ", url="
+//						+ url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_postgresql)) {
+//				String url = dataMapping.getUrl();
+//				str += ", validationQuery=" + validationQuery_postgresql + ", driverClassName=" + driver_postgresql
+//						+ ", url=" + url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_informix)) {
+//				String url = dataMapping.getUrl();
+//				str += ", validationQuery=" + validationQuery_informix + ", driverClassName=" + driver_informix
+//						+ ", url=" + url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_gbase)) {
+//				String url = dataMapping.getUrl();
+//				str += ", validationQuery=" + validationQuery_gbase + ", driverClassName=" + driver_gbase + ", url="
+//						+ url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_h2)) {
+//				String url = dataMapping.getUrl();
+//				str += ", validationQuery=" + validationQuery_h2 + ", driverClassName=" + driver_h2 + ", url=" + url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_dm)) {
+//				String url = dataMapping.getUrl();
+//				str += ", validationQuery=" + validationQuery_dm + ", driverClassName=" + driver_dm + ", url=" + url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_sqlserver)) {
+//				String url = dataMapping.getUrl();
+//				str += ", validationQuery=" + validationQuery_sqlserver + ", driverClassName=" + driver_sqlserver
+//						+ ", url=" + url;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_kingbase)) {
+//				String url = dataMapping.getUrl();
+//				str += ", validationQuery=" + validationQuery_kingbase + ", driverClassName=" + driver_kingbase
+//						+ ", url=" + url;
+//			}
+//			return str;
+//		} catch (Exception e) {
+//			throw new Exception("can not create connection properites", e);
+//		}
+//	}
+
+//	/* 获取驱动名称 */
+//	public static String getConnectionDriverName(DataMapping dataMapping) throws Exception {
+//		try {
+//			if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_db2)) {
+//				return driver_db2;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_oracle)) {
+//				return driver_oracle;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_mysql)) {
+//				return driver_mysql;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_postgresql)) {
+//				return driver_postgresql;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_informix)) {
+//				return driver_informix;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_gbase)) {
+//				return driver_gbase;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_h2)) {
+//				return driver_h2;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_dm)) {
+//				return driver_dm;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_sqlserver)) {
+//				return driver_sqlserver;
+//			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_kingbase)) {
+//				return driver_kingbase;
+//			}
+//			throw new Exception("database jdbc driver miss match:" + dataMapping.getUrl());
+//		} catch (Exception e) {
+//			throw new Exception("can not get driverClassName property", e);
+//		}
+//	}
+
+//	/** 获取日志属性 */
+//	protected static String getLog(DataMapping dataMapping) throws Exception {
+//		try {
+//			return "Tool=" + dataMapping.getToolLevel() + ", Enhance=" + dataMapping.getEnhanceLevel() + ", METADATA="
+//					+ dataMapping.getMetaDataLevel() + ", RUNTIME=" + dataMapping.getRuntimeLevel() + ", Query="
+//					+ dataMapping.getQueryLevel() + ", DataCache=" + dataMapping.getDataCacheLevel() + ", JDBC="
+//					+ dataMapping.getJdbcLevel() + ", SQL=" + dataMapping.getSqlLevel();
+//		} catch (Exception e) {
+//			throw new Exception("can not get log property.", e);
+//		}
+//	}
+//
+//	public static String determineDBDictionary(DataMapping dataMapping) throws Exception {
+//		try {
+//			if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:db2:")) {
+//				return dictionary_db2;
+//			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:oracle:")) {
+//				return dictionary_oracle;
+//			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:mysql:")) {
+//				return dictionary_mysql;
+//			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:postgresql:")) {
+//				return dictionary_postgresql;
+//			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:informix-sqli:")) {
+//				return dictionary_informix;
+//			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:gbasedbt-sqli")) {
+//				return dictionary_gbase;
+//			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:h2:tcp:")) {
+//				return dictionary_h2;
+//			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:dm:")) {
+//				return dictionary_dm;
+//			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:sqlserver:")) {
+//				return dictionary_sqlserver;
+//			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:kingbase:")) {
+//				return dictionary_kingbase;
+//			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:kingbase8:")) {
+//				return dictionary_kingbase8;
+//			}
+//			throw new Exception("database jdbc driver miss match:" + dataMapping.getUrl());
+//		} catch (Exception e) {
+//			throw new Exception("can not get driverClassName property", e);
+//		}
+//	}
+
+	public static String driverClassNameOfUrl(String url) throws Exception {
+		if (StringUtils.containsIgnoreCase(url, "jdbc:db2:")) {
+			return driver_db2;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:oracle:")) {
+			return driver_oracle;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:mysql:")) {
+			return driver_mysql;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:postgresql:")) {
+			return driver_postgresql;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:informix-sqli:")) {
+			return driver_informix;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:gbasedbt-sqli")) {
+			return driver_gbase;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:h2:tcp:")) {
+			return driver_h2;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:dm:")) {
+			return driver_dm;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:sqlserver:")) {
+			return driver_sqlserver;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:kingbase:")) {
+			return driver_kingbase;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:kingbase8:")) {
+			return driver_kingbase8;
 		}
+		throw new Exception("can not get driverClassName of url: " + url + ".");
 	}
 
-	/* 获取驱动名称 */
-	public static String getConnectionDriverName(DataMapping dataMapping) throws Exception {
-		try {
-			if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_db2)) {
-				return driver_db2;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_oracle)) {
-				return driver_oracle;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_mysql)) {
-				return driver_mysql;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_postgresql)) {
-				return driver_postgresql;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_informix)) {
-				return driver_informix;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_gbase)) {
-				return driver_gbase;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_h2)) {
-				return driver_h2;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_dm)) {
-				return driver_dm;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_sqlserver)) {
-				return driver_sqlserver;
-			} else if (StringUtils.equals(determineDBDictionary(dataMapping), dictionary_kingbase)) {
-				return driver_kingbase;
-			}
-			throw new Exception("database jdbc driver miss match:" + dataMapping.getUrl());
-		} catch (Exception e) {
-			throw new Exception("can not get driverClassName property", e);
+	public static String dictionaryOfUrl(String url) throws Exception {
+		if (StringUtils.containsIgnoreCase(url, "jdbc:db2:")) {
+			return dictionary_db2;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:oracle:")) {
+			return dictionary_oracle;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:mysql:")) {
+			return dictionary_mysql;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:postgresql:")) {
+			return dictionary_postgresql;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:informix-sqli:")) {
+			return dictionary_informix;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:gbasedbt-sqli")) {
+			return dictionary_gbase;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:h2:tcp:")) {
+			return dictionary_h2;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:dm:")) {
+			return dictionary_dm;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:sqlserver:")) {
+			return dictionary_sqlserver;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:kingbase:")) {
+			return dictionary_kingbase;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:kingbase8:")) {
+			return dictionary_kingbase8;
 		}
+		throw new Exception("can not get dictionary of url: " + url + ".");
 	}
 
-	/** 获取日志属性 */
-	protected static String getLog(DataMapping dataMapping) throws Exception {
-		try {
-			return "Tool=" + dataMapping.getToolLevel() + ", Enhance=" + dataMapping.getEnhanceLevel() + ", METADATA="
-					+ dataMapping.getMetaDataLevel() + ", RUNTIME=" + dataMapping.getRuntimeLevel() + ", Query="
-					+ dataMapping.getQueryLevel() + ", DataCache=" + dataMapping.getDataCacheLevel() + ", JDBC="
-					+ dataMapping.getJdbcLevel() + ", SQL=" + dataMapping.getSqlLevel();
-		} catch (Exception e) {
-			throw new Exception("can not get log property.", e);
+	public static boolean hasSchemaOfUrl(String url) throws Exception {
+		if (StringUtils.containsIgnoreCase(url, "jdbc:db2:")) {
+			return true;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:oracle:")) {
+			return false;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:mysql:")) {
+			return false;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:postgresql:")) {
+			return false;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:informix-sqli:")) {
+			return true;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:gbasedbt-sqli")) {
+			return true;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:h2:tcp:")) {
+			return false;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:dm:")) {
+			return true;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:sqlserver:")) {
+			return false;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:kingbase:")) {
+			return true;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:kingbase8:")) {
+			return true;
 		}
+		throw new Exception("can not get schema of url: " + url + ".");
 	}
 
-	public static String determineDBDictionary(DataMapping dataMapping) throws Exception {
-		try {
-			if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:db2:")) {
-				return dictionary_db2;
-			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:oracle:")) {
-				return dictionary_oracle;
-			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:mysql:")) {
-				return dictionary_mysql;
-			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:postgresql:")) {
-				return dictionary_postgresql;
-			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:informix-sqli:")) {
-				return dictionary_informix;
-			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:gbasedbt-sqli")) {
-				return dictionary_gbase;
-			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:h2:tcp:")) {
-				return dictionary_h2;
-			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:dm:")) {
-				return dictionary_dm;
-			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:sqlserver:")) {
-				return dictionary_sqlserver;
-			} else if (StringUtils.containsIgnoreCase(dataMapping.getUrl(), "jdbc:kingbase:")) {
-				return dictionary_kingbase;
-			}
-			throw new Exception("database jdbc driver miss match:" + dataMapping.getUrl());
-		} catch (Exception e) {
-			throw new Exception("can not get driverClassName property", e);
+	public static String validationQueryOfUrl(String url) throws Exception {
+		if (StringUtils.containsIgnoreCase(url, "jdbc:db2:")) {
+			return validationQuery_db2;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:oracle:")) {
+			return validationQuery_oracle;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:mysql:")) {
+			return validationQuery_mysql;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:postgresql:")) {
+			return validationQuery_postgresql;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:informix-sqli:")) {
+			return validationQuery_informix;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:gbasedbt-sqli")) {
+			return validationQuery_gbase;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:h2:tcp:")) {
+			return validationQuery_h2;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:dm:")) {
+			return validationQuery_dm;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:sqlserver:")) {
+			return validationQuery_sqlserver;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:kingbase:")) {
+			return validationQuery_kingbase;
+		} else if (StringUtils.containsIgnoreCase(url, "jdbc:kingbase8:")) {
+			return validationQuery_kingbase8;
 		}
+		throw new Exception("can not get schema of url: " + url + ".");
 	}
+
 }

+ 1 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/entity/StorageType.java

@@ -1,6 +1,6 @@
 package com.x.base.core.entity;
 
 public enum StorageType {
-	file, processPlatform, mind, meeting, calendar, okr, cms, bbs, report, strategyDeploy;
+	file, processPlatform, mind, meeting, calendar, okr, cms, bbs, report, strategyDeploy, teamwork;
 	public static final int length = JpaObject.length_32B;
 }

+ 1 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/entity/tools/JpaObjectTools.java

@@ -18,6 +18,7 @@ import com.x.base.core.entity.JpaObject;
 import com.x.base.core.project.tools.StringTools;
 
 public class JpaObjectTools {
+	
 	public static boolean isList(Path<?> path) throws Exception {
 		return List.class.isAssignableFrom(path.getJavaType());
 	}

+ 2 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/entity/tools/PersistenceXmlWriter.java

@@ -80,8 +80,8 @@ public class PersistenceXmlWriter {
 			for (ClassInfo info : classInfos) {
 				if (StringUtils.equals(info.getSimpleName(), project)) {
 					Class<?> cls = Class.forName(info.getName());
-					Deployable deployable = (Deployable) cls.newInstance();
-					for (String str: deployable.dependency().containerEntities) {
+					Module moudle = cls.getAnnotation(Module.class);
+					for (String str : moudle.containerEntities()) {
 						if (StringUtils.isNotEmpty(str)) {
 							list.add(Class.forName(str));
 						}

+ 0 - 3
o2server/x_base_core_project/src/main/java/com/x/base/core/openjpa/jdbc/sql/DMDictionary.java

@@ -4,14 +4,11 @@ import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.ResultSet;
 import java.sql.SQLException;
-import java.sql.Timestamp;
 import java.util.Arrays;
 import java.util.Date;
-import java.util.Set;
 
 import org.apache.openjpa.jdbc.sql.DBDictionary;
 import org.apache.openjpa.jdbc.sql.SQLBuffer;
-import org.apache.openjpa.lib.log.Log;
 import org.apache.openjpa.lib.util.Localizer;
 
 public class DMDictionary extends DBDictionary {

+ 33 - 10
o2server/x_base_core_project/src/main/java/com/x/base/core/openjpa/jdbc/sql/KingbaseDictionary3.java → o2server/x_base_core_project/src/main/java/com/x/base/core/openjpa/jdbc/sql/Kingbase8Dictionary.java

@@ -13,18 +13,20 @@ import org.apache.openjpa.jdbc.kernel.exps.FilterValue;
 import org.apache.openjpa.jdbc.schema.Column;
 import org.apache.openjpa.jdbc.schema.Sequence;
 import org.apache.openjpa.jdbc.schema.Table;
+import org.apache.openjpa.jdbc.sql.BooleanRepresentation;
+import org.apache.openjpa.jdbc.sql.BooleanRepresentationFactory;
 import org.apache.openjpa.jdbc.sql.DBDictionary;
 import org.apache.openjpa.jdbc.sql.SQLBuffer;
 import org.apache.openjpa.lib.jdbc.DelegatingConnection;
 import org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement;
 
-public class KingbaseDictionary3 extends DBDictionary {
+public class Kingbase8Dictionary extends DBDictionary {
 	public String allSequencesSQL = "select SYS_NAMESPACE.NSPNAME as SEQUENCE_SCHEMA, SYS_CLASS.RELNAME as SEQUENCE_NAME from SYS_NAMESPACE,SYS_CLASS where SYS_NAMESPACE.OID=SYS_CLASS.RELNAMESPACE and SYS_CLASS.RELKIND='S'";
 	public String namedSequencesFromAllSchemasSQL = "select SYS_NAMESPACE.NSPNAME as SEQUENCE_SCHEMA, SYS_CLASS.RELNAME as SEQUENCE_NAME from SYS_NAMESPACE,SYS_CLASS where  SYS_NAMESPACE.OID=SYS_CLASS.RELNAMESPACE and SYS_CLASS.RELKIND='S' AND SYS_CLASS.RELNAME = ?";
 	public String allSequencesFromOneSchemaSQL = "select SYS_NAMESPACE.NSPNAME as SEQUENCE_SCHEMA, SYS_CLASS.RELNAME as SEQUENCE_NAME from SYS_NAMESPACE,SYS_CLASS where SYS_NAMESPACE.OID=SYS_CLASS.RELNAMESPACE and SYS_CLASS.RELKIND='S' AND SYS_NAMESPACE.NSPNAME = ?";
 	public String namedSequenceFromOneSchemaSQL = "select SYS_NAMESPACE.NSPNAME as SEQUENCE_SCHEMA, SYS_CLASS.RELNAME as SEQUENCE_NAME from SYS_NAMESPACE,SYS_CLASS where  SYS_NAMESPACE.OID=SYS_CLASS.RELNAMESPACE and SYS_CLASS.RELKIND='S' AND SYS_CLASS.RELNAME = ? AND SYS_NAMESPACE.NSPNAME = ?";
 
-	public KingbaseDictionary3() {
+	public Kingbase8Dictionary() {
 		this.platform = "KingbaseES";
 		this.validationSQL = "SELECT NOW()";
 		this.supportsSelectStartIndex = true;
@@ -45,6 +47,8 @@ public class KingbaseDictionary3 extends DBDictionary {
 		this.longVarcharTypeName = "TEXT";
 		this.charTypeName = "CHAR{0}";
 		this.varcharTypeName = "VARCHAR{0}";
+		/* add by Ray */
+		this.bitTypeName = "BOOL";
 		this.systemSchemaSet.addAll(Arrays.asList(new String[] { "INFORMATION_SCHEMA", "SYS_CATALOG" }));
 		this.fixedSizeTypeNameSet.addAll(Arrays.asList(new String[] { "TEXT", "XML", "INTERVAL YEAR", "INTERVAL MONTH",
 				"INTERVAL DAY", "INTERVAL HOUR", "INTERVAL MINUTE", "INTERVAL SECOND", " INTERVAL YEAR TO MONTH",
@@ -109,11 +113,30 @@ public class KingbaseDictionary3 extends DBDictionary {
 		}
 	}
 
-	public void setBoolean(PreparedStatement paramPreparedStatement, int paramInt, boolean paramBoolean,
-			Column paramColumn) throws SQLException {
-		paramPreparedStatement.setBoolean(paramInt, paramBoolean);
+	/* add by Ray */
+	protected BooleanRepresentation booleanRepresentation = BooleanRepresentationFactory.BOOLEAN;
+
+	/**
+	 * Convert the specified column of the SQL ResultSet to the proper java type.
+	 */
+	public boolean getBoolean(ResultSet rs, int column) throws SQLException {
+		return booleanRepresentation.getBoolean(rs, column);
+	}
+
+	/**
+	 * Set the given value as a parameter to the statement.
+	 */
+	public void setBoolean(PreparedStatement stmnt, int idx, boolean val, Column col) throws SQLException {
+		booleanRepresentation.setBoolean(stmnt, idx, val);
 	}
 
+//	public void setBoolean(PreparedStatement paramPreparedStatement, int paramInt, boolean paramBoolean,
+//			Column paramColumn) throws SQLException {
+//		paramPreparedStatement.setBoolean(paramInt, paramBoolean);
+//	}
+
+	/* add by Ray end */
+
 	protected void appendSelectRange(SQLBuffer paramSQLBuffer, long paramLong1, long paramLong2, boolean paramBoolean) {
 		if (paramLong2 != Long.MAX_VALUE) {
 			paramSQLBuffer.append(" LIMIT ").appendValue(paramLong2 - paramLong1);
@@ -188,7 +211,7 @@ public class KingbaseDictionary3 extends DBDictionary {
 
 	private static class KingbasePreparedStatement extends DelegatingPreparedStatement {
 		public KingbasePreparedStatement(PreparedStatement paramPreparedStatement, Connection paramConnection,
-				KingbaseDictionary3 paramKingbaseDictionary) {
+				Kingbase8Dictionary paramKingbaseDictionary) {
 			super(paramPreparedStatement, paramConnection);
 		}
 
@@ -206,21 +229,21 @@ public class KingbaseDictionary3 extends DBDictionary {
 	}
 
 	private static class KingbaseConnection extends DelegatingConnection {
-		private final KingbaseDictionary3 _dict;
+		private final Kingbase8Dictionary _dict;
 
-		public KingbaseConnection(Connection paramConnection, KingbaseDictionary3 paramKingbaseDictionary) {
+		public KingbaseConnection(Connection paramConnection, Kingbase8Dictionary paramKingbaseDictionary) {
 			super(paramConnection);
 			this._dict = paramKingbaseDictionary;
 		}
 
 		protected PreparedStatement prepareStatement(String paramString, boolean paramBoolean) throws SQLException {
-			return new KingbaseDictionary3.KingbasePreparedStatement(super.prepareStatement(paramString, false), this,
+			return new Kingbase8Dictionary.KingbasePreparedStatement(super.prepareStatement(paramString, false), this,
 					this._dict);
 		}
 
 		protected PreparedStatement prepareStatement(String paramString, int paramInt1, int paramInt2,
 				boolean paramBoolean) throws SQLException {
-			return new KingbaseDictionary3.KingbasePreparedStatement(
+			return new Kingbase8Dictionary.KingbasePreparedStatement(
 					super.prepareStatement(paramString, paramInt1, paramInt2, false), this, this._dict);
 		}
 	}

+ 64 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/openjpa/jdbc/sql/Kingbase8DictionaryBack.java

@@ -0,0 +1,64 @@
+package com.x.base.core.openjpa.jdbc.sql;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.apache.openjpa.jdbc.schema.Column;
+import org.apache.openjpa.jdbc.sql.BooleanRepresentation;
+import org.apache.openjpa.jdbc.sql.BooleanRepresentationFactory;
+import org.apache.openjpa.jdbc.sql.DBDictionary;
+import org.apache.openjpa.lib.util.Localizer;
+
+public class Kingbase8DictionaryBack extends DBDictionary {
+
+	public static final String VENDOR_DAMENG = "Kingbase8";
+	private static final Localizer _loc = Localizer.forPackage(DMDictionary.class);
+
+	public Kingbase8DictionaryBack() {
+		this.platform = "Kingbase8";
+		supportsDeferredConstraints = false;
+	}
+
+	public void connectedConfiguration(Connection conn) throws SQLException {
+		super.connectedConfiguration(conn);
+		boolean requiresWarnings = true;
+		DatabaseMetaData meta = conn.getMetaData();
+		String driverName = meta.getDriverName();
+		String url = meta.getURL();
+		if (this.driverVendor == null) {
+			if ((driverName != null) && (driverName.equalsIgnoreCase("com.kingbase8.Driver"))) {
+				this.driverVendor = "Kingbase8JdbcDriver";
+				if ((url != null) && (url.startsWith("jdbc:kingbase8://"))) {
+					requiresWarnings = false;
+				}
+			} else {
+				this.driverVendor = "other";
+			}
+		}
+		if (("Kingbase8JdbcDriver".equalsIgnoreCase(this.driverVendor)) && (requiresWarnings)) {
+			this.log.warn(_loc.get("kingbase8 Jdbc connection", url));
+		}
+	}
+
+	protected BooleanRepresentation booleanRepresentation = BooleanRepresentationFactory.BOOLEAN;
+
+	/**
+	 * Convert the specified column of the SQL ResultSet to the proper java type.
+	 */
+	public boolean getBoolean(ResultSet rs, int column) throws SQLException {
+		return booleanRepresentation.getBoolean(rs, column);
+	}
+
+	/**
+	 * Set the given value as a parameter to the statement.
+	 */
+	public void setBoolean(PreparedStatement stmnt, int idx, boolean val, Column col) throws SQLException {
+		booleanRepresentation.setBoolean(stmnt, idx, val);
+	}
+
+	public String booleanTypeName = "BOOL";
+
+}

+ 0 - 124
o2server/x_base_core_project/src/main/java/com/x/base/core/openjpa/jdbc/sql/KingbaseDictionary2.java

@@ -1,124 +0,0 @@
-package com.x.base.core.openjpa.jdbc.sql;
-
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.Set;
-
-import org.apache.openjpa.jdbc.sql.DBDictionary;
-import org.apache.openjpa.jdbc.sql.SQLBuffer;
-import org.apache.openjpa.lib.log.Log;
-import org.apache.openjpa.lib.util.Localizer;
-
-public class KingbaseDictionary2 extends DBDictionary {
-	public static final String VENDOR_DAMENG = "kingbase";
-	private static final Localizer _loc = Localizer.forPackage(KingbaseDictionary2.class);
-	private String schemaCase = "preserve";
-	public boolean uniqueIdentifierAsVarbinary = true;
-
-	public KingbaseDictionary2() {
-		this.platform = "kingbase";
-		this.validationSQL = "SELECT GETDATE()";
-		this.supportsAutoAssign = true;
-		this.autoAssignClause = "IDENTITY";
-		this.lastGeneratedKeyQuery = "SELECT @@IDENTITY";
-		this.nextSequenceQuery = "SELECT {0}.NEXTVAL";
-		this.integerTypeName = "INT";
-		this.substringFunctionName = "SUBSTR";
-
-		this.reservedWordSet.addAll(Arrays.asList(new String[] { "ABORT", "ABSOLUTE", "ABSTRACT", "ACROSS", "ACTION",
-				"ADD", "AUDIT", "ADMIN", "AFTER", "ALL", "ALLOW_DATETIME", "ALLOW_IP", "ALTER", "ANALYZE", "AND", "ANY",
-				"ARCHIVEDIR", "ARCHIVELOG", "ARCHIVESTYLE", "ARRAY", "ARRAYLEN", "AS", "ASC", "ASSIGN", "AT", "ATTACH",
-				"AUTHORIZATION", "AUTO", "AUTOEXTEND", "AVG", "BACKUP", "BACKUPDIR", "BACKUPINFO", "BAKFILE", "BASE",
-				"BEFORE", "BEGIN", "BETWEEN", "BIGDATEDIFF", "BIGINT", "BINARY", "BIT", "BITMAP", "BLOB", "BLOCK",
-				"BOOL", "BOOLEAN", "BOTH", "BOUNDARY", "BRANCH", "BREAK", "BSTRING", "BTREE", "BY", "BYTE", "CACHE",
-				"CALL", "CASCADE", "CASCADED", "CASE", "CAST", "CATALOG", "CATCH", "CHAIN", "CHAR", "CHARACTER",
-				"CHECK", "CIPHER", "CLASS", "CLOB", "CLOSE", "CLUSTER", "CLUSTERBTR", "COLUMN", "COMMENT", "COMMIT",
-				"COMMITTED", "COMMITWORK", "COMPILE", "COMPRESS", "COMPRESSED", "CONNECT", "CONNECT_BY_IS_CYCLE",
-				"CONNECT_BY_IS_LEAF", "CONNECT_BY_ROOT", "CONNECT_IDLE_TIME", "CONST", "CONSTANT", "CONSER_OP",
-				"CONSTRAINT", "CONTAINS", "CONTEXT", "CONTINUE", "CONVERT", "COUNT", "CPU_REF_CALL", "CPU_REF_SESSION",
-				"CREATE", "CROSS", "CRYPTO", "CTLFILE", "CUBE", "CURRENT", "CURSOR", "CYCLE", "DANGLING", "DATABASE",
-				"DATAFILE", "DATE", "DATEADD", "DATEDIFF", "DATEPART", "DATETIME", "DAY", "DBFILE", "DEBUG", "DEC",
-				"DECIMAL", "DECLARE", "DECODE", "DEFAULT", "DEFERRABLE", "DELETE", "DELETING", "DEREF", "DESC",
-				"DETACH", "DISABLE", "DISCONNECT", "DISKSPACE", "DISTINCT", "DISTRIBUTED", "DO", "DOUBLE", "DOWN",
-				"DROP", "EACH", "ELSE", "ELSEIF", "ENABLE", "ENCRYPT", "ENCRYPTION", "END", "EQU", "ERROR", "ESCAPE",
-				"EVENTINFO", "EXCEPT", "EXCEPTION", "EXCHANGE", "EXCLUSIVE", "EXECUTE", "EXISTS", "EXIT", "EXPLAIN",
-				"EXTERN", "EXTERNAL", "EXTERNALLY", "EXTRACT", "FAILED_LOGIN_ATTEMPS", "FALSE", "FETCH", "FILEGROUP",
-				"FILLFACTOR", "FINALLY", "FIRST", "FLOAT", "FOR", "FORCE", "FOREIGN", "FREQUENCE", "FROM", "FULL",
-				"FUNCTION", "FOLLOWING", "GET", "GLOBAL", "GOTO", "GRANT", "GROUP GROUPING", "HASH", "HAVING",
-				"HEXTORAW", "HOUR", "IDENTIFIED", "IDENTITY", "IDENTITY_INSERT", "IF", "IMAGE", "IMMEDIATE", "IN",
-				"INCREASE", "INCREMENT", "INDEX", "INITIAL", "INITIALLY", "INNER", "INNERID", "INSERT", "INSERTING",
-				"INSTEAD", "INT", "INTEGER", "INTENT", "INTERNAL", "INTERSECT", "INTERVAL", "INTO", "IS", "ISOLATION",
-				"JAVA", "JOIN", "KEY", "LABEL", "LAST", "LEAD", "LEFT", "LESS", "LEVEL", "LEXER", "LIKE", "LIMIT",
-				"LINK", "LIST", "LOB", "LOCAL", "LOCK", "LOG", "LOGFILE", "LOGIN", "LOGOUT", "LONG", "LONGVARBINARY",
-				"LONGVARCHAR", "LOOP", "LP_OP", "LT_BINTEGER", "LT_BIGINTEGER", "LT_BITSTRING", "LT_DECIMAL",
-				"LT_GLOBAL_VAR", "LT_IDENTIFIER", "LT_INTEGER", "LP_REAL", "LT_STRING", "MANUAL", "MAP", "MATCH",
-				"MATCHED", "MAX", "MAXSIZE", "MAXVALUE", "MEMBER", "MEN_SPACE", "MERGE", "MIN", "MINEXTENTS", "MINUS",
-				"MINUTE", "MINVALUE", "MODE", "MODIFY", "MONEY", "MONTH", "MOUNT", "NATURAL", "NEW", "NEXT", "NO",
-				"NOARCHIVELOG", "NOAUDIT", "NOBRANCH", "NOCACHE", "NOCYCLE", "NOMAXVALUE", "NOMINVALUE", "NONE",
-				"NOORDER", "NORMAL", "NOSALT", "NOT", "NOT_ALLOW_DATETIME", "NOT_ALLOW_IP", "NOWAIT", "NULL", "",
-				"NUMBER", "NUMERIC", "OBJECT", "OF", "OFF", "OFFLINE", "OFFSET", "OLD", "ON", "ONCE", "ONLINE", "ONLY",
-				"OP_SHIFT_LERT", "OP_SHIFT_RIGHT", " OPEN", "OPTION", "OR", "ORDER", "OUT", "OUTER", "OVER ",
-				"OVERLAPS", "OVERRIDE", "PACKAGE", "PACKAGE_BODY", "PAGE", "PARTIAL", "PARTITION", "PARTITIONS",
-				"PASSWORD_GRACE_TIME", "PASSWORD_LIFE_TIME", "PASSWORD_LOCK_TIME", "PASSWORD_POLICY",
-				"PASSWORD_REUSE_MAX", "PASSWORD_REUSE_TIME", "PENDANT", "PERCENT", "PRECEDING", "PRECISION", "PRESERVE",
-				"PRIMARY", "PRINT", "PRIOR", "PRIVATE", "PRIVILEGES", "PROCEDURE", "PROTECTED", "PT_FOUND", "PT_ISOPEN",
-				"PT_NOFOUND", "PT_ROWCOUNT", "PT_ROWTYPE", "PT_TYPE", "PUBLIC", "PUT", "RAISE", "RANGE", "RAWTOHEX",
-				"READ", "READ_PER_CALL", "READ_PER_SESSION", "READONLY", "REAL", "REBUILD", "RECORD", "REF",
-				"REFERENCES", "REFERENCING", "RELATED", "RELATIVE", "RENAME", "REPEAT", "REPEATABLE", "REPLACE",
-				"REPLICATE", "RESIZE", "RESTORE", "RESTRICT", "RETURN", "RETURNING", "REVERSE", "REVOKE", "RIGHT",
-				"ROLE", "ROLLBACK", "ROLLFILE", "ROLLUP", "ROOT", "ROW", "ROWCOUNT", "ROWID", "ROWNUM", "ROWS", "RULE",
-				"SALT", "SAVEPOINT", "SBYTE", "SCHEMA", "SCOPE", "SEALED", "SECTION", "SECOND", "SELECT", "SELSTAR",
-				"SEQUENCE", "SERERR", "SERIALIZABLE", "SERVER", "SESSION_PER_USER", "SET", "SETS", "SHARE", "SHORT",
-				"SHUTDOWN", "SIBLINGS", "SIZE", "SIZEOF", "SMALLINT", "SNAPSHOT", "SOME", "SOUND", "SPLIT", "SQL",
-				"STANDBY", "START_WITH", "STARTUP", "STATEMENT", "STATIC", "STAT", "STDDEV", "STORAGE", "STORE",
-				"STRING", "STRUCT", "STYLE", "SUBSTRING", "SUCCESSFUL", "SUM", "SUSPEND", "SWITCH", "SYNC", "SYNONYM",
-				"SYS_CONNECT_BY_PATH", "TABLE", "TABLESPACE", "TEMPORARY", "TEXT", "THAN", "THEN", "THROW", "TIES",
-				"TIME", "TIMER", "TIMES", "TIMESTAMP", "TIMESTAMPADD", "TIMESTAMPDIFF", "TINYINT", "TO",
-				"TOO_MANY_ROWS", "TOP", "TRAIL", "TRANSACTION", "TRANSACTIONAL", "TRIGGER", "TRIGGERS", "TRIM", "TRUE",
-				"TRUNCATE", "TRUNCSIZE", "TRY", "TYPE", "TYPE_BODY", "TYPEOF", "UINT", "ULONG", "UNBOUNDED",
-				"UNCOMMITTED", "UNDER", "UNION", "UNIQUE", "UNLIMITED", "UNSAFE", "UNTIL", "UP", "UPDATE", "UPDATING",
-				"USER", "USHORT", "USING", "VALUE", "VALUES", "VARBINARY", "VARCHAR", "VARCHAR2", "VARIANCE", "VARYING",
-				"VERIFY", "VERTICAL", "VIEW", "VIRTUAL", "VOID", "VOLATILE", "VSIZE", "WEEK", "WHEN", "WHENEVER",
-				"WHERE", "WHILE", "WITH", "WORK", "WRAPPED", "WRITE", "YEAR", "ZONE" }));
-		this.systemSchemaSet.addAll(Arrays.asList(new String[] { "CTISYS", "SYS", "SYSDBA", "SYSSSO", "SYSAUDITOR" }));
-		this.fixedSizeTypeNameSet
-				.addAll(Arrays.asList(new String[] { "IMAGE", "TEXT", "DATETIME", "LONGVARBINARY", "LONGVARCHAR" }));
-
-		this.supportsDeferredConstraints = true;
-		this.supportsSelectEndIndex = true;
-	}
-
-	protected void appendSelectRange(SQLBuffer buf, long start, long end, boolean subselect) {
-		buf.append(" LIMIT ").appendValue(start).append(", ").appendValue(end - start);
-	}
-
-	public void connectedConfiguration(Connection conn) throws SQLException {
-		super.connectedConfiguration(conn);
-		boolean requiresWarnings = true;
-		DatabaseMetaData meta = conn.getMetaData();
-		String driverName = meta.getDriverName();
-		String url = meta.getURL();
-		if (this.driverVendor == null) {
-			if ((driverName != null) && (driverName.equalsIgnoreCase("com.kingbase.Driver"))) {
-				this.driverVendor = "KingbaseJdbcDriver";
-				if ((url != null) && (url.startsWith("jdbc:kingbase://"))) {
-					requiresWarnings = false;
-				}
-			} else {
-				this.driverVendor = "other";
-			}
-		}
-		if (("KingbaseJdbcDriver".equalsIgnoreCase(this.driverVendor)) && (requiresWarnings)) {
-			this.log.warn(_loc.get("Kingbase Jdbc connection", url));
-		}
-	}
-
-	public Date getDate(ResultSet rs, int column) throws SQLException {
-		return rs.getDate(column);
-	}
-}

+ 12 - 5
o2server/x_base_core_project/src/main/java/com/x/base/core/project/AbstractContext.java

@@ -26,11 +26,18 @@ public abstract class AbstractContext {
 		return this.clazz;
 	}
 
-	/* 应用类对象 */
-	protected Deployable clazzInstance;
-
-	public Deployable clazzInstance() {
-		return this.clazzInstance;
+//	/* 应用类对象 */
+//	protected Deployable clazzInstance;
+
+	/* 模块指示类 */
+	protected Module module;
+	
+	public Module module() {
+		return this.module;
 	}
 
+//	public Deployable clazzInstance() {
+//		return this.clazzInstance;
+//	}
+
 }

+ 9 - 5
o2server/x_base_core_project/src/main/java/com/x/base/core/project/Application.java

@@ -1,6 +1,8 @@
 package com.x.base.core.project;
 
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -15,7 +17,7 @@ public class Application extends GsonPropertyObject {
 	private Integer port;
 	private String token;
 	private Boolean sslEnable;
-	private Dependency dependency;
+	private List<String> containerEntities = new ArrayList<>();
 
 	private String proxyHost;
 	private Integer proxyPort;
@@ -118,12 +120,14 @@ public class Application extends GsonPropertyObject {
 		this.contextPath = contextPath;
 	}
 
-	public Dependency getDependency() {
-		return dependency;
+ 
+
+	public List<String> getContainerEntities() {
+		return containerEntities;
 	}
 
-	public void setDependency(Dependency dependency) {
-		this.dependency = dependency;
+	public void setContainerEntities(List<String> containerEntities) {
+		this.containerEntities = containerEntities;
 	}
 
 }

+ 0 - 12
o2server/x_base_core_project/src/main/java/com/x/base/core/project/Applications.java

@@ -232,16 +232,4 @@ public class Applications extends ConcurrentHashMap<String, CopyOnWriteArrayList
 			}
 		}).collect(Collectors.joining("/"));
 	}
-
-	public List<String> listContainEntity(String name) {
-		List<String> os = new ArrayList<>();
-		this.entrySet().stream().forEach(o -> {
-			if (!o.getValue().isEmpty()) {
-				if (o.getValue().get(0).getDependency().containerEntities.contains(name)) {
-					os.add(o.getKey());
-				}
-			}
-		});
-		return os;
-	}
 }

+ 0 - 5
o2server/x_base_core_project/src/main/java/com/x/base/core/project/AssembleA.java

@@ -1,5 +0,0 @@
-package com.x.base.core.project;
-
-public abstract class AssembleA extends Deployable {
-
-}

+ 0 - 5
o2server/x_base_core_project/src/main/java/com/x/base/core/project/AssembleC.java

@@ -1,5 +0,0 @@
-package com.x.base.core.project;
-
-public abstract class AssembleC extends Deployable {
-	
-}

+ 0 - 5
o2server/x_base_core_project/src/main/java/com/x/base/core/project/AssembleM.java

@@ -1,5 +0,0 @@
-package com.x.base.core.project;
-
-public abstract class AssembleM extends Deployable {
-
-}

+ 3 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/Compilable.java

@@ -2,9 +2,10 @@ package com.x.base.core.project;
 
 public abstract class Compilable {
 
-	public static final String VERSION = "4.0.0";
+	protected String packageName = "";
 
-	public void compile(String projectPath, String name) throws Exception {
+	public String packageName() {
+		return packageName;
 	}
 
 }

+ 34 - 54
o2server/x_base_core_project/src/main/java/com/x/base/core/project/Context.java

@@ -8,6 +8,7 @@ import javax.servlet.ServletContext;
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletRequest;
 
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.openjpa.enhance.PCRegistry;
 import org.quartz.CronScheduleBuilder;
 import org.quartz.DateBuilder;
@@ -25,8 +26,8 @@ import org.quartz.impl.matchers.EverythingMatcher;
 
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
 import com.x.base.core.entity.JpaObject;
+import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.config.Config;
-import com.x.base.core.project.config.DataMappings;
 import com.x.base.core.project.config.StorageMappings;
 import com.x.base.core.project.connection.ActionResponse;
 import com.x.base.core.project.connection.CipherConnectionAction;
@@ -47,7 +48,7 @@ public class Context extends AbstractContext {
 
 	private static Logger logger = LoggerFactory.getLogger(Context.class);
 
-	/** 从servletContext中抽取context */
+	/* 从servletContext中抽取context */
 	public static Context fromServletContext(ServletContext servletContext) throws Exception {
 		Object o = servletContext.getAttribute(Context.class.getName());
 		if (null == o) {
@@ -57,7 +58,7 @@ public class Context extends AbstractContext {
 		}
 	}
 
-	/** 从servletRequest中抽取context */
+	/* 从servletRequest中抽取context */
 	public static Context fromServletRequest(ServletRequest servletRequest) throws Exception {
 		Object o = servletRequest.getServletContext().getAttribute(Context.class.getName());
 		if (null == o) {
@@ -109,11 +110,11 @@ public class Context extends AbstractContext {
 		return this.name;
 	}
 
-	/* Storage资源 */
-	private volatile StorageMappings storageMappings;
+//	/* Storage资源 */
+//	private volatile StorageMappings storageMappings;
 
-	public StorageMappings storageMappings() {
-		return this.storageMappings;
+	public StorageMappings storageMappings() throws Exception {
+		return Config.storageMappings();
 	}
 
 	/* 是否已经初始化完成 */
@@ -163,16 +164,16 @@ public class Context extends AbstractContext {
 		this.scheduler.start();
 	}
 
-	/** 可以自定义缓存清空消息处理器 */
-	public static Context concrete(ServletContextEvent servletContextEvent,
-			AbstractQueue<WrapClearCacheRequest> clearCacheRequestQueue) throws Exception {
-		Context context = concrete(servletContextEvent);
-		if (null != clearCacheRequestQueue) {
-			context.clearCacheRequestQueue = clearCacheRequestQueue;
-			context.startQueue(clearCacheRequestQueue);
-		}
-		return context;
-	}
+//	/** 可以自定义缓存清空消息处理器 */
+//	public static Context concrete(ServletContextEvent servletContextEvent,
+//			AbstractQueue<WrapClearCacheRequest> clearCacheRequestQueue) throws Exception {
+//		Context context = concrete(servletContextEvent);
+//		if (null != clearCacheRequestQueue) {
+//			context.clearCacheRequestQueue = clearCacheRequestQueue;
+//			context.startQueue(clearCacheRequestQueue);
+//		}
+//		return context;
+//	}
 
 	public static Context concrete(ServletContextEvent servletContextEvent) throws Exception {
 		/* 强制忽略ssl服务器认证 */
@@ -181,18 +182,18 @@ public class Context extends AbstractContext {
 		Context context = new Context();
 		context.contextPath = servletContext.getContextPath();
 		context.clazz = Class.forName(servletContext.getInitParameter(INITPARAMETER_PORJECT));
-		context.clazzInstance = (Deployable) context.clazz.newInstance();
+//		context.clazzInstance = (Deployable) context.clazz.newInstance();
+		context.module = context.clazz.getAnnotation(Module.class);
 		context.name = getName(context.clazz);
 		context.path = servletContext.getRealPath("");
 		context.servletContext = servletContext;
 		context.servletContextName = servletContext.getServletContextName();
 		context.weight = Config.currentNode().getApplication().weight(context.clazz);
 		context.sslEnable = Config.currentNode().getApplication().getSslEnable();
-		context.initDatasFromCenters();
-		context.initStoragesFromCenters();
+		context.initDatas();
 		context.scheduleLocal(ReportToCenter.class, 0, ReportToCenter.INTERVAL);
-		context.initialized = true;
 		servletContext.setAttribute(context.getClass().getName(), context);
+		context.initialized = true;
 		return context;
 	}
 
@@ -268,40 +269,19 @@ public class Context extends AbstractContext {
 		}
 	}
 
-	private void initDatasFromCenters() throws Exception {
-		if (ListTools.isNotEmpty(clazzInstance.dependency.containerEntities)) {
-			logger.print("{} loading datas, entity size:{}.", this.clazz.getName(),
-					clazzInstance.dependency.containerEntities.size());
-			DataMappings dataMappings = null;
-			do {
-				try {
-					ActionResponse rep = CipherConnectionAction.get(false,
-							Config.x_program_centerUrlRoot() + "datamappings");
-					dataMappings = rep.getData(DataMappings.class);
-				} catch (Exception e) {
-					e.printStackTrace();
-				}
-			} while (null == dataMappings);
-			EntityManagerContainerFactory.init(path, dataMappings, this.clazzInstance.dependency.containerEntities);
-		}
-	}
+//	private void initDatas() throws Exception {
+//		if (ListTools.isNotEmpty(clazzInstance.dependency.containerEntities)) {
+//			logger.print("{} loading datas, entity size:{}.", this.clazz.getName(),
+//					clazzInstance.dependency.containerEntities.size());
+//			EntityManagerContainerFactory.init(path, AnnotationUtils.this.clazzInstance.dependency.containerEntities);
+//		}
+//	}
 
-	private void initStoragesFromCenters() throws Exception {
-		if (ListTools.isNotEmpty(clazzInstance.dependency.storageTypes)) {
-			logger.print("{} loading storages, type size:{}.", this.clazz.getName(),
-					clazzInstance.dependency.storageTypes.size());
-			StorageMappings storageMappings = null;
-			do {
-				try {
-					ActionResponse rep = CipherConnectionAction.get(false,
-							Config.x_program_centerUrlRoot() + "storagemappings");
-					storageMappings = rep.getData(StorageMappings.class);
-				} catch (Exception e) {
-					e.printStackTrace();
-					Thread.sleep(5000);
-				}
-			} while (null == storageMappings);
-			this.storageMappings = storageMappings;
+	private void initDatas() throws Exception {
+		if (ArrayUtils.isNotEmpty(this.module.containerEntities())) {
+			logger.print("{} loading datas, entity size:{}.", this.clazz.getName(),
+					this.module.containerEntities().length);
+			EntityManagerContainerFactory.init(path, ListTools.toList(this.module.containerEntities()));
 		}
 	}
 

+ 0 - 5
o2server/x_base_core_project/src/main/java/com/x/base/core/project/CoreA.java

@@ -1,5 +0,0 @@
-package com.x.base.core.project;
-
-public abstract class CoreA extends Compilable {
-
-}

+ 0 - 5
o2server/x_base_core_project/src/main/java/com/x/base/core/project/CoreC.java

@@ -1,5 +0,0 @@
-package com.x.base.core.project;
-
-public abstract class CoreC extends Compilable {
-
-}

+ 0 - 5
o2server/x_base_core_project/src/main/java/com/x/base/core/project/CoreM.java

@@ -1,5 +0,0 @@
-package com.x.base.core.project;
-
-public abstract class CoreM extends Compilable {
-
-}

+ 0 - 26
o2server/x_base_core_project/src/main/java/com/x/base/core/project/Dependency.java

@@ -1,26 +0,0 @@
-package com.x.base.core.project;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class Dependency {
-
-	public Dependency() {
-		this.customJars = new ArrayList<String>();
-		this.storeJars = new ArrayList<String>();
-		this.dynamicJars = new ArrayList<String>();
-		this.containerEntities = new ArrayList<String>();
-		this.storageTypes = new ArrayList<String>();
-	}
-
-	public List<String> dynamicJars = new ArrayList<>();
-
-	public List<String> customJars = new ArrayList<>();
-
-	public List<String> storeJars = new ArrayList<>();
-
-	public List<String> containerEntities = new ArrayList<>();
-
-	public List<String> storageTypes = new ArrayList<>();
-
-}

+ 9 - 14
o2server/x_base_core_project/src/main/java/com/x/base/core/project/Deployable.java

@@ -2,19 +2,14 @@ package com.x.base.core.project;
 
 public abstract class Deployable extends Compilable {
 
-	public Deployable() {
-		this.dependency = new Dependency();
-	}
-
-	protected Dependency dependency;
-
-	public Dependency dependency() {
-		return this.dependency;
-	}
-
-	protected static final String druid_servlet = "<servlet><servlet-name>DruidStatView</servlet-name><servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class></servlet>";
-	protected static final String druid_servlet_mapping = "<servlet-mapping><servlet-name>DruidStatView</servlet-name><url-pattern>/druid/*</url-pattern></servlet-mapping>";
-	protected static final String druid_filter = "<filter><filter-name>DruidWebStatFilter</filter-name><filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class><init-param><param-name>exclusions</param-name><param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value></init-param></filter>";
-	protected static final String druid_filter_mapping = "<filter-mapping><filter-name>DruidWebStatFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>";
+//	public Deployable() {
+//		this.dependency = new Dependency();
+//	}
+//
+//	protected Dependency dependency;
+//
+//	public Dependency dependency() {
+//		return this.dependency;
+//	}
 
 }

+ 14 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/annotation/Module.java

@@ -6,6 +6,8 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import com.x.base.core.entity.StorageType;
+
 /**
  * 标记所有可启动模块
  * 
@@ -29,4 +31,16 @@ public @interface Module {
 
 	public String name();
 
+	public String packageName();
+
+	public String[] containerEntities() default {};
+
+	public String[] storeJars() default {};
+
+	public String[] customJars() default {};
+
+	public String[] dynamicJars() default {};
+
+	public StorageType[] storageTypes() default {};
+
 }

+ 35 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CheckAssemble.java

@@ -0,0 +1,35 @@
+package com.x.base.core.project.build;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.reflect.FieldUtils;
+
+import com.x.base.core.project.annotation.FieldDescribe;
+
+import io.github.classgraph.ClassGraph;
+import io.github.classgraph.ClassInfo;
+import io.github.classgraph.ClassInfoList;
+import io.github.classgraph.ScanResult;
+
+public class CheckAssemble {
+
+	public static void main(String... args) throws Exception {
+		List<ClassInfo> list = new ArrayList<>();
+		try (ScanResult scanResult = new ClassGraph().enableAllInfo().whitelistPackages("com.x").scan()) {
+			ClassInfoList classInfoList = scanResult.getAllClasses();
+			for (ClassInfo info : classInfoList) {
+				if (StringUtils.endsWith(info.getSimpleName(), "$Wi")) {
+					list.add(info);
+				}
+			}
+		}
+		for (ClassInfo info : list) {
+			Class<?> cls = Class.forName(info.getName());
+			if (FieldUtils.getFieldsListWithAnnotation(cls, FieldDescribe.class).isEmpty()) {
+				System.err.println(String.format("%s not set FieldDescribe", info.getName()));
+			}
+		}
+	}
+}

+ 242 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CheckCore.java

@@ -0,0 +1,242 @@
+package com.x.base.core.project.build;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import javax.persistence.Column;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Index;
+import javax.persistence.Lob;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.reflect.FieldUtils;
+import org.apache.openjpa.persistence.jdbc.ContainerTable;
+import org.junit.Test;
+
+import com.x.base.core.entity.JpaObject;
+import com.x.base.core.entity.annotation.ContainerEntity;
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.base.core.project.annotation.Module;
+import com.x.base.core.project.tools.MainTools;
+
+import io.github.classgraph.ClassGraph;
+import io.github.classgraph.ClassInfo;
+import io.github.classgraph.ScanResult;
+
+public class CheckCore {
+
+	public static void main(String... args) throws Exception {
+		Argument arg = MainTools.parseArgument(args[0], Argument.class);
+		String packageName = packageName(arg.getProject());
+		try (ScanResult sr = new ClassGraph().whitelistPackages(packageName).enableAnnotationInfo().scan()) {
+			List<ClassInfo> classInfos = sr.getClassesWithAnnotation(ContainerEntity.class.getName());
+			List<Class<?>> classes = new ArrayList<>();
+			for (ClassInfo info : classInfos) {
+				classes.add(Class.forName(info.getName()));
+			}
+			checkColumnName(classes);
+			checkLobIndex(classes);
+			checkListFieldContainerTableName(classes);
+			checkFieldDescribeOnStatic(classes);
+			checkTableNameUniqueConstraintName(classes);
+			checkIdCreateTimeUpdateTimeSequenceIndex(classes);
+			checkEnum(classes);
+		}
+	}
+
+	public static String packageName(String name) throws Exception {
+		try (ScanResult scanResult = new ClassGraph().enableAnnotationInfo().scan()) {
+			List<ClassInfo> classInfos = scanResult.getClassesWithAnnotation(Module.class.getName());
+			for (ClassInfo info : classInfos) {
+				if (StringUtils.equals(info.getSimpleName(), name)) {
+					Class<?> cls = Class.forName(info.getName());
+					Module module = cls.getAnnotation(Module.class);
+					return module.packageName();
+				}
+			}
+		}
+		return null;
+	}
+
+	/*
+	 * 检查数据库字段名是否是ColumnNamePrefix + fieldName
+	 */
+	@Test
+	public static void checkColumnName(List<Class<?>> classes) throws Exception {
+		for (Class<?> cls : classes) {
+			List<Field> fields = FieldUtils.getAllFieldsList(cls);
+			for (Field field : fields) {
+				Column col = field.getAnnotation(Column.class);
+				if (null != col) {
+					if (!StringUtils.equals(JpaObject.ColumnNamePrefix + field.getName(), col.name())) {
+						System.err.println(String.format("checkColumnName error: class: %s, field: %s.", cls.getName(),
+								field.getName()));
+					}
+				}
+			}
+		}
+	}
+
+	/*
+	 * 检查是否有将Lob类型字段增加索引
+	 */
+	@Test
+	public static void checkLobIndex(List<Class<?>> classes) throws Exception {
+		for (Class<?> cls : classes) {
+			List<Field> fields = FieldUtils.getAllFieldsList(cls);
+			for (Field field : fields) {
+				Lob lob = field.getAnnotation(Lob.class);
+				Index index = field.getAnnotation(Index.class);
+				if ((null != lob) && (null != index)) {
+					System.err.println(String.format("checkLobIndex error: class: %s, field: %s.", cls.getName(),
+							field.getName()));
+				}
+			}
+		}
+	}
+
+	/*
+	 * 检查StringList从表名
+	 * 
+	 * @FieldDescribe("群组的个人成员.存放个人 ID.")
+	 * 
+	 * @PersistentCollection(fetch = FetchType.EAGER)
+	 * 
+	 * @OrderColumn(name = ORDERCOLUMNCOLUMN)
+	 * 
+	 * @ContainerTable(name = TABLE + ContainerTableNameMiddle +
+	 * personList_FIELDNAME, joinIndex = @Index(name = TABLE + IndexNameMiddle +
+	 * personList_FIELDNAME + JoinIndexNameSuffix))
+	 * 
+	 * @ElementColumn(length = JpaObject.length_id, name = ColumnNamePrefix +
+	 * personList_FIELDNAME)
+	 * 
+	 * @ElementIndex(name = TABLE + IndexNameMiddle + personList_FIELDNAME +
+	 * ElementIndexNameSuffix)
+	 * 
+	 * @CheckPersist(allowEmpty = true, citationExists = @CitationExist(type =
+	 * Person.class)) private List<String> personList;
+	 */
+	@Test
+	public static void checkListFieldContainerTableName(List<Class<?>> classes) throws Exception {
+		for (Class<?> cls : classes) {
+			List<Field> fields = FieldUtils.getAllFieldsList(cls);
+			for (Field field : fields) {
+				if (List.class.isAssignableFrom(field.getType())) {
+					ContainerTable containerTable = field.getAnnotation(ContainerTable.class);
+					if (null != containerTable) {
+						String name = FieldUtils.readStaticField(cls, "TABLE", true).toString()
+								+ JpaObject.ContainerTableNameMiddle + field.getName();
+						if (!StringUtils.equals(name, containerTable.name())) {
+							System.err.println(
+									String.format("checkListFieldContainerTableName error: class: %s, field: %s.",
+											cls.getName(), field.getName()));
+						}
+					}
+				}
+			}
+		}
+	}
+
+	/*
+	 * 检查是否将@FieldDescribe注解到static字段上,如果是意味着上下行搞错了
+	 */
+	@Test
+	public static void checkFieldDescribeOnStatic(List<Class<?>> classes) throws Exception {
+		for (Class<?> cls : classes) {
+			List<Field> fields = FieldUtils.getFieldsListWithAnnotation(cls, FieldDescribe.class);
+			for (Field field : fields) {
+				if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
+					System.err.println(String.format("checkFieldDescribeOnStatic error: class: %s, field: %s.",
+							cls.getName(), field.getName()));
+				}
+			}
+		}
+	}
+
+	/*
+	 * 检查约束名中的table名称和entity类中的TABLE名称是否一致
+	 */
+	@Test
+	public static void checkTableNameUniqueConstraintName(List<Class<?>> classes) throws Exception {
+		for (Class<?> cls : classes) {
+			Table table = cls.getAnnotation(Table.class);
+			String name = Objects.toString(FieldUtils.readStaticField(cls, "TABLE", true));
+			if (!StringUtils.equals(table.name(), name)) {
+				System.out.println("table name not match:" + cls);
+			}
+			for (UniqueConstraint u : table.uniqueConstraints()) {
+				if (!StringUtils.startsWith(u.name(), table.name())) {
+					System.err.println(
+							String.format("checkTableNameUniqueConstraintName error: class: %s.", cls.getName()));
+				}
+			}
+		}
+	}
+
+	/*
+	 * 检查类中是否有在createTime,updateTime和sequence上的索引,这几个索引已经用约束在类上了
+	 */
+	@Test
+	public static void checkIdCreateTimeUpdateTimeSequenceIndex(List<Class<?>> classes) throws Exception {
+		for (Class<?> cls : classes) {
+			Field idField = FieldUtils.getField(cls, JpaObject.id_FIELDNAME, true);
+			Field createTimeField = FieldUtils.getField(cls, JpaObject.createTime_FIELDNAME, true);
+			Field updateTimeField = FieldUtils.getField(cls, JpaObject.updateTime_FIELDNAME, true);
+			Field sequenceField = FieldUtils.getField(cls, JpaObject.sequence_FIELDNAME, true);
+			if ((null != idField.getAnnotation(Index.class)) || (null != createTimeField.getAnnotation(Index.class))
+					|| (null != updateTimeField.getAnnotation(Index.class))
+					|| (null != sequenceField.getAnnotation(Index.class))) {
+				System.err.println(
+						String.format("checkIdCreateTimeUpdateTimeSequenceIndex error: class: %s.", cls.getName()));
+			}
+		}
+	}
+
+	/*
+	 * 检查entity是否有重复的字段
+	 */
+	@Test
+	public static void checkEnum(List<Class<?>> classes) throws Exception {
+		for (Class<?> cls : classes) {
+			List<Field> fields = FieldUtils.getFieldsListWithAnnotation(cls, FieldDescribe.class);
+			for (Field field : fields) {
+				if (field.getType().isEnum()) {
+					Enumerated enumerated = field.getAnnotation(Enumerated.class);
+					Column column = field.getAnnotation(Column.class);
+					if (null == enumerated || (!Objects.equals(EnumType.STRING, enumerated.value())) || (null == column)
+							|| column.length() > 200) {
+						System.err.println(String.format("checkEnum error: class: %s, field: %s.", cls.getName(),
+								field.getName()));
+					}
+				}
+			}
+		}
+	}
+
+	public class Argument {
+		private String path;
+		private String project;
+
+		public String getPath() {
+			return path;
+		}
+
+		public void setPath(String path) {
+			this.path = path;
+		}
+
+		public String getProject() {
+			return project;
+		}
+
+		public void setProject(String project) {
+			this.project = project;
+		}
+	}
+}

+ 35 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CheckService.java

@@ -0,0 +1,35 @@
+package com.x.base.core.project.build;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.reflect.FieldUtils;
+
+import com.x.base.core.project.annotation.FieldDescribe;
+
+import io.github.classgraph.ClassGraph;
+import io.github.classgraph.ClassInfo;
+import io.github.classgraph.ClassInfoList;
+import io.github.classgraph.ScanResult;
+
+public class CheckService {
+
+	public static void main(String... args) throws Exception {
+		List<ClassInfo> list = new ArrayList<>();
+		try (ScanResult scanResult = new ClassGraph().enableAllInfo().whitelistPackages("com.x").scan()) {
+			ClassInfoList classInfoList = scanResult.getAllClasses();
+			for (ClassInfo info : classInfoList) {
+				if (StringUtils.endsWith(info.getSimpleName(), "$Wi")) {
+					list.add(info);
+				}
+			}
+		}
+		for (ClassInfo info : list) {
+			Class<?> cls = Class.forName(info.getName());
+			if (FieldUtils.getFieldsListWithAnnotation(cls, FieldDescribe.class).isEmpty()) {
+				System.err.println(String.format("%s not set FieldDescribe", info.getName()));
+			}
+		}
+	}
+}

+ 180 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CreateWebXml.java

@@ -0,0 +1,180 @@
+package com.x.base.core.project.build;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.annotation.WebServlet;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import com.x.base.core.project.Compilable;
+import com.x.base.core.project.annotation.Module;
+import com.x.base.core.project.tools.DefaultCharset;
+import com.x.base.core.project.tools.MainTools;
+
+import io.github.classgraph.ClassGraph;
+import io.github.classgraph.ClassInfo;
+import io.github.classgraph.ScanResult;
+
+public class CreateWebXml {
+	public static void main(String[] args) throws Exception {
+		Argument arg = MainTools.parseArgument(args[0], Argument.class);
+		String thisApplicationClassName = thisApplicationClassName(arg.getProject());
+//		String xml = metadataCompleteTrue(arg.getPath(), arg.getProject(), thisApplicationClassName);
+		String xml = metadataCompleteFalse(arg.getPath(), arg.getProject(), thisApplicationClassName);
+		File dir = new File(arg.getPath(), "src/main/webapp/WEB-INF");
+		FileUtils.forceMkdir(dir);
+		File file = new File(dir, "web.xml");
+		FileUtils.writeStringToFile(file, xml, DefaultCharset.charset_utf_8);
+		System.out.println("create web.xml:" + file.getAbsolutePath());
+	}
+
+	private static String metadataCompleteTrue(String path, String project, String thisApplicationClassName)
+			throws Exception {
+		Class<?> thisApplication = Class.forName(thisApplicationClassName);
+		try (ScanResult scanResult = new ClassGraph().enableAnnotationInfo()
+				.whitelistPackages(thisApplication.getPackage().getName(), Compilable.class.getPackage().getName())
+				.scan()) {
+			StringBuffer sb = new StringBuffer();
+			String moduleClassName = moduleClassName(scanResult, project);
+			sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+			sb.append("<web-app id=\"" + project + "\" metadata-complete=\"true\" version=\"3.0\">");
+			sb.append("<display-name>" + project + "</display-name>");
+			sb.append("<context-param>");
+			sb.append("<param-name>project</param-name>");
+			sb.append("<param-value>" + moduleClassName + "</param-value>");
+			sb.append("</context-param>");
+			sb.append("<listener>");
+			sb.append("<listener-class>" + thisApplication.getPackage().getName()
+					+ ".ApplicationServletContextListener</listener-class>");
+			sb.append("</listener>");
+			sb.append("<servlet>");
+			sb.append("<servlet-name>ActionApplication</servlet-name>");
+			sb.append("<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>");
+			sb.append("<async-supported>true</async-supported>");
+			sb.append("<init-param>");
+			sb.append("<param-name>javax.ws.rs.Application</param-name>");
+			sb.append("<param-value>" + thisApplication.getPackage().getName()
+					+ ".jaxrs.ActionApplication</param-value>");
+			sb.append("</init-param>");
+			sb.append("</servlet>");
+			for (String str : listWebFilter(scanResult, path)) {
+				Class<?> cls = Class.forName(str);
+				WebFilter webFilter = cls.getAnnotation(WebFilter.class);
+				sb.append("<filter>");
+				sb.append("<filter-name>" + cls.getSimpleName() + "</filter-name>");
+				sb.append("<filter-class>" + cls.getName() + "</filter-class>");
+				sb.append("<async-supported>true</async-supported>");
+				sb.append("</filter>");
+				sb.append("<filter-mapping>");
+				sb.append("<filter-name>" + cls.getSimpleName() + "</filter-name>");
+				sb.append("<url-pattern>" + StringUtils.join(webFilter.urlPatterns(), ",") + "</url-pattern>");
+				sb.append("</filter-mapping>");
+			}
+			for (String str : listWebServlet(scanResult, path)) {
+				Class<?> cls = Class.forName(str);
+				WebServlet webServlet = cls.getAnnotation(WebServlet.class);
+				sb.append("<servlet>");
+				sb.append("<servlet-name>" + cls.getSimpleName() + "</servlet-name>");
+				sb.append("<servlet-class>" + cls.getName() + "</servlet-class>");
+				sb.append("<async-supported>true</async-supported>");
+				sb.append("</servlet>");
+				sb.append("<servlet-mapping>");
+				sb.append("<servlet-name>" + cls.getSimpleName() + "</servlet-name>");
+				sb.append("<url-pattern>" + StringUtils.join(webServlet.urlPatterns(), ",") + "</url-pattern>");
+				sb.append("<servlet-mapping>");
+			}
+			sb.append("</web-app>");
+			return sb.toString();
+		}
+	}
+
+	private static String metadataCompleteFalse(String path, String project, String thisApplicationClassName)
+			throws Exception {
+		Class<?> thisApplication = Class.forName(thisApplicationClassName);
+		try (ScanResult scanResult = new ClassGraph().enableAnnotationInfo()
+				.whitelistPackages(thisApplication.getPackage().getName(), Compilable.class.getPackage().getName())
+				.scan()) {
+			StringBuffer sb = new StringBuffer();
+			String moduleClassName = moduleClassName(scanResult, project);
+			sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+			sb.append("<web-app id=\"" + project + "\" metadata-complete=\"false\" version=\"3.0\">");
+			sb.append("<display-name>" + project + "</display-name>");
+			sb.append("<context-param>");
+			sb.append("<param-name>project</param-name>");
+			sb.append("<param-value>" + moduleClassName + "</param-value>");
+			sb.append("</context-param>");
+			sb.append("</web-app>");
+			return sb.toString();
+		}
+	}
+
+	private static String moduleClassName(ScanResult scanResult, String project) throws Exception {
+		List<ClassInfo> classInfos = scanResult.getClassesWithAnnotation(Module.class.getName());
+		for (ClassInfo info : classInfos) {
+			if (StringUtils.equals(info.getSimpleName(), project)) {
+				return info.getName();
+			}
+		}
+		return null;
+	}
+
+	private static List<String> listWebServlet(ScanResult scanResult, String project) throws Exception {
+		List<String> list = new ArrayList<>();
+		List<ClassInfo> classInfos = scanResult.getClassesWithAnnotation(WebServlet.class.getName());
+		for (ClassInfo info : classInfos) {
+			list.add(info.getName());
+		}
+		return list;
+	}
+
+	private static List<String> listWebFilter(ScanResult scanResult, String project) throws Exception {
+		List<String> list = new ArrayList<>();
+//		list.add(CacheJaxrsFilter.class.getName());
+//		list.add(LoggerJaxrsFilter.class.getName());
+//		list.add(EchoJaxrsFilter.class.getName());
+		List<ClassInfo> classInfos = scanResult.getClassesWithAnnotation(WebFilter.class.getName());
+		for (ClassInfo info : classInfos) {
+			list.add(info.getName());
+		}
+		return list;
+	}
+
+	private static String thisApplicationClassName(String project) throws Exception {
+		try (ScanResult scanResult = new ClassGraph().enableAnnotationInfo().scan()) {
+			List<ClassInfo> classInfos = scanResult.getClassesWithAnnotation(Module.class.getName());
+			for (ClassInfo info : classInfos) {
+				if (StringUtils.equals(info.getSimpleName(), project)) {
+					Class<?> cls = Class.forName(info.getName());
+					Module module = cls.getAnnotation(Module.class);
+					return module.packageName() + ".ThisApplication";
+				}
+			}
+			return null;
+		}
+	}
+
+	public class Argument {
+		private String path;
+		private String project;
+
+		public String getPath() {
+			return path;
+		}
+
+		public void setPath(String path) {
+			this.path = path;
+		}
+
+		public String getProject() {
+			return project;
+		}
+
+		public void setProject(String project) {
+			this.project = project;
+		}
+	}
+}

+ 28 - 25
o2server/x_base_core_project/src/main/java/com/x/base/core/project/cache/ApplicationCache.java

@@ -3,23 +3,16 @@ package com.x.base.core.project.cache;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import com.x.base.core.entity.JpaObject;
-import com.x.base.core.project.AssembleA;
-import com.x.base.core.project.Deployable;
-import com.x.base.core.project.ServiceA;
 import com.x.base.core.project.config.Config;
 import com.x.base.core.project.connection.CipherConnectionAction;
 import com.x.base.core.project.jaxrs.WrapClearCacheRequest;
 import com.x.base.core.project.tools.ListTools;
 
-import io.github.classgraph.ClassGraph;
-import io.github.classgraph.ClassInfo;
-import io.github.classgraph.ScanResult;
 import net.sf.ehcache.Cache;
 import net.sf.ehcache.CacheManager;
 import net.sf.ehcache.Ehcache;
@@ -30,7 +23,8 @@ public class ApplicationCache extends AbstractApplicationCache {
 
 	private NotifyThread notifyThread;
 	private ReceiveThread receiveThread;
-	private static ConcurrentHashMap<String, List<Class<?>>> incidenceMap = new ConcurrentHashMap<>();
+	// private static ConcurrentHashMap<String, List<Class<?>>> incidenceMap = new
+	// ConcurrentHashMap<>();
 
 	private volatile static ApplicationCache INSTANCE;
 	private CacheManager manager;
@@ -119,23 +113,33 @@ public class ApplicationCache extends AbstractApplicationCache {
 		return cache;
 	}
 
+//	private ApplicationCache() {
+//		try (ScanResult scanResult = new ClassGraph().enableAnnotationInfo().scan()) {
+//			List<ClassInfo> list = new ArrayList<>();
+//			list.addAll(scanResult.getSubclasses(Deployable.class.getName()));
+//			for (ClassInfo info : list) {
+//				Class<?> clz = Class.forName(info.getName());
+//				for (String str : clz.getAnnotation(Module.class).containerEntities()) {
+//					List<Class<?>> os = incidenceMap.get(str);
+//					if (null == os) {
+//						os = new ArrayList<Class<?>>();
+//						incidenceMap.put(str, os);
+//					}
+//					os.add(clz);
+//				}
+//			}
+//			manager = createCacheManager();
+//			this.notifyThread = new NotifyThread();
+//			notifyThread.start();
+//			this.receiveThread = new ReceiveThread();
+//			receiveThread.start();
+//		} catch (Exception e) {
+//			e.printStackTrace();
+//		}
+//	}
+
 	private ApplicationCache() {
-		try (ScanResult scanResult = new ClassGraph().enableAllInfo().scan()) {
-			List<ClassInfo> list = new ArrayList<>();
-			list.addAll(scanResult.getSubclasses(AssembleA.class.getName()));
-			list.addAll(scanResult.getSubclasses(ServiceA.class.getName()));
-			for (ClassInfo info : list) {
-				Class<?> clz = Class.forName(info.getName());
-				Deployable deployable = (Deployable) clz.newInstance();
-				for (String str : deployable.dependency().containerEntities) {
-					List<Class<?>> os = incidenceMap.get(str);
-					if (null == os) {
-						os = new ArrayList<Class<?>>();
-						incidenceMap.put(str, os);
-					}
-					os.add(clz);
-				}
-			}
+		try {
 			manager = createCacheManager();
 			this.notifyThread = new NotifyThread();
 			notifyThread.start();
@@ -247,7 +251,6 @@ public class ApplicationCache extends AbstractApplicationCache {
 			list.add(Objects.toString(o, ""));
 		}
 		return StringUtils.join(list, SPLIT);
-		// return XGsonBuilder.pureGsonDateFormated().toJson(objects);
 	}
 
 	public static class ClearCacheRequest extends WrapClearCacheRequest {

+ 53 - 189
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Config.java

@@ -2,14 +2,10 @@ package com.x.base.core.project.config;
 
 import java.io.File;
 import java.io.FileFilter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.concurrent.CopyOnWriteArrayList;
 
+import javax.naming.InitialContext;
 import javax.ws.rs.core.MediaType;
 
-import org.apache.commons.collections4.ListUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.filefilter.WildcardFileFilter;
@@ -17,22 +13,16 @@ import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.eclipse.jetty.http.MimeTypes;
 
-import com.x.base.core.entity.annotation.ContainerEntity;
 import com.x.base.core.project.x_program_center;
 import com.x.base.core.project.tools.BaseTools;
 import com.x.base.core.project.tools.Host;
-import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.NumberTools;
 
-import io.github.classgraph.ClassGraph;
-import io.github.classgraph.ClassInfo;
-import io.github.classgraph.ScanResult;
-
 public class Config {
 
 	private static Config INSTANCE;
 
-	private Config() {
+	public Config() {
 	}
 
 	public static final String PATH_VERSION = "version.o2";
@@ -100,6 +90,16 @@ public class Config {
 	public static final String DIR_STORE = "store";
 	public static final String DIR_STORE_JARS = "store/jars";
 
+	public static final String RESOUCE_CONTAINERENTITIES = "containerEntities";
+
+	public static final String RESOUCE_CONTAINERENTITYNAMES = "containerEntityNames";
+
+	public static final String RESOUCE_STORAGECONTAINERENTITYNAMES = "storageContainerEntityNames";
+
+	public static final String RESOUCE_JDBC_PREFIX = "jdbc/";
+
+	public static final String RESOUCE_CONFIG = "config";
+
 	private static final String DEFAULT_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWcVZIS57VeOUzi8c01WKvwJK9uRe6hrGTUYmF6J/pI6/UvCbdBWCoErbzsBZOElOH8Sqal3vsNMVLjPYClfoDyYDaUlakP3ldfnXJzAFJVVubF53KadG+fwnh9ZMvxdh7VXVqRL3IQBDwGgzX4rmSK+qkUJjc3OkrNJPB7LLD8QIDAQAB";
 	private static final String DEFAULT_PRIVATE_KEY = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJZxVkhLntV45TOLxzTVYq/Akr25F7qGsZNRiYXon+kjr9S8Jt0FYKgStvOwFk4SU4fxKpqXe+w0xUuM9gKV+gPJgNpSVqQ/eV1+dcnMAUlVW5sXncpp0b5/CeH1ky/F2HtVdWpEvchAEPAaDNfiuZIr6qRQmNzc6Ss0k8HsssPxAgMBAAECgYAWtRy05NUgm5Lc6Og0jVDL/mEnydxPBy2ectwzHh2k7wIHNi8XhUxFki2TMqzrM9Dv3/LySpMl4AE3mhs34LNPy6F+MwyF5X7j+2Y6MflJyeb9HNyT++viysQneoOEiOk3ghxF2/GPjpiEF79wSp+1YKTxRAyq7ypV3t35fGOOEQJBANLDPWl8b5c3lrcz/dTamMjHbVamEyX43yzQOphzkhYsz4pruATzTxU+z8/zPdEqHcWWV39CP3xu3EYNcAhxJW8CQQC2u7PF5Xb1xYRCsmIPssFxil64vvdUadSxl7GLAgjQ9ULyYWB24KObCEzLnPcT8Pf2Q0YQOixxa/78FuzmgbyfAkA7ZFFV/H7lugB6t+f7p24OhkRFep9CwBMD6dnZRBgSr6X8d8ZvfrD2Z7DgBMeSva+OEoOtlNmXExZ3lynO9zN5AkAVczEmIMp3DSl6XtAuAZC9kD2QODJ2QToLYsAfjiyUwsWKCC43piTuVOoW2KUUPSwOR1VZIEsJQWEcHGDQqhgHAkAeZ7a6dVRZFdBwKA0ADjYCufAW2cIYiVDQBJpgB+kiLQflusNOCBK0FT3lg8BdUSy2D253Ih6l3lbaM/4M7DFQ";
 
@@ -317,6 +317,16 @@ public class Config {
 		return new File(base(), DIR_SERVERS_APPLICATIONSERVER_WORK);
 	}
 
+	public static File dir_servers_applicationServer_work(Boolean force) throws Exception {
+		File dir = new File(base(), DIR_SERVERS_APPLICATIONSERVER_WORK);
+		if (force) {
+			if ((!dir.exists()) || dir.isFile()) {
+				FileUtils.forceMkdir(dir);
+			}
+		}
+		return dir;
+	}
+
 	public static File dir_servers_centerServer() throws Exception {
 		return new File(base(), DIR_SERVERS_CENTERSERVER);
 	}
@@ -329,6 +339,16 @@ public class Config {
 		return new File(base(), DIR_SERVERS_CENTERSERVER_WORK);
 	}
 
+	public static File dir_servers_centerServer_work(Boolean force) throws Exception {
+		File dir = new File(base(), DIR_SERVERS_CENTERSERVER_WORK);
+		if (force) {
+			if ((!dir.exists()) || dir.isFile()) {
+				FileUtils.forceMkdir(dir);
+			}
+		}
+		return dir;
+	}
+
 	public static File dir_servers_webServer() throws Exception {
 		return new File(base(), DIR_SERVERS_WEBSERVER);
 	}
@@ -685,19 +705,6 @@ public class Config {
 		return type;
 	}
 
-	private DataMappings dataMappings;
-
-	public static DataMappings dataMappings() throws Exception {
-		if (null == instance().dataMappings) {
-			synchronized (Config.class) {
-				if (null == instance().dataMappings) {
-					instance().dataMappings = dataMappingsInit();
-				}
-			}
-		}
-		return instance().dataMappings;
-	}
-
 	private StorageMappings storageMappings;
 
 	public static StorageMappings storageMappings() throws Exception {
@@ -711,155 +718,6 @@ public class Config {
 		return instance().storageMappings;
 	}
 
-	private static DataMappings dataMappingsInit() throws Exception {
-		DataMappings dataMappings = new DataMappings();
-		List<Class<?>> classes = dataMappingsScanEntities();
-		for (Class<?> clz : classes) {
-			dataMappings.put(clz.getName(), new CopyOnWriteArrayList<DataMapping>());
-		}
-		if (externalDataSources().enable()) {
-			return dataMappingsInitExternal(dataMappings, classes);
-		} else {
-			return dataMappingsInitInternal(dataMappings, classes);
-		}
-	}
-
-	private static DataMappings dataMappingsInitExternal(DataMappings dataMappings, List<Class<?>> classes)
-			throws Exception {
-		ExternalDataSources externalDataSources = Config.externalDataSources();
-		if (externalDataSources.size() == 0) {
-			throw new Exception("externalDataSources is empty.");
-		}
-		if (externalDataSources.size() == 1) {
-			// 如果只有一个数据源那么不用考虑includes 和 excludes
-			ExternalDataSource source = externalDataSources.get(0);
-			for (Class<?> cls : classes) {
-				DataMapping o = new DataMapping();
-				o.setUrl(source.getUrl());
-				o.setUsername(source.getUsername());
-				o.setPassword(source.getPassword());
-				dataMappings.get(cls.getName()).add(o);
-				if (null != source.getToolLevel()) {
-					o.setToolLevel(source.getToolLevel());
-				}
-				if (null != source.getRuntimeLevel()) {
-					o.setRuntimeLevel(source.getRuntimeLevel());
-				}
-				if (null != source.getDataCacheLevel()) {
-					o.setDataCacheLevel(source.getDataCacheLevel());
-				}
-				if (null != source.getMetaDataLevel()) {
-					o.setMetaDataLevel(source.getMetaDataLevel());
-				}
-				if (null != source.getEnhanceLevel()) {
-					o.setEnhanceLevel(source.getEnhanceLevel());
-				}
-				if (null != source.getQueryLevel()) {
-					o.setQueryLevel(source.getQueryLevel());
-				}
-				if (null != source.getSqlLevel()) {
-					o.setSqlLevel(source.getSqlLevel());
-				}
-				if (null != source.getJdbcLevel()) {
-					o.setJdbcLevel(source.getJdbcLevel());
-				}
-			}
-		} else {
-			// 如果有多个数据源那么要考虑includes 和 excludes
-			for (ExternalDataSource source : externalDataSources) {
-				List<String> names = new ArrayList<>();
-				for (Class<?> cls : classes) {
-					names.add(cls.getName());
-				}
-				if (ListTools.isNotEmpty(source.getIncludes())) {
-					names = ListUtils.intersection(names, source.getIncludes());
-				}
-				if (ListTools.isNotEmpty(source.getExcludes())) {
-					names = ListUtils.subtract(names, source.getExcludes());
-				}
-				for (String str : names) {
-					DataMapping o = new DataMapping();
-					o.setUrl(source.getUrl());
-					o.setUsername(source.getUsername());
-					o.setPassword(source.getPassword());
-					dataMappings.get(str).add(o);
-					if (null != source.getToolLevel()) {
-						o.setToolLevel(source.getToolLevel());
-					}
-					if (null != source.getRuntimeLevel()) {
-						o.setRuntimeLevel(source.getRuntimeLevel());
-					}
-					if (null != source.getDataCacheLevel()) {
-						o.setDataCacheLevel(source.getDataCacheLevel());
-					}
-					if (null != source.getMetaDataLevel()) {
-						o.setMetaDataLevel(source.getMetaDataLevel());
-					}
-					if (null != source.getEnhanceLevel()) {
-						o.setEnhanceLevel(source.getEnhanceLevel());
-					}
-					if (null != source.getQueryLevel()) {
-						o.setQueryLevel(source.getQueryLevel());
-					}
-					if (null != source.getSqlLevel()) {
-						o.setSqlLevel(source.getSqlLevel());
-					}
-					if (null != source.getJdbcLevel()) {
-						o.setJdbcLevel(source.getJdbcLevel());
-					}
-				}
-			}
-		}
-		return dataMappings;
-	}
-
-	private static DataMappings dataMappingsInitInternal(DataMappings dataMappings, List<Class<?>> classes)
-			throws Exception {
-		DataServers dataServers = Config.nodes().dataServers();
-		if (dataServers.size() == 0) {
-			throw new Exception("dataServers is empty.");
-		}
-		if (dataServers.size() == 1) {
-			for (Class<?> cls : classes) {
-				DataMapping o = new DataMapping();
-				String url = "jdbc:h2:tcp://" + dataServers.firstKey() + ":"
-						+ dataServers.firstEntry().getValue().getTcpPort() + "/X;JMX="
-						+ (dataServers.firstEntry().getValue().getJmxEnable() ? "TRUE" : "FALSE") + ";CACHE_SIZE="
-						+ (dataServers.firstEntry().getValue().getCacheSize() * 1024);
-				o.setUrl(url);
-				o.setUsername("sa");
-				o.setPassword(Config.token().getPassword());
-				dataMappings.get(cls.getName()).add(o);
-			}
-		} else {
-			for (Entry<String, DataServer> entry : dataServers.entrySet()) {
-				String node = entry.getKey();
-				DataServer server = entry.getValue();
-				List<String> names = new ArrayList<>();
-				for (Class<?> cls : classes) {
-					names.add(cls.getName());
-				}
-				if (ListTools.isNotEmpty(server.getIncludes())) {
-					names = ListUtils.intersection(names, server.getIncludes());
-				}
-				if (ListTools.isNotEmpty(server.getExcludes())) {
-					names = ListUtils.subtract(names, server.getExcludes());
-				}
-				for (String str : names) {
-					DataMapping o = new DataMapping();
-					String url = "jdbc:h2:tcp://" + node + ":" + server.getTcpPort() + "/X;JMX="
-							+ (server.getJmxEnable() ? "TRUE" : "FALSE") + ";CACHE_SIZE="
-							+ (server.getCacheSize() * 1024);
-					o.setUrl(url);
-					o.setUsername("sa");
-					o.setPassword(Config.token().getPassword());
-					dataMappings.get(str).add(o);
-				}
-			}
-		}
-		return dataMappings;
-	}
-
 	private File sslKeyStore;
 
 	public static File sslKeyStore() throws Exception {
@@ -877,17 +735,6 @@ public class Config {
 		return instance().sslKeyStore;
 	}
 
-	private static List<Class<?>> dataMappingsScanEntities() throws Exception {
-		try (ScanResult scanResult = new ClassGraph().enableAllInfo().scan()) {
-			List<Class<?>> list = new ArrayList<>();
-			for (ClassInfo info : scanResult.getClassesWithAnnotation(ContainerEntity.class.getName())) {
-				Class<?> clz = Class.forName(info.getName());
-				list.add(clz);
-			}
-			return list;
-		}
-	}
-
 	public static Node currentNode() throws Exception {
 		return nodes().get(node());
 	}
@@ -921,10 +768,6 @@ public class Config {
 					Messages custom = BaseTools.readObject(PATH_CONFIG_MESSAGES, Messages.class);
 					if (null != custom) {
 						custom.entrySet().stream().forEach(o -> {
-//							List<String> consumers = obj.getConsumers(o.getKey());
-//							consumers = ListUtils.union(consumers,
-//									ListTools.trim(o.getValue().getConsumers(), true, true));
-//							obj.put(o.getKey(), new Message(consumers));
 							obj.put(o.getKey(), new Message(o.getValue().getConsumers()));
 						});
 					}
@@ -1107,4 +950,25 @@ public class Config {
 		return instance().bindLogo;
 	}
 
+	private InitialContext initialContext;
+
+	private static InitialContext initialContext() throws Exception {
+		if (null == instance().initialContext) {
+			synchronized (Config.class) {
+				if (null == instance().initialContext) {
+					instance().initialContext = new InitialContext();
+				}
+			}
+		}
+		return instance().initialContext;
+	}
+
+	public static Object resource(String name) throws Exception {
+		return initialContext().lookup(name);
+	}
+
+	public static Object resource_jdbc(String name) throws Exception {
+		return initialContext().lookup(RESOUCE_JDBC_PREFIX + name);
+	}
+
 }

+ 188 - 108
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DataMapping.java

@@ -1,108 +1,188 @@
-package com.x.base.core.project.config;
-
-import com.x.base.core.container.LogLevel;
-import com.x.base.core.project.gson.GsonPropertyObject;
-
-public class DataMapping extends GsonPropertyObject {
-
-	private String url;
-	private String username;
-	private String password;
-	private LogLevel toolLevel = LogLevel.WARN;
-	private LogLevel runtimeLevel = LogLevel.WARN;
-	private LogLevel dataCacheLevel = LogLevel.WARN;
-	private LogLevel metaDataLevel = LogLevel.WARN;
-	private LogLevel enhanceLevel = LogLevel.WARN;
-	private LogLevel queryLevel = LogLevel.WARN;
-	private LogLevel sqlLevel = LogLevel.WARN;
-	private LogLevel jdbcLevel = LogLevel.ERROR;
-
-	public String getUrl() {
-		return url;
-	}
-
-	public void setUrl(String url) {
-		this.url = url;
-	}
-
-	public String getUsername() {
-		return username;
-	}
-
-	public void setUsername(String username) {
-		this.username = username;
-	}
-
-	public String getPassword() {
-		return password;
-	}
-
-	public void setPassword(String password) {
-		this.password = password;
-	}
-
-	public LogLevel getToolLevel() {
-		return toolLevel;
-	}
-
-	public void setToolLevel(LogLevel toolLevel) {
-		this.toolLevel = toolLevel;
-	}
-
-	public LogLevel getRuntimeLevel() {
-		return runtimeLevel;
-	}
-
-	public void setRuntimeLevel(LogLevel runtimeLevel) {
-		this.runtimeLevel = runtimeLevel;
-	}
-
-	public LogLevel getDataCacheLevel() {
-		return dataCacheLevel;
-	}
-
-	public void setDataCacheLevel(LogLevel dataCacheLevel) {
-		this.dataCacheLevel = dataCacheLevel;
-	}
-
-	public LogLevel getMetaDataLevel() {
-		return metaDataLevel;
-	}
-
-	public void setMetaDataLevel(LogLevel metaDataLevel) {
-		this.metaDataLevel = metaDataLevel;
-	}
-
-	public LogLevel getEnhanceLevel() {
-		return enhanceLevel;
-	}
-
-	public void setEnhanceLevel(LogLevel enhanceLevel) {
-		this.enhanceLevel = enhanceLevel;
-	}
-
-	public LogLevel getQueryLevel() {
-		return queryLevel;
-	}
-
-	public void setQueryLevel(LogLevel queryLevel) {
-		this.queryLevel = queryLevel;
-	}
-
-	public LogLevel getSqlLevel() {
-		return sqlLevel;
-	}
-
-	public void setSqlLevel(LogLevel sqlLevel) {
-		this.sqlLevel = sqlLevel;
-	}
-
-	public LogLevel getJdbcLevel() {
-		return jdbcLevel;
-	}
-
-	public void setJdbcLevel(LogLevel jdbcLevel) {
-		this.jdbcLevel = jdbcLevel;
-	}
-
-}
+//package com.x.base.core.project.config;
+//
+//import com.x.base.core.container.LogLevel;
+//import com.x.base.core.project.gson.GsonPropertyObject;
+//
+//public class DataMapping extends GsonPropertyObject {
+//
+////	name		配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this). 另外配置此属性至少在1.0.5版本中是不起作用的,强行设置name会出错。详情-点此处。
+////	url		连接数据库的url,不同数据库不一样。例如:
+////	mysql : jdbc:mysql://10.20.153.104:3306/druid2
+////	oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
+////	username		连接数据库的用户名
+////	password		连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里
+////	driverClassName	根据url自动识别	这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName
+////	initialSize	0	初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
+////	maxActive	8	最大连接池数量
+////	maxIdle	8	已经不再使用,配置了也没效果
+////	minIdle		最小连接池数量
+////	maxWait		获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
+////	poolPreparedStatements	false	是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
+////	maxPoolPreparedStatementPerConnectionSize	-1	要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
+////	validationQuery		用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
+////	validationQueryTimeout		单位:秒,检测连接是否有效的超时时间。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法
+////	testOnBorrow	true	申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
+////	testOnReturn	false	归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
+////	testWhileIdle	false	建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
+////	keepAlive	false
+////	(1.0.28)	连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。
+////	timeBetweenEvictionRunsMillis	1分钟(1.0.14)	有两个含义:
+////	1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接。
+////	2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
+////	numTestsPerEvictionRun	30分钟(1.0.14)	不再使用,一个DruidDataSource只支持一个EvictionRun
+////	minEvictableIdleTimeMillis		连接保持空闲而不被驱逐的最小时间
+////	connectionInitSqls		物理连接初始化的时候执行的sql
+////	exceptionSorter	根据dbType自动识别	当数据库抛出一些不可恢复的异常时,抛弃连接
+////	filters		属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:
+////	监控统计用的filter:stat
+////	日志用的filter:log4j
+////	防御sql注入的filter:wall
+////	proxyFilters		类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系
+//
+//	private String name;
+//	private String url;
+//	private String username;
+//	private String password;
+//	private String driverClassName;
+//	private Integer initialSize;
+//	private Integer maxActive;
+//	private Integer minIdle; // 最小连接池数量
+//
+//	private LogLevel toolLevel = LogLevel.WARN;
+//	private LogLevel runtimeLevel = LogLevel.WARN;
+//	private LogLevel dataCacheLevel = LogLevel.WARN;
+//	private LogLevel metaDataLevel = LogLevel.WARN;
+//	private LogLevel enhanceLevel = LogLevel.WARN;
+//	private LogLevel queryLevel = LogLevel.WARN;
+//	private LogLevel sqlLevel = LogLevel.WARN;
+//	private LogLevel jdbcLevel = LogLevel.ERROR;
+//
+//	public String getName() {
+//		return name;
+//	}
+//
+//	public String getDriverClassName() {
+//		return driverClassName;
+//	}
+//
+//	public Integer getInitialSize() {
+//		return initialSize;
+//	}
+//
+//	public Integer getMaxActive() {
+//		return maxActive;
+//	}
+//
+//	public Integer getMinIdle() {
+//		return minIdle;
+//	}
+//
+//	public String getUrl() {
+//		return url;
+//	}
+//
+//	public void setUrl(String url) {
+//		this.url = url;
+//	}
+//
+//	public String getUsername() {
+//		return username;
+//	}
+//
+//	public void setUsername(String username) {
+//		this.username = username;
+//	}
+//
+//	public String getPassword() {
+//		return password;
+//	}
+//
+//	public void setPassword(String password) {
+//		this.password = password;
+//	}
+//
+//	public LogLevel getToolLevel() {
+//		return toolLevel;
+//	}
+//
+//	public void setToolLevel(LogLevel toolLevel) {
+//		this.toolLevel = toolLevel;
+//	}
+//
+//	public LogLevel getRuntimeLevel() {
+//		return runtimeLevel;
+//	}
+//
+//	public void setRuntimeLevel(LogLevel runtimeLevel) {
+//		this.runtimeLevel = runtimeLevel;
+//	}
+//
+//	public LogLevel getDataCacheLevel() {
+//		return dataCacheLevel;
+//	}
+//
+//	public void setDataCacheLevel(LogLevel dataCacheLevel) {
+//		this.dataCacheLevel = dataCacheLevel;
+//	}
+//
+//	public LogLevel getMetaDataLevel() {
+//		return metaDataLevel;
+//	}
+//
+//	public void setMetaDataLevel(LogLevel metaDataLevel) {
+//		this.metaDataLevel = metaDataLevel;
+//	}
+//
+//	public LogLevel getEnhanceLevel() {
+//		return enhanceLevel;
+//	}
+//
+//	public void setEnhanceLevel(LogLevel enhanceLevel) {
+//		this.enhanceLevel = enhanceLevel;
+//	}
+//
+//	public LogLevel getQueryLevel() {
+//		return queryLevel;
+//	}
+//
+//	public void setQueryLevel(LogLevel queryLevel) {
+//		this.queryLevel = queryLevel;
+//	}
+//
+//	public LogLevel getSqlLevel() {
+//		return sqlLevel;
+//	}
+//
+//	public void setSqlLevel(LogLevel sqlLevel) {
+//		this.sqlLevel = sqlLevel;
+//	}
+//
+//	public LogLevel getJdbcLevel() {
+//		return jdbcLevel;
+//	}
+//
+//	public void setJdbcLevel(LogLevel jdbcLevel) {
+//		this.jdbcLevel = jdbcLevel;
+//	}
+//
+//	public void setName(String name) {
+//		this.name = name;
+//	}
+//
+//	public void setDriverClassName(String driverClassName) {
+//		this.driverClassName = driverClassName;
+//	}
+//
+//	public void setInitialSize(Integer initialSize) {
+//		this.initialSize = initialSize;
+//	}
+//
+//	public void setMaxActive(Integer maxActive) {
+//		this.maxActive = maxActive;
+//	}
+//
+//	public void setMinIdle(Integer minIdle) {
+//		this.minIdle = minIdle;
+//	}
+//
+//}

+ 14 - 14
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DataMappings.java

@@ -1,14 +1,14 @@
-package com.x.base.core.project.config;
-
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-public class DataMappings extends ConcurrentHashMap<String, CopyOnWriteArrayList<DataMapping>> {
-
-	private static final long serialVersionUID = -2013392322121523454L;
-
-	public DataMappings() {
-		super();
-	}
-
-}
+//package com.x.base.core.project.config;
+//
+//import java.util.concurrent.ConcurrentHashMap;
+//import java.util.concurrent.CopyOnWriteArrayList;
+//
+//public class DataMappings extends ConcurrentHashMap<String, CopyOnWriteArrayList<DataMapping>> {
+//
+//	private static final long serialVersionUID = -2013392322121523454L;
+//
+//	public DataMappings() {
+//		super();
+//	}
+//
+//}

+ 11 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DataServer.java

@@ -5,8 +5,8 @@ import java.util.List;
 
 import org.apache.commons.lang3.BooleanUtils;
 
+import com.x.base.core.container.LogLevel;
 import com.x.base.core.project.annotation.FieldDescribe;
-import com.x.base.core.project.gson.GsonPropertyObject;
 
 public class DataServer extends ConfigObject {
 
@@ -43,6 +43,12 @@ public class DataServer extends ConfigObject {
 	private Boolean jmxEnable;
 	@FieldDescribe("H2数据库缓存大小,设置H2用于作为缓存的内存大小,以M作为单位,这里默认为512M.")
 	private Integer cacheSize;
+	@FieldDescribe("默认日志级别")
+	private LogLevel logLevel = LogLevel.WARN;
+
+	public LogLevel getLogLevel() {
+		return this.logLevel == null ? LogLevel.WARN : this.logLevel;
+	}
 
 	public Boolean getJmxEnable() {
 		return BooleanUtils.isTrue(this.jmxEnable);
@@ -112,4 +118,8 @@ public class DataServer extends ConfigObject {
 		this.cacheSize = cacheSize;
 	}
 
+	public void setLogLevel(LogLevel logLevel) {
+		this.logLevel = logLevel;
+	}
+
 }

+ 67 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DataServers.java

@@ -1,8 +1,14 @@
 package com.x.base.core.project.config;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.ConcurrentSkipListMap;
 
 import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import com.x.base.core.project.tools.ListTools;
 
 public class DataServers extends ConcurrentSkipListMap<String, DataServer> {
 
@@ -22,4 +28,65 @@ public class DataServers extends ConcurrentSkipListMap<String, DataServer> {
 			}
 		}
 	}
+
+	public List<String> names() throws Exception {
+		List<String> names = new ArrayList<>();
+		int idx = 0;
+		for (DataServer o : this.values()) {
+			idx++;
+			if (BooleanUtils.isTrue(o.getEnable())) {
+				names.add("s" + ("" + (1000 + idx)).substring(1));
+			}
+		}
+		return names;
+	}
+
+	public String name(DataServer dataServer) throws Exception {
+		String name = "";
+		int idx = 0;
+		for (DataServer o : this.values()) {
+			idx++;
+			if (BooleanUtils.isTrue(o.getEnable()) && Objects.equals(o, dataServer)) {
+				name = "s" + ("" + (1000 + idx)).substring(1);
+				break;
+			}
+		}
+		if (StringUtils.isEmpty(name)) {
+			throw new Exception("dataServer not in dataServers.");
+		}
+		return name;
+	}
+
+	public List<String> findNamesOfContainerEntity(String className) throws Exception {
+		List<String> names = new ArrayList<>();
+		for (DataServer o : this.values()) {
+			if (BooleanUtils.isTrue(o.getEnable())) {
+				List<String> list = ListTools.toList(className);
+				list = ListTools.includesExcludesWildcard(list, o.getIncludes(), o.getExcludes());
+				if (!list.isEmpty()) {
+					names.add(this.name(o));
+				}
+			}
+
+		}
+		return names;
+	}
+
+	public String log(String name) {
+		int idx = 0;
+		idx++;
+		for (DataServer o : this.values()) {
+			if (BooleanUtils.isTrue(o.getEnable())) {
+				String n = "s" + ("" + (1000 + idx)).substring(1);
+				if (StringUtils.equals(n, name)) {
+					String value = o.getLogLevel().toString();
+					return "Tool=" + value + ", Enhance=" + value + ", METADATA=" + value
+							+ ", RUNTIME=" + value + ", Query=" + value + ", DataCache=" + value + ", JDBC=" + value
+							+ ", SQL=" + value;
+				}
+			}
+		}
+		return "Tool=WARN, Enhance=WARN, METADATA=WARN, RUNTIME=WARN, Query=WARN, DataCache=WARN, JDBC=ERROR, SQL=WARN";
+	}
+
 }

+ 44 - 80
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ExternalDataSource.java

@@ -4,8 +4,10 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
 
 import com.x.base.core.container.LogLevel;
+import com.x.base.core.container.factory.SlicePropertiesBuilder;
 import com.x.base.core.project.annotation.FieldDescribe;
 
 public class ExternalDataSource extends ConfigObject {
@@ -17,14 +19,6 @@ public class ExternalDataSource extends ConfigObject {
 		this.password = "";
 		this.includes = new ArrayList<>();
 		this.excludes = new ArrayList<>();
-		this.toolLevel = LogLevel.ERROR;
-		this.runtimeLevel = LogLevel.ERROR;
-		this.dataCacheLevel = LogLevel.ERROR;
-		this.metaDataLevel = LogLevel.ERROR;
-		this.enhanceLevel = LogLevel.ERROR;
-		this.queryLevel = LogLevel.ERROR;
-		this.sqlLevel = LogLevel.ERROR;
-		this.jdbcLevel = LogLevel.ERROR;
 	}
 
 	public static ExternalDataSource defaultInstance() {
@@ -39,26 +33,43 @@ public class ExternalDataSource extends ConfigObject {
 	private String username;
 	@FieldDescribe("数据库jdbc连接密码")
 	private String password;
+	@FieldDescribe("数据库驱动类名")
+	private String driverClassName;
+	@FieldDescribe("方言")
+	private String dictionary;
+	@FieldDescribe("最大连接数")
+	private Integer maxTotal;
+
 	@FieldDescribe("设置此数据库存储的类,默认情况下存储所有类型,如果需要对每个类进行单独的控制以达到高性能,可以将不同的类存储到不同的节点上提高性能.可以使用通配符*")
 	private List<String> includes;
 	@FieldDescribe("在此节点上不存储的类,和includes一起设置实际存储的类,可以使用通配符*")
 	private List<String> excludes;
-	@FieldDescribe("tool日志级别")
-	private LogLevel toolLevel = LogLevel.ERROR;
-	@FieldDescribe("runtime日志级别")
-	private LogLevel runtimeLevel = LogLevel.ERROR;
-	@FieldDescribe("dataCache日志级别")
-	private LogLevel dataCacheLevel = LogLevel.ERROR;
-	@FieldDescribe("metaData日志级别")
-	private LogLevel metaDataLevel = LogLevel.ERROR;
-	@FieldDescribe("enhance日志级别")
-	private LogLevel enhanceLevel = LogLevel.ERROR;
-	@FieldDescribe("query日志级别")
-	private LogLevel queryLevel = LogLevel.ERROR;
-	@FieldDescribe("sql日志级别")
-	private LogLevel sqlLevel = LogLevel.ERROR;
-	@FieldDescribe("jdbc日志级别")
-	private LogLevel jdbcLevel = LogLevel.ERROR;
+	@FieldDescribe("默认日志级别")
+	private LogLevel logLevel = LogLevel.WARN;
+
+	public static final Integer DEFAULT_MAXTOTAL = 50;
+
+	public LogLevel getLogLevel() {
+		return this.logLevel == null ? LogLevel.WARN : this.logLevel;
+	}
+
+	public String getDriverClassName() throws Exception {
+		return StringUtils.isEmpty(this.driverClassName) ? SlicePropertiesBuilder.driverClassNameOfUrl(this.url)
+				: this.driverClassName;
+	}
+
+	public String getDictionary() throws Exception {
+		return StringUtils.isEmpty(this.dictionary) ? SlicePropertiesBuilder.dictionaryOfUrl(this.url)
+				: this.dictionary;
+	}
+
+	public Integer getMaxTotal() {
+		if ((this.maxTotal == null) || (this.maxTotal < 1)) {
+			return DEFAULT_MAXTOTAL;
+		} else {
+			return this.maxTotal;
+		}
+	}
 
 	public Boolean getEnable() {
 		return BooleanUtils.isTrue(this.enable);
@@ -108,68 +119,21 @@ public class ExternalDataSource extends ConfigObject {
 		this.enable = enable;
 	}
 
-	public LogLevel getToolLevel() {
-		return toolLevel;
-	}
-
-	public void setToolLevel(LogLevel toolLevel) {
-		this.toolLevel = toolLevel;
-	}
-
-	public LogLevel getRuntimeLevel() {
-		return runtimeLevel;
-	}
-
-	public void setRuntimeLevel(LogLevel runtimeLevel) {
-		this.runtimeLevel = runtimeLevel;
-	}
-
-	public LogLevel getDataCacheLevel() {
-		return dataCacheLevel;
-	}
-
-	public void setDataCacheLevel(LogLevel dataCacheLevel) {
-		this.dataCacheLevel = dataCacheLevel;
-	}
-
-	public LogLevel getMetaDataLevel() {
-		return metaDataLevel;
-	}
-
-	public void setMetaDataLevel(LogLevel metaDataLevel) {
-		this.metaDataLevel = metaDataLevel;
-	}
-
-	public LogLevel getEnhanceLevel() {
-		return enhanceLevel;
-	}
-
-	public void setEnhanceLevel(LogLevel enhanceLevel) {
-		this.enhanceLevel = enhanceLevel;
-	}
-
-	public LogLevel getQueryLevel() {
-		return queryLevel;
-	}
-
-	public void setQueryLevel(LogLevel queryLevel) {
-		this.queryLevel = queryLevel;
-	}
-
-	public LogLevel getSqlLevel() {
-		return sqlLevel;
+	public void setDriverClassName(String driverClassName) {
+		this.driverClassName = driverClassName;
 	}
 
-	public void setSqlLevel(LogLevel sqlLevel) {
-		this.sqlLevel = sqlLevel;
+	public void setDictionary(String dictionary) {
+		this.dictionary = dictionary;
 	}
 
-	public LogLevel getJdbcLevel() {
-		return jdbcLevel;
+	public void setMaxTotal(Integer maxTotal) {
+		this.maxTotal = maxTotal;
 	}
 
-	public void setJdbcLevel(LogLevel jdbcLevel) {
-		this.jdbcLevel = jdbcLevel;
+	public void setLogLevel(LogLevel logLevel) {
+		this.logLevel = logLevel;
 	}
 
+ 
 }

+ 85 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ExternalDataSources.java

@@ -1,8 +1,15 @@
 package com.x.base.core.project.config;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import com.x.base.core.container.factory.SlicePropertiesBuilder;
+import com.x.base.core.project.tools.ListTools;
 
 public class ExternalDataSources extends CopyOnWriteArrayList<ExternalDataSource> {
 
@@ -26,6 +33,84 @@ public class ExternalDataSources extends CopyOnWriteArrayList<ExternalDataSource
 			}
 		}
 		return false;
+
+	}
+
+	public String name(ExternalDataSource externalDataSource) throws Exception {
+		String name = "";
+		int idx = 0;
+		for (ExternalDataSource o : this) {
+			idx++;
+			if (BooleanUtils.isTrue(o.getEnable()) && Objects.equals(o, externalDataSource)) {
+				name = "s" + ("" + (1000 + idx)).substring(1);
+				break;
+			}
+		}
+		if (StringUtils.isEmpty(name)) {
+			throw new Exception("externalDataSource not in externalDataSources.");
+		}
+		return name;
+	}
+
+	public List<String> names() throws Exception {
+		List<String> names = new ArrayList<>();
+		int idx = 0;
+		for (ExternalDataSource o : this) {
+			idx++;
+			if (BooleanUtils.isTrue(o.getEnable())) {
+				names.add("s" + ("" + (1000 + idx)).substring(1));
+			}
+		}
+		return names;
+	}
+
+	public List<String> findNamesOfContainerEntity(String className) throws Exception {
+		List<String> names = new ArrayList<>();
+		for (ExternalDataSource o : this) {
+			if (BooleanUtils.isTrue(o.getEnable())) {
+				List<String> list = ListTools.toList(className);
+				list = ListTools.includesExcludesWildcard(list, o.getIncludes(), o.getExcludes());
+				if (!list.isEmpty()) {
+					names.add(this.name(o));
+				}
+			}
+		}
+		return names;
+	}
+
+	public String log(String name) {
+		int idx = 0;
+		for (ExternalDataSource o : this) {
+			idx++;
+			if (BooleanUtils.isTrue(o.getEnable())) {
+				String n = "s" + ("" + (1000 + idx)).substring(1);
+				if (StringUtils.equals(n, name)) {
+					String value = o.getLogLevel().toString();
+					return "Tool=" + value + ", Enhance=" + value + ", METADATA=" + value
+							+ ", RUNTIME=" + value + ", Query=" + value + ", DataCache=" + value + ", JDBC=" + value
+							+ ", SQL=" + value;
+				}
+			}
+		}
+		return "Tool=WARN, Enhance=WARN, METADATA=WARN, RUNTIME=WARN, Query=WARN, DataCache=WARN, JDBC=ERROR, SQL=WARN";
+	}
+
+	public String dictionary() throws Exception {
+		for (ExternalDataSource o : this) {
+			if (BooleanUtils.isTrue(o.getEnable())) {
+				return o.getDictionary();
+			}
+		}
+		throw new Exception("dictionary error.");
+	}
+
+	public boolean hasSchema() throws Exception {
+		for (ExternalDataSource o : this) {
+			if (BooleanUtils.isTrue(o.getEnable())) {
+				return SlicePropertiesBuilder.hasSchemaOfUrl(o.getUrl());
+			}
+		}
+		throw new Exception("hasSchema error.");
 	}
 
 }

+ 121 - 27
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Node.java

@@ -21,10 +21,10 @@ public class Node extends ConfigObject {
 		o.data = DataServer.defaultInstance();
 		o.storage = StorageServer.defaultInstance();
 		o.logLevel = "warn";
-		o.dumpData = new ScheduleDump();
-		o.dumpStorage = new ScheduleDump();
-		o.restoreData = new ScheduleRestore();
-		o.restoreStorage = new ScheduleRestore();
+		o.dumpData = new ScheduleDumpData();
+		o.dumpStorage = new ScheduleDumpStorage();
+		o.restoreData = new ScheduleRestoreData();
+		o.restoreStorage = new ScheduleRestoreStorage();
 		o.nodeAgentEnable = false;
 		o.nodeAgentEncrypt = true;
 		o.nodeAgentPort = default_nodeAgentPort;
@@ -47,13 +47,13 @@ public class Node extends ConfigObject {
 	@FieldDescribe("日志级别,默认当前节点的slf4j日志级别,通过系统变量\"org.slf4j.simpleLogger.defaultLogLevel\"设置到当前jvm中.")
 	private String logLevel;
 	@FieldDescribe("定时数据导出配置")
-	private ScheduleDump dumpData;
+	private ScheduleDumpData dumpData;
 	@FieldDescribe("定时存储文件导出配置")
-	private ScheduleDump dumpStorage;
+	private ScheduleDumpStorage dumpStorage;
 	@FieldDescribe("定时数据导入配置")
-	private ScheduleRestore restoreData;
+	private ScheduleRestoreData restoreData;
 	@FieldDescribe("定时存储文件导入配置")
-	private ScheduleRestore restoreStorage;
+	private ScheduleRestoreStorage restoreStorage;
 	@FieldDescribe("日志文件保留天数.")
 	private Integer logSize;
 	@FieldDescribe("是否启用节点代理")
@@ -126,20 +126,20 @@ public class Node extends ConfigObject {
 		return BooleanUtils.isTrue(this.isPrimaryCenter);
 	}
 
-	public ScheduleDump dumpData() {
-		return (dumpData == null) ? new ScheduleDump() : this.dumpData;
+	public ScheduleDumpData dumpData() {
+		return (dumpData == null) ? new ScheduleDumpData() : this.dumpData;
 	}
 
-	public ScheduleDump dumpStorage() {
-		return (dumpStorage == null) ? new ScheduleDump() : this.dumpStorage;
+	public ScheduleDumpStorage dumpStorage() {
+		return (dumpStorage == null) ? new ScheduleDumpStorage() : this.dumpStorage;
 	}
 
-	public ScheduleRestore restoreData() {
-		return (restoreData == null) ? new ScheduleRestore() : this.restoreData;
+	public ScheduleRestoreData restoreData() {
+		return (restoreData == null) ? new ScheduleRestoreData() : this.restoreData;
 	}
 
-	public ScheduleRestore restoreStorage() {
-		return (restoreStorage == null) ? new ScheduleRestore() : this.restoreStorage;
+	public ScheduleRestoreStorage restoreStorage() {
+		return (restoreStorage == null) ? new ScheduleRestoreStorage() : this.restoreStorage;
 	}
 
 	public void setIsPrimaryCenter(Boolean isPrimaryCenter) {
@@ -190,54 +190,148 @@ public class Node extends ConfigObject {
 		this.logLevel = logLevel;
 	}
 
-	public static class ScheduleDump extends ConfigObject {
+	public static class ScheduleDumpData extends ConfigObject {
 
-		public static ScheduleDump defaultInstance() {
-			return new ScheduleDump();
+		public static ScheduleDumpData defaultInstance() {
+			return new ScheduleDumpData();
 		}
 
 		public boolean available() {
 			return DateTools.cronAvailable(this.cron);
 		}
 
+		@FieldDescribe("是否启用,默认每天凌晨2点进行备份.")
+		private Boolean enable = false;
+
 		@FieldDescribe("定时任务cron表达式")
 		private String cron = "";
 
 		@FieldDescribe("最大保留份数,超过将自动删除最久的数据.")
 		private Integer size = 14;
 
+		@FieldDescribe("备份路径")
+		private String path = "";
+
+		public Boolean enable() {
+			return (BooleanUtils.isTrue(this.enable)) ? true : false;
+		}
+
 		public String cron() {
-			return (null == cron) ? "" : this.cron;
+			return (null == cron) ? "5 0 2 * * ?" : this.cron;
 		}
 
 		public Integer size() {
 			return (null == size) ? 14 : this.size;
 		}
 
+		public String path() {
+			return StringUtils.trim(path);
+		}
+
 	}
 
-	public static class ScheduleRestore extends ConfigObject {
+	public static class ScheduleDumpStorage extends ConfigObject {
 
-		public static ScheduleRestore defaultInstance() {
-			return new ScheduleRestore();
+		public static ScheduleDumpStorage defaultInstance() {
+			return new ScheduleDumpStorage();
 		}
 
 		public boolean available() {
 			return DateTools.cronAvailable(this.cron);
 		}
 
+		@FieldDescribe("是否启用,默认每天凌晨2点进行备份.")
+		private Boolean enable = false;
+
+		@FieldDescribe("定时任务cron表达式")
+		private String cron = "";
+
+		@FieldDescribe("最大保留份数,超过将自动删除最久的数据.")
+		private Integer size = 14;
+
+		@FieldDescribe("备份路径")
+		private String path = "";
+
+		public Boolean enable() {
+			return (BooleanUtils.isTrue(this.enable)) ? true : false;
+		}
+
+		public String cron() {
+			return (null == cron) ? "5 0 3 * * ?" : this.cron;
+		}
+
+		public Integer size() {
+			return (null == size) ? 14 : this.size;
+		}
+
+		public String path() {
+			return StringUtils.trim(path);
+		}
+
+	}
+
+	public static class ScheduleRestoreData extends ConfigObject {
+
+		public static ScheduleRestoreData defaultInstance() {
+			return new ScheduleRestoreData();
+		}
+
+		public boolean available() {
+			return DateTools.cronAvailable(this.cron) && StringUtils.isNotEmpty(this.path);
+		}
+
+		@FieldDescribe("是否启用,默认每天凌晨2点进行备份.")
+		private Boolean enable;
+
 		@FieldDescribe("定时任务cron表达式")
 		private String cron = "";
 
-		@FieldDescribe("导入数据时间戳,需要在local/dump下有此时间戳的文件.")
-		private String date = "";
+		@FieldDescribe("恢复路径")
+		private String path = "";
+
+		public Boolean enable() {
+			return (BooleanUtils.isTrue(this.enable)) ? true : false;
+		}
+
+		public String cron() {
+			return (null == cron) ? "" : this.cron;
+		}
+
+		public String path() {
+			return StringUtils.trim(path);
+		}
+
+	}
+
+	public static class ScheduleRestoreStorage extends ConfigObject {
+
+		public static ScheduleRestoreStorage defaultInstance() {
+			return new ScheduleRestoreStorage();
+		}
+
+		public boolean available() {
+			return DateTools.cronAvailable(this.cron) && StringUtils.isNotEmpty(this.path);
+		}
+
+		@FieldDescribe("是否启用,默认每天凌晨2点进行备份.")
+		private Boolean enable;
+
+		@FieldDescribe("定时任务cron表达式")
+		private String cron = "";
+
+		@FieldDescribe("恢复路径")
+		private String path = "";
+
+		public Boolean enable() {
+			return (BooleanUtils.isTrue(this.enable)) ? true : false;
+		}
 
 		public String cron() {
 			return (null == cron) ? "" : this.cron;
 		}
 
-		public String date() {
-			return (null == date) ? "" : this.date;
+		public String path() {
+			return StringUtils.trim(path);
 		}
 
 	}

+ 1 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/CacheJaxrsFilter.java

@@ -2,7 +2,7 @@ package com.x.base.core.project.jaxrs;
 
 import javax.servlet.annotation.WebFilter;
 
-@WebFilter(urlPatterns = { "/jaxrs/cache/*" })
+@WebFilter(urlPatterns = { "/jaxrs/cache/*" }, asyncSupported = true)
 public class CacheJaxrsFilter extends CipherManagerJaxrsFilter {
 
 }

+ 0 - 8
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/DruidFilter.java

@@ -1,8 +0,0 @@
-package com.x.base.core.project.jaxrs;
-
-import javax.servlet.annotation.WebFilter;
-
-@WebFilter(urlPatterns = { "/druid/*" })
-public class DruidFilter extends CipherManagerJaxrsFilter {
-
-}

+ 1 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/EchoJaxrsFilter.java

@@ -2,7 +2,7 @@ package com.x.base.core.project.jaxrs;
 
 import javax.servlet.annotation.WebFilter;
 
-@WebFilter(urlPatterns = { "/jaxrs/echo/*" })
+@WebFilter(urlPatterns = { "/jaxrs/echo/*" }, asyncSupported = true)
 public class EchoJaxrsFilter extends AnonymousCipherManagerUserJaxrsFilter {
 
 }

+ 1 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/LoggerJaxrsFilter.java

@@ -2,7 +2,7 @@ package com.x.base.core.project.jaxrs;
 
 import javax.servlet.annotation.WebFilter;
 
-@WebFilter(urlPatterns = { "/jaxrs/logger/*" })
+@WebFilter(urlPatterns = { "/jaxrs/logger/*" }, asyncSupported = true)
 public class LoggerJaxrsFilter extends CipherManagerJaxrsFilter {
 
 }

+ 0 - 4
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/TokenFilter.java

@@ -3,8 +3,4 @@ package com.x.base.core.project.jaxrs;
 import javax.servlet.Filter;
 
 public abstract class TokenFilter implements Filter {
-	// // @TODO
-	// protected String getTokenKey() throws Exception {
-	// return Config.cipher();
-	// }
 }

+ 6 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/logger/Logger.java

@@ -150,6 +150,10 @@ public class Logger {
 		}
 	}
 
+	public int level() {
+		return level;
+	}
+
 	public void error(Exception e) {
 		String id = StringTools.uniqueToken();
 		StringBuilder sb = this.create(ERROR, id);
@@ -159,7 +163,7 @@ public class Logger {
 		sb.append("]");
 		String stackTraceString = ExceptionUtils.getStackTrace(e);
 		if (!(e instanceof PromptException)) {
-			sb.append(SystemUtils.LINE_SEPARATOR);
+			sb.append(System.lineSeparator());
 			sb.append(stackTraceString);
 		}
 		System.err.println(sb.toString());
@@ -202,7 +206,7 @@ public class Logger {
 				request.getRemoteHost(), request.getRemoteAddr(), headString, bodyString };
 		sb.append(format(HTTPMESSAGEFORMAT, arr));
 		if (!(e instanceof PromptException)) {
-			sb.append(SystemUtils.LINE_SEPARATOR);
+			sb.append(System.lineSeparator());
 			sb.append(stackTraceString);
 		}
 		System.err.println(sb.toString());

+ 13 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/message/MessageConnector.java

@@ -15,6 +15,19 @@ public class MessageConnector {
 
 	private static Gson gson = XGsonBuilder.instance();
 
+	public static final String TYPE_APPLICATION_CREATE = "application_create";
+
+	public static final String TYPE_APPLICATION_UPDATE = "application_update";
+
+	public static final String TYPE_APPLICATION_DELETE = "application_delete";
+
+	public static final String TYPE_PROCESS_CREATE = "process_create";
+
+	public static final String TYPE_PROCESS_UPDATE = "process_update";
+
+	public static final String TYPE_PROCESS_DELETE = "process_delete";
+
+	/* 有新的工作通过消息节点 */
 	public static final String TYPE_ACTIVITY_MESSAGE = "activity_message";
 
 	public static final String TYPE_TASK_CREATE = "task_create";

+ 10 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/organization/Group.java

@@ -22,6 +22,8 @@ public class Group extends GsonPropertyObject {
 	private List<String> personList = new ArrayList<>();
 	@FieldDescribe("群组成员")
 	private List<String> groupList = new ArrayList<>();
+	@FieldDescribe("组织成员")
+	private List<String> unitList = new ArrayList<>();
 
 	public String getName() {
 		return name;
@@ -79,4 +81,12 @@ public class Group extends GsonPropertyObject {
 		this.unique = unique;
 	}
 
+	public List<String> getUnitList() {
+		return unitList;
+	}
+
+	public void setUnitList(List<String> unitList) {
+		this.unitList = unitList;
+	}
+
 }

+ 30 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/organization/OrganizationDefinition.java

@@ -11,42 +11,61 @@ import com.x.base.core.project.tools.ListTools;
 public class OrganizationDefinition {
 
 	public final static String Manager = "Manager";
+	public final static String Manager_discription = "系统管理员(系统角色),拥有所有角色的权限,可以管理所有内容。";
 
 	public final static String AttendanceManager = "AttendanceManager";
+	public final static String AttendanceManager_discription = "考勤管理员(系统角色),可以管理考勤管理相关的配置,使用数据管理功能。";
 
 	public final static String OrganizationManager = "OrganizationManager";
+	public final static String OrganizationManager_discription = "组织信息管理员(系统角色),可以使用组织架构、人员、群组以及角色相关的配置和管理功能。";
 
 	public final static String PersonManager = "PersonManager";
+	public final static String PersonManager_discription = "人员信息管理员(系统角色),可以使用组织管理中的人员管理相关功能。";
 
 	public final static String GroupManager = "GroupManager";
+	public final static String GroupManager_discription = "群组信息管理员(系统角色),可以使用组织管理中的群组管理相关功能。";
 
 	public final static String UnitManager = "UnitManager";
+	public final static String UnitManager_discription = "组织信息管理员(系统角色),可以使用组织管理中的组织架构管理相关功能。";
 
 	public final static String RoleManager = "RoleManager";
+	public final static String RoleManager_discription = "角色信息管理员(系统角色),可以使用组织管理中的角色管理相关功能。";
 
 	public final static String ProcessPlatformManager = "ProcessPlatformManager";
+	public final static String ProcessPlatformManager_discription = "流程平台管理员(系统角色),可以对流程平台进行管理,可以进行流程设计管理,可以查询、调度和删除流程实例等。";
 
 	public final static String ProcessPlatformCreator = "ProcessPlatformCreator";
+	public final static String ProcessPlatformCreator_discription = "流程设计创建者(系统角色),可以进行流程设计,新增和设计流程应用。";
 
 	public final static String MeetingManager = "MeetingManager";
+	public final static String MeetingManager_discription = "会议管理员(系统角色),可以对会议地址,会议室,会议等信息进行管理,对会议管理系统所有配置进行管理。";
 
 	public final static String MeetingViewer = "MeetingViewer";
+	public final static String MeetingViewer_discription = "会议观察员(系统角色),可以对所有的会议信息进行查看。";
 
 	public final static String PortalManager = "PortalManager";
+	public final static String PortalManager_discription = "门户管理员(系统角色),可以进行门户应用设计,对门户应用进行管理操作。";
 
 	public final static String BBSManager = "BSSManager";
+	public final static String BBSManager_discription = "社区管理员(系统角色),可以对社区进行论坛分区,版块的创建,权限的设定,贴子的管理等操作。";
 
 	public final static String CMSManager = "CMSManager";
+	public final static String CMSManager_discription = "内容管理系统管理员(系统角色),可以设计内容管理栏目,分类,对表单,列表进行设计,对文档进行管理等操作。";
 
 	public final static String OKRManager = "OKRManager";
+	public final static String OKRManager_discription = "执行力管理员(系统角色),可以进行执行力管理系统配置,对工作内容进行管理操作。";
 
 	public final static String CRMManager = "CRMManager";
+	public final static String CRMManager_discription = "CRM管理员(系统角色),可以进行CRM系统相关配置,对客户信息,商机等信息进行管理操作。";
 
 	public final static String QueryManager = "QueryManager";
+	public final static String QueryManager_discription = "数据中心管理员(系统角色),可以在数据中心进行视图管理,统计管理等操作。";
 
 	public final static String MessageManager = "MessageManager";
+	public final static String MessageManager_discription = "消息管理员(系统角色),可以对系统中产生的消息进行管理。";
 
 	public final static String SearchPrivilege = "SearchPrivilege";
+	public final static String SearchPrivilege_discription = "搜索管理员(系统角色),可以跨权限对系统内容进行搜索。";
 
 	public final static String RoleDefinitionSuffix = "SystemRole";
 
@@ -73,7 +92,18 @@ public class OrganizationDefinition {
 			return StringUtils.substringBefore(distinguishedName, "@");
 		}
 		return distinguishedName;
+	}
 
+	public static List<String> name(List<String> list) {
+		List<String> os = new ArrayList<>();
+		if (ListTools.isNotEmpty(list)) {
+			for (String str : list) {
+				if (StringUtils.isNotEmpty(str)) {
+					os.add(name(str));
+				}
+			}
+		}
+		return os;
 	}
 
 	public static boolean isDistinguishedName(String str) {

+ 4 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/queue/AbstractQueue.java

@@ -98,6 +98,10 @@ public abstract class AbstractQueue<T> {
 		}
 	}
 
+	public Boolean isEmpty() {
+		return this.queue.isEmpty();
+	}
+	
 	private static class StopSignal {
 	}
 }

+ 1 - 12
o2server/x_base_core_project/src/main/java/com/x/base/core/project/schedule/ReportToCenter.java

@@ -9,11 +9,11 @@ import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 
 import com.x.base.core.project.Context;
-import com.x.base.core.project.Dependency;
 import com.x.base.core.project.config.Config;
 import com.x.base.core.project.connection.ActionResponse;
 import com.x.base.core.project.connection.CipherConnectionAction;
 import com.x.base.core.project.gson.GsonPropertyObject;
+import com.x.base.core.project.tools.ListTools;
 
 public class ReportToCenter implements Job {
 
@@ -72,7 +72,6 @@ public class ReportToCenter implements Job {
 		report.setSslEnable(context.sslEnable());
 		report.setScheduleLocalRequestList(context.getScheduleLocalRequestList());
 		report.setScheduleRequestList(context.getScheduleRequestList());
-		report.setDependency(context.clazzInstance().dependency());
 		return report;
 	}
 
@@ -85,7 +84,6 @@ public class ReportToCenter implements Job {
 		private String token;
 		private Integer weight;
 		private Boolean sslEnable;
-		private Dependency dependency;
 
 		private List<ScheduleLocalRequest> scheduleLocalRequestList = new ArrayList<>();
 
@@ -183,14 +181,6 @@ public class ReportToCenter implements Job {
 			this.contextPath = contextPath;
 		}
 
-		public Dependency getDependency() {
-			return dependency;
-		}
-
-		public void setDependency(Dependency dependency) {
-			this.dependency = dependency;
-		}
-
 		public String getName() {
 			return name;
 		}
@@ -198,7 +188,6 @@ public class ReportToCenter implements Job {
 		public void setName(String name) {
 			this.name = name;
 		}
-
 	}
 
 	public static class Echo extends GsonPropertyObject {

+ 34 - 24
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_attendance_assemble_control.java

@@ -4,32 +4,42 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "考勤")
-public class x_attendance_assemble_control extends AssembleA {
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "考勤", packageName = "com.x.attendance.assemble.control", containerEntities = {
+		"com.x.attendance.entity.AttendanceAdmin", "com.x.attendance.entity.AttendanceAppealInfo",
+		"com.x.attendance.entity.AttendanceDetail", "com.x.attendance.entity.AttendanceDetailMobile",
+		"com.x.attendance.entity.AttendanceEmployeeConfig", "com.x.attendance.entity.AttendanceImportFileInfo",
+		"com.x.attendance.entity.AttendanceScheduleSetting", "com.x.attendance.entity.AttendanceSetting",
+		"com.x.attendance.entity.AttendanceSelfHoliday", "com.x.attendance.entity.AttendanceStatisticalCycle",
+		"com.x.attendance.entity.AttendanceStatisticRequireLog", "com.x.attendance.entity.AttendanceWorkDayConfig",
+		"com.x.attendance.entity.AttendanceWorkPlace", "com.x.attendance.entity.StatisticPersonForMonth",
+		"com.x.attendance.entity.StatisticTopUnitForDay", "com.x.attendance.entity.StatisticTopUnitForMonth",
+		"com.x.attendance.entity.StatisticUnitForDay", "com.x.attendance.entity.StatisticUnitForMonth" }, storeJars = {
+				"x_attendance_core_entity", "x_organization_core_express",
+				"x_organization_core_entity" })
+public class x_attendance_assemble_control extends Deployable {
 
 	public x_attendance_assemble_control() {
 		super();
-		dependency.containerEntities.add("com.x.attendance.entity.AttendanceAdmin");
-		dependency.containerEntities.add("com.x.attendance.entity.AttendanceAppealInfo");
-		dependency.containerEntities.add("com.x.attendance.entity.AttendanceDetail");
-		dependency.containerEntities.add("com.x.attendance.entity.AttendanceDetailMobile");
-		dependency.containerEntities.add("com.x.attendance.entity.AttendanceEmployeeConfig");
-		dependency.containerEntities.add("com.x.attendance.entity.AttendanceImportFileInfo");
-		dependency.containerEntities.add("com.x.attendance.entity.AttendanceScheduleSetting");
-		dependency.containerEntities.add("com.x.attendance.entity.AttendanceSetting");
-		dependency.containerEntities.add("com.x.attendance.entity.AttendanceSelfHoliday");
-		dependency.containerEntities.add("com.x.attendance.entity.AttendanceStatisticalCycle");
-		dependency.containerEntities.add("com.x.attendance.entity.AttendanceStatisticRequireLog");
-		dependency.containerEntities.add("com.x.attendance.entity.AttendanceWorkDayConfig");
-		dependency.containerEntities.add("com.x.attendance.entity.AttendanceWorkPlace");
-		dependency.containerEntities.add("com.x.attendance.entity.StatisticPersonForMonth");
-		dependency.containerEntities.add("com.x.attendance.entity.StatisticTopUnitForDay");
-		dependency.containerEntities.add("com.x.attendance.entity.StatisticTopUnitForMonth");
-		dependency.containerEntities.add("com.x.attendance.entity.StatisticUnitForDay");
-		dependency.containerEntities.add("com.x.attendance.entity.StatisticUnitForMonth");
-		dependency.storeJars.add(x_attendance_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
-		// dependency.storeJars.add(x_collaboration_core_message.class.getSimpleName());
+//		dependency.containerEntities.add("com.x.attendance.entity.AttendanceAdmin");
+//		dependency.containerEntities.add("com.x.attendance.entity.AttendanceAppealInfo");
+//		dependency.containerEntities.add("com.x.attendance.entity.AttendanceDetail");
+//		dependency.containerEntities.add("com.x.attendance.entity.AttendanceDetailMobile");
+//		dependency.containerEntities.add("com.x.attendance.entity.AttendanceEmployeeConfig");
+//		dependency.containerEntities.add("com.x.attendance.entity.AttendanceImportFileInfo");
+//		dependency.containerEntities.add("com.x.attendance.entity.AttendanceScheduleSetting");
+//		dependency.containerEntities.add("com.x.attendance.entity.AttendanceSetting");
+//		dependency.containerEntities.add("com.x.attendance.entity.AttendanceSelfHoliday");
+//		dependency.containerEntities.add("com.x.attendance.entity.AttendanceStatisticalCycle");
+//		dependency.containerEntities.add("com.x.attendance.entity.AttendanceStatisticRequireLog");
+//		dependency.containerEntities.add("com.x.attendance.entity.AttendanceWorkDayConfig");
+//		dependency.containerEntities.add("com.x.attendance.entity.AttendanceWorkPlace");
+//		dependency.containerEntities.add("com.x.attendance.entity.StatisticPersonForMonth");
+//		dependency.containerEntities.add("com.x.attendance.entity.StatisticTopUnitForDay");
+//		dependency.containerEntities.add("com.x.attendance.entity.StatisticTopUnitForMonth");
+//		dependency.containerEntities.add("com.x.attendance.entity.StatisticUnitForDay");
+//		dependency.containerEntities.add("com.x.attendance.entity.StatisticUnitForMonth");
+//		dependency.storeJars.add(x_attendance_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
 	}
 }

+ 2 - 3
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_attendance_core_entity.java

@@ -4,7 +4,6 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "考勤实体类")
-public class x_attendance_core_entity extends CoreA {
-
+@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "考勤实体类", packageName = "com.x.attendance.entity")
+public class x_attendance_core_entity extends Compilable {
 }

+ 3 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_base_core_project.java

@@ -4,7 +4,8 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.BASE, category = ModuleCategory.OFFICIAL,name="基础")
-public class x_base_core_project extends CoreA {
+@Module(type = ModuleType.BASE, category = ModuleCategory.OFFICIAL, name = "基础", packageName = "com.x.base.core")
+
+public class x_base_core_project extends Compilable {
 
 }

+ 34 - 27
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_bbs_assemble_control.java

@@ -5,32 +5,39 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "论坛")
-public class x_bbs_assemble_control extends AssembleA {
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "论坛", packageName = "com.x.bbs.assemble.control", containerEntities = {
+		"com.x.bbs.entity.BBSForumInfo", "com.x.bbs.entity.BBSSectionInfo", "com.x.bbs.entity.BBSSubjectInfo",
+		"com.x.bbs.entity.BBSSubjectContent", "com.x.bbs.entity.BBSReplyInfo", "com.x.bbs.entity.BBSSubjectAttachment",
+		"com.x.bbs.entity.BBSOperationRecord", "com.x.bbs.entity.BBSUserInfo", "com.x.bbs.entity.BBSUserRole",
+		"com.x.bbs.entity.BBSRoleInfo", "com.x.bbs.entity.BBSPermissionRole", "com.x.bbs.entity.BBSPermissionInfo",
+		"com.x.bbs.entity.BBSConfigSetting", "com.x.bbs.entity.BBSVoteRecord", "com.x.bbs.entity.BBSVoteOption",
+		"com.x.bbs.entity.BBSVoteOptionGroup", "com.x.bbs.entity.BBSSubjectVoteResult" }, storeJars = {
+				"x_bbs_core_entity", "x_organization_core_express",
+				"x_organization_core_entity" }, storageTypes = { StorageType.bbs })
+public class x_bbs_assemble_control extends Deployable {
 
-	public x_bbs_assemble_control() {
-		super();
-		dependency.containerEntities.add("com.x.bbs.entity.BBSForumInfo");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSSectionInfo");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSSubjectInfo");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSSubjectContent");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSReplyInfo");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSSubjectAttachment");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSOperationRecord");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSUserInfo");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSUserRole");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSRoleInfo");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSPermissionRole");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSPermissionInfo");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSConfigSetting");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSVoteRecord");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSVoteOption");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSVoteOptionGroup");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSSubjectVoteResult");
-		dependency.storageTypes.add(StorageType.bbs.toString());
-		dependency.storeJars.add(x_bbs_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
-		// dependency.storeJars.add(x_collaboration_core_message.class.getSimpleName());
-	}
+//	public x_bbs_assemble_control() {
+//		super();
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSForumInfo");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSSectionInfo");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSSubjectInfo");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSSubjectContent");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSReplyInfo");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSSubjectAttachment");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSOperationRecord");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSUserInfo");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSUserRole");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSRoleInfo");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSPermissionRole");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSPermissionInfo");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSConfigSetting");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSVoteRecord");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSVoteOption");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSVoteOptionGroup");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSSubjectVoteResult");
+//		dependency.storageTypes.add(StorageType.bbs.toString());
+//		dependency.storeJars.add(x_bbs_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
+//	}
 }

+ 2 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_bbs_core_entity.java

@@ -4,7 +4,7 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "论坛实体类")
-public class x_bbs_core_entity extends CoreA {
+@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "论坛实体类", packageName = "com.x.bbs.entity")
+public class x_bbs_core_entity extends com.x.base.core.project.tools.Crypto {
 
 }

+ 18 - 14
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_calendar_assemble_control.java

@@ -5,19 +5,23 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "日程管理")
-public class x_calendar_assemble_control extends AssembleA {
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "日程管理", packageName = "com.x.calendar.assemble.control", containerEntities = {
+		"com.x.calendar.core.entity.Calendar", "com.x.calendar.core.entity.Calendar_Event",
+		"com.x.calendar.core.entity.Calendar_EventRepeatMaster", "com.x.calendar.core.entity.Calendar_Setting",
+		"com.x.calendar.core.entity.Calendar_SettingLobValue" }, storageTypes = { StorageType.calendar }, storeJars = {
+				"x_organization_core_express", "x_organization_core_entity", "x_calendar_core_entity" })
+public class x_calendar_assemble_control extends Deployable {
 
-	public x_calendar_assemble_control() {
-		super();
-		dependency.containerEntities.add("com.x.calendar.core.entity.Calendar");
-		dependency.containerEntities.add("com.x.calendar.core.entity.Calendar_Event");
-		dependency.containerEntities.add("com.x.calendar.core.entity.Calendar_EventRepeatMaster");
-		dependency.containerEntities.add("com.x.calendar.core.entity.Calendar_Setting");
-		dependency.containerEntities.add("com.x.calendar.core.entity.Calendar_SettingLobValue");
-		dependency.storageTypes.add(StorageType.calendar.toString());
-		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_calendar_core_entity.class.getSimpleName());
-	}
+//	public x_calendar_assemble_control() {
+//		super();
+//		dependency.containerEntities.add("com.x.calendar.core.entity.Calendar");
+//		dependency.containerEntities.add("com.x.calendar.core.entity.Calendar_Event");
+//		dependency.containerEntities.add("com.x.calendar.core.entity.Calendar_EventRepeatMaster");
+//		dependency.containerEntities.add("com.x.calendar.core.entity.Calendar_Setting");
+//		dependency.containerEntities.add("com.x.calendar.core.entity.Calendar_SettingLobValue");
+//		dependency.storageTypes.add(StorageType.calendar.toString());
+//		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_calendar_core_entity.class.getSimpleName());
+//	}
 }

+ 2 - 3
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_calendar_core_entity.java

@@ -4,7 +4,6 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL,name="日程管理实体类")
-public class x_calendar_core_entity extends CoreA {
-
+@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "日程管理实体类", packageName = "com.x.calendar.core.entity")
+public class x_calendar_core_entity extends Compilable {
 }

+ 53 - 36
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_cms_assemble_control.java

@@ -5,42 +5,59 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "内容管理")
-public class x_cms_assemble_control extends AssembleA {
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "内容管理", packageName = "com.x.cms.assemble.control", containerEntities = {
+		"com.x.cms.core.entity.element.AppDict", "com.x.cms.core.entity.element.AppDictItem",
+		"com.x.cms.core.entity.element.Form", "com.x.cms.core.entity.element.FormField",
+		"com.x.cms.core.entity.element.QueryView", "com.x.cms.core.entity.element.Script",
+		"com.x.cms.core.entity.element.TemplateForm", "com.x.cms.core.entity.element.View",
+		"com.x.cms.core.entity.element.ViewCategory", "com.x.cms.core.entity.element.ViewFieldConfig",
+		"com.x.cms.core.entity.AppInfo", "com.x.cms.core.entity.CategoryInfo", "com.x.cms.core.entity.CategoryExt",
+		"com.x.cms.core.entity.Document", "com.x.cms.core.entity.DocumentViewRecord",
+		"com.x.cms.core.entity.element.File", "com.x.cms.core.entity.FileInfo", "com.x.cms.core.entity.Log",
+		"com.x.processplatform.core.entity.content.Attachment", "com.x.query.core.entity.Item",
+		"com.x.query.core.entity.View", "com.x.cms.core.entity.ReadRemind", "com.x.cms.core.entity.DocumentCommend",
+		"com.x.cms.core.entity.DocumentCommentInfo", "com.x.cms.core.entity.CmsBatchOperation" }, storageTypes = {
+				StorageType.cms, StorageType.processPlatform }, storeJars = { "x_processplatform_core_entity",
+						"x_organization_core_entity", "x_organization_core_express", "x_cms_core_entity",
+						"x_query_core_entity", "x_query_core_express" })
+public class x_cms_assemble_control extends Deployable {
 
-	public x_cms_assemble_control() {
-		super();
-		dependency.containerEntities.add("com.x.cms.core.entity.element.AppDict");
-		dependency.containerEntities.add("com.x.cms.core.entity.element.AppDictItem");
-		dependency.containerEntities.add("com.x.cms.core.entity.element.Form");
-		dependency.containerEntities.add("com.x.cms.core.entity.element.FormField");
-		dependency.containerEntities.add("com.x.cms.core.entity.element.QueryView");
-		dependency.containerEntities.add("com.x.cms.core.entity.element.Script");
-		dependency.containerEntities.add("com.x.cms.core.entity.element.TemplateForm");
-		dependency.containerEntities.add("com.x.cms.core.entity.element.View");
-		dependency.containerEntities.add("com.x.cms.core.entity.element.ViewCategory");
-		dependency.containerEntities.add("com.x.cms.core.entity.element.ViewFieldConfig");
-		dependency.containerEntities.add("com.x.cms.core.entity.AppInfo");
-		dependency.containerEntities.add("com.x.cms.core.entity.CategoryInfo");
-		dependency.containerEntities.add("com.x.cms.core.entity.CategoryExt");
-		dependency.containerEntities.add("com.x.cms.core.entity.Document");
-		dependency.containerEntities.add("com.x.cms.core.entity.DocumentViewRecord");
-		dependency.containerEntities.add("com.x.cms.core.entity.element.File");
-		dependency.containerEntities.add("com.x.cms.core.entity.FileInfo");
-		dependency.containerEntities.add("com.x.cms.core.entity.Log");
-		dependency.containerEntities.add("com.x.processplatform.core.entity.content.Attachment");
-		dependency.containerEntities.add("com.x.query.core.entity.Item");
-		dependency.containerEntities.add("com.x.query.core.entity.View");
-		dependency.containerEntities.add("com.x.cms.core.entity.ReadRemind");
-
-		dependency.storageTypes.add(StorageType.cms.toString());
-		dependency.storageTypes.add(StorageType.processPlatform.toString());
-		dependency.storeJars.add(x_processplatform_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
-		dependency.storeJars.add(x_cms_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_query_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_query_core_express.class.getSimpleName());
-	}
+//	public x_cms_assemble_control() {
+//		super();
+//		dependency.containerEntities.add("com.x.cms.core.entity.element.AppDict");
+//		dependency.containerEntities.add("com.x.cms.core.entity.element.AppDictItem");
+//		dependency.containerEntities.add("com.x.cms.core.entity.element.Form");
+//		dependency.containerEntities.add("com.x.cms.core.entity.element.FormField");
+//		dependency.containerEntities.add("com.x.cms.core.entity.element.QueryView");
+//		dependency.containerEntities.add("com.x.cms.core.entity.element.Script");
+//		dependency.containerEntities.add("com.x.cms.core.entity.element.TemplateForm");
+//		dependency.containerEntities.add("com.x.cms.core.entity.element.View");
+//		dependency.containerEntities.add("com.x.cms.core.entity.element.ViewCategory");
+//		dependency.containerEntities.add("com.x.cms.core.entity.element.ViewFieldConfig");
+//		dependency.containerEntities.add("com.x.cms.core.entity.AppInfo");
+//		dependency.containerEntities.add("com.x.cms.core.entity.CategoryInfo");
+//		dependency.containerEntities.add("com.x.cms.core.entity.CategoryExt");
+//		dependency.containerEntities.add("com.x.cms.core.entity.Document");
+//		dependency.containerEntities.add("com.x.cms.core.entity.DocumentViewRecord");
+//		dependency.containerEntities.add("com.x.cms.core.entity.element.File");
+//		dependency.containerEntities.add("com.x.cms.core.entity.FileInfo");
+//		dependency.containerEntities.add("com.x.cms.core.entity.Log");
+//		dependency.containerEntities.add("com.x.processplatform.core.entity.content.Attachment");
+//		dependency.containerEntities.add("com.x.query.core.entity.Item");
+//		dependency.containerEntities.add("com.x.query.core.entity.View");
+//		dependency.containerEntities.add("com.x.cms.core.entity.ReadRemind");
+//		dependency.containerEntities.add("com.x.cms.core.entity.DocumentCommend");
+//		dependency.containerEntities.add("com.x.cms.core.entity.DocumentCommentInfo");
+//		dependency.containerEntities.add("com.x.cms.core.entity.CmsBatchOperation");
+//
+//		dependency.storageTypes.add(StorageType.cms.toString());
+//		dependency.storageTypes.add(StorageType.processPlatform.toString());
+//		dependency.storeJars.add(x_processplatform_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
+//		dependency.storeJars.add(x_cms_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_query_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_query_core_express.class.getSimpleName());
+//	}
 
 }

+ 2 - 3
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_cms_core_entity.java

@@ -4,7 +4,6 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL,name="内容管理实体类")
-public class x_cms_core_entity extends CoreA {
-
+@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "内容管理实体类", packageName = "com.x.cms.core.entity")
+public class x_cms_core_entity extends Compilable {
 }

+ 0 - 21
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_collaboration_assemble_websocket.java

@@ -1,21 +0,0 @@
-//package com.x.base.core.project;
-//
-//import com.x.base.core.project.annotation.Module;
-//import com.x.base.core.project.annotation.ModuleCategory;
-//import com.x.base.core.project.annotation.ModuleType;
-//
-//@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "协作")
-//public class x_collaboration_assemble_websocket extends AssembleA {
-//
-//	public x_collaboration_assemble_websocket() {
-//		super();
-//		dependency.containerEntities.add("com.x.collaboration.core.entity.SMSMessage");
-//		dependency.containerEntities.add("com.x.collaboration.core.entity.Notification");
-//		dependency.containerEntities.add("com.x.collaboration.core.entity.Dialog");
-//		dependency.containerEntities.add("com.x.collaboration.core.entity.Talk");
-//		dependency.storeJars.add(x_collaboration_core_entity.class.getSimpleName());
-//		dependency.storeJars.add(x_collaboration_core_message.class.getSimpleName());
-//		dependency.storeJars.add(x_collaboration_service_message.class.getSimpleName());
-//		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
-//	}
-//}

+ 0 - 10
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_collaboration_core_entity.java

@@ -1,10 +0,0 @@
-//package com.x.base.core.project;
-//
-//import com.x.base.core.project.annotation.Module;
-//import com.x.base.core.project.annotation.ModuleCategory;
-//import com.x.base.core.project.annotation.ModuleType;
-//
-//@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "协作实体类")
-//public class x_collaboration_core_entity extends CoreA {
-//
-//}

+ 0 - 10
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_collaboration_core_message.java

@@ -1,10 +0,0 @@
-//package com.x.base.core.project;
-//
-//import com.x.base.core.project.annotation.Module;
-//import com.x.base.core.project.annotation.ModuleCategory;
-//import com.x.base.core.project.annotation.ModuleType;
-//
-//@Module(type = ModuleType.EXPRESS, category = ModuleCategory.OFFICIAL, name = "协作接口")
-//public class x_collaboration_core_message extends CoreA {
-//
-//}

+ 0 - 16
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_collaboration_service_message.java

@@ -1,16 +0,0 @@
-//package com.x.base.core.project;
-//
-//import com.x.base.core.project.annotation.Module;
-//import com.x.base.core.project.annotation.ModuleCategory;
-//import com.x.base.core.project.annotation.ModuleType;
-//
-//@Module(type = ModuleType.SERVICE, category = ModuleCategory.OFFICIAL, name = "协作服务")
-//public class x_collaboration_service_message extends ServiceA {
-//
-//	public x_collaboration_service_message() {
-//		super();
-//		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
-//		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
-//		dependency.storeJars.add(x_collaboration_core_message.class.getSimpleName());
-//	}
-//}

+ 8 - 7
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_component_assemble_control.java

@@ -4,12 +4,13 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "组件")
-public class x_component_assemble_control extends AssembleA {
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "组件", packageName = "com.x.component.assemble.control", containerEntities = {
+		"com.x.component.core.entity.Component" }, storeJars = { "x_component_core_entity" })
+public class x_component_assemble_control extends Deployable {
 
-	public x_component_assemble_control() {
-		super();
-		dependency.containerEntities.add("com.x.component.core.entity.Component");
-		dependency.storeJars.add(x_component_core_entity.class.getSimpleName());
-	}
+//	public x_component_assemble_control() {
+//		super();
+//		dependency.containerEntities.add("com.x.component.core.entity.Component");
+//		dependency.storeJars.add(x_component_core_entity.class.getSimpleName());
+//	}
 }

+ 2 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_component_core_entity.java

@@ -4,6 +4,6 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "协作实体类")
-public class x_component_core_entity extends CoreA {
+@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "协作实体类", packageName = "com.x.component.core.entity")
+public class x_component_core_entity extends Compilable {
 }

+ 15 - 14
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_file_assemble_control.java

@@ -5,19 +5,20 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "云文件")
-public class x_file_assemble_control extends AssembleA {
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "云文件", packageName = "com.x.file.assemble.control", containerEntities = {
+		"com.x.file.core.entity.personal.Folder", "com.x.file.core.entity.personal.Attachment",
+		"com.x.file.core.entity.open.File" }, storageTypes = { StorageType.file }, storeJars = { "x_file_core_entity",
+				"x_organization_core_express", "x_organization_core_entity" })
+public class x_file_assemble_control extends Deployable {
 
-	public x_file_assemble_control() {
-		super();
-		dependency.containerEntities.add("com.x.file.core.entity.personal.Folder");
-		dependency.containerEntities.add("com.x.file.core.entity.personal.Attachment");
-		dependency.containerEntities.add("com.x.file.core.entity.open.File");
-		dependency.storageTypes.add(StorageType.file.toString());
-//		dependency.storeJars.add(x_collaboration_core_entity.class.getSimpleName());
-//		dependency.storeJars.add(x_collaboration_core_message.class.getSimpleName());
-		dependency.storeJars.add(x_file_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
-	}
+//	public x_file_assemble_control() {
+//		super();
+//		dependency.containerEntities.add("com.x.file.core.entity.personal.Folder");
+//		dependency.containerEntities.add("com.x.file.core.entity.personal.Attachment");
+//		dependency.containerEntities.add("com.x.file.core.entity.open.File");
+//		dependency.storageTypes.add(StorageType.file.toString());
+//		dependency.storeJars.add(x_file_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
+//	}
 }

+ 2 - 3
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_file_core_entity.java

@@ -4,7 +4,6 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL,name="云文件实体类")
-public class x_file_core_entity extends CoreA {
-
+@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "云文件实体类", packageName = "com.x.file.core.entity")
+public class x_file_core_entity extends Compilable {
 }

+ 11 - 11
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_general_assemble_control.java

@@ -5,15 +5,15 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "公共模块")
-public class x_general_assemble_control extends AssembleA {
-	
-	public x_general_assemble_control() {
-		super();
-		dependency.containerEntities.add("com.x.general.core.entity.area.District");
-		dependency.storageTypes.add(StorageType.file.toString());
-//		dependency.storeJars.add(x_collaboration_core_entity.class.getSimpleName());
-//		dependency.storeJars.add(x_collaboration_core_message.class.getSimpleName());
-		dependency.storeJars.add(x_general_core_entity.class.getSimpleName());
-	}
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "公共模块", packageName = "com.x.general.assemble.control", containerEntities = {
+		"com.x.general.core.entity.area.District" }, storageTypes = {
+				StorageType.file }, storeJars = { "x_general_core_entity" })
+public class x_general_assemble_control extends Deployable {
+
+//	public x_general_assemble_control() {
+//		super();
+//		dependency.containerEntities.add("com.x.general.core.entity.area.District");
+//		dependency.storageTypes.add(StorageType.file.toString());
+//		dependency.storeJars.add(x_general_core_entity.class.getSimpleName());
+//	}
 }

+ 2 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_general_core_entity.java

@@ -4,7 +4,7 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL,name="公共实体类")
-public class x_general_core_entity extends CoreA {
+@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "公共实体类", packageName = "com.x.general.core.entity")
+public class x_general_core_entity extends Compilable {
 
 }

+ 18 - 15
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_hotpic_assemble_control.java

@@ -5,20 +5,23 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "热点图片")
-public class x_hotpic_assemble_control extends AssembleA {
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "热点图片", packageName = "com.x.hotpic.assemble.control", containerEntities = {
+		"com.x.hotpic.entity.HotPictureInfo", "com.x.bbs.entity.BBSSubjectInfo",
+		"com.x.cms.core.entity.Document" }, storageTypes = { StorageType.file }, storeJars = {
+				"x_organization_core_entity", "x_organization_core_express", "x_hotpic_core_entity",
+				"x_cms_core_entity", "x_bbs_core_entity" })
+public class x_hotpic_assemble_control extends Deployable {
 
-	public x_hotpic_assemble_control() {
-		super();
-		dependency.containerEntities.add("com.x.hotpic.entity.HotPictureInfo");
-		dependency.containerEntities.add("com.x.bbs.entity.BBSSubjectInfo");
-		dependency.containerEntities.add("com.x.cms.core.entity.Document");
-		dependency.storageTypes.add(StorageType.file.toString());
-		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
-		dependency.storeJars.add(x_hotpic_core_entity.class.getSimpleName());
-//		dependency.storeJars.add(x_collaboration_core_message.class.getSimpleName());
-		dependency.storeJars.add(x_cms_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_bbs_core_entity.class.getSimpleName());
-	}
+//	public x_hotpic_assemble_control() {
+//		super();
+//		dependency.containerEntities.add("com.x.hotpic.entity.HotPictureInfo");
+//		dependency.containerEntities.add("com.x.bbs.entity.BBSSubjectInfo");
+//		dependency.containerEntities.add("com.x.cms.core.entity.Document");
+//		dependency.storageTypes.add(StorageType.file.toString());
+//		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
+//		dependency.storeJars.add(x_hotpic_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_cms_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_bbs_core_entity.class.getSimpleName());
+//	}
 }

+ 2 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_hotpic_core_entity.java

@@ -4,7 +4,7 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL,name="热点图片实体类")
-public class x_hotpic_core_entity extends CoreA {
+@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "热点图片实体类", packageName = "com.x.hotpic.core.entity")
+public class x_hotpic_core_entity extends Compilable {
 
 }

+ 16 - 14
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_meeting_assemble_control.java

@@ -5,19 +5,21 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "会议管理")
-public class x_meeting_assemble_control extends AssembleA {
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "会议管理", packageName = "com.x.meeting.assemble.control", containerEntities = {
+		"com.x.meeting.core.entity.Building", "com.x.meeting.core.entity.Room", "com.x.meeting.core.entity.Meeting",
+		"com.x.meeting.core.entity.Attachment" }, storageTypes = { StorageType.meeting }, storeJars = {
+				"x_organization_core_entity", "x_organization_core_express", "x_meeting_core_entity" })
+public class x_meeting_assemble_control extends Deployable {
 
-	public x_meeting_assemble_control() {
-		super();
-		dependency.containerEntities.add("com.x.meeting.core.entity.Building");
-		dependency.containerEntities.add("com.x.meeting.core.entity.Room");
-		dependency.containerEntities.add("com.x.meeting.core.entity.Meeting");
-		dependency.containerEntities.add("com.x.meeting.core.entity.Attachment");
-		dependency.storageTypes.add(StorageType.meeting.toString());
-		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
-		dependency.storeJars.add(x_meeting_core_entity.class.getSimpleName());
-		// dependency.storeJars.add(x_collaboration_core_message.class.getSimpleName());
-	}
+//	public x_meeting_assemble_control() {
+//		super();
+//		dependency.containerEntities.add("com.x.meeting.core.entity.Building");
+//		dependency.containerEntities.add("com.x.meeting.core.entity.Room");
+//		dependency.containerEntities.add("com.x.meeting.core.entity.Meeting");
+//		dependency.containerEntities.add("com.x.meeting.core.entity.Attachment");
+//		dependency.storageTypes.add(StorageType.meeting.toString());
+//		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
+//		dependency.storeJars.add(x_meeting_core_entity.class.getSimpleName());
+//	}
 }

+ 2 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_meeting_core_entity.java

@@ -4,7 +4,7 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL,name="会议管理实体类")
-public class x_meeting_core_entity extends CoreA {
+@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "会议管理实体类", packageName = "com.x.meeting.core.entity")
+public class x_meeting_core_entity extends Compilable {
 
 }

+ 15 - 12
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_message_assemble_communicate.java

@@ -4,17 +4,20 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "消息通讯")
-public class x_message_assemble_communicate extends AssembleA {
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "消息通讯", packageName = "com.x.message.assemble.communicate", containerEntities = {
+		"com.x.message.core.entity.Instant", "com.x.message.core.entity.Message",
+		"com.x.message.core.entity.Mass" }, storeJars = { "x_message_core_entity", "x_meeting_core_entity",
+				"x_processplatform_core_entity", "x_organization_core_express" })
+public class x_message_assemble_communicate extends Deployable {
 
-	public x_message_assemble_communicate() {
-		super();
-		dependency.containerEntities.add("com.x.message.core.entity.Instant");
-		dependency.containerEntities.add("com.x.message.core.entity.Message");
-		dependency.containerEntities.add("com.x.message.core.entity.Mass");
-		dependency.storeJars.add(x_message_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_meeting_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_processplatform_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
-	}
+//	public x_message_assemble_communicate() {
+//		super();
+//		dependency.containerEntities.add("com.x.message.core.entity.Instant");
+//		dependency.containerEntities.add("com.x.message.core.entity.Message");
+//		dependency.containerEntities.add("com.x.message.core.entity.Mass");
+//		dependency.storeJars.add(x_message_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_meeting_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_processplatform_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
+//	}
 }

+ 2 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_message_core_entity.java

@@ -4,7 +4,7 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL,name= "消息通讯实体类")
-public class x_message_core_entity extends CoreA {
+@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "消息通讯实体类", packageName = "com.x.message.core.entity")
+public class x_message_core_entity extends Compilable {
 
 }

+ 20 - 17
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_mind_assemble_control.java

@@ -4,22 +4,25 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "脑图")
-public class x_mind_assemble_control extends AssembleA {
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "脑图", packageName = "com.x.mind.assemble.control", containerEntities = {
+		"com.x.mind.entity.MindBaseInfo", "com.x.mind.entity.MindContentInfo", "com.x.mind.entity.MindFolderInfo",
+		"com.x.mind.entity.MindIconInfo", "com.x.mind.entity.MindRecycleInfo", "com.x.mind.entity.MindShareRecord",
+		"com.x.mind.entity.MindVersionInfo", "com.x.mind.entity.MindVersionContent" }, storeJars = {
+				"x_organization_core_entity", "x_organization_core_express", "x_mind_core_entity" })
+public class x_mind_assemble_control extends Deployable {
 
-	public x_mind_assemble_control() {
-		super();
-		dependency.containerEntities.add("com.x.mind.entity.MindBaseInfo");
-		dependency.containerEntities.add("com.x.mind.entity.MindContentInfo");
-		dependency.containerEntities.add("com.x.mind.entity.MindFolderInfo");
-		dependency.containerEntities.add("com.x.mind.entity.MindIconInfo");
-		dependency.containerEntities.add("com.x.mind.entity.MindRecycleInfo");
-		dependency.containerEntities.add("com.x.mind.entity.MindShareRecord");
-		dependency.containerEntities.add("com.x.mind.entity.MindVersionInfo");
-		dependency.containerEntities.add("com.x.mind.entity.MindVersionContent");
-		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
-		dependency.storeJars.add(x_mind_core_entity.class.getSimpleName());
-		// dependency.storeJars.add(x_collaboration_core_message.class.getSimpleName());
-	}
+//	public x_mind_assemble_control() {
+//		super();
+//		dependency.containerEntities.add("com.x.mind.entity.MindBaseInfo");
+//		dependency.containerEntities.add("com.x.mind.entity.MindContentInfo");
+//		dependency.containerEntities.add("com.x.mind.entity.MindFolderInfo");
+//		dependency.containerEntities.add("com.x.mind.entity.MindIconInfo");
+//		dependency.containerEntities.add("com.x.mind.entity.MindRecycleInfo");
+//		dependency.containerEntities.add("com.x.mind.entity.MindShareRecord");
+//		dependency.containerEntities.add("com.x.mind.entity.MindVersionInfo");
+//		dependency.containerEntities.add("com.x.mind.entity.MindVersionContent");
+//		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
+//		dependency.storeJars.add(x_mind_core_entity.class.getSimpleName());
+//	}
 }

+ 2 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_mind_core_entity.java

@@ -4,7 +4,7 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL,name="脑图实体类")
-public class x_mind_core_entity extends CoreA {
+@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "脑图实体类", packageName = "com.x.mind.core.entity")
+public class x_mind_core_entity extends Compilable {
 
 }

+ 46 - 34
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_okr_assemble_control.java

@@ -5,39 +5,51 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "OKR")
-public class x_okr_assemble_control extends AssembleA {
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "OKR", packageName = "com.x.okr.assemble.control", containerEntities = {
+		"com.x.okr.entity.OkrAttachmentFileInfo", "com.x.okr.entity.OkrCenterWorkInfo",
+		"com.x.okr.entity.OkrConfigSecretary", "com.x.okr.entity.OkrConfigSystem",
+		"com.x.okr.entity.OkrConfigWorkLevel", "com.x.okr.entity.OkrConfigWorkType", "com.x.okr.entity.OkrTask",
+		"com.x.okr.entity.OkrTaskHandled", "com.x.okr.entity.OkrWorkAuthorizeRecord",
+		"com.x.okr.entity.OkrWorkBaseInfo", "com.x.okr.entity.OkrWorkDetailInfo", "com.x.okr.entity.OkrWorkDynamics",
+		"com.x.okr.entity.OkrWorkPerson", "com.x.okr.entity.OkrWorkReportBaseInfo",
+		"com.x.okr.entity.OkrWorkReportDetailInfo", "com.x.okr.entity.OkrWorkReportPersonLink",
+		"com.x.okr.entity.OkrWorkReportProcessLog", "com.x.okr.entity.OkrWorkChat",
+		"com.x.okr.entity.OkrStatisticReportContent", "com.x.okr.entity.OkrStatisticReportStatus",
+		"com.x.okr.entity.OkrUserInfo", "com.x.okr.entity.OkrErrorSystemIdentityInfo",
+		"com.x.okr.entity.OkrErrorIdentityRecords",
+		"com.x.okr.entity.OkrWorkAppraiseInfo" }, storageTypes = { StorageType.okr }, storeJars = {
+				"x_organization_core_entity", "x_organization_core_express", "x_okr_core_entity" })
+public class x_okr_assemble_control extends Deployable {
 
-	public x_okr_assemble_control() {
-		super();
-		dependency.containerEntities.add("com.x.okr.entity.OkrAttachmentFileInfo");
-		dependency.containerEntities.add("com.x.okr.entity.OkrCenterWorkInfo");
-		dependency.containerEntities.add("com.x.okr.entity.OkrConfigSecretary");
-		dependency.containerEntities.add("com.x.okr.entity.OkrConfigSystem");
-		dependency.containerEntities.add("com.x.okr.entity.OkrConfigWorkLevel");
-		dependency.containerEntities.add("com.x.okr.entity.OkrConfigWorkType");
-		dependency.containerEntities.add("com.x.okr.entity.OkrTask");
-		dependency.containerEntities.add("com.x.okr.entity.OkrTaskHandled");
-		dependency.containerEntities.add("com.x.okr.entity.OkrWorkAuthorizeRecord");
-		dependency.containerEntities.add("com.x.okr.entity.OkrWorkBaseInfo");
-		dependency.containerEntities.add("com.x.okr.entity.OkrWorkDetailInfo");
-		dependency.containerEntities.add("com.x.okr.entity.OkrWorkDynamics");
-		dependency.containerEntities.add("com.x.okr.entity.OkrWorkPerson");
-		dependency.containerEntities.add("com.x.okr.entity.OkrWorkReportBaseInfo");
-		dependency.containerEntities.add("com.x.okr.entity.OkrWorkReportDetailInfo");
-		dependency.containerEntities.add("com.x.okr.entity.OkrWorkReportPersonLink");
-		dependency.containerEntities.add("com.x.okr.entity.OkrWorkReportProcessLog");
-		dependency.containerEntities.add("com.x.okr.entity.OkrWorkChat");
-		dependency.containerEntities.add("com.x.okr.entity.OkrStatisticReportContent");
-		dependency.containerEntities.add("com.x.okr.entity.OkrStatisticReportStatus");
-		dependency.containerEntities.add("com.x.okr.entity.OkrUserInfo");
-		dependency.containerEntities.add("com.x.okr.entity.OkrErrorSystemIdentityInfo");
-		dependency.containerEntities.add("com.x.okr.entity.OkrErrorIdentityRecords");
-		dependency.containerEntities.add("com.x.okr.entity.OkrWorkAppraiseInfo");
-		dependency.storageTypes.add(StorageType.okr.toString());
-		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
-		dependency.storeJars.add(x_okr_core_entity.class.getSimpleName());
-		// dependency.storeJars.add(x_collaboration_core_message.class.getSimpleName());
-	}
+//	public x_okr_assemble_control() {
+//		super();
+//		dependency.containerEntities.add("com.x.okr.entity.OkrAttachmentFileInfo");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrCenterWorkInfo");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrConfigSecretary");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrConfigSystem");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrConfigWorkLevel");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrConfigWorkType");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrTask");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrTaskHandled");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrWorkAuthorizeRecord");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrWorkBaseInfo");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrWorkDetailInfo");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrWorkDynamics");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrWorkPerson");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrWorkReportBaseInfo");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrWorkReportDetailInfo");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrWorkReportPersonLink");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrWorkReportProcessLog");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrWorkChat");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrStatisticReportContent");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrStatisticReportStatus");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrUserInfo");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrErrorSystemIdentityInfo");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrErrorIdentityRecords");
+//		dependency.containerEntities.add("com.x.okr.entity.OkrWorkAppraiseInfo");
+//		dependency.storageTypes.add(StorageType.okr.toString());
+//		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
+//		dependency.storeJars.add(x_okr_core_entity.class.getSimpleName());
+//	}
 }

+ 2 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_okr_core_entity.java

@@ -4,7 +4,7 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "OKR实体类")
-public class x_okr_core_entity extends CoreA {
+@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "OKR实体类", packageName = "com.x.okr.core.entity")
+public class x_okr_core_entity extends Compilable {
 
 }

+ 16 - 12
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_organization_assemble_authentication.java

@@ -4,17 +4,21 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "组织管理认证")
-public class x_organization_assemble_authentication extends AssembleA {
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "组织管理认证", packageName = "com.x.organization.assemble.authentication", containerEntities = {
+		"com.x.organization.core.entity.Person", "com.x.organization.core.entity.Identity",
+		"com.x.organization.core.entity.Role", "com.x.organization.core.entity.Bind",
+		"com.x.organization.core.entity.OauthCode" }, storeJars = { "x_organization_core_entity",
+				"x_organization_core_express" })
+public class x_organization_assemble_authentication extends Deployable {
 
-	public x_organization_assemble_authentication() {
-		super();
-		dependency.containerEntities.add("com.x.organization.core.entity.Person");
-		dependency.containerEntities.add("com.x.organization.core.entity.Identity");
-		dependency.containerEntities.add("com.x.organization.core.entity.Role");
-		dependency.containerEntities.add("com.x.organization.core.entity.Bind");
-		dependency.containerEntities.add("com.x.organization.core.entity.OauthCode");
-		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
-	}
+//	public x_organization_assemble_authentication() {
+//		super();
+//		dependency.containerEntities.add("com.x.organization.core.entity.Person");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Identity");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Role");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Bind");
+//		dependency.containerEntities.add("com.x.organization.core.entity.OauthCode");
+//		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
+//	}
 }

+ 21 - 16
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_organization_assemble_control.java

@@ -4,20 +4,25 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "组织管理")
-public class x_organization_assemble_control extends AssembleA {
-	
-	public x_organization_assemble_control() {
-		super();
-		dependency.containerEntities.add("com.x.organization.core.entity.Group");
-		dependency.containerEntities.add("com.x.organization.core.entity.Custom");
-		dependency.containerEntities.add("com.x.organization.core.entity.Role");
-		dependency.containerEntities.add("com.x.organization.core.entity.Person");
-		dependency.containerEntities.add("com.x.organization.core.entity.Identity");
-		dependency.containerEntities.add("com.x.organization.core.entity.PersonAttribute");
-		dependency.containerEntities.add("com.x.organization.core.entity.Unit");
-		dependency.containerEntities.add("com.x.organization.core.entity.UnitAttribute");
-		dependency.containerEntities.add("com.x.organization.core.entity.UnitDuty");
-		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
-	}
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "组织管理", packageName = "com.x.organization.assemble.control", containerEntities = {
+		"com.x.organization.core.entity.Group", "com.x.organization.core.entity.Custom",
+		"com.x.organization.core.entity.Role", "com.x.organization.core.entity.Person",
+		"com.x.organization.core.entity.Identity", "com.x.organization.core.entity.PersonAttribute",
+		"com.x.organization.core.entity.Unit", "com.x.organization.core.entity.UnitAttribute",
+		"com.x.organization.core.entity.UnitDuty" }, storeJars = { "x_organization_core_entity" })
+public class x_organization_assemble_control extends Deployable {
+
+//	public x_organization_assemble_control() {
+//		super();
+//		dependency.containerEntities.add("com.x.organization.core.entity.Group");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Custom");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Role");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Person");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Identity");
+//		dependency.containerEntities.add("com.x.organization.core.entity.PersonAttribute");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Unit");
+//		dependency.containerEntities.add("com.x.organization.core.entity.UnitAttribute");
+//		dependency.containerEntities.add("com.x.organization.core.entity.UnitDuty");
+//		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
+//	}
 }

+ 22 - 16
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_organization_assemble_express.java

@@ -4,21 +4,27 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "组织管理接口服务")
-public class x_organization_assemble_express extends AssembleA {
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "组织管理接口服务", packageName = "com.x.organization.assemble.express", containerEntities = {
+		"com.x.organization.core.entity.Group", "com.x.organization.core.entity.Role",
+		"com.x.organization.core.entity.Person", "com.x.organization.core.entity.PersonAttribute",
+		"com.x.organization.core.entity.Identity", "com.x.organization.core.entity.Unit",
+		"com.x.organization.core.entity.UnitAttribute", "com.x.organization.core.entity.UnitDuty",
+		"com.x.organization.core.entity.accredit.Trust",
+		"com.x.organization.core.entity.accredit.TrustLog" }, storeJars = { "x_organization_core_entity" })
+public class x_organization_assemble_express extends Deployable {
 
-	public x_organization_assemble_express() {
-		super();
-		dependency.containerEntities.add("com.x.organization.core.entity.Group");
-		dependency.containerEntities.add("com.x.organization.core.entity.Role");
-		dependency.containerEntities.add("com.x.organization.core.entity.Person");
-		dependency.containerEntities.add("com.x.organization.core.entity.PersonAttribute");
-		dependency.containerEntities.add("com.x.organization.core.entity.Identity");
-		dependency.containerEntities.add("com.x.organization.core.entity.Unit");
-		dependency.containerEntities.add("com.x.organization.core.entity.UnitAttribute");
-		dependency.containerEntities.add("com.x.organization.core.entity.UnitDuty");
-		dependency.containerEntities.add("com.x.organization.core.entity.accredit.Trust");
-		dependency.containerEntities.add("com.x.organization.core.entity.accredit.TrustLog");
-		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
-	}
+//	public x_organization_assemble_express() {
+//		super();
+//		dependency.containerEntities.add("com.x.organization.core.entity.Group");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Role");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Person");
+//		dependency.containerEntities.add("com.x.organization.core.entity.PersonAttribute");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Identity");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Unit");
+//		dependency.containerEntities.add("com.x.organization.core.entity.UnitAttribute");
+//		dependency.containerEntities.add("com.x.organization.core.entity.UnitDuty");
+//		dependency.containerEntities.add("com.x.organization.core.entity.accredit.Trust");
+//		dependency.containerEntities.add("com.x.organization.core.entity.accredit.TrustLog");
+//		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
+//	}
 }

+ 28 - 20
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_organization_assemble_personal.java

@@ -4,24 +4,32 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "组织管理个人")
-public class x_organization_assemble_personal extends AssembleA {
-	
-	public x_organization_assemble_personal() {
-		super();
-		dependency.containerEntities.add("com.x.organization.core.entity.Group");
-		dependency.containerEntities.add("com.x.organization.core.entity.Role");
-		dependency.containerEntities.add("com.x.organization.core.entity.Person");
-		dependency.containerEntities.add("com.x.organization.core.entity.PersonAttribute");
-		dependency.containerEntities.add("com.x.organization.core.entity.Identity");
-		dependency.containerEntities.add("com.x.organization.core.entity.Unit");
-		dependency.containerEntities.add("com.x.organization.core.entity.UnitAttribute");
-		dependency.containerEntities.add("com.x.organization.core.entity.UnitDuty");
-		dependency.containerEntities.add("com.x.organization.core.entity.Custom");
-		dependency.containerEntities.add("com.x.organization.core.entity.Definition");
-		dependency.containerEntities.add("com.x.organization.core.entity.accredit.Trust");
-		dependency.containerEntities.add("com.x.organization.core.entity.accredit.TrustLog");
-		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
-		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
-	}
+@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "组织管理个人", packageName = "com.x.organization.assemble.personal", containerEntities = {
+		"com.x.organization.core.entity.Group", "com.x.organization.core.entity.Role",
+		"com.x.organization.core.entity.Person", "com.x.organization.core.entity.PersonAttribute",
+		"com.x.organization.core.entity.Identity", "com.x.organization.core.entity.Unit",
+		"com.x.organization.core.entity.UnitAttribute", "com.x.organization.core.entity.UnitDuty",
+		"com.x.organization.core.entity.Custom", "com.x.organization.core.entity.Definition",
+		"com.x.organization.core.entity.accredit.Trust",
+		"com.x.organization.core.entity.accredit.TrustLog" }, storeJars = { "x_organization_core_entity",
+				"x_organization_core_express" })
+public class x_organization_assemble_personal extends Deployable {
+
+//	public x_organization_assemble_personal() {
+//		super();
+//		dependency.containerEntities.add("com.x.organization.core.entity.Group");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Role");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Person");
+//		dependency.containerEntities.add("com.x.organization.core.entity.PersonAttribute");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Identity");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Unit");
+//		dependency.containerEntities.add("com.x.organization.core.entity.UnitAttribute");
+//		dependency.containerEntities.add("com.x.organization.core.entity.UnitDuty");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Custom");
+//		dependency.containerEntities.add("com.x.organization.core.entity.Definition");
+//		dependency.containerEntities.add("com.x.organization.core.entity.accredit.Trust");
+//		dependency.containerEntities.add("com.x.organization.core.entity.accredit.TrustLog");
+//		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
+//		dependency.storeJars.add(x_organization_core_express.class.getSimpleName());
+//	}
 }

+ 2 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_organization_core_entity.java

@@ -4,7 +4,7 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "组织管理实体类")
-public class x_organization_core_entity extends CoreA {
+@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "组织管理实体类", packageName = "com.x.organization.core.entity")
+public class x_organization_core_entity extends Compilable {
 
 }

+ 2 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_organization_core_express.java

@@ -4,7 +4,7 @@ import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 
-@Module(type = ModuleType.EXPRESS, category = ModuleCategory.OFFICIAL, name = "组织管理接口")
-public class x_organization_core_express extends CoreA {
+@Module(type = ModuleType.EXPRESS, category = ModuleCategory.OFFICIAL, name = "组织管理接口", packageName = "com.x.organization.core.express")
+public class x_organization_core_express extends Compilable {
 
 }

Некоторые файлы не были показаны из-за большого количества измененных файлов