From e7aac019e1d85b31513600895c2b62cb86e98fd8 Mon Sep 17 00:00:00 2001 From: Redkale Date: Wed, 21 Dec 2022 11:42:01 +0800 Subject: [PATCH] =?UTF-8?q?javax.annotation=E5=8C=85=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E8=87=B3org.redkale.annotation;=20javax.persistence=E5=8C=85?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E8=87=B3org.redkale.persistence?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/javax/annotation/Priority.java | 8 +- src/main/java/javax/annotation/Resource.java | 17 +- .../java/javax/persistence/Cacheable.java | 6 +- src/main/java/javax/persistence/Column.java | 9 +- src/main/java/javax/persistence/Entity.java | 5 +- src/main/java/javax/persistence/Id.java | 9 +- src/main/java/javax/persistence/Index.java | 6 +- src/main/java/javax/persistence/Table.java | 6 +- .../java/javax/persistence/Transient.java | 9 +- .../javax/persistence/UniqueConstraint.java | 6 +- src/main/java/module-info.java | 5 +- .../java/org/redkale/annotation/AutoLoad.java | 26 +++ .../java/org/redkale/annotation/Bean.java | 23 +++ .../java/org/redkale/annotation/Command.java | 50 ++++++ .../java/org/redkale/annotation/Comment.java | 29 ++++ .../annotation/ConstructorParameters.java | 26 +++ .../redkale/annotation/LogExcludeLevel.java | 46 ++++++ .../java/org/redkale/annotation/LogLevel.java | 26 +++ .../java/org/redkale/annotation/Priority.java | 39 +++++ .../java/org/redkale/annotation/Resource.java | 42 +++++ .../redkale/annotation/ResourceListener.java | 64 ++++++++ .../org/redkale/annotation/ResourceType.java | 29 ++++ .../java/org/redkale/boot/ApiDocCommand.java | 12 +- .../java/org/redkale/boot/Application.java | 34 ++-- .../java/org/redkale/boot/ClassFilter.java | 25 +-- .../redkale/boot/LoggingSearchHandler.java | 5 +- .../java/org/redkale/boot/NodeHttpServer.java | 16 +- .../java/org/redkale/boot/NodeServer.java | 68 +++++--- .../java/org/redkale/boot/NodeSncpServer.java | 4 +- .../org/redkale/boot/PrepareCompiler.java | 5 +- .../boot/watch/AbstractWatchService.java | 2 +- .../boot/watch/FilterWatchService.java | 4 +- .../boot/watch/ServerWatchService.java | 4 +- .../boot/watch/ServiceWatchService.java | 4 +- .../boot/watch/ServletWatchService.java | 2 +- .../boot/watch/TransportWatchService.java | 4 +- .../redkale/cluster/CacheClusterAgent.java | 3 +- .../org/redkale/cluster/ClusterAgent.java | 8 +- .../org/redkale/convert/ConvertFactory.java | 2 + .../java/org/redkale/convert/DeMember.java | 4 +- .../java/org/redkale/convert/EnMember.java | 4 +- .../org/redkale/convert/ObjectEncoder.java | 15 +- .../redkale/mq/HttpMessageClusterClient.java | 2 +- .../java/org/redkale/mq/MessageAgent.java | 10 +- .../java/org/redkale/mq/MessageRecord.java | 2 +- .../java/org/redkale/net/AsyncIOGroup.java | 2 + src/main/java/org/redkale/net/Filter.java | 2 +- .../java/org/redkale/net/ProtocolServer.java | 2 +- src/main/java/org/redkale/net/Transport.java | 2 + .../org/redkale/net/TransportFactory.java | 2 + .../org/redkale/net/http/HttpContext.java | 1 + .../org/redkale/net/http/HttpRequest.java | 2 + .../java/org/redkale/net/http/HttpScope.java | 2 +- .../redkale/net/http/HttpSimpleRequest.java | 2 + src/main/java/org/redkale/net/http/Rest.java | 20 +-- .../java/org/redkale/net/http/WebSocket.java | 2 +- .../org/redkale/net/http/WebSocketEngine.java | 2 + .../org/redkale/net/http/WebSocketNode.java | 13 +- .../net/http/WebSocketNodeService.java | 4 +- .../redkale/net/http/WebSocketServlet.java | 3 +- src/main/java/org/redkale/net/sncp/Sncp.java | 29 ++-- .../redkale/net/sncp/SncpAsyncHandler.java | 1 + .../java/org/redkale/net/sncp/SncpClient.java | 15 +- .../org/redkale/net/sncp/SncpDynServlet.java | 12 +- .../org/redkale/persistence/Cacheable.java | 62 +++++++ .../java/org/redkale/persistence/Column.java | 153 ++++++++++++++++++ .../java/org/redkale/persistence/Entity.java | 49 ++++++ src/main/java/org/redkale/persistence/Id.java | 55 +++++++ .../java/org/redkale/persistence/Index.java | 69 ++++++++ .../org/redkale/persistence/SearchColumn.java | 101 ++++++++++++ .../java/org/redkale/persistence/Table.java | 92 +++++++++++ .../org/redkale/persistence/Transient.java | 45 ++++++ .../redkale/persistence/UniqueConstraint.java | 56 +++++++ .../redkale/persistence/VirtualEntity.java | 56 +++++++ .../org/redkale/service/AbstractService.java | 2 +- .../java/org/redkale/service/RetResult.java | 2 +- .../redkale/service/WebSocketNodeService.java | 3 + .../redkale/source/AbstractCacheSource.java | 3 + .../redkale/source/AbstractDataSource.java | 24 +-- .../org/redkale/source/CacheMemorySource.java | 10 +- .../org/redkale/source/DataJdbcSource.java | 9 +- .../org/redkale/source/DataMemorySource.java | 7 +- .../org/redkale/source/DataSqlSource.java | 13 +- .../org/redkale/source/DistributeTable.java | 2 + .../java/org/redkale/source/EntityCache.java | 20 ++- .../java/org/redkale/source/EntityInfo.java | 76 +++++++-- .../java/org/redkale/source/FilterBean.java | 2 +- .../java/org/redkale/source/FilterKey.java | 2 +- .../org/redkale/source/FilterNodeBean.java | 3 +- src/main/java/org/redkale/source/Flipper.java | 2 +- .../java/org/redkale/source/PageBean.java | 2 +- .../java/org/redkale/source/SearchColumn.java | 8 +- .../java/org/redkale/source/SearchQuery.java | 2 +- .../org/redkale/source/VirtualEntity.java | 6 +- src/main/java/org/redkale/util/AnyValue.java | 2 + src/main/java/org/redkale/util/AutoLoad.java | 2 + src/main/java/org/redkale/util/Bean.java | 1 + src/main/java/org/redkale/util/Command.java | 1 + src/main/java/org/redkale/util/Comment.java | 1 + .../redkale/util/ConstructorParameters.java | 5 +- src/main/java/org/redkale/util/Creator.java | 2 + .../org/redkale/util/InstanceProvider.java | 2 +- .../org/redkale/util/LogExcludeLevel.java | 1 + src/main/java/org/redkale/util/LogLevel.java | 1 + .../java/org/redkale/util/ResourceEvent.java | 2 + .../org/redkale/util/ResourceFactory.java | 41 +++-- .../org/redkale/util/ResourceListener.java | 4 +- .../java/org/redkale/util/ResourceType.java | 5 +- src/main/java/org/redkale/util/Version.java | 6 +- .../redkale/test/convert/BsonMainTest.java | 4 +- .../org/redkale/test/convert/Fortune.java | 2 +- .../java/org/redkale/test/convert/World.java | 2 +- .../org/redkale/test/rest/HelloEntity.java | 4 +- .../org/redkale/test/rest/HelloService.java | 2 +- .../org/redkale/test/rest/HelloService2.java | 2 +- .../redkale/test/rest/SimpleRestServlet.java | 2 +- .../java/org/redkale/test/rest/UserInfo.java | 2 +- .../test/rest/_DynHelloRestServlet1.java | 2 +- .../test/rest/_DynHelloRestServlet2.java | 2 +- .../redkale/test/service/ABMainService.java | 2 +- .../org/redkale/test/service/BCService.java | 2 +- .../org/redkale/test/sncp/SncpTestBean.java | 2 +- .../test/sncp/SncpTestServiceImpl.java | 2 + .../test/sncp/_DynLocalSncpTestService.java | 2 +- .../redkale/test/source/CacheTestBean.java | 3 +- .../redkale/test/source/FilterNodeTest.java | 6 +- .../org/redkale/test/source/JsonRecord.java | 4 +- .../org/redkale/test/source/LoginRecord.java | 5 +- .../redkale/test/source/LoginTestRecord.java | 2 +- .../redkale/test/source/LoginUserRecord.java | 5 +- .../redkale/test/source/TestSourceCache.java | 7 +- .../org/redkale/test/source/UserDetail.java | 5 +- .../org/redkale/test/util/CreatorRecord.java | 1 + .../test/util/ResourceListenerTest.java | 3 +- .../redkale/test/util/ResourceLoaderTest.java | 2 +- .../org/redkale/test/util/ResourceTest.java | 4 +- .../test/websocket/ChatWebSocketServlet.java | 2 +- .../java/org/redkale/test/ws/ChatService.java | 4 +- .../org/redkale/test/ws/ChatWebSocket.java | 2 +- .../wsdync/_DyncChatWebSocketServlet.java | 2 +- 140 files changed, 1674 insertions(+), 272 deletions(-) create mode 100644 src/main/java/org/redkale/annotation/AutoLoad.java create mode 100644 src/main/java/org/redkale/annotation/Bean.java create mode 100644 src/main/java/org/redkale/annotation/Command.java create mode 100644 src/main/java/org/redkale/annotation/Comment.java create mode 100644 src/main/java/org/redkale/annotation/ConstructorParameters.java create mode 100644 src/main/java/org/redkale/annotation/LogExcludeLevel.java create mode 100644 src/main/java/org/redkale/annotation/LogLevel.java create mode 100644 src/main/java/org/redkale/annotation/Priority.java create mode 100644 src/main/java/org/redkale/annotation/Resource.java create mode 100644 src/main/java/org/redkale/annotation/ResourceListener.java create mode 100644 src/main/java/org/redkale/annotation/ResourceType.java create mode 100644 src/main/java/org/redkale/persistence/Cacheable.java create mode 100644 src/main/java/org/redkale/persistence/Column.java create mode 100644 src/main/java/org/redkale/persistence/Entity.java create mode 100644 src/main/java/org/redkale/persistence/Id.java create mode 100644 src/main/java/org/redkale/persistence/Index.java create mode 100644 src/main/java/org/redkale/persistence/SearchColumn.java create mode 100644 src/main/java/org/redkale/persistence/Table.java create mode 100644 src/main/java/org/redkale/persistence/Transient.java create mode 100644 src/main/java/org/redkale/persistence/UniqueConstraint.java create mode 100644 src/main/java/org/redkale/persistence/VirtualEntity.java diff --git a/src/main/java/javax/annotation/Priority.java b/src/main/java/javax/annotation/Priority.java index 30f376277..9401516a3 100644 --- a/src/main/java/javax/annotation/Priority.java +++ b/src/main/java/javax/annotation/Priority.java @@ -16,16 +16,16 @@ */ package javax.annotation; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; +import java.lang.annotation.*; /** * 值越大,优先级越高 * * @since Common Annotations 1.2 + * + * @deprecated replace by org.redkale.annotation.Priority */ +@Deprecated @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Priority { diff --git a/src/main/java/javax/annotation/Resource.java b/src/main/java/javax/annotation/Resource.java index e4aa22c8a..c4d0b7202 100644 --- a/src/main/java/javax/annotation/Resource.java +++ b/src/main/java/javax/annotation/Resource.java @@ -5,14 +5,14 @@ */ package javax.annotation; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; +import java.lang.annotation.*; /** * @since Common Annotations 1.0 + * + * @deprecated replace by org.redkale.annotation.Resource */ +@Deprecated @Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Resource { @@ -32,15 +32,6 @@ public @interface Resource { // APPLICATION // } // - /** - * 是否必须存在 - * - * @return boolean - * - * @since 2.8.0 - */ - public boolean required() default false; - /** * 资源名称 * diff --git a/src/main/java/javax/persistence/Cacheable.java b/src/main/java/javax/persistence/Cacheable.java index 45238dd98..fe33d6196 100644 --- a/src/main/java/javax/persistence/Cacheable.java +++ b/src/main/java/javax/persistence/Cacheable.java @@ -17,8 +17,7 @@ package javax.persistence; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; +import java.lang.annotation.*; /** * Specifies whether an entity should be cached if caching is enabled @@ -33,7 +32,10 @@ import java.lang.annotation.Target; * not be cached by the provider. * * @since Java Persistence 2.0 + * + * @deprecated replace by org.redkale.persistence.Cacheable */ +@Deprecated @Target({TYPE}) @Retention(RUNTIME) public @interface Cacheable { diff --git a/src/main/java/javax/persistence/Column.java b/src/main/java/javax/persistence/Column.java index ba1bfc25f..9b6503d83 100644 --- a/src/main/java/javax/persistence/Column.java +++ b/src/main/java/javax/persistence/Column.java @@ -15,11 +15,9 @@ ***************************************************************************** */ package javax.persistence; -import java.lang.annotation.Target; -import java.lang.annotation.Retention; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.*; /** * Specifies the mapped column for a persistent property or field. @@ -48,7 +46,10 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * * * @since Java Persistence 1.0 + * + * @deprecated replace by org.redkale.persistence.Column */ +@Deprecated @Target({METHOD, FIELD}) @Retention(RUNTIME) public @interface Column { diff --git a/src/main/java/javax/persistence/Entity.java b/src/main/java/javax/persistence/Entity.java index d3f4716a7..de8fd7209 100644 --- a/src/main/java/javax/persistence/Entity.java +++ b/src/main/java/javax/persistence/Entity.java @@ -15,16 +15,19 @@ ******************************************************************************/ package javax.persistence; -import java.lang.annotation.*; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.*; /** * Specifies that the class is an entity. This annotation is applied to the * entity class. * * @since Java Persistence 1.0 + * + * @deprecated replace by org.redkale.persistence.Entity */ +@Deprecated @Inherited @Documented @Target(TYPE) diff --git a/src/main/java/javax/persistence/Id.java b/src/main/java/javax/persistence/Id.java index 522560aa2..5cb6feb74 100644 --- a/src/main/java/javax/persistence/Id.java +++ b/src/main/java/javax/persistence/Id.java @@ -15,11 +15,9 @@ ******************************************************************************/ package javax.persistence; -import java.lang.annotation.Target; -import java.lang.annotation.Retention; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.*; /** * Specifies the primary key of an entity. @@ -48,7 +46,10 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * see GeneratedValue * * @since Java Persistence 1.0 + * + * @deprecated replace by org.redkale.persistence.Id */ +@Deprecated @Target({METHOD, FIELD}) @Retention(RUNTIME) diff --git a/src/main/java/javax/persistence/Index.java b/src/main/java/javax/persistence/Index.java index b5f5d9909..10f2e1adf 100644 --- a/src/main/java/javax/persistence/Index.java +++ b/src/main/java/javax/persistence/Index.java @@ -15,8 +15,7 @@ package javax.persistence; import static java.lang.annotation.RetentionPolicy.RUNTIME; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; +import java.lang.annotation.*; /** * Used in schema generation to specify creation of an index. @@ -38,8 +37,11 @@ import java.lang.annotation.Target; * ASC (ascending order) is assumed. * * @since Java Persistence 2.1 + * + * @deprecated replace by org.redkale.persistence.Index * */ +@Deprecated @Target({}) @Retention(RUNTIME) public @interface Index { diff --git a/src/main/java/javax/persistence/Table.java b/src/main/java/javax/persistence/Table.java index 9da7348aa..b02d2e1b9 100644 --- a/src/main/java/javax/persistence/Table.java +++ b/src/main/java/javax/persistence/Table.java @@ -15,10 +15,9 @@ ***************************************************************************** */ package javax.persistence; -import java.lang.annotation.Target; -import java.lang.annotation.Retention; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.*; /** * Specifies the primary table for the annotated entity. Additional @@ -37,7 +36,10 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * * * @since Java Persistence 1.0 + * + * @deprecated replace by org.redkale.persistence.Table */ +@Deprecated @Target(TYPE) @Retention(RUNTIME) public @interface Table { diff --git a/src/main/java/javax/persistence/Transient.java b/src/main/java/javax/persistence/Transient.java index 81446afd7..449038fb3 100644 --- a/src/main/java/javax/persistence/Transient.java +++ b/src/main/java/javax/persistence/Transient.java @@ -15,11 +15,9 @@ ******************************************************************************/ package javax.persistence; -import java.lang.annotation.Target; -import java.lang.annotation.Retention; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.*; /** * Specifies that the property or field is not persistent. It is used @@ -38,7 +36,10 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * * * @since Java Persistence 1.0 + * + * @deprecated replace by org.redkale.persistence.Transient */ +@Deprecated @Target({METHOD, FIELD}) @Retention(RUNTIME) diff --git a/src/main/java/javax/persistence/UniqueConstraint.java b/src/main/java/javax/persistence/UniqueConstraint.java index ccb736f0f..26f29d05a 100644 --- a/src/main/java/javax/persistence/UniqueConstraint.java +++ b/src/main/java/javax/persistence/UniqueConstraint.java @@ -15,9 +15,8 @@ ***************************************************************************** */ package javax.persistence; -import java.lang.annotation.Target; -import java.lang.annotation.Retention; import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.*; /** * Specifies that a unique constraint is to be included in @@ -35,7 +34,10 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * * * @since Java Persistence 1.0 + * + * @deprecated replace by org.redkale.persistence.UniqueConstraint */ +@Deprecated @Target({}) @Retention(RUNTIME) public @interface UniqueConstraint { diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index e91bd4a50..28ec122fe 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -13,9 +13,7 @@ module redkale { requires java.sql; requires jdk.unsupported; //sun.misc.Unsafe - exports javax.annotation; - exports javax.persistence; - + exports org.redkale.annotation; exports org.redkale.asm; exports org.redkale.boot; exports org.redkale.boot.watch; @@ -29,6 +27,7 @@ module redkale { exports org.redkale.net.client; exports org.redkale.net.http; exports org.redkale.net.sncp; + exports org.redkale.persistence; exports org.redkale.service; exports org.redkale.source; exports org.redkale.util; diff --git a/src/main/java/org/redkale/annotation/AutoLoad.java b/src/main/java/org/redkale/annotation/AutoLoad.java new file mode 100644 index 000000000..c6aa92c37 --- /dev/null +++ b/src/main/java/org/redkale/annotation/AutoLoad.java @@ -0,0 +1,26 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.annotation; + +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.*; + +/** + * 自动加载。 使用场景: + * 1、被标记为@AutoLoad(false)的Service类不会被自动加载, 当被依赖时才会被加载 + * 2、被标记为@AutoLoad(false)的Servlet类不会被自动加载 + * + *

详情见: https://redkale.org + * @author zhangjx + */ +@Documented +@Target({TYPE}) +@Retention(RUNTIME) +public @interface AutoLoad { + + boolean value() default true; +} diff --git a/src/main/java/org/redkale/annotation/Bean.java b/src/main/java/org/redkale/annotation/Bean.java new file mode 100644 index 000000000..60de43c9d --- /dev/null +++ b/src/main/java/org/redkale/annotation/Bean.java @@ -0,0 +1,23 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.annotation; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * 标记参数bean + * + * @since 2.5.0 + */ +@Inherited +@Documented +@Target(TYPE) +@Retention(RUNTIME) +public @interface Bean { + +} diff --git a/src/main/java/org/redkale/annotation/Command.java b/src/main/java/org/redkale/annotation/Command.java new file mode 100644 index 000000000..b4de4f9bd --- /dev/null +++ b/src/main/java/org/redkale/annotation/Command.java @@ -0,0 +1,50 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.annotation; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * 接收命令的标记, 只能标记在本地模式下Service里参数为(String)或(String, String[])的public方法上 + * + *

+ * 详情见: https://redkale.org + * + * @author zhangjx + * + * @since 2.1.0 + */ +@Inherited +@Documented +@Target({METHOD}) +@Retention(RUNTIME) +public @interface Command { + + /** + * 命令号,没有指定值则接收所有的命令 + * + * @return String + */ + String value() default ""; + + /** + * 参数帮助说明,在value不为空命令redkale --help时显示 + * + * @return String + * + * @since 2.7.0 + */ + String description() default ""; + + /** + * 描述 + * + * @return String + */ + String comment() default ""; +} diff --git a/src/main/java/org/redkale/annotation/Comment.java b/src/main/java/org/redkale/annotation/Comment.java new file mode 100644 index 000000000..662d53314 --- /dev/null +++ b/src/main/java/org/redkale/annotation/Comment.java @@ -0,0 +1,29 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.annotation; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * 标记注释,备注 + * + *

+ * 详情见: https://redkale.org + * + * @author zhangjx + */ +@Inherited +@Documented +@Target({TYPE, METHOD, FIELD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, TYPE_PARAMETER}) +@Retention(RUNTIME) +public @interface Comment { + + String name() default ""; + + String value(); +} diff --git a/src/main/java/org/redkale/annotation/ConstructorParameters.java b/src/main/java/org/redkale/annotation/ConstructorParameters.java new file mode 100644 index 000000000..186a0a1ff --- /dev/null +++ b/src/main/java/org/redkale/annotation/ConstructorParameters.java @@ -0,0 +1,26 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.annotation; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * 类似java.beans.ConstructorProperties, 必须配合Creator使用 + * + *

+ * 详情见: https://redkale.org + * + * @author zhangjx + */ +@Documented +@Target({METHOD, CONSTRUCTOR}) +@Retention(RUNTIME) +public @interface ConstructorParameters { + + String[] value(); +} diff --git a/src/main/java/org/redkale/annotation/LogExcludeLevel.java b/src/main/java/org/redkale/annotation/LogExcludeLevel.java new file mode 100644 index 000000000..4a0bc4139 --- /dev/null +++ b/src/main/java/org/redkale/annotation/LogExcludeLevel.java @@ -0,0 +1,46 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.annotation; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * 等于level日志级别且包含keys字符串的日志才会被排除
+ * + *

+ * @LogExcludeLevel(levels = {"FINEST"}, keys = {"SET username ="})
+ * public class UserRecord {
+ *      public int userid;
+ *      public String username = "";
+ * }
+ *
+ * 这样当调用DataSource对UserRecord对象进行操作时,拼接的SQL语句含"SET username ="字样的都会在FINEST日志级别过滤掉
+ * 
+ *

+ * 详情见: https://redkale.org + * + * @author zhangjx + */ +@Documented +@Target({TYPE}) +@Retention(RUNTIME) +@Repeatable(LogExcludeLevel.LogExcludeLevels.class) +public @interface LogExcludeLevel { + + String[] levels(); + + String[] keys(); + + @Documented + @Target({TYPE}) + @Retention(RUNTIME) + @interface LogExcludeLevels { + + LogExcludeLevel[] value(); + } +} diff --git a/src/main/java/org/redkale/annotation/LogLevel.java b/src/main/java/org/redkale/annotation/LogLevel.java new file mode 100644 index 000000000..6955583d6 --- /dev/null +++ b/src/main/java/org/redkale/annotation/LogLevel.java @@ -0,0 +1,26 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.annotation; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * 被标记的日志级别以上的才会被记录 + * + *

+ * 详情见: https://redkale.org + * + * @author zhangjx + */ +@Documented +@Target({TYPE}) +@Retention(RUNTIME) +public @interface LogLevel { + + String value(); +} diff --git a/src/main/java/org/redkale/annotation/Priority.java b/src/main/java/org/redkale/annotation/Priority.java new file mode 100644 index 000000000..823bca725 --- /dev/null +++ b/src/main/java/org/redkale/annotation/Priority.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.redkale.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 值越大,优先级越高 + * + * @since Common Annotations 1.2 + */ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface Priority { + + /** + * 优先级值 + * + * @return int + */ + int value(); +} diff --git a/src/main/java/org/redkale/annotation/Resource.java b/src/main/java/org/redkale/annotation/Resource.java new file mode 100644 index 000000000..2421e0f44 --- /dev/null +++ b/src/main/java/org/redkale/annotation/Resource.java @@ -0,0 +1,42 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.annotation; + +import java.lang.annotation.*; + +/** + * @since Common Annotations 1.0 + * + * @since 2.8.0 + */ +@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface Resource { + + /** + * 是否必须存在 + * + * @return boolean + * + * @since 2.8.0 + */ + public boolean required() default true; + + /** + * 资源名称 + * + * @return String + */ + public String name() default ""; + + /** + * 依赖注入的类型 + * + * @return Class + */ + public Class type() default Object.class; + +} diff --git a/src/main/java/org/redkale/annotation/ResourceListener.java b/src/main/java/org/redkale/annotation/ResourceListener.java new file mode 100644 index 000000000..76986696e --- /dev/null +++ b/src/main/java/org/redkale/annotation/ResourceListener.java @@ -0,0 +1,64 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.annotation; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * @Resource资源被更新时的监听事件, 本注解只能标记在方法参数为ResourceEvent[]上
+ * 注意: 一个类只能存在一个@ResourceListener的方法, 多余的会被忽略
+ * 方法在资源被更新以后调用。 + * + *

+ * public class RecordService implements Service {
+ *
+ *    @Resource(name = "record.id")
+ *    private int id;
+ *
+ *    @Resource(name = "record.name")
+ *    private String name;
+ *
+ *    @ResourceListener
+ *    private void changeResource(ResourceEvent[] events) {
+ *        for(ResourceEvent event : events) {
+ *            System.out.println("@Resource = " + event.name() + " 资源变更:  newVal = " + event.newValue() + ", oldVal = " + event.oldValue());
+ *        }
+ *    }
+ *
+ *    public static void main(String[] args) throws Exception {
+ *        ResourceFactory factory = ResourceFactory.root();
+ *        factory.register("record.id", "2345");
+ *        factory.register("record.name", "my old name");
+ *        Record record = new Record();
+ *        factory.inject(record);
+ *        factory.register("record.name", "my new name");
+ *   }
+ *
+ * }
+ * 
+ * + *

+ * 详情见: https://redkale.org + * + * @author zhangjx + */ +@Documented +@Target({METHOD}) +@Retention(RUNTIME) +public @interface ResourceListener { + + /** + * 新旧值是否不同时才回调方法
+ * true: 新值与旧值不同时才回调ResourceListener方法 + * false: 只要执行了ResourceFactory.register 就回调ResourceListener方法 + * + * @since 2.7.0 + * @return boolean + */ + boolean different() default true; +} diff --git a/src/main/java/org/redkale/annotation/ResourceType.java b/src/main/java/org/redkale/annotation/ResourceType.java new file mode 100644 index 000000000..e3895a185 --- /dev/null +++ b/src/main/java/org/redkale/annotation/ResourceType.java @@ -0,0 +1,29 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.annotation; + +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.*; + +/** + * 显式的指明资源类型。 + * 调用ResourceFactory.register(Object rs)时通常执行的是ResourceFactory.register(rs.getClass(), Object rs); + * 若rs.getClass()的类标记了@ResourceType, 则使用@ResourceType.value()的class值进行注入。 + * + *

+ * 详情见: https://redkale.org + * + * @author zhangjx + */ +@Inherited +@Documented +@Target({TYPE}) +@Retention(RUNTIME) +public @interface ResourceType { + + Class value(); +} diff --git a/src/main/java/org/redkale/boot/ApiDocCommand.java b/src/main/java/org/redkale/boot/ApiDocCommand.java index aaf26ee86..b63ec2b1d 100644 --- a/src/main/java/org/redkale/boot/ApiDocCommand.java +++ b/src/main/java/org/redkale/boot/ApiDocCommand.java @@ -13,11 +13,12 @@ import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.*; import java.util.logging.*; -import javax.persistence.*; +import org.redkale.annotation.Comment; import org.redkale.convert.*; import org.redkale.convert.json.*; import org.redkale.mq.MessageMultiConsumer; import org.redkale.net.http.*; +import org.redkale.persistence.*; import org.redkale.service.RetResult; import org.redkale.source.*; import org.redkale.util.*; @@ -261,14 +262,17 @@ public final class ApiDocCommand { Column col = field.getAnnotation(Column.class); FilterColumn fc = field.getAnnotation(FilterColumn.class); Comment comment = field.getAnnotation(Comment.class); + org.redkale.util.Comment comment2 = field.getAnnotation(org.redkale.util.Comment.class); if (comment != null) { fieldmap.put("comment", comment.value()); + } else if (comment2 != null) { + fieldmap.put("comment", comment2.value()); } else if (col != null) { fieldmap.put("comment", col.comment()); } else if (fc != null) { fieldmap.put("comment", fc.comment()); } - fieldmap.put("primary", !filter && (field.getAnnotation(Id.class) != null)); + fieldmap.put("primary", !filter && (field.getAnnotation(Id.class) != null || field.getAnnotation(javax.persistence.Id.class) != null)); fieldmap.put("updatable", (filter || col == null || col.updatable())); if (servlet.getClass().getAnnotation(Rest.RestDyn.class) != null) { @@ -444,6 +448,8 @@ public final class ApiDocCommand { } if (desc.isEmpty() && member.getField().getAnnotation(Comment.class) != null) { desc = member.getField().getAnnotation(Comment.class).value(); + } else if (desc.isEmpty() && member.getField().getAnnotation(org.redkale.util.Comment.class) != null) { + desc = member.getField().getAnnotation(org.redkale.util.Comment.class).value(); } } else if (member.getMethod() != null) { Column col = member.getMethod().getAnnotation(Column.class); @@ -459,6 +465,8 @@ public final class ApiDocCommand { } if (desc.isEmpty() && member.getMethod().getAnnotation(Comment.class) != null) { desc = member.getMethod().getAnnotation(Comment.class).value(); + } else if (desc.isEmpty() && member.getMethod().getAnnotation(org.redkale.util.Comment.class) != null) { + desc = member.getMethod().getAnnotation(org.redkale.util.Comment.class).value(); } } if (!desc.isEmpty()) schemaMap.put("description", desc); diff --git a/src/main/java/org/redkale/boot/Application.java b/src/main/java/org/redkale/boot/Application.java index a00142dba..33a337d5a 100644 --- a/src/main/java/org/redkale/boot/Application.java +++ b/src/main/java/org/redkale/boot/Application.java @@ -5,15 +5,12 @@ */ package org.redkale.boot; -import org.redkale.cluster.ClusterAgent; -import org.redkale.util.RedkaleClassLoader; -import org.redkale.net.TransportGroupInfo; import java.io.*; import java.lang.reflect.*; import java.net.*; import java.net.http.HttpClient; import java.nio.ByteBuffer; -import java.nio.channels.*; +import java.nio.channels.DatagramChannel; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.*; @@ -21,8 +18,8 @@ import java.util.concurrent.*; import java.util.concurrent.atomic.*; import java.util.function.Consumer; import java.util.logging.*; -import javax.annotation.*; import javax.net.ssl.SSLContext; +import org.redkale.annotation.Resource; import org.redkale.boot.ClassFilter.FilterEntry; import org.redkale.cluster.*; import org.redkale.convert.Convert; @@ -36,7 +33,7 @@ import org.redkale.service.Service; import org.redkale.source.*; import org.redkale.util.AnyValue.DefaultAnyValue; import org.redkale.util.*; -import org.redkale.watch.*; +import org.redkale.watch.WatchServlet; /** * @@ -998,16 +995,23 @@ public final class Application { @Override public Object load(ResourceFactory rf, String srcResourceName, final Object srcObj, String resourceName, Field field, final Object attachment) { try { + String resName = null; Resource res = field.getAnnotation(Resource.class); - if (res == null) return null; + if (res != null) { + resName = res.name(); + } else { + javax.annotation.Resource res2 = field.getAnnotation(javax.annotation.Resource.class); + if (res2 != null) resName = res2.name(); + } + if (resName == null) return null; if (srcObj instanceof Service && Sncp.isRemote((Service) srcObj)) return null; //远程模式不得注入 Class type = field.getType(); if (type == Application.class) { field.set(srcObj, application); return application; } else if (type == ResourceFactory.class) { - boolean serv = RESNAME_SERVER_RESFACTORY.equals(res.name()) || res.name().equalsIgnoreCase("server"); - ResourceFactory rs = serv ? rf : (res.name().isEmpty() ? application.resourceFactory : null); + boolean serv = RESNAME_SERVER_RESFACTORY.equals(resName) || resName.equalsIgnoreCase("server"); + ResourceFactory rs = serv ? rf : (resName.isEmpty() ? application.resourceFactory : null); field.set(srcObj, rs); return rs; } else if (type == TransportFactory.class) { @@ -1017,7 +1021,7 @@ public final class Application { NodeServer server = null; for (NodeServer ns : application.getNodeServers()) { if (ns.getClass() != NodeSncpServer.class) continue; - if (res.name().equals(ns.server.getName())) { + if (resName.equals(ns.server.getName())) { server = ns; break; } @@ -1028,7 +1032,7 @@ public final class Application { NodeServer server = null; for (NodeServer ns : application.getNodeServers()) { if (ns.getClass() != NodeHttpServer.class) continue; - if (res.name().equals(ns.server.getName())) { + if (resName.equals(ns.server.getName())) { server = ns; break; } @@ -1039,7 +1043,7 @@ public final class Application { NodeServer server = null; for (NodeServer ns : application.getNodeServers()) { if (ns.getClass() != NodeWatchServer.class) continue; - if (res.name().equals(ns.server.getName())) { + if (resName.equals(ns.server.getName())) { server = ns; break; } @@ -1067,7 +1071,7 @@ public final class Application { //------------------------------------ 注册 java.net.http.HttpClient ------------------------------------ resourceFactory.register((ResourceFactory rf, String srcResourceName, final Object srcObj, String resourceName, Field field, final Object attachment) -> { try { - if (field.getAnnotation(Resource.class) == null) return null; + if (field.getAnnotation(Resource.class) == null && field.getAnnotation(javax.annotation.Resource.class) == null) return null; java.net.http.HttpClient.Builder builder = java.net.http.HttpClient.newBuilder(); if (resourceName.endsWith(".1.1")) { builder.version(HttpClient.Version.HTTP_1_1); @@ -1087,7 +1091,7 @@ public final class Application { //------------------------------------ 注册 HttpSimpleClient ------------------------------------ resourceFactory.register((ResourceFactory rf, String srcResourceName, final Object srcObj, String resourceName, Field field, final Object attachment) -> { try { - if (field.getAnnotation(Resource.class) == null) return null; + if (field.getAnnotation(Resource.class) == null && field.getAnnotation(javax.annotation.Resource.class) == null) return null; HttpSimpleClient httpClient = HttpSimpleClient.create(clientAsyncGroup); field.set(srcObj, httpClient); rf.inject(resourceName, httpClient, null); // 给其可能包含@Resource的字段赋值; @@ -1130,7 +1134,7 @@ public final class Application { //------------------------------------ 注册 HttpMessageClient ------------------------------------ resourceFactory.register((ResourceFactory rf, String srcResourceName, final Object srcObj, String resourceName, Field field, final Object attachment) -> { try { - if (field.getAnnotation(Resource.class) == null) return null; + if (field.getAnnotation(Resource.class) == null && field.getAnnotation(javax.annotation.Resource.class) == null) return null; if (clusterAgent == null) { HttpMessageClient messageClient = new HttpMessageLocalClient(application, resourceName); field.set(srcObj, messageClient); diff --git a/src/main/java/org/redkale/boot/ClassFilter.java b/src/main/java/org/redkale/boot/ClassFilter.java index 0f3eaa52e..7cdf1e00f 100644 --- a/src/main/java/org/redkale/boot/ClassFilter.java +++ b/src/main/java/org/redkale/boot/ClassFilter.java @@ -6,7 +6,7 @@ package org.redkale.boot; import java.io.*; -import java.lang.annotation.*; +import java.lang.annotation.Annotation; import java.lang.reflect.Modifier; import java.net.*; import java.nio.charset.StandardCharsets; @@ -15,10 +15,11 @@ import java.util.concurrent.*; import java.util.function.Predicate; import java.util.jar.*; import java.util.logging.*; -import java.util.regex.*; -import javax.annotation.Priority; -import org.redkale.util.*; +import java.util.regex.Pattern; +import org.redkale.annotation.AutoLoad; +import org.redkale.annotation.*; import org.redkale.util.AnyValue.DefaultAnyValue; +import org.redkale.util.*; /** * class过滤器, 符合条件的class会保留下来存入FilterEntry。 @@ -164,10 +165,10 @@ public final class ClassFilter { * * @param property application.xml中对应class节点下的property属性项 * @param clazzname class名称 - * @param autoscan 为true表示自动扫描的, false表示显著调用filter, AutoLoad的注解将被忽略 + * @param autoScan 为true表示自动扫描的, false表示显著调用filter, AutoLoad的注解将被忽略 * @param url URL */ - public final void filter(AnyValue property, String clazzname, boolean autoscan, URL url) { + public final void filter(AnyValue property, String clazzname, boolean autoScan, URL url) { boolean r = accept0(property, clazzname); ClassFilter cf = r ? this : null; if (r && ands != null) { @@ -187,7 +188,7 @@ public final class ClassFilter { if (cf == null || clazzname.startsWith("sun.") || clazzname.contains("module-info")) return; try { Class clazz = classLoader.loadClass(clazzname); - if (!cf.accept(property, clazz, autoscan)) return; + if (!cf.accept(property, clazz, autoScan)) return; if (cf.conf != null) { if (property == null) { property = cf.conf; @@ -202,10 +203,12 @@ public final class ClassFilter { } AutoLoad auto = (AutoLoad) clazz.getAnnotation(AutoLoad.class); - if ((expectPredicate != null && expectPredicate.test(clazzname)) || (autoscan && auto != null && !auto.value())) { //自动扫描且被标记为@AutoLoad(false)的 - expectEntrys.add(new FilterEntry(clazz, autoscan, true, property)); + org.redkale.util.AutoLoad auto2 = (org.redkale.util.AutoLoad) clazz.getAnnotation(org.redkale.util.AutoLoad.class); + if ((expectPredicate != null && expectPredicate.test(clazzname)) || (autoScan && auto != null && !auto.value()) + || (autoScan && auto2 != null && !auto2.value())) { //自动扫描且被标记为@AutoLoad(false)的 + expectEntrys.add(new FilterEntry(clazz, autoScan, true, property)); } else { - entrys.add(new FilterEntry(clazz, autoscan, false, property)); + entrys.add(new FilterEntry(clazz, autoScan, false, property)); } } catch (Throwable cfe) { if (logger.isLoggable(Level.FINEST) && !clazzname.startsWith("sun.") && !clazzname.startsWith("javax.") @@ -534,7 +537,7 @@ public final class ClassFilter { Set classes = cache.get(url); if (classes == null) { classes = new LinkedHashSet<>(); - try ( JarFile jar = new JarFile(URLDecoder.decode(url.getFile(), StandardCharsets.UTF_8))) { + try (JarFile jar = new JarFile(URLDecoder.decode(url.getFile(), StandardCharsets.UTF_8))) { Enumeration it = jar.entries(); while (it.hasMoreElements()) { String entryname = it.nextElement().getName().replace('/', '.'); diff --git a/src/main/java/org/redkale/boot/LoggingSearchHandler.java b/src/main/java/org/redkale/boot/LoggingSearchHandler.java index c2f3a5c3f..00e318c96 100644 --- a/src/main/java/org/redkale/boot/LoggingSearchHandler.java +++ b/src/main/java/org/redkale/boot/LoggingSearchHandler.java @@ -9,13 +9,16 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.*; import java.util.logging.Formatter; import java.util.regex.Pattern; -import javax.persistence.*; + import static org.redkale.boot.Application.RESNAME_APP_NAME; import org.redkale.convert.*; import org.redkale.convert.json.JsonConvert; +import org.redkale.persistence.SearchColumn; +import org.redkale.persistence.*; import org.redkale.source.*; import org.redkale.util.*; + /** * 基于SearchSource的日志输出类 *

diff --git a/src/main/java/org/redkale/boot/NodeHttpServer.java b/src/main/java/org/redkale/boot/NodeHttpServer.java index 9dd477743..3766fe9c3 100644 --- a/src/main/java/org/redkale/boot/NodeHttpServer.java +++ b/src/main/java/org/redkale/boot/NodeHttpServer.java @@ -12,7 +12,7 @@ import java.util.*; import java.util.concurrent.CountDownLatch; import java.util.logging.Level; import java.util.stream.Stream; -import javax.annotation.*; +import org.redkale.annotation.*; import static org.redkale.boot.Application.RESNAME_SNCP_ADDR; import org.redkale.boot.ClassFilter.FilterEntry; import org.redkale.cluster.ClusterAgent; @@ -20,7 +20,7 @@ import org.redkale.mq.MessageAgent; import org.redkale.net.*; import org.redkale.net.http.*; import org.redkale.net.sncp.Sncp; -import org.redkale.service.*; +import org.redkale.service.Service; import org.redkale.util.AnyValue.DefaultAnyValue; import org.redkale.util.*; import org.redkale.watch.*; @@ -104,7 +104,7 @@ public class NodeHttpServer extends NodeServer { final ResourceFactory regFactory = application.getResourceFactory(); resourceFactory.register((ResourceFactory rf, String srcResourceName, final Object srcObj, final String resourceName, Field field, Object attachment) -> { //主要用于单点的服务 try { - if (field.getAnnotation(Resource.class) == null) return null; + if (field.getAnnotation(Resource.class) == null && field.getAnnotation(javax.annotation.Resource.class) == null) return null; if (!(srcObj instanceof WebSocketServlet)) return null; ResourceTypeLoader loader = null; ResourceFactory sncpResFactory = null; @@ -114,9 +114,14 @@ public class NodeHttpServer extends NodeServer { loader = sncpResFactory.findTypeLoader(WebSocketNode.class, field); if (loader != null) break; } - if (loader != null) loader.load(sncpResFactory, srcResourceName, srcObj, resourceName, field, attachment); + Service nodeService = null; + if (loader != null) { + nodeService = (Service) loader.load(sncpResFactory, srcResourceName, srcObj, resourceName, field, attachment); + } synchronized (regFactory) { - Service nodeService = (Service) rf.find(resourceName, WebSocketNode.class); + if (nodeService == null) { + nodeService = (Service) rf.find(resourceName, WebSocketNode.class); + } if (sncpResFactory != null && resourceFactory.find(RESNAME_SNCP_ADDR, String.class) == null) { resourceFactory.register(RESNAME_SNCP_ADDR, InetSocketAddress.class, sncpResFactory.find(RESNAME_SNCP_ADDR, InetSocketAddress.class)); resourceFactory.register(RESNAME_SNCP_ADDR, SocketAddress.class, sncpResFactory.find(RESNAME_SNCP_ADDR, SocketAddress.class)); @@ -126,6 +131,7 @@ public class NodeHttpServer extends NodeServer { MessageAgent messageAgent = null; try { Field c = WebSocketServlet.class.getDeclaredField("messageAgent"); + RedkaleClassLoader.putReflectionField("messageAgent", c); c.setAccessible(true); messageAgent = (MessageAgent) c.get(srcObj); } catch (Exception ex) { diff --git a/src/main/java/org/redkale/boot/NodeServer.java b/src/main/java/org/redkale/boot/NodeServer.java index 0d4cdefb1..9f5417cb2 100644 --- a/src/main/java/org/redkale/boot/NodeServer.java +++ b/src/main/java/org/redkale/boot/NodeServer.java @@ -5,22 +5,23 @@ */ package org.redkale.boot; -import org.redkale.cluster.ClusterAgent; -import org.redkale.mq.MessageAgent; -import org.redkale.util.RedkaleClassLoader; import java.io.*; import java.lang.annotation.Annotation; import java.lang.reflect.*; import java.net.*; -import java.nio.file.*; +import java.nio.file.Path; import java.util.*; -import java.util.concurrent.*; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicInteger; -import java.util.function.*; +import java.util.function.BiConsumer; import java.util.logging.*; -import javax.annotation.*; +import org.redkale.annotation.AutoLoad; +import org.redkale.annotation.Command; +import org.redkale.annotation.*; import static org.redkale.boot.Application.*; import org.redkale.boot.ClassFilter.FilterEntry; +import org.redkale.cluster.ClusterAgent; +import org.redkale.mq.MessageAgent; import org.redkale.net.Filter; import org.redkale.net.*; import org.redkale.net.http.*; @@ -215,18 +216,25 @@ public abstract class NodeServer { //------------------------------------- 注册 Resource -------------------------------------------------------- resourceFactory.register((ResourceFactory rf, String srcResourceName, final Object srcObj, String resourceName, Field field, final Object attachment) -> { try { + String resName = null; Resource res = field.getAnnotation(Resource.class); - if (res == null || !res.name().startsWith("properties.")) return null; + if (res != null) { + resName = res.name(); + } else { + javax.annotation.Resource res2 = field.getAnnotation(javax.annotation.Resource.class); + if (res2 != null) resName = res2.name(); + } + if (resName == null || !resName.startsWith("properties.")) return null; if ((srcObj instanceof Service) && Sncp.isRemote((Service) srcObj)) return null; //远程模式不得注入 DataSource Class type = field.getType(); if (type != AnyValue.class && type != AnyValue[].class) return null; Object resource = null; final AnyValue properties = application.getAppConfig().getAnyValue("properties"); if (properties != null && type == AnyValue.class) { - resource = properties.getAnyValue(res.name().substring("properties.".length())); + resource = properties.getAnyValue(resName.substring("properties.".length())); appResFactory.register(resourceName, AnyValue.class, resource); } else if (properties != null && type == AnyValue[].class) { - resource = properties.getAnyValues(res.name().substring("properties.".length())); + resource = properties.getAnyValues(resName.substring("properties.".length())); appResFactory.register(resourceName, AnyValue[].class, resource); } field.set(srcObj, resource); @@ -241,13 +249,17 @@ public abstract class NodeServer { resourceFactory.register((ResourceFactory rf, String srcResourceName, final Object srcObj, String resourceName, Field field, final Object attachment) -> { Class resServiceType = Service.class; try { - if (field.getAnnotation(Resource.class) == null) return null; + if (field.getAnnotation(Resource.class) == null && field.getAnnotation(javax.annotation.Resource.class) == null) return null; if ((srcObj instanceof Service) && Sncp.isRemote((Service) srcObj)) return null; //远程模式不得注入 AutoLoad Service if (!Service.class.isAssignableFrom(field.getType())) return null; resServiceType = (Class) field.getType(); if (resServiceType.getAnnotation(Local.class) == null) return null; + boolean auto = true; AutoLoad al = resServiceType.getAnnotation(AutoLoad.class); - if (al == null || al.value()) return null; + if (al != null) auto = al.value(); + org.redkale.util.AutoLoad al2 = resServiceType.getAnnotation(org.redkale.util.AutoLoad.class); + if (al2 != null) auto = al2.value(); + if (auto) return null; //ResourceFactory resfactory = (isSNCP() ? appResFactory : resourceFactory); SncpClient client = srcObj instanceof Service ? Sncp.getSncpClient((Service) srcObj) : null; @@ -270,7 +282,7 @@ public abstract class NodeServer { //------------------------------------- 注册 DataSource -------------------------------------------------------- resourceFactory.register((ResourceFactory rf, String srcResourceName, final Object srcObj, String resourceName, Field field, final Object attachment) -> { try { - if (field.getAnnotation(Resource.class) == null) return null; + if (field.getAnnotation(Resource.class) == null && field.getAnnotation(javax.annotation.Resource.class) == null) return null; if ((srcObj instanceof Service) && Sncp.isRemote((Service) srcObj)) return null; //远程模式不得注入 DataSource DataSource source = application.loadDataSource(resourceName, false); field.set(srcObj, source); @@ -286,7 +298,7 @@ public abstract class NodeServer { @Override public Object load(ResourceFactory rf, String srcResourceName, final Object srcObj, final String resourceName, Field field, final Object attachment) { try { - if (field.getAnnotation(Resource.class) == null) return null; + if (field.getAnnotation(Resource.class) == null && field.getAnnotation(javax.annotation.Resource.class) == null) return null; if (!(srcObj instanceof Service)) throw new RuntimeException("CacheSource must be inject in Service, cannot " + srcObj); if ((srcObj instanceof Service) && Sncp.isRemote((Service) srcObj)) return null; //远程模式不需要注入 CacheSource final Service srcService = (Service) srcObj; @@ -322,19 +334,33 @@ public abstract class NodeServer { @Override public Object load(ResourceFactory rf, String srcResourceName, final Object srcObj, final String resourceName, Field field, final Object attachment) { try { - if (field.getAnnotation(Resource.class) == null) return null; + if (field.getAnnotation(Resource.class) == null && field.getAnnotation(javax.annotation.Resource.class) == null) return null; if ((srcObj instanceof Service) && Sncp.isRemote((Service) srcObj)) return null; //远程模式不需要注入 WebSocketNode Service nodeService = (Service) rf.find(resourceName, WebSocketNode.class); + MessageAgent messageAgent = null; + if (srcObj instanceof Service) { + messageAgent = Sncp.getMessageAgent((Service) srcObj); + } else if (srcObj instanceof WebSocketServlet) { + try { + Field c = WebSocketServlet.class.getDeclaredField("messageAgent"); + RedkaleClassLoader.putReflectionField("messageAgent", c); + c.setAccessible(true); + messageAgent = (MessageAgent) c.get(srcObj); + } catch (Exception ex) { + logger.log(Level.WARNING, "WebSocketServlet getMessageAgent error", ex); + } + } if (nodeService == null) { final HashSet groups = new HashSet<>(); if (groups.isEmpty() && isSNCP() && NodeServer.this.sncpGroup != null) groups.add(NodeServer.this.sncpGroup); - nodeService = Sncp.createLocalService(serverClassLoader, resourceName, org.redkale.net.http.WebSocketNodeService.class, Sncp.getMessageAgent((Service) srcObj), application.getResourceFactory(), application.getSncpTransportFactory(), NodeServer.this.sncpAddress, groups, (AnyValue) null); + nodeService = Sncp.createLocalService(serverClassLoader, resourceName, org.redkale.net.http.WebSocketNodeService.class, messageAgent, application.getResourceFactory(), application.getSncpTransportFactory(), NodeServer.this.sncpAddress, groups, (AnyValue) null); (isSNCP() ? appResFactory : resourceFactory).register(resourceName, WebSocketNode.class, nodeService); ((org.redkale.net.http.WebSocketNodeService) nodeService).setName(resourceName); } resourceFactory.inject(resourceName, nodeService, self); - MessageAgent messageAgent = Sncp.getMessageAgent((Service) srcObj); - if (messageAgent != null && Sncp.getMessageAgent(nodeService) == null) Sncp.setMessageAgent(nodeService, messageAgent); + if (messageAgent != null && Sncp.getMessageAgent(nodeService) == null) { + Sncp.setMessageAgent(nodeService, messageAgent); + } field.set(srcObj, nodeService); if (Sncp.isRemote(nodeService)) { remoteServices.add(nodeService); @@ -394,7 +420,8 @@ public abstract class NodeServer { if (localed && (serviceImplClass.isInterface() || Modifier.isAbstract(serviceImplClass.getModifiers()))) continue; //本地模式不能实例化接口和抽象类的Service类 final ResourceTypeLoader resourceLoader = (ResourceFactory rf, String srcResourceName, final Object srcObj, final String resourceName, Field field, final Object attachment) -> { try { - if (SncpClient.parseMethod(serviceImplClass).isEmpty() && serviceImplClass.getAnnotation(Priority.class) == null) { //class没有可用的方法且没有标记启动优先级的, 通常为BaseService + if (SncpClient.parseMethod(serviceImplClass).isEmpty() + && (serviceImplClass.getAnnotation(Priority.class) == null && serviceImplClass.getAnnotation(javax.annotation.Priority.class) == null)) { //class没有可用的方法且没有标记启动优先级的, 通常为BaseService if (!serviceImplClass.getName().startsWith("org.redkale.") && !serviceImplClass.getSimpleName().contains("Base")) { logger.log(Level.FINE, serviceImplClass + " cannot load because not found less one public non-final method"); } @@ -729,7 +756,8 @@ public abstract class NodeServer { //do { public方法不用递归 for (Method m : loop.getMethods()) { Command c = m.getAnnotation(Command.class); - if (c == null) continue; + org.redkale.util.Command c2 = m.getAnnotation(org.redkale.util.Command.class); + if (c == null && c2 == null) continue; if (Modifier.isStatic(m.getModifiers())) { logger.log(Level.WARNING, m + " is static on @Command"); continue; diff --git a/src/main/java/org/redkale/boot/NodeSncpServer.java b/src/main/java/org/redkale/boot/NodeSncpServer.java index 293d0d3de..0bc517c84 100644 --- a/src/main/java/org/redkale/boot/NodeSncpServer.java +++ b/src/main/java/org/redkale/boot/NodeSncpServer.java @@ -6,7 +6,7 @@ package org.redkale.boot; import java.lang.reflect.Modifier; -import java.net.*; +import java.net.InetSocketAddress; import java.util.*; import java.util.logging.Level; import org.redkale.boot.ClassFilter.FilterEntry; @@ -14,8 +14,8 @@ import org.redkale.mq.MessageAgent; import org.redkale.net.*; import org.redkale.net.sncp.*; import org.redkale.service.*; -import org.redkale.util.*; import org.redkale.util.AnyValue.DefaultAnyValue; +import org.redkale.util.*; /** * SNCP Server节点的配置Server diff --git a/src/main/java/org/redkale/boot/PrepareCompiler.java b/src/main/java/org/redkale/boot/PrepareCompiler.java index a76ae9993..2c984b355 100644 --- a/src/main/java/org/redkale/boot/PrepareCompiler.java +++ b/src/main/java/org/redkale/boot/PrepareCompiler.java @@ -6,13 +6,14 @@ package org.redkale.boot; import java.lang.reflect.Modifier; -import javax.persistence.Entity; + +import org.redkale.annotation.Bean; +import org.redkale.persistence.Entity; import org.redkale.boot.ClassFilter.FilterEntry; import org.redkale.convert.Decodeable; import org.redkale.convert.bson.BsonFactory; import org.redkale.convert.json.*; import org.redkale.source.*; -import org.redkale.util.*; /** * 执行一次Application.run提前获取所有动态类 diff --git a/src/main/java/org/redkale/boot/watch/AbstractWatchService.java b/src/main/java/org/redkale/boot/watch/AbstractWatchService.java index 26a3482f4..19c51dffb 100644 --- a/src/main/java/org/redkale/boot/watch/AbstractWatchService.java +++ b/src/main/java/org/redkale/boot/watch/AbstractWatchService.java @@ -6,7 +6,7 @@ package org.redkale.boot.watch; import org.redkale.service.AbstractService; -import org.redkale.util.Comment; +import org.redkale.annotation.Comment; import org.redkale.watch.WatchService; /** diff --git a/src/main/java/org/redkale/boot/watch/FilterWatchService.java b/src/main/java/org/redkale/boot/watch/FilterWatchService.java index d47522581..837b9a271 100644 --- a/src/main/java/org/redkale/boot/watch/FilterWatchService.java +++ b/src/main/java/org/redkale/boot/watch/FilterWatchService.java @@ -7,11 +7,11 @@ package org.redkale.boot.watch; import java.io.IOException; import java.util.List; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.boot.*; import org.redkale.net.http.*; import org.redkale.service.RetResult; -import org.redkale.util.Comment; +import org.redkale.annotation.Comment; /** * diff --git a/src/main/java/org/redkale/boot/watch/ServerWatchService.java b/src/main/java/org/redkale/boot/watch/ServerWatchService.java index 80e7476c9..e395a0b79 100644 --- a/src/main/java/org/redkale/boot/watch/ServerWatchService.java +++ b/src/main/java/org/redkale/boot/watch/ServerWatchService.java @@ -9,12 +9,12 @@ import java.io.IOException; import java.net.InetSocketAddress; import java.util.*; import java.util.stream.Stream; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.boot.*; import org.redkale.net.Server; import org.redkale.net.http.*; import org.redkale.service.RetResult; -import org.redkale.util.Comment; +import org.redkale.annotation.Comment; /** * diff --git a/src/main/java/org/redkale/boot/watch/ServiceWatchService.java b/src/main/java/org/redkale/boot/watch/ServiceWatchService.java index 8513e4fcb..725799adb 100644 --- a/src/main/java/org/redkale/boot/watch/ServiceWatchService.java +++ b/src/main/java/org/redkale/boot/watch/ServiceWatchService.java @@ -7,7 +7,9 @@ package org.redkale.boot.watch; import java.lang.reflect.*; import java.util.*; -import javax.annotation.Resource; + +import org.redkale.annotation.Comment; +import org.redkale.annotation.Resource; import org.redkale.boot.*; import org.redkale.convert.json.JsonConvert; import org.redkale.net.http.*; diff --git a/src/main/java/org/redkale/boot/watch/ServletWatchService.java b/src/main/java/org/redkale/boot/watch/ServletWatchService.java index 1b7fa095c..d02c2c93f 100644 --- a/src/main/java/org/redkale/boot/watch/ServletWatchService.java +++ b/src/main/java/org/redkale/boot/watch/ServletWatchService.java @@ -5,7 +5,7 @@ */ package org.redkale.boot.watch; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.boot.Application; import org.redkale.net.TransportFactory; import org.redkale.net.http.*; diff --git a/src/main/java/org/redkale/boot/watch/TransportWatchService.java b/src/main/java/org/redkale/boot/watch/TransportWatchService.java index 408421424..6ba1d082a 100644 --- a/src/main/java/org/redkale/boot/watch/TransportWatchService.java +++ b/src/main/java/org/redkale/boot/watch/TransportWatchService.java @@ -10,7 +10,9 @@ import java.net.*; import java.nio.channels.AsynchronousSocketChannel; import java.util.List; import java.util.concurrent.TimeUnit; -import javax.annotation.Resource; + +import org.redkale.annotation.Comment; +import org.redkale.annotation.Resource; import org.redkale.boot.Application; import org.redkale.net.*; import org.redkale.net.http.*; diff --git a/src/main/java/org/redkale/cluster/CacheClusterAgent.java b/src/main/java/org/redkale/cluster/CacheClusterAgent.java index db6b79352..cf00d5e1f 100644 --- a/src/main/java/org/redkale/cluster/CacheClusterAgent.java +++ b/src/main/java/org/redkale/cluster/CacheClusterAgent.java @@ -9,7 +9,8 @@ import java.net.*; import java.util.*; import java.util.concurrent.*; import java.util.logging.Level; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; +import org.redkale.annotation.ResourceListener; import org.redkale.boot.*; import org.redkale.convert.json.JsonConvert; import org.redkale.service.Service; diff --git a/src/main/java/org/redkale/cluster/ClusterAgent.java b/src/main/java/org/redkale/cluster/ClusterAgent.java index b6f2cc8e6..e75299fe4 100644 --- a/src/main/java/org/redkale/cluster/ClusterAgent.java +++ b/src/main/java/org/redkale/cluster/ClusterAgent.java @@ -11,9 +11,11 @@ import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.*; import java.util.logging.Logger; -import javax.annotation.Resource; -import org.redkale.boot.*; +import org.redkale.annotation.AutoLoad; +import org.redkale.annotation.*; +import org.redkale.annotation.ResourceListener; import static org.redkale.boot.Application.*; +import org.redkale.boot.*; import org.redkale.convert.ConvertDisabled; import org.redkale.convert.json.JsonConvert; import org.redkale.mq.MessageMultiConsumer; @@ -153,6 +155,8 @@ public abstract class ClusterAgent { if ("SNCP".equalsIgnoreCase(protocol) && service.getClass().getAnnotation(Local.class) != null) return false; AutoLoad al = service.getClass().getAnnotation(AutoLoad.class); if (al != null && !al.value() && service.getClass().getAnnotation(Local.class) != null) return false; + org.redkale.util.AutoLoad al2 = service.getClass().getAnnotation(org.redkale.util.AutoLoad.class); + if (al2 != null && !al2.value() && service.getClass().getAnnotation(Local.class) != null) return false; if (service instanceof WebSocketNode) { if (((WebSocketNode) service).getLocalWebSocketEngine() == null) return false; } diff --git a/src/main/java/org/redkale/convert/ConvertFactory.java b/src/main/java/org/redkale/convert/ConvertFactory.java index 5b6396824..e2cbedb66 100644 --- a/src/main/java/org/redkale/convert/ConvertFactory.java +++ b/src/main/java/org/redkale/convert/ConvertFactory.java @@ -16,6 +16,8 @@ import java.util.concurrent.*; import java.util.concurrent.atomic.*; import java.util.regex.Pattern; import java.util.stream.*; + +import org.redkale.annotation.ConstructorParameters; import org.redkale.convert.bson.BsonConvert; import org.redkale.convert.ext.*; import org.redkale.convert.json.JsonConvert; diff --git a/src/main/java/org/redkale/convert/DeMember.java b/src/main/java/org/redkale/convert/DeMember.java index 93acef646..c13e574b8 100644 --- a/src/main/java/org/redkale/convert/DeMember.java +++ b/src/main/java/org/redkale/convert/DeMember.java @@ -6,7 +6,9 @@ package org.redkale.convert; import java.lang.reflect.*; -import javax.persistence.Column; + +import org.redkale.annotation.Comment; +import org.redkale.persistence.Column; import org.redkale.source.FilterColumn; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/convert/EnMember.java b/src/main/java/org/redkale/convert/EnMember.java index cca2243e3..b6a116809 100644 --- a/src/main/java/org/redkale/convert/EnMember.java +++ b/src/main/java/org/redkale/convert/EnMember.java @@ -6,7 +6,9 @@ package org.redkale.convert; import java.lang.reflect.*; -import javax.persistence.Column; + +import org.redkale.annotation.Comment; +import org.redkale.persistence.Column; import org.redkale.source.FilterColumn; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/convert/ObjectEncoder.java b/src/main/java/org/redkale/convert/ObjectEncoder.java index ffa078401..ef66d86f8 100644 --- a/src/main/java/org/redkale/convert/ObjectEncoder.java +++ b/src/main/java/org/redkale/convert/ObjectEncoder.java @@ -7,6 +7,7 @@ package org.redkale.convert; import java.lang.reflect.*; import java.util.*; +import org.redkale.annotation.ConstructorParameters; import org.redkale.convert.ext.StringSimpledCoder; import org.redkale.util.*; @@ -312,8 +313,18 @@ public class ObjectEncoder implements Encodeable { static String[] findConstructorProperties(Creator creator) { if (creator == null) return null; try { - ConstructorParameters cps = creator.getClass().getMethod("create", Object[].class).getAnnotation(ConstructorParameters.class); - return cps == null ? null : cps.value(); + Method method = creator.getClass().getMethod("create", Object[].class); + ConstructorParameters cps = method.getAnnotation(ConstructorParameters.class); + String[] vals = null; + if (cps != null) { + vals = cps.value(); + } else { + org.redkale.util.ConstructorParameters cps2 = method.getAnnotation(org.redkale.util.ConstructorParameters.class); + if (cps2 != null) { + vals = cps2.value(); + } + } + return vals; } catch (Exception e) { return null; } diff --git a/src/main/java/org/redkale/mq/HttpMessageClusterClient.java b/src/main/java/org/redkale/mq/HttpMessageClusterClient.java index 08ae61ac3..73625f472 100644 --- a/src/main/java/org/redkale/mq/HttpMessageClusterClient.java +++ b/src/main/java/org/redkale/mq/HttpMessageClusterClient.java @@ -13,7 +13,7 @@ import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.*; import java.util.logging.Level; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.boot.Application; import org.redkale.cluster.ClusterAgent; import org.redkale.net.http.*; diff --git a/src/main/java/org/redkale/mq/MessageAgent.java b/src/main/java/org/redkale/mq/MessageAgent.java index 501636756..2feaec3c7 100644 --- a/src/main/java/org/redkale/mq/MessageAgent.java +++ b/src/main/java/org/redkale/mq/MessageAgent.java @@ -10,9 +10,11 @@ import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicLong; import java.util.logging.*; import java.util.stream.Collectors; -import javax.annotation.Resource; -import org.redkale.boot.*; +import org.redkale.annotation.AutoLoad; +import org.redkale.annotation.*; +import org.redkale.annotation.ResourceListener; import static org.redkale.boot.Application.RESNAME_APP_NODEID; +import org.redkale.boot.*; import org.redkale.net.Servlet; import org.redkale.net.http.*; import org.redkale.net.sncp.*; @@ -252,6 +254,8 @@ public abstract class MessageAgent implements Resourcable { public final synchronized void putService(NodeHttpServer ns, Service service, HttpServlet servlet) { AutoLoad al = service.getClass().getAnnotation(AutoLoad.class); if (al != null && !al.value() && service.getClass().getAnnotation(Local.class) != null) return; + org.redkale.util.AutoLoad al2 = service.getClass().getAnnotation(org.redkale.util.AutoLoad.class); + if (al2 != null && !al2.value() && service.getClass().getAnnotation(Local.class) != null) return; { //标记@RestService(name = " ") 需要跳过, 一般作为模板引擎 RestService rest = service.getClass().getAnnotation(RestService.class); if (rest != null && !rest.name().isEmpty() && rest.name().trim().isEmpty()) return; @@ -266,6 +270,8 @@ public abstract class MessageAgent implements Resourcable { public final synchronized void putService(NodeSncpServer ns, Service service, SncpServlet servlet) { AutoLoad al = service.getClass().getAnnotation(AutoLoad.class); if (al != null && !al.value() && service.getClass().getAnnotation(Local.class) != null) return; + org.redkale.util.AutoLoad al2 = service.getClass().getAnnotation(org.redkale.util.AutoLoad.class); + if (al2 != null && !al2.value() && service.getClass().getAnnotation(Local.class) != null) return; String topic = generateSncpReqTopic(service); String consumerid = generateSncpConsumerid(topic, service); if (messageNodes.containsKey(consumerid)) throw new RuntimeException("consumerid(" + consumerid + ") is repeat"); diff --git a/src/main/java/org/redkale/mq/MessageRecord.java b/src/main/java/org/redkale/mq/MessageRecord.java index c6ff59410..589c9a19b 100644 --- a/src/main/java/org/redkale/mq/MessageRecord.java +++ b/src/main/java/org/redkale/mq/MessageRecord.java @@ -12,7 +12,7 @@ import org.redkale.convert.bson.BsonConvert; import org.redkale.convert.json.JsonConvert; import org.redkale.net.http.HttpSimpleRequest; import org.redkale.net.sncp.SncpRequest; -import org.redkale.util.Comment; +import org.redkale.annotation.Comment; /** * 存在MQ里面的数据结构

diff --git a/src/main/java/org/redkale/net/AsyncIOGroup.java b/src/main/java/org/redkale/net/AsyncIOGroup.java index 71178d969..8977879fb 100644 --- a/src/main/java/org/redkale/net/AsyncIOGroup.java +++ b/src/main/java/org/redkale/net/AsyncIOGroup.java @@ -11,6 +11,8 @@ import java.nio.ByteBuffer; import java.nio.channels.*; import java.util.concurrent.*; import java.util.concurrent.atomic.*; + +import org.redkale.annotation.ResourceType; import org.redkale.util.*; /** diff --git a/src/main/java/org/redkale/net/Filter.java b/src/main/java/org/redkale/net/Filter.java index 562ca4251..dbe9ce6b2 100644 --- a/src/main/java/org/redkale/net/Filter.java +++ b/src/main/java/org/redkale/net/Filter.java @@ -6,7 +6,7 @@ package org.redkale.net; import java.io.IOException; -import javax.annotation.Priority; +import org.redkale.annotation.Priority; import org.redkale.util.*; /** diff --git a/src/main/java/org/redkale/net/ProtocolServer.java b/src/main/java/org/redkale/net/ProtocolServer.java index 47e4fbd8e..3e043c8b5 100644 --- a/src/main/java/org/redkale/net/ProtocolServer.java +++ b/src/main/java/org/redkale/net/ProtocolServer.java @@ -8,7 +8,7 @@ package org.redkale.net; import java.io.IOException; import java.net.*; import java.util.*; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.boot.Application; import org.redkale.util.AnyValue; diff --git a/src/main/java/org/redkale/net/Transport.java b/src/main/java/org/redkale/net/Transport.java index d26ebfcdd..4e7bd2d8e 100644 --- a/src/main/java/org/redkale/net/Transport.java +++ b/src/main/java/org/redkale/net/Transport.java @@ -16,6 +16,8 @@ import java.util.concurrent.atomic.*; import java.util.function.Supplier; import java.util.logging.Level; import javax.net.ssl.SSLContext; + +import org.redkale.annotation.ConstructorParameters; import org.redkale.convert.*; import org.redkale.convert.json.JsonConvert; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/net/TransportFactory.java b/src/main/java/org/redkale/net/TransportFactory.java index 4bdd9c839..085ff11d0 100644 --- a/src/main/java/org/redkale/net/TransportFactory.java +++ b/src/main/java/org/redkale/net/TransportFactory.java @@ -14,6 +14,8 @@ import java.util.concurrent.*; import java.util.logging.*; import java.util.stream.Collectors; import javax.net.ssl.SSLContext; + +import org.redkale.annotation.Comment; import org.redkale.service.Service; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/net/http/HttpContext.java b/src/main/java/org/redkale/net/http/HttpContext.java index f7622eb7d..6c2d02c88 100644 --- a/src/main/java/org/redkale/net/http/HttpContext.java +++ b/src/main/java/org/redkale/net/http/HttpContext.java @@ -5,6 +5,7 @@ */ package org.redkale.net.http; +import org.redkale.annotation.ConstructorParameters; import org.redkale.asm.MethodDebugVisitor; import java.nio.channels.CompletionHandler; import java.security.*; diff --git a/src/main/java/org/redkale/net/http/HttpRequest.java b/src/main/java/org/redkale/net/http/HttpRequest.java index 5dc58b4f4..72007c8f9 100644 --- a/src/main/java/org/redkale/net/http/HttpRequest.java +++ b/src/main/java/org/redkale/net/http/HttpRequest.java @@ -14,6 +14,8 @@ import java.nio.charset.*; import java.util.*; import java.util.function.Supplier; import java.util.logging.Level; + +import org.redkale.annotation.Comment; import org.redkale.convert.*; import org.redkale.convert.json.JsonConvert; import org.redkale.net.*; diff --git a/src/main/java/org/redkale/net/http/HttpScope.java b/src/main/java/org/redkale/net/http/HttpScope.java index 1203cbdda..507a61f5e 100644 --- a/src/main/java/org/redkale/net/http/HttpScope.java +++ b/src/main/java/org/redkale/net/http/HttpScope.java @@ -11,7 +11,7 @@ import java.net.HttpCookie; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.function.*; -import javax.persistence.Transient; +import org.redkale.persistence.Transient; import org.redkale.convert.*; import org.redkale.convert.json.JsonConvert; import org.redkale.util.TypeToken; diff --git a/src/main/java/org/redkale/net/http/HttpSimpleRequest.java b/src/main/java/org/redkale/net/http/HttpSimpleRequest.java index 3ae4b15c6..77796ee2f 100644 --- a/src/main/java/org/redkale/net/http/HttpSimpleRequest.java +++ b/src/main/java/org/redkale/net/http/HttpSimpleRequest.java @@ -10,6 +10,8 @@ import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; + +import org.redkale.annotation.Comment; import org.redkale.convert.*; import org.redkale.convert.json.JsonConvert; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/net/http/Rest.java b/src/main/java/org/redkale/net/http/Rest.java index 135d89086..5173e89da 100644 --- a/src/main/java/org/redkale/net/http/Rest.java +++ b/src/main/java/org/redkale/net/http/Rest.java @@ -5,19 +5,19 @@ */ package org.redkale.net.http; -import org.redkale.asm.MethodDebugVisitor; import java.io.*; -import java.lang.annotation.*; -import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.*; import java.lang.reflect.*; import java.net.InetSocketAddress; import java.nio.channels.CompletionHandler; import java.util.*; -import java.util.concurrent.*; -import javax.annotation.Resource; -import org.redkale.asm.*; +import java.util.concurrent.CompletionStage; +import org.redkale.annotation.Comment; +import org.redkale.annotation.*; import static org.redkale.asm.ClassWriter.COMPUTE_FRAMES; +import org.redkale.asm.*; import static org.redkale.asm.Opcodes.*; import org.redkale.asm.Type; import org.redkale.convert.*; @@ -26,8 +26,8 @@ import org.redkale.mq.*; import org.redkale.net.*; import org.redkale.net.sncp.Sncp; import org.redkale.service.*; -import org.redkale.util.*; import org.redkale.source.Flipper; +import org.redkale.util.*; /** *

@@ -313,7 +313,7 @@ public final class Rest { Class clzz = webSocketType; do { for (Field field : clzz.getDeclaredFields()) { - if (field.getAnnotation(Resource.class) == null) continue; + if (field.getAnnotation(Resource.class) == null && field.getAnnotation(javax.annotation.Resource.class) == null) continue; if (resourcesFieldNameSet.contains(field.getName())) continue; if (Modifier.isStatic(field.getModifiers())) { throw new RuntimeException(field + " cannot static on createRestWebSocketServlet"); @@ -478,11 +478,13 @@ public final class Rest { for (int i = 0; i < resourcesFields.size(); i++) { Field field = resourcesFields.get(i); Resource res = field.getAnnotation(Resource.class); + javax.annotation.Resource res2 = field.getAnnotation(javax.annotation.Resource.class); java.lang.reflect.Type fieldType = field.getGenericType(); fv = cw.visitField(ACC_PRIVATE, "_redkale_resource_" + i, Type.getDescriptor(field.getType()), fieldType == field.getType() ? null : Utility.getTypeDescriptor(fieldType), null); { av0 = fv.visitAnnotation(resDesc, true); - av0.visit("name", res.name()); + av0.visit("name", res != null ? res.name() : res2.name()); + av0.visit("required", res != null ? res.required() : false); av0.visitEnd(); } fv.visitEnd(); diff --git a/src/main/java/org/redkale/net/http/WebSocket.java b/src/main/java/org/redkale/net/http/WebSocket.java index 277bba952..04e596d1a 100644 --- a/src/main/java/org/redkale/net/http/WebSocket.java +++ b/src/main/java/org/redkale/net/http/WebSocket.java @@ -18,7 +18,7 @@ import java.util.stream.Stream; import java.util.zip.*; import org.redkale.convert.Convert; import org.redkale.net.AsyncConnection; -import org.redkale.util.Comment; +import org.redkale.annotation.Comment; /** *

diff --git a/src/main/java/org/redkale/net/http/WebSocketEngine.java b/src/main/java/org/redkale/net/http/WebSocketEngine.java
index 4d7ccfa56..9f64f312b 100644
--- a/src/main/java/org/redkale/net/http/WebSocketEngine.java
+++ b/src/main/java/org/redkale/net/http/WebSocketEngine.java
@@ -13,6 +13,8 @@ import java.util.concurrent.atomic.*;
 import java.util.function.*;
 import java.util.logging.*;
 import java.util.stream.*;
+
+import org.redkale.annotation.Comment;
 import org.redkale.convert.Convert;
 import org.redkale.net.Cryptor;
 import static org.redkale.net.http.WebSocket.RETCODE_GROUP_EMPTY;
diff --git a/src/main/java/org/redkale/net/http/WebSocketNode.java b/src/main/java/org/redkale/net/http/WebSocketNode.java
index a83faab46..604a366ad 100644
--- a/src/main/java/org/redkale/net/http/WebSocketNode.java
+++ b/src/main/java/org/redkale/net/http/WebSocketNode.java
@@ -5,20 +5,21 @@
  */
 package org.redkale.net.http;
 
-import static org.redkale.net.http.WebSocket.*;
-import java.io.*;
-import java.net.*;
+import java.io.Serializable;
+import java.net.InetSocketAddress;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.logging.*;
 import java.util.stream.*;
-import javax.annotation.*;
-import org.redkale.boot.*;
+import org.redkale.annotation.Comment;
+import org.redkale.annotation.*;
+import org.redkale.boot.Application;
 import org.redkale.convert.*;
 import org.redkale.convert.json.JsonConvert;
 import org.redkale.mq.MessageAgent;
+import static org.redkale.net.http.WebSocket.RETCODE_GROUP_EMPTY;
 import org.redkale.service.*;
-import org.redkale.source.*;
+import org.redkale.source.CacheSource;
 import org.redkale.util.*;
 
 /**
diff --git a/src/main/java/org/redkale/net/http/WebSocketNodeService.java b/src/main/java/org/redkale/net/http/WebSocketNodeService.java
index 978395485..a1ba87944 100644
--- a/src/main/java/org/redkale/net/http/WebSocketNodeService.java
+++ b/src/main/java/org/redkale/net/http/WebSocketNodeService.java
@@ -7,7 +7,9 @@ import java.util.*;
 import java.util.concurrent.*;
 import java.util.logging.Level;
 import static org.redkale.net.http.WebSocket.RETCODE_GROUP_EMPTY;
-import static org.redkale.net.http.WebSocketNode.WS_SOURCE_KEY_USERID_PREFIX;
+
+import org.redkale.annotation.AutoLoad;
+import org.redkale.annotation.ResourceType;
 import org.redkale.service.*;
 import org.redkale.util.*;
 
diff --git a/src/main/java/org/redkale/net/http/WebSocketServlet.java b/src/main/java/org/redkale/net/http/WebSocketServlet.java
index b897cb8e1..e9b29ee66 100644
--- a/src/main/java/org/redkale/net/http/WebSocketServlet.java
+++ b/src/main/java/org/redkale/net/http/WebSocketServlet.java
@@ -16,7 +16,8 @@ import java.util.concurrent.CompletableFuture;
 import java.util.function.*;
 import java.util.logging.*;
 import java.util.zip.*;
-import javax.annotation.*;
+import org.redkale.annotation.*;
+import org.redkale.annotation.Comment;
 import org.redkale.boot.Application;
 import static org.redkale.boot.Application.RESNAME_SERVER_RESFACTORY;
 import org.redkale.convert.Convert;
diff --git a/src/main/java/org/redkale/net/sncp/Sncp.java b/src/main/java/org/redkale/net/sncp/Sncp.java
index 5e91538ca..52c0be489 100644
--- a/src/main/java/org/redkale/net/sncp/Sncp.java
+++ b/src/main/java/org/redkale/net/sncp/Sncp.java
@@ -5,7 +5,6 @@
  */
 package org.redkale.net.sncp;
 
-import org.redkale.asm.MethodDebugVisitor;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.*;
 import java.net.InetSocketAddress;
@@ -13,7 +12,8 @@ import java.nio.ByteBuffer;
 import java.nio.channels.CompletionHandler;
 import java.security.*;
 import java.util.*;
-import javax.annotation.Resource;
+import org.redkale.annotation.*;
+import org.redkale.annotation.ResourceType;
 import static org.redkale.asm.ClassWriter.COMPUTE_FRAMES;
 import org.redkale.asm.*;
 import static org.redkale.asm.Opcodes.*;
@@ -100,25 +100,30 @@ public abstract class Sncp {
 
     public static int getVersion(Service service) {
         if (service == null) return -1;
-        Version ver = service.getClass().getAnnotation(Version.class);
-        return ver == null ? -1 : ver.value();
+        return -1; //暂不实现Version
     }
 
     public static String getResourceName(Service service) {
         if (service == null) return null;
         Resource res = service.getClass().getAnnotation(Resource.class);
-        return res == null ? null : res.name();
+        if (res != null) return res.name();
+        javax.annotation.Resource res2 = service.getClass().getAnnotation(javax.annotation.Resource.class);
+        return res2 == null ? null : res2.name();
     }
 
     public static Class getServiceType(Service service) {
         ResourceType rt = service.getClass().getAnnotation(ResourceType.class);
-        return rt == null ? service.getClass() : rt.value();
+        if (rt != null) return rt.value();
+        org.redkale.util.ResourceType rt2 = service.getClass().getAnnotation(org.redkale.util.ResourceType.class);
+        return rt2 == null ? service.getClass() : rt2.value();
     }
 
     public static Class getResourceType(Service service) {
         if (service == null) return null;
         ResourceType type = service.getClass().getAnnotation(ResourceType.class);
-        return type == null ? getServiceType(service) : type.value();
+        if (type != null) return type.value();
+        org.redkale.util.ResourceType rt2 = service.getClass().getAnnotation(org.redkale.util.ResourceType.class);
+        return rt2 == null ? getServiceType(service) : rt2.value();
     }
 
     public static AnyValue getConf(Service service) {
@@ -327,7 +332,7 @@ public abstract class Sncp {
         AnnotationVisitor av0;
 
         cw.visit(V11, ACC_PUBLIC + ACC_FINAL + ACC_SUPER, newDynName, null, supDynName, null);
-        {
+        { //给动态生成的Service类标记上Resource
             av0 = cw.visitAnnotation(resDesc, true);
             av0.visit("name", name);
             av0.visitEnd();
@@ -346,7 +351,8 @@ public abstract class Sncp {
         {
             av0 = cw.visitAnnotation(Type.getDescriptor(ResourceType.class), true);
             ResourceType rty = serviceImplClass.getAnnotation(ResourceType.class);
-            av0.visit("value", Type.getType(Type.getDescriptor(rty == null ? serviceImplClass : rty.value())));
+            org.redkale.util.ResourceType rty2 = serviceImplClass.getAnnotation(org.redkale.util.ResourceType.class);
+            av0.visit("value", Type.getType(Type.getDescriptor(rty != null ? rty.value() : (rty2 != null ? rty2.value() : serviceImplClass))));
             av0.visitEnd();
         }
         {
@@ -616,7 +622,7 @@ public abstract class Sncp {
         AnnotationVisitor av0;
 
         cw.visit(V11, ACC_PUBLIC + ACC_FINAL + ACC_SUPER, newDynName, null, serviceTypeOrImplClass.isInterface() ? "java/lang/Object" : supDynName, serviceTypeOrImplClass.isInterface() ? new String[]{supDynName} : null);
-        {
+        { //给动态生成的Service类标记上Resource
             av0 = cw.visitAnnotation(resDesc, true);
             av0.visit("name", name);
             av0.visitEnd();
@@ -624,7 +630,8 @@ public abstract class Sncp {
         {
             av0 = cw.visitAnnotation(Type.getDescriptor(ResourceType.class), true);
             ResourceType rty = serviceTypeOrImplClass.getAnnotation(ResourceType.class);
-            av0.visit("value", Type.getType(Type.getDescriptor(rty == null ? serviceTypeOrImplClass : rty.value())));
+            org.redkale.util.ResourceType rty2 = serviceTypeOrImplClass.getAnnotation(org.redkale.util.ResourceType.class);
+            av0.visit("value", Type.getType(Type.getDescriptor(rty != null ? rty.value() : (rty2 != null ? rty2.value() : serviceTypeOrImplClass))));
             av0.visitEnd();
         }
         {
diff --git a/src/main/java/org/redkale/net/sncp/SncpAsyncHandler.java b/src/main/java/org/redkale/net/sncp/SncpAsyncHandler.java
index a79823a45..a48330c77 100644
--- a/src/main/java/org/redkale/net/sncp/SncpAsyncHandler.java
+++ b/src/main/java/org/redkale/net/sncp/SncpAsyncHandler.java
@@ -5,6 +5,7 @@
  */
 package org.redkale.net.sncp;
 
+import org.redkale.annotation.ConstructorParameters;
 import org.redkale.asm.MethodDebugVisitor;
 import java.nio.channels.CompletionHandler;
 import java.util.concurrent.CompletableFuture;
diff --git a/src/main/java/org/redkale/net/sncp/SncpClient.java b/src/main/java/org/redkale/net/sncp/SncpClient.java
index 50709c50a..b584688bf 100644
--- a/src/main/java/org/redkale/net/sncp/SncpClient.java
+++ b/src/main/java/org/redkale/net/sncp/SncpClient.java
@@ -5,15 +5,15 @@
  */
 package org.redkale.net.sncp;
 
-import java.lang.annotation.*;
+import java.lang.annotation.Annotation;
 import java.lang.reflect.*;
 import java.net.*;
-import java.nio.*;
-import java.nio.channels.*;
+import java.nio.ByteBuffer;
+import java.nio.channels.CompletionHandler;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.logging.*;
-import javax.annotation.Resource;
+import org.redkale.annotation.Resource;
 import org.redkale.convert.bson.*;
 import org.redkale.convert.json.*;
 import org.redkale.mq.*;
@@ -21,10 +21,8 @@ import org.redkale.net.*;
 import static org.redkale.net.sncp.SncpRequest.*;
 import static org.redkale.net.sncp.SncpResponse.fillRespHeader;
 import org.redkale.service.*;
+import org.redkale.source.*;
 import org.redkale.util.*;
-import org.redkale.service.RpcCall;
-import org.redkale.source.CacheSource;
-import org.redkale.source.DataSource;
 
 /**
  *
@@ -82,9 +80,8 @@ public final class SncpClient {
         this.messageClient = messageAgent == null ? null : messageAgent.getSncpMessageClient();
         this.topic = messageAgent == null ? null : messageAgent.generateSncpReqTopic(service);
         Class tn = serviceTypeOrImplClass;
-        Version ver = tn.getAnnotation(Version.class);
         this.serviceClass = serviceClass;
-        this.serviceVersion = ver == null ? 0 : ver.value();
+        this.serviceVersion = 0; //暂不实现Version
         this.clientSncpAddress = clientSncpAddress;
         this.name = serviceName;
         tn = ResourceFactory.getResourceType(tn);
diff --git a/src/main/java/org/redkale/net/sncp/SncpDynServlet.java b/src/main/java/org/redkale/net/sncp/SncpDynServlet.java
index 5b0503c7d..89d6a52e8 100644
--- a/src/main/java/org/redkale/net/sncp/SncpDynServlet.java
+++ b/src/main/java/org/redkale/net/sncp/SncpDynServlet.java
@@ -5,26 +5,24 @@
  */
 package org.redkale.net.sncp;
 
-import org.redkale.asm.MethodDebugVisitor;
-import static org.redkale.net.sncp.SncpRequest.DEFAULT_HEADER;
-import java.io.*;
-import java.lang.annotation.*;
+import java.io.IOException;
+import java.lang.annotation.Annotation;
 import java.lang.reflect.*;
 import java.nio.channels.CompletionHandler;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.logging.*;
-import javax.annotation.*;
-import org.redkale.asm.*;
+import org.redkale.annotation.Resource;
 import static org.redkale.asm.ClassWriter.COMPUTE_FRAMES;
+import org.redkale.asm.*;
 import static org.redkale.asm.Opcodes.*;
 import org.redkale.asm.Type;
 import org.redkale.convert.bson.*;
 import org.redkale.net.sncp.SncpAsyncHandler.DefaultSncpAsyncHandler;
+import static org.redkale.net.sncp.SncpRequest.DEFAULT_HEADER;
 import org.redkale.service.*;
 import org.redkale.util.*;
-import org.redkale.service.RpcCall;
 
 /**
  *
diff --git a/src/main/java/org/redkale/persistence/Cacheable.java b/src/main/java/org/redkale/persistence/Cacheable.java
new file mode 100644
index 000000000..7efd43ba7
--- /dev/null
+++ b/src/main/java/org/redkale/persistence/Cacheable.java
@@ -0,0 +1,62 @@
+/** *****************************************************************************
+ * Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ *     Linda DeMichiel - Java Persistence 2.1
+ *     Linda DeMichiel - Java Persistence 2.0
+ *
+ ***************************************************************************** */
+package org.redkale.persistence;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Specifies whether an entity should be cached if caching is enabled
+ * when the value of the persistence.xml caching element
+ * is ENABLE_SELECTIVE or DISABLE_SELECTIVE.
+ * The value of the Cacheable annotation is inherited by
+ * subclasses; it can be overridden by specifying
+ * Cacheable on a subclass.
+ *
+ * 

+ * Cacheable(false) means that the entity and its state must + * not be cached by the provider. + * + * @since Java Persistence 2.0 + */ +@Target({TYPE}) +@Retention(RUNTIME) +public @interface Cacheable { + + /** + * (Optional) Whether or not the entity should be cached. + * + * @return boolean + */ + boolean value() default true; + + /** + * (Optional) 定时自动更新缓存的周期秒数,为0表示不做定时更新, 大于0表示每经过interval秒后会自动从数据库中拉取数据更新Cache + * + * @return int + */ + int interval() default 0; + + /** + * DataSource是否直接返回对象的真实引用, 而不是copy一份 + * + * @return boolean + */ + boolean direct() default false; + +} diff --git a/src/main/java/org/redkale/persistence/Column.java b/src/main/java/org/redkale/persistence/Column.java new file mode 100644 index 000000000..527566b14 --- /dev/null +++ b/src/main/java/org/redkale/persistence/Column.java @@ -0,0 +1,153 @@ +/** ***************************************************************************** + * Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 + * which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Linda DeMichiel - Java Persistence 2.1 + * Linda DeMichiel - Java Persistence 2.0 + * + ***************************************************************************** */ +package org.redkale.persistence; + +import java.lang.annotation.Target; +import java.lang.annotation.Retention; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * Specifies the mapped column for a persistent property or field. + * If no Column annotation is specified, the default values apply. + * + *

+ *    Example 1:
+ *
+ *    @Column(name="DESC", nullable=false, length=512)
+ *    public String getDescription() { return description; }
+ *
+ *    Example 2:
+ *
+ *    @Column(name="DESC",
+ *            columnDefinition="CLOB NOT NULL",
+ *            table="EMP_DETAIL")
+ *    @Lob
+ *    public String getDescription() { return description; }
+ *
+ *    Example 3:
+ *
+ *    @Column(name="ORDER_COST", updatable=false, precision=12, scale=2)
+ *    public BigDecimal getCost() { return cost; }
+ *
+ * 
+ * + * + * @since Java Persistence 1.0 + */ +@Target({METHOD, FIELD}) +@Retention(RUNTIME) +public @interface Column { + + /** + * (Optional) The name of the column. Defaults to + * the property or field name. + * + * @return String + */ + String name() default ""; + + /** + * (Optional) The comment of the column. + * + * @return String + */ + String comment() default ""; + + /** + * (Optional) Whether the column is a unique key. This is a + * shortcut for the UniqueConstraint annotation at the table + * level and is useful for when the unique key constraint + * corresponds to only a single column. This constraint applies + * in addition to any constraint entailed by primary key mapping and + * to constraints specified at the table level. + * + * @return boolean + */ + boolean unique() default false; + + /** + * (Optional) Whether the database column is required. + * + * @return boolean + */ + boolean nullable() default true; + + /** + * for OpenAPI Specification 3 + * + * @return String + */ + String example() default ""; + + /** + * (Optional) Whether the column is included in SQL INSERT + * statements generated by the persistence provider. + * + * @return boolean + */ + boolean insertable() default true; + + /** + * (Optional) Whether the column is included in SQL UPDATE + * statements generated by the persistence provider. + * + * @return boolean + */ + boolean updatable() default true; + + /** + * (Optional) The name of the table that contains the column. + * If absent the column is assumed to be in the primary table. + * + * @return String + */ + @Deprecated + String table() default ""; + + /** + * (Optional) The column length. (Applies only if a + * string-valued column is used.) + * if type==String and length == 65535 then sqltype is TEXT
+ * if type==String and length <= 16777215 then sqltype is MEDIUMTEXT
+ * if type==String and length > 16777215 then sqltype is LONGTEXT
+ * if type==byte[] and length <= 65535 then sqltype is BLOB
+ * if type==byte[] and length <= 16777215 then sqltype is MEDIUMBLOB
+ * if type==byte[] and length > 16777215 then sqltype is LONGBLOB
+ * + * @return int + */ + int length() default 255; + + /** + * (Optional) The precision for a decimal (exact numeric) + * column. (Applies only if a decimal column is used.) + * Value must be set by developer if used when generating + * the DDL for the column. + * + * @return int + */ + int precision() default 0; + + /** + * (Optional) The scale for a decimal (exact numeric) column. + * (Applies only if a decimal column is used.) + * + * @return int + */ + int scale() default 0; +} diff --git a/src/main/java/org/redkale/persistence/Entity.java b/src/main/java/org/redkale/persistence/Entity.java new file mode 100644 index 000000000..d1e8be0e1 --- /dev/null +++ b/src/main/java/org/redkale/persistence/Entity.java @@ -0,0 +1,49 @@ +/******************************************************************************* + * Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 + * which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Linda DeMichiel - Java Persistence 2.1 + * Linda DeMichiel - Java Persistence 2.0 + * + ******************************************************************************/ +package org.redkale.persistence; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * Specifies that the class is an entity. This annotation is applied to the + * entity class. + * + * @since Java Persistence 1.0 + */ +@Inherited +@Documented +@Target(TYPE) +@Retention(RUNTIME) +public @interface Entity { + + /** + * (Optional) The entity name. Defaults to the unqualified + * name of the entity class. This name is used to refer to the + * entity in queries. The name must not be a reserved literal + * in the Java Persistence query language. + * @return String + */ + String name() default ""; + + /** + * (Optional) The comment of the entity. + * + * @return String + */ + String comment() default ""; +} diff --git a/src/main/java/org/redkale/persistence/Id.java b/src/main/java/org/redkale/persistence/Id.java new file mode 100644 index 000000000..3ccbe4712 --- /dev/null +++ b/src/main/java/org/redkale/persistence/Id.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 + * which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Linda DeMichiel - Java Persistence 2.1 + * Linda DeMichiel - Java Persistence 2.0 + * + ******************************************************************************/ +package org.redkale.persistence; + +import java.lang.annotation.Target; +import java.lang.annotation.Retention; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * Specifies the primary key of an entity. + * The field or property to which the Id annotation is applied + * should be one of the following types: any Java primitive type; + * any primitive wrapper type; + * String; + * java.util.Date; + * java.sql.Date; + * java.math.BigDecimal; + * java.math.BigInteger. + * + *

The mapped column for the primary key of the entity is assumed + * to be the primary key of the primary table. If no Column annotation + * is specified, the primary key column name is assumed to be the name + * of the primary key property or field. + * + *

+ *   Example:
+ *
+ *   @Id
+ *   public Long getId() { return id; }
+ * 
+ * + * @see Column + * see GeneratedValue + * + * @since Java Persistence 1.0 + */ +@Target({METHOD, FIELD}) +@Retention(RUNTIME) + +public @interface Id {} diff --git a/src/main/java/org/redkale/persistence/Index.java b/src/main/java/org/redkale/persistence/Index.java new file mode 100644 index 000000000..10c6fc7dc --- /dev/null +++ b/src/main/java/org/redkale/persistence/Index.java @@ -0,0 +1,69 @@ +/** ***************************************************************************** + * Copyright (c) 2011 - 2013 Oracle Corporation. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 + * which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Linda DeMichiel - Java Persistence 2.1 + * + ***************************************************************************** */ +package org.redkale.persistence; + +import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +/** + * Used in schema generation to specify creation of an index. + *

+ * Note that it is not necessary to specify an index for a primary key, + * as the primary key index will be created automatically. + * + *

+ * The syntax of the columnList element is a + * column_list, as follows: + * + *

+ *    column::= index_column [,index_column]*
+ *    index_column::= column_name [ASC | DESC]
+ * 
+ * + *

+ * If ASC or DESC is not specified, + * ASC (ascending order) is assumed. + * + * @since Java Persistence 2.1 + * + */ +@Target({}) +@Retention(RUNTIME) +public @interface Index { + + /** + * (Optional) The name of the index; defaults to a provider-generated name. + * + * @return String + */ + String name() default ""; + + /** + * (Required) The names of the columns to be included in the index, + * in order. + * + * @return String + */ + String columnList(); + + /** + * (Optional) Whether the index is unique. + * + * @return boolean + */ + boolean unique() default false; + +} diff --git a/src/main/java/org/redkale/persistence/SearchColumn.java b/src/main/java/org/redkale/persistence/SearchColumn.java new file mode 100644 index 000000000..4b3c8b5ea --- /dev/null +++ b/src/main/java/org/redkale/persistence/SearchColumn.java @@ -0,0 +1,101 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.persistence; + +import java.lang.annotation.Target; +import java.lang.annotation.Retention; +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * + * 搜索引擎的数据Entity依附在setter、getter方法、字段进行简单的配置
+ * + *

+ * 详情见: https://redkale.org + * + * @author zhangjx + * @since 2.4.0 + */ +@Target({FIELD}) +@Retention(RUNTIME) +public @interface SearchColumn { + + //高亮显示参数 + public static class HighLights { + + public static final String HIGHLIGHT_NAME_ID = "#[id]"; + + public static final String HIGHLIGHT_NAME_INDEX = "#[index]"; + + } + + /** + * 是否全文搜索 + * + * @return boolean + */ + boolean text() default false; + + /** + * 高亮对应的Column.name字段名,被标记的字段为虚拟字段,不会映射表中的字段
+ * 被标记的字段必须是String类型
+ * 有值时,ignore必须为true + * + * @return String + */ + String highlight() default ""; + + /** + * 解析/存储时是否屏蔽该字段 + * + * @return boolean + */ + boolean ignore() default false; + + /** + * 设置索引参数, 特殊值"false"表示不被索引 + * + * @return String + */ + String options() default ""; + + /** + * 内容是否html格式 + * + * @return boolean + */ + boolean html() default false; + + /** + * 内容是否时间类型,只有数据类型为int、long、String才有效 + * + * @return boolean + */ + boolean date() default false; + + /** + * 内容是否ip类型,只有数据类型为String才有效 + * + * @return boolean + */ + boolean ip() default false; + + /** + * 设置索引分词器 + * + * @return String + */ + String analyzer() default ""; + + /** + * 设置搜索索引分词器 + * + * @return String + */ + String searchAnalyzer() default ""; + +} diff --git a/src/main/java/org/redkale/persistence/Table.java b/src/main/java/org/redkale/persistence/Table.java new file mode 100644 index 000000000..b5277da76 --- /dev/null +++ b/src/main/java/org/redkale/persistence/Table.java @@ -0,0 +1,92 @@ +/** ***************************************************************************** + * Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 + * which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Linda DeMichiel - Java Persistence 2.1 + * Linda DeMichiel - Java Persistence 2.0 + * + ***************************************************************************** */ +package org.redkale.persistence; + +import java.lang.annotation.Target; +import java.lang.annotation.Retention; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * Specifies the primary table for the annotated entity. Additional + * tables may be specified using SecondaryTable or SecondaryTables annotation. + * + *

+ * If no Table annotation is specified for an entity + * class, the default values apply. + * + *

+ *    Example:
+ *
+ *    @Entity
+ *    @Table(name="CUST", schema="RECORDS")
+ *    public class Customer { ... }
+ * 
+ * + * @since Java Persistence 1.0 + */ +@Target(TYPE) +@Retention(RUNTIME) +public @interface Table { + + /** + * (Optional) The name of the table. + *

+ * Defaults to the entity name. + * + * @return String + */ + String name() default ""; + + /** (Optional) The catalog of the table. + *

+ * Defaults to the default catalog. + * + * @return String + */ + String catalog() default ""; + + /** + * (Optional) Unique constraints that are to be placed on + * the table. These are only used if table generation is in + * effect. These constraints apply in addition to any constraints + * specified by the Column and JoinColumn + * annotations and constraints entailed by primary key mappings. + *

+ * Defaults to no additional constraints. + * @return UniqueConstraint[] + */ + UniqueConstraint[] uniqueConstraints() default {}; + + /** + * (Optional) Indexes for the table. These are only used if + * table generation is in effect. Note that it is not necessary + * to specify an index for a primary key, as the primary key + * index will be created automatically. + * + * @return indexes + * @since Java Persistence 2.1 + */ + Index[] indexes() default {}; + + /** + * comment + * + * @return String + */ + String comment() default ""; + +} diff --git a/src/main/java/org/redkale/persistence/Transient.java b/src/main/java/org/redkale/persistence/Transient.java new file mode 100644 index 000000000..efcc9e844 --- /dev/null +++ b/src/main/java/org/redkale/persistence/Transient.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 + * which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Linda DeMichiel - Java Persistence 2.1 + * Linda DeMichiel - Java Persistence 2.0 + * + ******************************************************************************/ +package org.redkale.persistence; + +import java.lang.annotation.Target; +import java.lang.annotation.Retention; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * Specifies that the property or field is not persistent. It is used + * to annotate a property or field of an entity class, mapped + * superclass, or embeddable class. + * + *

+ *    Example:
+ *
+ *    @Entity
+ *    public class Employee {
+ *        @Id int id;
+ *        @Transient User currentUser;
+ *        ...
+ *    }
+ * 
+ * + * @since Java Persistence 1.0 + */ +@Target({METHOD, FIELD}) +@Retention(RUNTIME) + +public @interface Transient {} diff --git a/src/main/java/org/redkale/persistence/UniqueConstraint.java b/src/main/java/org/redkale/persistence/UniqueConstraint.java new file mode 100644 index 000000000..d06b5b19c --- /dev/null +++ b/src/main/java/org/redkale/persistence/UniqueConstraint.java @@ -0,0 +1,56 @@ +/** ***************************************************************************** + * Copyright (c) 2008 - 2013 Oracle Corporation. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 + * which accompanies this distribution. + * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html + * and the Eclipse Distribution License is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * Contributors: + * Linda DeMichiel - Java Persistence 2.1 + * Linda DeMichiel - Java Persistence 2.0 + * + ***************************************************************************** */ +package org.redkale.persistence; + +import java.lang.annotation.Target; +import java.lang.annotation.Retention; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * Specifies that a unique constraint is to be included in + * the generated DDL for a primary or secondary table. + * + *
+ *    Example:
+ *    @Entity
+ *    @Table(
+ *        name="EMPLOYEE",
+ *        uniqueConstraints=
+ *            @UniqueConstraint(columnNames={"EMP_ID", "EMP_NAME"})
+ *    )
+ *    public class Employee { ... }
+ * 
+ * + * @since Java Persistence 1.0 + */ +@Target({}) +@Retention(RUNTIME) +public @interface UniqueConstraint { + + /** (Optional) Constraint name. A provider-chosen name will be chosen + * if a name is not specified. + * + * @return String + * @since Java Persistence 2.0 + */ + String name() default ""; + + /** (Required) An array of the column names that make up the constraint. + * + * @return String[] + */ + String[] columnNames(); +} diff --git a/src/main/java/org/redkale/persistence/VirtualEntity.java b/src/main/java/org/redkale/persistence/VirtualEntity.java new file mode 100644 index 000000000..7622fc53e --- /dev/null +++ b/src/main/java/org/redkale/persistence/VirtualEntity.java @@ -0,0 +1,56 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.persistence; + +import org.redkale.source.DataSource; +import org.redkale.source.EntityInfo; + +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.*; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.function.*; + +/** + * VirtualEntity表示虚拟的数据实体类, 通常Entity都会映射到数据库中的某个表,而标记为@VirtualEntity的Entity类只存在EntityCache中 + * + *

+ * 详情见: https://redkale.org + * + * @author zhangjx + */ +@Documented +@Target(TYPE) +@Retention(RUNTIME) +public @interface VirtualEntity { + + /** + * DataSource是否直接返回对象的真实引用, 而不是copy一份 + * + * @return boolean + */ + boolean direct() default false; + + /** + * 初始化时数据的加载器 + * + * @return Class + */ + Class>> loader() default DefaultFunctionLoader.class; + + /** + * 默认全量加载器 + * + */ + public static class DefaultFunctionLoader implements BiFunction> { + + @Override + public CompletableFuture apply(DataSource source, EntityInfo info) { + return null; + } + } +} diff --git a/src/main/java/org/redkale/service/AbstractService.java b/src/main/java/org/redkale/service/AbstractService.java index 376107d0f..dbe7d1e6b 100644 --- a/src/main/java/org/redkale/service/AbstractService.java +++ b/src/main/java/org/redkale/service/AbstractService.java @@ -6,7 +6,7 @@ package org.redkale.service; import java.util.concurrent.*; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.boot.Application; import org.redkale.net.*; import org.redkale.net.sncp.Sncp; diff --git a/src/main/java/org/redkale/service/RetResult.java b/src/main/java/org/redkale/service/RetResult.java index b0993ead6..308651af2 100644 --- a/src/main/java/org/redkale/service/RetResult.java +++ b/src/main/java/org/redkale/service/RetResult.java @@ -10,7 +10,7 @@ import java.lang.reflect.Type; import java.util.*; import java.util.concurrent.*; import java.util.function.Function; -import javax.persistence.Column; +import org.redkale.persistence.Column; import org.redkale.convert.*; import org.redkale.convert.json.*; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/service/WebSocketNodeService.java b/src/main/java/org/redkale/service/WebSocketNodeService.java index 3d8192be9..2d9054e98 100644 --- a/src/main/java/org/redkale/service/WebSocketNodeService.java +++ b/src/main/java/org/redkale/service/WebSocketNodeService.java @@ -6,6 +6,9 @@ package org.redkale.service; import java.util.logging.Level; + +import org.redkale.annotation.AutoLoad; +import org.redkale.annotation.ResourceType; import org.redkale.net.http.*; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/source/AbstractCacheSource.java b/src/main/java/org/redkale/source/AbstractCacheSource.java index 8cbc5c8ee..1c7b0af19 100644 --- a/src/main/java/org/redkale/source/AbstractCacheSource.java +++ b/src/main/java/org/redkale/source/AbstractCacheSource.java @@ -2,6 +2,9 @@ */ package org.redkale.source; +import org.redkale.annotation.AutoLoad; +import org.redkale.annotation.ResourceListener; +import org.redkale.annotation.ResourceType; import org.redkale.service.*; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/source/AbstractDataSource.java b/src/main/java/org/redkale/source/AbstractDataSource.java index 81019871f..a94088418 100644 --- a/src/main/java/org/redkale/source/AbstractDataSource.java +++ b/src/main/java/org/redkale/source/AbstractDataSource.java @@ -11,8 +11,12 @@ import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.function.*; import java.util.stream.Stream; -import javax.persistence.Entity; +import org.redkale.annotation.AutoLoad; +import org.redkale.annotation.Comment; +import org.redkale.annotation.ResourceListener; +import org.redkale.annotation.ResourceType; import org.redkale.convert.json.JsonConvert; +import org.redkale.persistence.Entity; import org.redkale.service.*; import org.redkale.util.*; @@ -300,7 +304,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data for (T val : entitys) { if (clazz == null) { clazz = val.getClass(); - if (clazz.getAnnotation(Entity.class) == null) { + if (clazz.getAnnotation(Entity.class) == null && clazz.getAnnotation(javax.persistence.Entity.class) == null) { throw new RuntimeException("Entity Class " + clazz + " must be on Annotation @Entity"); } continue; @@ -1275,7 +1279,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data public DataBatch insert(T... entitys) { for (T t : entitys) { Objects.requireNonNull(t); - if (t.getClass().getAnnotation(Entity.class) == null) { + if (t.getClass().getAnnotation(Entity.class) == null && t.getClass().getAnnotation(javax.persistence.Entity.class) == null) { throw new RuntimeException("Entity Class " + t.getClass() + " must be on Annotation @Entity"); } this.actions.add(new InsertBatchAction1(t)); @@ -1287,7 +1291,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data public DataBatch delete(T... entitys) { for (T t : entitys) { Objects.requireNonNull(t); - if (t.getClass().getAnnotation(Entity.class) == null) { + if (t.getClass().getAnnotation(Entity.class) == null && t.getClass().getAnnotation(javax.persistence.Entity.class) == null) { throw new RuntimeException("Entity Class " + t.getClass() + " must be on Annotation @Entity"); } this.actions.add(new DeleteBatchAction1(t)); @@ -1298,7 +1302,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data @Override public DataBatch delete(Class clazz, Serializable... pks) { Objects.requireNonNull(clazz); - if (clazz.getAnnotation(Entity.class) == null) { + if (clazz.getAnnotation(Entity.class) == null && clazz.getAnnotation(javax.persistence.Entity.class) == null) { throw new RuntimeException("Entity Class " + clazz + " must be on Annotation @Entity"); } if (pks.length < 1) { @@ -1319,7 +1323,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data @Override public DataBatch delete(Class clazz, FilterNode node, Flipper flipper) { Objects.requireNonNull(clazz); - if (clazz.getAnnotation(Entity.class) == null) { + if (clazz.getAnnotation(Entity.class) == null && clazz.getAnnotation(javax.persistence.Entity.class) == null) { throw new RuntimeException("Entity Class " + clazz + " must be on Annotation @Entity"); } this.actions.add(new DeleteBatchAction3(clazz, node, flipper)); @@ -1330,7 +1334,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data public DataBatch update(T... entitys) { for (T t : entitys) { Objects.requireNonNull(t); - if (t.getClass().getAnnotation(Entity.class) == null) { + if (t.getClass().getAnnotation(Entity.class) == null && t.getClass().getAnnotation(javax.persistence.Entity.class) == null) { throw new RuntimeException("Entity Class " + t.getClass() + " must be on Annotation @Entity"); } this.actions.add(new UpdateBatchAction1(t)); @@ -1346,7 +1350,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data @Override public DataBatch update(Class clazz, Serializable pk, ColumnValue... values) { Objects.requireNonNull(clazz); - if (clazz.getAnnotation(Entity.class) == null) { + if (clazz.getAnnotation(Entity.class) == null && clazz.getAnnotation(javax.persistence.Entity.class) == null) { throw new RuntimeException("Entity Class " + clazz + " must be on Annotation @Entity"); } Objects.requireNonNull(pk); @@ -1373,7 +1377,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data @Override public DataBatch update(Class clazz, FilterNode node, Flipper flipper, ColumnValue... values) { Objects.requireNonNull(clazz); - if (clazz.getAnnotation(Entity.class) == null) { + if (clazz.getAnnotation(Entity.class) == null && clazz.getAnnotation(javax.persistence.Entity.class) == null) { throw new RuntimeException("Entity Class " + clazz + " must be on Annotation @Entity"); } if (values.length < 1) { @@ -1410,7 +1414,7 @@ public abstract class AbstractDataSource extends AbstractService implements Data @Override public DataBatch updateColumn(T entity, final FilterNode node, SelectColumn selects) { Objects.requireNonNull(entity); - if (entity.getClass().getAnnotation(Entity.class) == null) { + if (entity.getClass().getAnnotation(Entity.class) == null && entity.getClass().getAnnotation(javax.persistence.Entity.class) == null) { throw new RuntimeException("Entity Class " + entity.getClass() + " must be on Annotation @Entity"); } Objects.requireNonNull(selects); diff --git a/src/main/java/org/redkale/source/CacheMemorySource.java b/src/main/java/org/redkale/source/CacheMemorySource.java index 02e920c44..90b88d183 100644 --- a/src/main/java/org/redkale/source/CacheMemorySource.java +++ b/src/main/java/org/redkale/source/CacheMemorySource.java @@ -5,17 +5,21 @@ */ package org.redkale.source; -import java.io.*; +import java.io.Serializable; import java.lang.reflect.Type; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicLong; import java.util.function.*; import java.util.logging.*; -import javax.annotation.Resource; +import org.redkale.annotation.AutoLoad; +import org.redkale.annotation.ConstructorParameters; +import org.redkale.annotation.*; +import org.redkale.annotation.ResourceListener; +import org.redkale.annotation.ResourceType; import org.redkale.convert.*; import org.redkale.convert.json.*; -import org.redkale.service.*; +import org.redkale.service.Local; import org.redkale.util.*; /** diff --git a/src/main/java/org/redkale/source/DataJdbcSource.java b/src/main/java/org/redkale/source/DataJdbcSource.java index 021a21ce5..c7cee14a2 100644 --- a/src/main/java/org/redkale/source/DataJdbcSource.java +++ b/src/main/java/org/redkale/source/DataJdbcSource.java @@ -5,13 +5,16 @@ */ package org.redkale.source; -import java.io.*; +import java.io.Serializable; import java.sql.*; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.*; -import java.util.function.*; -import java.util.logging.*; +import java.util.function.Function; +import java.util.logging.Level; +import org.redkale.annotation.AutoLoad; +import org.redkale.annotation.ResourceListener; +import org.redkale.annotation.ResourceType; import org.redkale.service.Local; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/source/DataMemorySource.java b/src/main/java/org/redkale/source/DataMemorySource.java index de773c578..4bf49ff86 100644 --- a/src/main/java/org/redkale/source/DataMemorySource.java +++ b/src/main/java/org/redkale/source/DataMemorySource.java @@ -7,8 +7,11 @@ package org.redkale.source; import java.io.Serializable; import java.util.*; -import java.util.concurrent.*; -import java.util.function.*; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; +import org.redkale.annotation.AutoLoad; +import org.redkale.annotation.ResourceListener; +import org.redkale.annotation.ResourceType; import org.redkale.service.Local; import org.redkale.util.*; diff --git a/src/main/java/org/redkale/source/DataSqlSource.java b/src/main/java/org/redkale/source/DataSqlSource.java index 293a831ef..d12b93dac 100644 --- a/src/main/java/org/redkale/source/DataSqlSource.java +++ b/src/main/java/org/redkale/source/DataSqlSource.java @@ -13,13 +13,18 @@ import java.util.concurrent.atomic.*; import java.util.function.*; import java.util.logging.*; import java.util.stream.Stream; -import javax.annotation.Resource; +import org.redkale.annotation.AutoLoad; +import org.redkale.annotation.*; +import org.redkale.annotation.ResourceListener; +import org.redkale.annotation.ResourceType; import static org.redkale.boot.Application.*; import org.redkale.net.AsyncGroup; -import org.redkale.service.*; +import org.redkale.persistence.Table; +import org.redkale.service.Local; import org.redkale.source.EntityInfo.EntityColumn; import org.redkale.util.*; + /** * DataSource的SQL抽象实现类
* 注意: 所有的操作只能作用在一张表上,不能同时变更多张表 @@ -255,7 +260,7 @@ public abstract class DataSqlSource extends AbstractDataSource implements Functi //生成创建表的SQL protected String[] createTableSqls(EntityInfo info) { if (info == null || !autoDDL) return null; - javax.persistence.Table table = info.getType().getAnnotation(javax.persistence.Table.class); + Table table = info.getType().getAnnotation(Table.class); if ("mysql".equals(dbtype())) { //mysql StringBuilder sb = new StringBuilder(); sb.append("CREATE TABLE IF NOT EXISTS `").append(info.getOriginTable()).append("`(\n"); @@ -611,7 +616,7 @@ public abstract class DataSqlSource extends AbstractDataSource implements Functi } /** - * 将entity的对象全部加载到Cache中去,如果clazz没有被@javax.persistence.Cacheable注解则不做任何事 + * 将entity的对象全部加载到Cache中去,如果clazz没有被@org.redkale.persistence.Cacheable注解则不做任何事 * * @param Entity类泛型 * @param clazz Entity类 diff --git a/src/main/java/org/redkale/source/DistributeTable.java b/src/main/java/org/redkale/source/DistributeTable.java index c4345a256..4ba4e757b 100644 --- a/src/main/java/org/redkale/source/DistributeTable.java +++ b/src/main/java/org/redkale/source/DistributeTable.java @@ -5,6 +5,8 @@ */ package org.redkale.source; +import org.redkale.source.DistributeTableStrategy; + import java.lang.annotation.*; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.RUNTIME; diff --git a/src/main/java/org/redkale/source/EntityCache.java b/src/main/java/org/redkale/source/EntityCache.java index 076938bf6..979a5b821 100644 --- a/src/main/java/org/redkale/source/EntityCache.java +++ b/src/main/java/org/redkale/source/EntityCache.java @@ -13,7 +13,7 @@ import java.util.concurrent.atomic.*; import java.util.function.*; import java.util.logging.*; import java.util.stream.*; -import javax.persistence.*; +import org.redkale.persistence.*; import static org.redkale.source.FilterFunc.*; import org.redkale.util.*; @@ -79,19 +79,28 @@ public final class EntityCache { private CompletableFuture> loadFuture; public EntityCache(final EntityInfo info, final Cacheable c) { + this(info, c != null ? c.interval() : 0, c != null && c.direct()); + } + + EntityCache(final EntityInfo info, final int cacheInterval, final boolean cacheDirect) { this.info = info; - this.interval = c == null ? 0 : c.interval(); + this.interval = cacheInterval < 0 ? 0 : cacheInterval; this.type = info.getType(); this.arrayer = info.getArrayer(); this.creator = info.getCreator(); this.primary = info.primary; - VirtualEntity ve = info.getType().getAnnotation(VirtualEntity.class); - boolean direct = c != null && c.direct(); + org.redkale.persistence.VirtualEntity ve = info.getType().getAnnotation(org.redkale.persistence.VirtualEntity.class); + boolean direct = cacheDirect; if (!direct) direct = ve != null && ve.direct(); + { //兼容废弃类 + org.redkale.source.VirtualEntity ve2 = info.getType().getAnnotation(org.redkale.source.VirtualEntity.class); + if (!direct && ve2 != null) direct = ve2.direct(); + } this.needcopy = !direct; this.newReproduce = Reproduce.create(type, type, (m) -> { try { - return type.getDeclaredField(m).getAnnotation(Transient.class) == null; + java.lang.reflect.Field field = type.getDeclaredField(m); + return field.getAnnotation(Transient.class) == null && field.getAnnotation(javax.persistence.Transient.class) == null; } catch (Exception e) { return true; } @@ -100,6 +109,7 @@ public final class EntityCache { try { java.lang.reflect.Field field = type.getDeclaredField(m); if (field.getAnnotation(Transient.class) != null) return false; + if (field.getAnnotation(javax.persistence.Transient.class) != null) return false; Column column = field.getAnnotation(Column.class); return (column == null || column.updatable()); } catch (Exception e) { diff --git a/src/main/java/org/redkale/source/EntityInfo.java b/src/main/java/org/redkale/source/EntityInfo.java index e16fca105..e0f59a5b5 100644 --- a/src/main/java/org/redkale/source/EntityInfo.java +++ b/src/main/java/org/redkale/source/EntityInfo.java @@ -11,8 +11,12 @@ import java.util.*; import java.util.concurrent.*; import java.util.function.*; import java.util.logging.*; -import javax.persistence.*; +import org.redkale.annotation.Comment; +import org.redkale.annotation.ConstructorParameters; +import org.redkale.annotation.LogExcludeLevel; +import org.redkale.annotation.LogLevel; import org.redkale.convert.json.*; +import org.redkale.persistence.*; import org.redkale.util.*; /** @@ -240,7 +244,9 @@ public final class EntityInfo { //--------------------------------------------- LogLevel ll = type.getAnnotation(LogLevel.class); - this.logLevel = ll == null ? Integer.MIN_VALUE : Level.parse(ll.value()).intValue(); + org.redkale.util.LogLevel ll2 = type.getAnnotation(org.redkale.util.LogLevel.class); + String levelName = ll != null ? ll.value() : (ll2 != null ? ll2.value() : null); + this.logLevel = levelName == null ? Integer.MIN_VALUE : Level.parse(levelName).intValue(); Map> logmap = new HashMap<>(); for (LogExcludeLevel lel : type.getAnnotationsByType(LogExcludeLevel.class)) { for (String onelevel : lel.levels()) { @@ -255,6 +261,19 @@ public final class EntityInfo { } } } + for (org.redkale.util.LogExcludeLevel lel : type.getAnnotationsByType(org.redkale.util.LogExcludeLevel.class)) { + for (String onelevel : lel.levels()) { + int level = Level.parse(onelevel).intValue(); + HashSet set = logmap.get(level); + if (set == null) { + set = new HashSet<>(); + logmap.put(level, set); + } + for (String key : lel.keys()) { + set.add(key); + } + } + } if (logmap.isEmpty()) { this.excludeLogLevels = null; } else { @@ -262,24 +281,37 @@ public final class EntityInfo { logmap.forEach((l, set) -> excludeLogLevels.put(l, set.toArray(new String[set.size()]))); } //--------------------------------------------- - Table t = type.getAnnotation(Table.class); - if (type.getAnnotation(VirtualEntity.class) != null || (source == null || "memory".equalsIgnoreCase(source.getType()))) { + org.redkale.persistence.Table t1 = type.getAnnotation(org.redkale.persistence.Table.class); + javax.persistence.Table t2 = type.getAnnotation(javax.persistence.Table.class); + final String tableName0 = t1 != null ? t1.name() : (t2 != null ? t2.name() : null); + final String tableCcatalog0 = t1 != null ? t1.catalog() : (t2 != null ? t2.catalog() : null); + + if (type.getAnnotation(org.redkale.persistence.VirtualEntity.class) != null + || type.getAnnotation(org.redkale.source.VirtualEntity.class) != null + || (source == null || "memory".equalsIgnoreCase(source.getType()))) { this.table = null; BiFunction> loader = null; try { - VirtualEntity ve = type.getAnnotation(VirtualEntity.class); + org.redkale.persistence.VirtualEntity ve = type.getAnnotation(org.redkale.persistence.VirtualEntity.class); if (ve != null) { loader = ve.loader().getDeclaredConstructor().newInstance(); RedkaleClassLoader.putReflectionDeclaredConstructors(ve.loader(), ve.loader().getName()); } + org.redkale.source.VirtualEntity ve2 = type.getAnnotation(org.redkale.source.VirtualEntity.class); + if (ve2 != null) { + loader = ve2.loader().getDeclaredConstructor().newInstance(); + RedkaleClassLoader.putReflectionDeclaredConstructors(ve2.loader(), ve2.loader().getName()); + } } catch (Exception e) { logger.log(Level.SEVERE, type + " init @VirtualEntity.loader error", e); } this.fullloader = loader; } else { this.fullloader = fullloader; - if (t != null && !t.name().isEmpty() && t.name().indexOf('.') >= 0) throw new RuntimeException(type + " have illegal table.name on @Table"); - this.table = (t == null) ? type.getSimpleName().toLowerCase() : (t.catalog().isEmpty()) ? (t.name().isEmpty() ? type.getSimpleName().toLowerCase() : t.name()) : (t.catalog() + '.' + (t.name().isEmpty() ? type.getSimpleName().toLowerCase() : t.name())); + if (tableName0 != null && !tableName0.isEmpty() && tableName0.indexOf('.') >= 0) { + throw new RuntimeException(type + " have illegal table.name on @Table"); + } + this.table = (tableCcatalog0 == null) ? type.getSimpleName().toLowerCase() : (tableCcatalog0.isEmpty()) ? (tableName0.isEmpty() ? type.getSimpleName().toLowerCase() : tableName0) : (tableCcatalog0 + '.' + (tableName0.isEmpty() ? type.getSimpleName().toLowerCase() : tableName0)); } DistributeTable dt = type.getAnnotation(DistributeTable.class); DistributeTableStrategy dts = null; @@ -293,16 +325,24 @@ public final class EntityInfo { this.arrayer = Creator.arrayFunction(type); this.creator = Creator.create(type); - ConstructorParameters cp = null; + String[] cps = null; try { Method cm = this.creator.getClass().getMethod("create", Object[].class); - cp = cm.getAnnotation(ConstructorParameters.class); RedkaleClassLoader.putReflectionPublicMethods(this.creator.getClass().getName()); RedkaleClassLoader.putReflectionMethod(this.creator.getClass().getName(), cm); + ConstructorParameters cp = cm.getAnnotation(ConstructorParameters.class); + if (cp != null && cp.value().length > 0) { + cps = cp.value(); + } else { + org.redkale.util.ConstructorParameters cp2 = cm.getAnnotation(org.redkale.util.ConstructorParameters.class); + if (cp2 != null && cp2.value().length > 0) { + cps = cp2.value(); + } + } } catch (Exception e) { logger.log(Level.SEVERE, type + " cannot find ConstructorParameters Creator", e); } - this.constructorParameters = (cp == null || cp.value().length < 1) ? null : cp.value(); + this.constructorParameters = cps; Attribute idAttr0 = null; Map aliasmap0 = null; Class cltmp = type; @@ -322,6 +362,7 @@ public final class EntityInfo { if (Modifier.isStatic(field.getModifiers())) continue; if (Modifier.isFinal(field.getModifiers())) continue; if (field.getAnnotation(Transient.class) != null) continue; + if (field.getAnnotation(javax.persistence.Transient.class) != null) continue; if (fields.contains(field.getName())) continue; final String fieldname = field.getName(); final Column col = field.getAnnotation(Column.class); @@ -336,7 +377,9 @@ public final class EntityInfo { } catch (RuntimeException e) { continue; } - if (field.getAnnotation(javax.persistence.Id.class) != null && idAttr0 == null) { + + boolean idFlag = field.getAnnotation(Id.class) != null || field.getAnnotation(javax.persistence.Id.class) != null; + if (idFlag && idAttr0 == null) { idAttr0 = attr; insertcols.add(sqlfield); insertattrs.add(attr); @@ -355,14 +398,14 @@ public final class EntityInfo { notNullColumns.add(fieldname); } } - ddl.add(new EntityColumn(field.getAnnotation(javax.persistence.Id.class) != null, col, attr.field(), attr.type(), field.getAnnotation(Comment.class))); + ddl.add(new EntityColumn(idFlag, col, attr.field(), attr.type(), field.getAnnotation(Comment.class))); querycols.add(sqlfield); queryattrs.add(attr); fields.add(fieldname); attributeMap.put(fieldname, attr); } } while ((cltmp = cltmp.getSuperclass()) != Object.class); - if (idAttr0 == null) throw new RuntimeException(type.getName() + " have no primary column by @javax.persistence.Id"); + if (idAttr0 == null) throw new RuntimeException(type.getName() + " have no primary column by @org.redkale.persistence.Id"); cltmp = type; JsonConvert convert = DEFAULT_JSON_CONVERT; do { @@ -536,9 +579,10 @@ public final class EntityInfo { this.updateQuestionPrepareCaseSQLs = null; } //----------------cache-------------- - Cacheable c = type.getAnnotation(Cacheable.class); - if (this.table == null || (!cacheForbidden && c != null && c.value())) { - this.cache = new EntityCache<>(this, c); + Cacheable c1 = type.getAnnotation(Cacheable.class); + javax.persistence.Cacheable c2 = type.getAnnotation(javax.persistence.Cacheable.class); + if (this.table == null || (!cacheForbidden && c1 != null && c1.value()) || (!cacheForbidden && c2 != null && c2.value())) { + this.cache = new EntityCache<>(this, c1 == null ? c2.interval() : c1.interval(), c1 == null ? c2.direct() : c1.direct()); } else { this.cache = null; } diff --git a/src/main/java/org/redkale/source/FilterBean.java b/src/main/java/org/redkale/source/FilterBean.java index 46caaf9f3..0af312a0a 100644 --- a/src/main/java/org/redkale/source/FilterBean.java +++ b/src/main/java/org/redkale/source/FilterBean.java @@ -5,7 +5,7 @@ */ package org.redkale.source; -import org.redkale.util.Bean; +import org.redkale.annotation.Bean; /** * FilterBean用于过滤条件, 所有的FilterBean都必须可以转换成FilterNode
diff --git a/src/main/java/org/redkale/source/FilterKey.java b/src/main/java/org/redkale/source/FilterKey.java index b0a1b52fb..c584df799 100644 --- a/src/main/java/org/redkale/source/FilterKey.java +++ b/src/main/java/org/redkale/source/FilterKey.java @@ -6,7 +6,7 @@ package org.redkale.source; import java.util.Objects; -import org.redkale.util.ConstructorParameters; +import org.redkale.annotation.ConstructorParameters; /** * FilterKey主要用于自身字段间的表达式, 如: a.recordid = a.parentid , a.parentid就需要FilterKey来表示 new FilterKey("parentid") diff --git a/src/main/java/org/redkale/source/FilterNodeBean.java b/src/main/java/org/redkale/source/FilterNodeBean.java index 442fe72be..f80bc6ae6 100644 --- a/src/main/java/org/redkale/source/FilterNodeBean.java +++ b/src/main/java/org/redkale/source/FilterNodeBean.java @@ -9,7 +9,7 @@ import java.io.Serializable; import java.lang.reflect.*; import java.util.*; import java.util.concurrent.ConcurrentHashMap; -import javax.persistence.Transient; +import org.redkale.persistence.Transient; import static org.redkale.source.FilterExpress.*; import org.redkale.util.*; @@ -186,6 +186,7 @@ public final class FilterNodeBean implements Comparable * - * 不被标记为@javax.persistence.Transient 的字段均视为过滤条件
+ * 不被标记为@org.redkale.persistence.Transient 的字段均视为过滤条件
* *

* 详情见: https://redkale.org diff --git a/src/main/java/org/redkale/source/VirtualEntity.java b/src/main/java/org/redkale/source/VirtualEntity.java index 344b0748c..68915cecf 100644 --- a/src/main/java/org/redkale/source/VirtualEntity.java +++ b/src/main/java/org/redkale/source/VirtualEntity.java @@ -8,9 +8,9 @@ package org.redkale.source; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.*; -import java.util.*; +import java.util.List; import java.util.concurrent.CompletableFuture; -import java.util.function.*; +import java.util.function.BiFunction; /** * VirtualEntity表示虚拟的数据实体类, 通常Entity都会映射到数据库中的某个表,而标记为@VirtualEntity的Entity类只存在EntityCache中 @@ -19,7 +19,9 @@ import java.util.function.*; * 详情见: https://redkale.org * * @author zhangjx + * @deprecated replaced by org.redkale.persistence.VirtualEntity */ +@Deprecated @Documented @Target(TYPE) @Retention(RUNTIME) diff --git a/src/main/java/org/redkale/util/AnyValue.java b/src/main/java/org/redkale/util/AnyValue.java index e59a26d82..c81f2d897 100644 --- a/src/main/java/org/redkale/util/AnyValue.java +++ b/src/main/java/org/redkale/util/AnyValue.java @@ -9,6 +9,8 @@ import java.io.*; import java.nio.charset.*; import java.util.*; import java.util.function.*; + +import org.redkale.annotation.ConstructorParameters; import org.redkale.convert.ConvertDisabled; /** diff --git a/src/main/java/org/redkale/util/AutoLoad.java b/src/main/java/org/redkale/util/AutoLoad.java index ef0fadf4a..05b900511 100644 --- a/src/main/java/org/redkale/util/AutoLoad.java +++ b/src/main/java/org/redkale/util/AutoLoad.java @@ -16,7 +16,9 @@ import java.lang.annotation.*; * *

详情见: https://redkale.org * @author zhangjx + * @deprecated replaced by org.redkale.annotation.AutoLoad */ +@Deprecated @Documented @Target({TYPE}) @Retention(RUNTIME) diff --git a/src/main/java/org/redkale/util/Bean.java b/src/main/java/org/redkale/util/Bean.java index 60719440d..539c37e5b 100644 --- a/src/main/java/org/redkale/util/Bean.java +++ b/src/main/java/org/redkale/util/Bean.java @@ -14,6 +14,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * * @since 2.5.0 */ +@Deprecated @Inherited @Documented @Target(TYPE) diff --git a/src/main/java/org/redkale/util/Command.java b/src/main/java/org/redkale/util/Command.java index 2e06f85ae..59b375be7 100644 --- a/src/main/java/org/redkale/util/Command.java +++ b/src/main/java/org/redkale/util/Command.java @@ -19,6 +19,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * * @since 2.1.0 */ +@Deprecated @Inherited @Documented @Target({METHOD}) diff --git a/src/main/java/org/redkale/util/Comment.java b/src/main/java/org/redkale/util/Comment.java index 0f5f779ee..c83160ea2 100644 --- a/src/main/java/org/redkale/util/Comment.java +++ b/src/main/java/org/redkale/util/Comment.java @@ -17,6 +17,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * * @author zhangjx */ +@Deprecated @Inherited @Documented @Target({TYPE, METHOD, FIELD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, TYPE_PARAMETER}) diff --git a/src/main/java/org/redkale/util/ConstructorParameters.java b/src/main/java/org/redkale/util/ConstructorParameters.java index ab456a138..986bf13b6 100644 --- a/src/main/java/org/redkale/util/ConstructorParameters.java +++ b/src/main/java/org/redkale/util/ConstructorParameters.java @@ -5,9 +5,10 @@ */ package org.redkale.util; -import java.lang.annotation.*; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.*; /** * 类似java.beans.ConstructorProperties, 必须配合Creator使用 @@ -16,7 +17,9 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * 详情见: https://redkale.org * * @author zhangjx + * @deprecated replaced by org.redkale.annotation.ConstructorParameters */ +@Deprecated @Documented @Target({METHOD, CONSTRUCTOR}) @Retention(RUNTIME) diff --git a/src/main/java/org/redkale/util/Creator.java b/src/main/java/org/redkale/util/Creator.java index c6b075ab2..df22030cb 100644 --- a/src/main/java/org/redkale/util/Creator.java +++ b/src/main/java/org/redkale/util/Creator.java @@ -13,6 +13,8 @@ import java.util.concurrent.*; import java.util.function.*; import java.util.logging.*; import java.util.stream.Stream; + +import org.redkale.annotation.ConstructorParameters; import org.redkale.asm.*; import org.redkale.asm.Type; import static org.redkale.asm.Opcodes.*; diff --git a/src/main/java/org/redkale/util/InstanceProvider.java b/src/main/java/org/redkale/util/InstanceProvider.java index 8c05fa724..bd62b6182 100644 --- a/src/main/java/org/redkale/util/InstanceProvider.java +++ b/src/main/java/org/redkale/util/InstanceProvider.java @@ -3,7 +3,7 @@ package org.redkale.util; import java.util.*; -import javax.annotation.Priority; +import org.redkale.annotation.Priority; /** * 配置源Agent的Provider diff --git a/src/main/java/org/redkale/util/LogExcludeLevel.java b/src/main/java/org/redkale/util/LogExcludeLevel.java index 25c022932..53ad43d29 100644 --- a/src/main/java/org/redkale/util/LogExcludeLevel.java +++ b/src/main/java/org/redkale/util/LogExcludeLevel.java @@ -26,6 +26,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * * @author zhangjx */ +@Deprecated @Documented @Target({TYPE}) @Retention(RUNTIME) diff --git a/src/main/java/org/redkale/util/LogLevel.java b/src/main/java/org/redkale/util/LogLevel.java index 050e073af..879c07a5f 100644 --- a/src/main/java/org/redkale/util/LogLevel.java +++ b/src/main/java/org/redkale/util/LogLevel.java @@ -17,6 +17,7 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * * @author zhangjx */ +@Deprecated @Documented @Target({TYPE}) @Retention(RUNTIME) diff --git a/src/main/java/org/redkale/util/ResourceEvent.java b/src/main/java/org/redkale/util/ResourceEvent.java index e1c5e43d0..6694966e3 100644 --- a/src/main/java/org/redkale/util/ResourceEvent.java +++ b/src/main/java/org/redkale/util/ResourceEvent.java @@ -2,6 +2,8 @@ */ package org.redkale.util; +import org.redkale.annotation.ConstructorParameters; + import java.util.*; import java.util.function.Predicate; import java.util.regex.Pattern; diff --git a/src/main/java/org/redkale/util/ResourceFactory.java b/src/main/java/org/redkale/util/ResourceFactory.java index 4c2f30e05..23eb0df34 100644 --- a/src/main/java/org/redkale/util/ResourceFactory.java +++ b/src/main/java/org/redkale/util/ResourceFactory.java @@ -14,7 +14,9 @@ import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.*; import java.util.logging.*; -import javax.annotation.Resource; +import org.redkale.annotation.*; +import org.redkale.annotation.ResourceListener; +import org.redkale.annotation.ResourceType; import org.redkale.convert.*; /** @@ -127,7 +129,9 @@ public final class ResourceFactory { public static Class getResourceType(Type type) { Class clazz = TypeToken.typeToClass(type); ResourceType rt = clazz.getAnnotation(ResourceType.class); - return rt == null ? clazz : rt.value(); + if (rt != null) return rt.value(); + org.redkale.util.ResourceType rt2 = clazz.getAnnotation(org.redkale.util.ResourceType.class); + return rt2 == null ? clazz : rt2.value(); } /** @@ -370,12 +374,22 @@ public final class ResourceFactory { public A register(final boolean autoSync, final String name, final A val) { checkResourceName(name); final Class claz = val.getClass(); + + Class rt = null; ResourceType rtype = claz.getAnnotation(ResourceType.class); - if (rtype == null) { + if (rtype != null) { + rt = rtype.value(); + } else { + org.redkale.util.ResourceType rtype2 = claz.getAnnotation(org.redkale.util.ResourceType.class); + if (rtype2 != null) { + rt = rtype2.value(); + } + } + if (rt == null) { return (A) register(autoSync, name, claz, val); } else { A old = null; - A t = (A) register(autoSync, name, rtype.value(), val); + A t = (A) register(autoSync, name, rt, val); if (t != null) old = t; return old; } @@ -693,8 +707,9 @@ public final class ResourceFactory { if (Modifier.isStatic(field.getModifiers())) continue; field.setAccessible(true); final Class classType = field.getType(); - Resource rc = field.getAnnotation(Resource.class); - if (rc == null) { //深度注入 + Resource rc1 = field.getAnnotation(Resource.class); + javax.annotation.Resource rc2 = field.getAnnotation(javax.annotation.Resource.class); + if (rc1 == null && rc2 == null) { //深度注入 if (Convert.class.isAssignableFrom(classType)) continue; if (ConvertFactory.class.isAssignableFrom(classType)) continue; if (ResourceFactory.class.isAssignableFrom(classType)) continue; @@ -726,10 +741,11 @@ public final class ResourceFactory { final Type gencType = TypeToken.containsUnknownType(field.getGenericType()) ? TypeToken.getGenericType(field.getGenericType(), srcObj.getClass()) : field.getGenericType(); if (consumer != null) consumer.accept(srcObj, field); - String tname = rc.name(); + String tname = rc1 == null ? rc2.name() : rc1.name(); if (tname.contains(RESOURCE_PARENT_NAME)) { - Resource res = srcObj.getClass().getAnnotation(Resource.class); - String presname = res == null ? srcResourceName : res.name(); + Resource res1 = srcObj.getClass().getAnnotation(Resource.class); + javax.annotation.Resource res2 = srcObj.getClass().getAnnotation(javax.annotation.Resource.class); + String presname = res1 == null ? (res2 == null ? srcResourceName : res2.name()) : res1.name(); if (presname == null) { if (srcObj instanceof Resourcable) { tname = tname.replace(RESOURCE_PARENT_NAME, ((Resourcable) srcObj).resourceName()); @@ -830,7 +846,7 @@ public final class ResourceFactory { } } if (rs != null) field.set(srcObj, rs); - if (rs == null && !skipCheckRequired && rc.required()) { + if (rs == null && !skipCheckRequired && rc1 != null && rc1.required()) { throw new ResourceInjectException("resource(type=" + field.getType().getSimpleName() + ".class, field=" + field.getName() + ", name='" + rcname + "') must exists in " + srcObj.getClass().getName()); } } @@ -1022,11 +1038,12 @@ public final class ResourceFactory { RedkaleClassLoader.putReflectionDeclaredMethods(loop.getName()); for (Method method : loop.getDeclaredMethods()) { ResourceListener rl = method.getAnnotation(ResourceListener.class); - if (rl == null) continue; + org.redkale.util.ResourceListener rl2 = method.getAnnotation(org.redkale.util.ResourceListener.class); + if (rl == null && rl2 == null) continue; if (method.getParameterCount() == 1 && method.getParameterTypes()[0] == ResourceEvent[].class) { m = method; m.setAccessible(true); - diff.set(rl.different()); + diff.set(rl != null ? rl.different() : rl2.different()); RedkaleClassLoader.putReflectionMethod(loop.getName(), method); break; } else { diff --git a/src/main/java/org/redkale/util/ResourceListener.java b/src/main/java/org/redkale/util/ResourceListener.java index fcf199e23..328376c7c 100644 --- a/src/main/java/org/redkale/util/ResourceListener.java +++ b/src/main/java/org/redkale/util/ResourceListener.java @@ -5,9 +5,9 @@ */ package org.redkale.util; -import java.lang.annotation.*; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.*; /** * @Resource资源被更新时的监听事件, 本注解只能标记在方法参数为ResourceEvent[]上
@@ -46,7 +46,9 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * 详情见: https://redkale.org * * @author zhangjx + * @deprecated replaced by org.redkale.annotation.ResourceListener */ +@Deprecated @Documented @Target({METHOD}) @Retention(RUNTIME) diff --git a/src/main/java/org/redkale/util/ResourceType.java b/src/main/java/org/redkale/util/ResourceType.java index 4c95150a2..b95220cf1 100644 --- a/src/main/java/org/redkale/util/ResourceType.java +++ b/src/main/java/org/redkale/util/ResourceType.java @@ -13,12 +13,15 @@ import java.lang.annotation.*; * 显式的指明资源类型。 * 调用ResourceFactory.register(Object rs)时通常执行的是ResourceFactory.register(rs.getClass(), Object rs); * 若rs.getClass()的类标记了@ResourceType, 则使用@ResourceType.value()的class值进行注入。 - * + * *

* 详情见: https://redkale.org * * @author zhangjx + * + * @deprecated replaced by org.redkale.annotation.ResourceType */ +@Deprecated @Inherited @Documented @Target({TYPE}) diff --git a/src/main/java/org/redkale/util/Version.java b/src/main/java/org/redkale/util/Version.java index 2165d3fc7..6a7acaec1 100644 --- a/src/main/java/org/redkale/util/Version.java +++ b/src/main/java/org/redkale/util/Version.java @@ -5,9 +5,10 @@ */ package org.redkale.util; -import java.lang.annotation.*; import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.RUNTIME; +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.*; /** * 版本, 可用于标记Service的接口版本变化 @@ -18,7 +19,10 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * @since 2.1.0 * * @author zhangjx + * + * @deprecated 暂不实现 */ +@Deprecated @Inherited @Documented @Target({TYPE, METHOD}) diff --git a/src/test/java/org/redkale/test/convert/BsonMainTest.java b/src/test/java/org/redkale/test/convert/BsonMainTest.java index 11db6dff5..b7de20e87 100644 --- a/src/test/java/org/redkale/test/convert/BsonMainTest.java +++ b/src/test/java/org/redkale/test/convert/BsonMainTest.java @@ -9,14 +9,16 @@ import java.io.*; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.redkale.annotation.ConstructorParameters; import org.redkale.convert.bson.BsonByteBufferWriter; import org.redkale.convert.bson.BsonFactory; +import org.redkale.persistence.Id; +import org.redkale.persistence.Transient; import org.redkale.util.Utility; import org.redkale.convert.bson.BsonConvert; import java.nio.*; import java.util.*; -import javax.persistence.*; import org.redkale.convert.json.*; import org.redkale.util.*; diff --git a/src/test/java/org/redkale/test/convert/Fortune.java b/src/test/java/org/redkale/test/convert/Fortune.java index 5f94b545e..355c31f83 100644 --- a/src/test/java/org/redkale/test/convert/Fortune.java +++ b/src/test/java/org/redkale/test/convert/Fortune.java @@ -5,7 +5,7 @@ */ package org.redkale.test.convert; -import javax.persistence.Id; +import org.redkale.persistence.Id; import org.redkale.convert.json.JsonConvert; /** diff --git a/src/test/java/org/redkale/test/convert/World.java b/src/test/java/org/redkale/test/convert/World.java index d294ca4df..3cf9f474b 100644 --- a/src/test/java/org/redkale/test/convert/World.java +++ b/src/test/java/org/redkale/test/convert/World.java @@ -5,7 +5,7 @@ */ package org.redkale.test.convert; -import javax.persistence.Id; +import org.redkale.persistence.Id; import org.redkale.convert.json.JsonConvert; /** diff --git a/src/test/java/org/redkale/test/rest/HelloEntity.java b/src/test/java/org/redkale/test/rest/HelloEntity.java index 930522d67..f181f9fc6 100644 --- a/src/test/java/org/redkale/test/rest/HelloEntity.java +++ b/src/test/java/org/redkale/test/rest/HelloEntity.java @@ -1,10 +1,10 @@ package org.redkale.test.rest; import java.util.Map; -import javax.persistence.Id; +import org.redkale.persistence.Id; import org.redkale.convert.json.JsonFactory; import org.redkale.net.http.*; -import org.redkale.source.VirtualEntity; +import org.redkale.persistence.VirtualEntity; @VirtualEntity public class HelloEntity { diff --git a/src/test/java/org/redkale/test/rest/HelloService.java b/src/test/java/org/redkale/test/rest/HelloService.java index acd240c3f..c229c6a06 100644 --- a/src/test/java/org/redkale/test/rest/HelloService.java +++ b/src/test/java/org/redkale/test/rest/HelloService.java @@ -3,7 +3,7 @@ package org.redkale.test.rest; import java.nio.channels.CompletionHandler; import java.util.*; import java.util.concurrent.CompletableFuture; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.net.http.*; import org.redkale.service.*; diff --git a/src/test/java/org/redkale/test/rest/HelloService2.java b/src/test/java/org/redkale/test/rest/HelloService2.java index b7f313765..a6643affb 100644 --- a/src/test/java/org/redkale/test/rest/HelloService2.java +++ b/src/test/java/org/redkale/test/rest/HelloService2.java @@ -5,7 +5,7 @@ */ package org.redkale.test.rest; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.net.http.*; import org.redkale.service.*; import org.redkale.source.*; diff --git a/src/test/java/org/redkale/test/rest/SimpleRestServlet.java b/src/test/java/org/redkale/test/rest/SimpleRestServlet.java index 0a7ca82a8..5e7502d4b 100644 --- a/src/test/java/org/redkale/test/rest/SimpleRestServlet.java +++ b/src/test/java/org/redkale/test/rest/SimpleRestServlet.java @@ -1,7 +1,7 @@ package org.redkale.test.rest; import java.io.IOException; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.net.http.*; import org.redkale.service.RetResult; diff --git a/src/test/java/org/redkale/test/rest/UserInfo.java b/src/test/java/org/redkale/test/rest/UserInfo.java index 5ce449524..fe118a701 100644 --- a/src/test/java/org/redkale/test/rest/UserInfo.java +++ b/src/test/java/org/redkale/test/rest/UserInfo.java @@ -1,6 +1,6 @@ package org.redkale.test.rest; -import javax.persistence.Id; +import org.redkale.persistence.Id; import org.redkale.convert.json.JsonFactory; /** diff --git a/src/test/java/org/redkale/test/rest/_DynHelloRestServlet1.java b/src/test/java/org/redkale/test/rest/_DynHelloRestServlet1.java index b7593a78d..7d39b87c6 100644 --- a/src/test/java/org/redkale/test/rest/_DynHelloRestServlet1.java +++ b/src/test/java/org/redkale/test/rest/_DynHelloRestServlet1.java @@ -2,7 +2,7 @@ package org.redkale.test.rest; import java.io.IOException; import java.util.*; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.net.http.*; import org.redkale.service.RetResult; import org.redkale.source.Flipper; diff --git a/src/test/java/org/redkale/test/rest/_DynHelloRestServlet2.java b/src/test/java/org/redkale/test/rest/_DynHelloRestServlet2.java index 1f0acc1b9..2f0f7900b 100644 --- a/src/test/java/org/redkale/test/rest/_DynHelloRestServlet2.java +++ b/src/test/java/org/redkale/test/rest/_DynHelloRestServlet2.java @@ -7,7 +7,7 @@ package org.redkale.test.rest; import java.io.IOException; import java.util.Map; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.net.http.*; import org.redkale.service.RetResult; import org.redkale.source.Flipper; diff --git a/src/test/java/org/redkale/test/service/ABMainService.java b/src/test/java/org/redkale/test/service/ABMainService.java index f66e5f217..29018bf4c 100644 --- a/src/test/java/org/redkale/test/service/ABMainService.java +++ b/src/test/java/org/redkale/test/service/ABMainService.java @@ -12,7 +12,7 @@ import java.nio.channels.*; import java.util.concurrent.*; import java.util.concurrent.atomic.*; import java.util.logging.*; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.convert.bson.BsonConvert; import org.redkale.convert.json.JsonConvert; import org.redkale.net.*; diff --git a/src/test/java/org/redkale/test/service/BCService.java b/src/test/java/org/redkale/test/service/BCService.java index 94d69d526..e7ee4bb5a 100644 --- a/src/test/java/org/redkale/test/service/BCService.java +++ b/src/test/java/org/redkale/test/service/BCService.java @@ -6,7 +6,7 @@ package org.redkale.test.service; import java.nio.channels.CompletionHandler; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.service.*; import org.redkale.util.*; diff --git a/src/test/java/org/redkale/test/sncp/SncpTestBean.java b/src/test/java/org/redkale/test/sncp/SncpTestBean.java index 275dc0684..ec9bb1480 100644 --- a/src/test/java/org/redkale/test/sncp/SncpTestBean.java +++ b/src/test/java/org/redkale/test/sncp/SncpTestBean.java @@ -6,9 +6,9 @@ package org.redkale.test.sncp; import org.redkale.convert.bson.BsonFactory; +import org.redkale.persistence.Id; import org.redkale.util.Utility; import org.redkale.source.FilterBean; -import javax.persistence.*; import org.redkale.convert.json.*; /** diff --git a/src/test/java/org/redkale/test/sncp/SncpTestServiceImpl.java b/src/test/java/org/redkale/test/sncp/SncpTestServiceImpl.java index e1af13da6..42194be25 100644 --- a/src/test/java/org/redkale/test/sncp/SncpTestServiceImpl.java +++ b/src/test/java/org/redkale/test/sncp/SncpTestServiceImpl.java @@ -9,6 +9,8 @@ import java.lang.reflect.Method; import java.net.InetSocketAddress; import java.nio.channels.CompletionHandler; import java.util.concurrent.*; + +import org.redkale.annotation.ResourceType; import org.redkale.net.*; import org.redkale.net.sncp.*; import org.redkale.service.*; diff --git a/src/test/java/org/redkale/test/sncp/_DynLocalSncpTestService.java b/src/test/java/org/redkale/test/sncp/_DynLocalSncpTestService.java index 1659e2be0..d44b5112b 100644 --- a/src/test/java/org/redkale/test/sncp/_DynLocalSncpTestService.java +++ b/src/test/java/org/redkale/test/sncp/_DynLocalSncpTestService.java @@ -6,7 +6,7 @@ package org.redkale.test.sncp; import org.redkale.net.sncp.*; -import org.redkale.util.ResourceType; +import org.redkale.annotation.ResourceType; /** * diff --git a/src/test/java/org/redkale/test/source/CacheTestBean.java b/src/test/java/org/redkale/test/source/CacheTestBean.java index 40b7abcb8..29725f394 100644 --- a/src/test/java/org/redkale/test/source/CacheTestBean.java +++ b/src/test/java/org/redkale/test/source/CacheTestBean.java @@ -9,8 +9,9 @@ import java.lang.reflect.Method; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.function.BiFunction; -import javax.persistence.Id; +import org.redkale.persistence.Id; import org.redkale.convert.json.JsonConvert; +import org.redkale.persistence.VirtualEntity; import org.redkale.source.*; /** diff --git a/src/test/java/org/redkale/test/source/FilterNodeTest.java b/src/test/java/org/redkale/test/source/FilterNodeTest.java index 0a7532fe0..78372ed6f 100644 --- a/src/test/java/org/redkale/test/source/FilterNodeTest.java +++ b/src/test/java/org/redkale/test/source/FilterNodeTest.java @@ -5,8 +5,11 @@ */ package org.redkale.test.source; +import org.redkale.persistence.Cacheable; +import org.redkale.persistence.Id; +import org.redkale.persistence.Transient; import org.redkale.source.*; -import org.redkale.util.AutoLoad; +import org.redkale.annotation.AutoLoad; import static org.redkale.source.FilterExpress.*; @@ -14,7 +17,6 @@ import java.lang.reflect.Method; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.function.*; -import javax.persistence.*; import org.redkale.convert.json.*; diff --git a/src/test/java/org/redkale/test/source/JsonRecord.java b/src/test/java/org/redkale/test/source/JsonRecord.java index 2e97218ed..4f793a087 100644 --- a/src/test/java/org/redkale/test/source/JsonRecord.java +++ b/src/test/java/org/redkale/test/source/JsonRecord.java @@ -7,8 +7,10 @@ package org.redkale.test.source; import java.io.Serializable; import java.util.*; -import javax.persistence.*; + import org.redkale.convert.json.JsonConvert; +import org.redkale.persistence.Column; +import org.redkale.persistence.Id; import org.redkale.source.*; import org.redkale.util.AnyValue.DefaultAnyValue; diff --git a/src/test/java/org/redkale/test/source/LoginRecord.java b/src/test/java/org/redkale/test/source/LoginRecord.java index c8498bfdd..762d8cb2d 100644 --- a/src/test/java/org/redkale/test/source/LoginRecord.java +++ b/src/test/java/org/redkale/test/source/LoginRecord.java @@ -6,7 +6,10 @@ package org.redkale.test.source; import java.io.Serializable; -import javax.persistence.*; + +import org.redkale.persistence.Column; +import org.redkale.source.DistributeTable; +import org.redkale.persistence.Id; import org.redkale.source.*; import org.redkale.util.Utility; diff --git a/src/test/java/org/redkale/test/source/LoginTestRecord.java b/src/test/java/org/redkale/test/source/LoginTestRecord.java index 0bc1067a3..9e9ac6fda 100644 --- a/src/test/java/org/redkale/test/source/LoginTestRecord.java +++ b/src/test/java/org/redkale/test/source/LoginTestRecord.java @@ -5,8 +5,8 @@ */ package org.redkale.test.source; -import javax.persistence.*; import org.redkale.convert.json.*; +import org.redkale.persistence.Id; /** * CREATE TABLE `LoginTestRecord` ( diff --git a/src/test/java/org/redkale/test/source/LoginUserRecord.java b/src/test/java/org/redkale/test/source/LoginUserRecord.java index 8ea9006d2..eb5f4541f 100644 --- a/src/test/java/org/redkale/test/source/LoginUserRecord.java +++ b/src/test/java/org/redkale/test/source/LoginUserRecord.java @@ -6,7 +6,10 @@ package org.redkale.test.source; import java.io.Serializable; -import javax.persistence.*; + +import org.redkale.persistence.Column; +import org.redkale.source.DistributeTable; +import org.redkale.persistence.Id; import org.redkale.source.*; /** diff --git a/src/test/java/org/redkale/test/source/TestSourceCache.java b/src/test/java/org/redkale/test/source/TestSourceCache.java index d77e53fec..0d30bd3d3 100644 --- a/src/test/java/org/redkale/test/source/TestSourceCache.java +++ b/src/test/java/org/redkale/test/source/TestSourceCache.java @@ -7,7 +7,10 @@ package org.redkale.test.source; import java.lang.reflect.Method; import java.util.*; -import org.redkale.source.VirtualEntity; + +import org.redkale.persistence.Cacheable; +import org.redkale.persistence.Id; +import org.redkale.persistence.VirtualEntity; import org.redkale.source.FilterNodeBean; import org.redkale.source.FilterExpress; import org.redkale.source.FilterColumn; @@ -18,7 +21,7 @@ import org.redkale.source.EntityInfo; import org.redkale.source.FilterNode; import java.util.concurrent.*; import java.util.function.BiFunction; -import javax.persistence.*; + import org.redkale.convert.json.*; import org.redkale.source.*; diff --git a/src/test/java/org/redkale/test/source/UserDetail.java b/src/test/java/org/redkale/test/source/UserDetail.java index 3bdd5c6f5..972ad39c6 100644 --- a/src/test/java/org/redkale/test/source/UserDetail.java +++ b/src/test/java/org/redkale/test/source/UserDetail.java @@ -6,8 +6,11 @@ package org.redkale.test.source; import java.io.Serializable; -import javax.persistence.*; + import org.redkale.convert.*; +import org.redkale.persistence.Column; +import org.redkale.source.DistributeTable; +import org.redkale.persistence.Id; import org.redkale.source.*; /** diff --git a/src/test/java/org/redkale/test/util/CreatorRecord.java b/src/test/java/org/redkale/test/util/CreatorRecord.java index 3b691e35e..de939c24b 100644 --- a/src/test/java/org/redkale/test/util/CreatorRecord.java +++ b/src/test/java/org/redkale/test/util/CreatorRecord.java @@ -5,6 +5,7 @@ */ package org.redkale.test.util; +import org.redkale.annotation.ConstructorParameters; import org.redkale.convert.json.*; import org.redkale.util.*; diff --git a/src/test/java/org/redkale/test/util/ResourceListenerTest.java b/src/test/java/org/redkale/test/util/ResourceListenerTest.java index e8aa8af52..e0b0b1877 100644 --- a/src/test/java/org/redkale/test/util/ResourceListenerTest.java +++ b/src/test/java/org/redkale/test/util/ResourceListenerTest.java @@ -4,8 +4,9 @@ package org.redkale.test.util; import java.util.Properties; import java.util.concurrent.atomic.AtomicInteger; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.junit.jupiter.api.*; +import org.redkale.annotation.ResourceListener; import org.redkale.util.*; /** diff --git a/src/test/java/org/redkale/test/util/ResourceLoaderTest.java b/src/test/java/org/redkale/test/util/ResourceLoaderTest.java index fbd9ea7d3..54a73b443 100644 --- a/src/test/java/org/redkale/test/util/ResourceLoaderTest.java +++ b/src/test/java/org/redkale/test/util/ResourceLoaderTest.java @@ -2,7 +2,7 @@ */ package org.redkale.test.util; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.junit.jupiter.api.*; import org.redkale.convert.json.JsonFactory; import org.redkale.util.*; diff --git a/src/test/java/org/redkale/test/util/ResourceTest.java b/src/test/java/org/redkale/test/util/ResourceTest.java index 1f86d0b44..93f37394d 100644 --- a/src/test/java/org/redkale/test/util/ResourceTest.java +++ b/src/test/java/org/redkale/test/util/ResourceTest.java @@ -7,8 +7,10 @@ package org.redkale.test.util; import java.math.*; import java.util.Properties; -import javax.annotation.*; +import org.redkale.annotation.*; import org.junit.jupiter.api.Test; +import org.redkale.annotation.ConstructorParameters; +import org.redkale.annotation.ResourceListener; import org.redkale.util.*; /** diff --git a/src/test/java/org/redkale/test/websocket/ChatWebSocketServlet.java b/src/test/java/org/redkale/test/websocket/ChatWebSocketServlet.java index 0bb999e25..e1402ed1d 100644 --- a/src/test/java/org/redkale/test/websocket/ChatWebSocketServlet.java +++ b/src/test/java/org/redkale/test/websocket/ChatWebSocketServlet.java @@ -9,7 +9,7 @@ import org.redkale.net.http.WebServlet; import org.redkale.net.http.WebSocketServlet; import org.redkale.net.http.WebSocket; import java.util.concurrent.CompletableFuture; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.net.http.*; import org.redkale.test.rest.*; import org.redkale.util.*; diff --git a/src/test/java/org/redkale/test/ws/ChatService.java b/src/test/java/org/redkale/test/ws/ChatService.java index cfb1a1cb6..3714ef803 100644 --- a/src/test/java/org/redkale/test/ws/ChatService.java +++ b/src/test/java/org/redkale/test/ws/ChatService.java @@ -8,10 +8,10 @@ package org.redkale.test.ws; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.net.http.WebSocketNode; import org.redkale.service.*; -import org.redkale.util.Comment; +import org.redkale.annotation.Comment; /** * diff --git a/src/test/java/org/redkale/test/ws/ChatWebSocket.java b/src/test/java/org/redkale/test/ws/ChatWebSocket.java index 25ba228f4..58f8890ac 100644 --- a/src/test/java/org/redkale/test/ws/ChatWebSocket.java +++ b/src/test/java/org/redkale/test/ws/ChatWebSocket.java @@ -7,7 +7,7 @@ package org.redkale.test.ws; import java.util.*; import java.util.concurrent.CompletableFuture; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.net.http.*; import org.redkale.service.RetResult; import org.redkale.test.rest.*; diff --git a/src/test/java/org/redkale/test/wsdync/_DyncChatWebSocketServlet.java b/src/test/java/org/redkale/test/wsdync/_DyncChatWebSocketServlet.java index 9e1ce6e2e..490425c56 100644 --- a/src/test/java/org/redkale/test/wsdync/_DyncChatWebSocketServlet.java +++ b/src/test/java/org/redkale/test/wsdync/_DyncChatWebSocketServlet.java @@ -9,7 +9,7 @@ import java.io.Serializable; import java.lang.annotation.Annotation; import java.util.*; import java.util.function.BiConsumer; -import javax.annotation.Resource; +import org.redkale.annotation.Resource; import org.redkale.convert.ConvertDisabled; import org.redkale.convert.json.JsonConvert; import org.redkale.net.http.*;