diff --git a/src/main/java/org/redkale/annotation/Nonnull.java b/src/main/java/org/redkale/annotation/Nonnull.java new file mode 100644 index 000000000..cc3d8c4fb --- /dev/null +++ b/src/main/java/org/redkale/annotation/Nonnull.java @@ -0,0 +1,20 @@ +/* + * + */ +package org.redkale.annotation; + +import java.lang.annotation.*; + +/** + * + * 详情见: https://redkale.org + * + * @author zhangjx + * + * @since 2.8.0 + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +public @interface Nonnull { + +} diff --git a/src/main/java/org/redkale/annotation/Nullable.java b/src/main/java/org/redkale/annotation/Nullable.java new file mode 100644 index 000000000..145007439 --- /dev/null +++ b/src/main/java/org/redkale/annotation/Nullable.java @@ -0,0 +1,20 @@ +/* + * + */ +package org.redkale.annotation; + +import java.lang.annotation.*; + +/** + * + * 详情见: https://redkale.org + * + * @author zhangjx + * + * @since 2.8.0 + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +public @interface Nullable { + +} diff --git a/src/main/java/org/redkale/net/sncp/Sncp.java b/src/main/java/org/redkale/net/sncp/Sncp.java index 97f340dea..bcf9ef299 100644 --- a/src/main/java/org/redkale/net/sncp/Sncp.java +++ b/src/main/java/org/redkale/net/sncp/Sncp.java @@ -10,8 +10,8 @@ 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.net.*; +import java.nio.channels.*; import java.util.*; import org.redkale.annotation.*; import org.redkale.annotation.ResourceType; @@ -19,10 +19,10 @@ 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.Convert; +import org.redkale.convert.*; import org.redkale.mq.*; -import org.redkale.net.TransportFactory; -import org.redkale.net.http.WebSocketNode; +import org.redkale.net.*; +import org.redkale.net.http.*; import org.redkale.net.sncp.SncpServiceInfo.SncpServiceAction; import org.redkale.service.*; import org.redkale.util.*; @@ -726,21 +726,23 @@ public abstract class Sncp { * * private AnyValue _redkale_conf; * - * private OldSncpClient _redkale_client; + * private SncpClient _redkale_client; + * + * private SncpServiceInfo _redkale_sncpInfo; * * @Override * public void createSomeThing(TestBean bean){ - * _redkale_client.remote(0, bean); + * _redkale_client.remote(_redkale_sncpInfo, 0, bean); * } * * @Override * public String findSomeThing(){ - * return _redkale_client.remote(1); + * return _redkale_client.remote(_redkale_sncpInfo, 1); * } * * @Override * public String updateSomeThing(String id){ - * return _redkale_client.remote(2, id); + * return _redkale_client.remote(_redkale_sncpInfo, 2, id); * } * } * diff --git a/src/main/java/org/redkale/source/AbstractDataSqlSource.java b/src/main/java/org/redkale/source/AbstractDataSqlSource.java index 13ba55839..572f9b090 100644 --- a/src/main/java/org/redkale/source/AbstractDataSqlSource.java +++ b/src/main/java/org/redkale/source/AbstractDataSqlSource.java @@ -5,23 +5,23 @@ */ package org.redkale.source; -import java.io.Serializable; +import java.io.*; import java.math.*; -import java.sql.SQLException; +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.stream.Stream; +import java.util.stream.*; 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.persistence.Table; -import org.redkale.service.Local; +import org.redkale.net.*; +import org.redkale.persistence.*; +import org.redkale.service.*; import org.redkale.source.EntityInfo.EntityColumn; import org.redkale.util.*; @@ -2528,7 +2528,18 @@ public abstract class AbstractDataSqlSource extends AbstractDataSource implement //----------------------------- find ----------------------------- @Override public T[] finds(Class clazz, final SelectColumn selects, Serializable... pks) { - return findsAsync(clazz, selects, pks).join(); + final EntityInfo info = loadEntityInfo(clazz); + if (pks == null || pks.length == 0) { + return info.getArrayer().apply(0); + } + final EntityCache cache = info.getCache(); + if (cache != null) { + T[] rs = selects == null ? cache.finds(pks) : cache.finds(selects, pks); + if (cache.isFullLoaded() || rs != null) { + return rs; + } + } + return findsDBAsync(info, selects, pks).join(); } @Override diff --git a/src/main/java/org/redkale/source/EntityCache.java b/src/main/java/org/redkale/source/EntityCache.java index a145d5d60..e92614325 100644 --- a/src/main/java/org/redkale/source/EntityCache.java +++ b/src/main/java/org/redkale/source/EntityCache.java @@ -5,11 +5,11 @@ */ package org.redkale.source; -import java.io.Serializable; +import java.io.*; import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.*; -import java.util.concurrent.locks.ReentrantLock; +import java.util.concurrent.locks.*; import java.util.function.*; import java.util.logging.*; import java.util.stream.*; @@ -128,6 +128,13 @@ public final class EntityCache { }); } + public void fullLoad() { + CompletableFuture> future = fullLoadAsync(); + if (future != null) { + future.join(); + } + } + public CompletableFuture> fullLoadAsync() { if (this.fullloaded) { return this.loadFuture; @@ -213,6 +220,10 @@ public final class EntityCache { return fullloaded; } + public int size() { + return map.size(); + } + public T find(Serializable pk) { if (pk == null) { return null; diff --git a/src/main/java/org/redkale/source/EntityInfo.java b/src/main/java/org/redkale/source/EntityInfo.java index 49e33b4fd..55f2111a6 100644 --- a/src/main/java/org/redkale/source/EntityInfo.java +++ b/src/main/java/org/redkale/source/EntityInfo.java @@ -5,11 +5,11 @@ */ package org.redkale.source; -import java.io.Serializable; +import java.io.*; import java.lang.reflect.*; import java.util.*; import java.util.concurrent.*; -import java.util.concurrent.locks.ReentrantLock; +import java.util.concurrent.locks.*; import java.util.function.*; import java.util.logging.*; import org.redkale.annotation.Comment; @@ -242,7 +242,7 @@ public final class EntityInfo { if (fullloader == null) { throw new IllegalArgumentException(clazz.getName() + " auto loader is illegal"); } - rs.cache.fullLoadAsync(); + rs.cache.fullLoad(); } return rs; } finally { diff --git a/src/test/java/org/redkale/test/service/TestService.java b/src/test/java/org/redkale/test/service/TestService.java index 1ac8d6029..ac689a91d 100644 --- a/src/test/java/org/redkale/test/service/TestService.java +++ b/src/test/java/org/redkale/test/service/TestService.java @@ -5,9 +5,10 @@ */ package org.redkale.test.service; -import java.nio.channels.CompletionHandler; +import java.nio.channels.*; +import org.redkale.boot.*; import org.redkale.net.sncp.*; -import org.redkale.service.Service; +import org.redkale.service.*; import org.redkale.util.*; /** @@ -19,13 +20,14 @@ public class TestService implements Service { // public boolean change(TestBean bean, String name, int id) { // return false; // } - public void change(CompletionHandler handler, TestBean bean, String name, int id) { } - + public static void main(String[] args) throws Throwable { + final Application application = Application.create(true); SncpServer cserver = new SncpServer(); + cserver.getResourceFactory().register(application); cserver.addSncpServlet(new TestService()); cserver.init(AnyValue.DefaultAnyValue.create("port", 5577)); }