小编le-*_*ude的帖子

数组声明技巧:使用它不好吗?

我宣布这个课程没有用.

public class ArrayTrick {

    public static char[] arr(char... arr) {
        return arr;
    }

    public static float[] arr(float... arr) {
        return arr;
    }

    public static double[] arr(double... arr) {
        return arr;
    }

    public static long[] arr(long... arr) {
        return arr;
    }

    public static int[] arr(int... arr) {
        return arr;
    }

    public static short[] arr(short... arr) {
        return arr;
    }

    public static byte[] arr(byte... arr) {
        return arr;
    }

    public static boolean[] arr(boolean... arr) {
        return arr;
    }

    public static <T> …
Run Code Online (Sandbox Code Playgroud)

java

18
推荐指数
4
解决办法
1645
查看次数

有趣的行为返回Java中的按位运算符和位移的值

所以我遇到了关于按位运算符和位移的奇怪行为.我试图通过使用位掩码来更快地做一个小检查,我来到这里:

public class Weirdness {

    private final static int constant = 3;

    private static int notConstant = 3;

    public void stuff() {
        byte a = 0b1 << 3;
        byte b = 0b1 << (int) 3;
        byte c = 0b1 << constant;
        byte d = 0b1 << notConstant; //error
        byte e = 0b1 << getAnInt(); //error
        byte f = 0b1 << getAFinalInt(); //error
        int i = 3;
        byte g = 0b1 << i; //error
        final int j = 3;
        byte h …
Run Code Online (Sandbox Code Playgroud)

java bitwise-operators

13
推荐指数
2
解决办法
1569
查看次数

生成随机字母数字字符串作为模型的主键

我希望一个模型在我创建一个新的实例时自动生成一个随机的字母数字字符串作为其主键.

例:

from django.db import models

class MyTemporaryObject(models.Model):
    id = AutoGenStringField(lenght=16, primary_key=True)
    some_filed = ...
    some_other_field = ...
Run Code Online (Sandbox Code Playgroud)

在我看来,键应该看起来像这样的"Ay3kJaBdGfcadZdao03293".这是非常临时使用的.如果发生碰撞,我希望Django尝试新密钥.

我想知道是否已经存在某些东西,或者我没有看到的一个非常简单的解决方案(我对python和Django来说相当新).否则我想做我自己的版本models.AutoField,这是正确的方法吗?

我已经找到了如何在这里生成密钥,因此它不是关于字符串生成的.我只想让它与简单的Django服务无缝协作,而不会给代码增加太多的复杂性.

编辑:可能的解决方案?你怎么看?

id = models.CharField(unique=True, primary_key=True, default=StringKeyGenerator(), editable=False)
Run Code Online (Sandbox Code Playgroud)

class StringKeyGenerator(object):
    def __init__(self, len=16):
        self.lenght = len
    def __call__(self):
        return ''.join(random.choice(string.letters + string.digits) for x in range(self.lenght))
Run Code Online (Sandbox Code Playgroud)

在再次浏览Django文档之后我想出了它.

python django postgresql

9
推荐指数
2
解决办法
8150
查看次数

检查结果是否正常

我试图通过让我知道我在控制器中调用的函数的参数来制作一个更好的@Cached注释.

所以我有这个动作:

public class ContextualCachedAction extends Action<ContextualCached> {

    @Override
    public Result call(Context ctx) throws Throwable {
        try {
            String key = makeKey(ctx);
            Integer duration = configuration.duration();
            Result result = (Result) Cache.get(key);
            if (result == null) {
                result = delegate.call(ctx);

                //TODO find a way to cache only successful calls

                Cache.set(key, result, duration);
            }
            return result;
        } catch (RuntimeException e) {
            throw e;
        } catch (Throwable t) {
            throw new RuntimeException(t);
        }
    }

    private String makeKey(Context ctx) {
        //makes the key from …
Run Code Online (Sandbox Code Playgroud)

java playframework playframework-2.0

7
推荐指数
2
解决办法
4178
查看次数

我需要关于Play的Json和Writes特性中优雅的Option处理的建议

我有一个"样式"或"有效scala"类型的问题:我有一个"FeatureCheck"类,我需要在Play框架中序列化为Json.

case class FeatureCheck(val result: Option[Boolean], val missing: Option[Array[String]], val error: Option[String])
Run Code Online (Sandbox Code Playgroud)

我使用自己的"写入"来序列化它,但我的代码看起来很像Java代码.我想序列化check对象中的每个选项只有在它被定义时(最终对象不应该有任何空值).

def writes(check: FeatureCheck): JsValue = {
  val builder = Seq.newBuilder[(String, JsValue)]
  if (check.error.isDefined) {
    builder += "error" -> JsString(check.error.get)
  }
  if (check.missing.isDefined) {
    builder += "missing" -> Json.toJson(check.missing.get)
  }
  if (check.result.isDefined) {
    builder += "result" -> JsBoolean(check.result.get)
  }
  JsObject(builder.result)
}
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有办法做到这一点,没有那些丑陋的if-then,甚至删除序列的构建器.

感谢您提供的任何帮助或评论.

Clarrifications:

假设我想发送result = true我希望得到的Json是:

{"result":true} 
Run Code Online (Sandbox Code Playgroud)

并不是

{
    "result": true,
    "error": null,
    "missing": []
}
Run Code Online (Sandbox Code Playgroud)

json scala playframework playframework-2.1

7
推荐指数
1
解决办法
5080
查看次数

在CriteriaQuery中使用@ElementCollection(或查询@ElementCollection的内容)

public enum ReportStatus { 
    SUCCCEED, FAILED;
}

public class Work {
    @ElementCollection
    @Enumerated(EnumType.STRING)
    List<ReportStatus> reportStatuses;
}
Run Code Online (Sandbox Code Playgroud)

鉴于以下结构,我想执行查询以查找reportStatuses过滤的所有工作.它使用以下hql语法正常工作:

public List<Long> queryHQL() {
    final String query = "SELECT w.id FROM Work w JOIN w.reportStatuses s WHERE s in (:rs)";

    final List<ReportStatus> reportStatuses = new ArrayList<ReportStatus>();
    reportStatuses.add(ReportStatus.FAILED);

    return this.entityManager.createQuery(query).setParameter("rs", reportStatuses).getResultList();
}
Run Code Online (Sandbox Code Playgroud)

但是我想使用标准API(jpa2),并且无法弄清楚如何做到这一点.这是我最接近的尝试:

public List<Long> query() {
    final List<ReportStatus> reportStatuses = new ArrayList<ReportStatus>();
    reportStatuses.add(ReportStatus.FAILED);

    final CriteriaBuilder builder = this.entityManager.getCriteriaBuilder();

    final CriteriaQuery<Long> criteriaQuery = builder.createQuery(Long.class);
    final Root<Work> workModel = criteriaQuery.from(Work.class);

    final ListJoin<Work, ReportStatus> status = …
Run Code Online (Sandbox Code Playgroud)

java orm criteria-api jpa-2.0

6
推荐指数
1
解决办法
6881
查看次数

playframework服务器上的TCP套接字和Web套接字?

我的服务已经使用Websockets与HTML5浏览器内客户端进行通信.客户端由普通的http请求由同一服务器提供服务.

现在我想提供相同的服务/应用程序但不在浏览器中,我想通过TCP套接字提供它.

我正在使用的RPC/action对象将是相同的,序列化将是相同的,逻辑是相同的.我只想使用TCP套接字而不是WebSocket.

我希望将代码保存在同一个"项目文件夹"下,在我部署playframework服务器时立即启动(基本上在启动时我想开始监听WebSockets,TCP套接字和http请求),并且所有内容都在部署相同的包.

我知道:

  • 没有必要,因为WebSocket可以在非浏览器应用程序中使用,但可以将其视为练习或好奇心问题.
  • playframework是建立在netty之上的,之前我使用netty来做一些TCP服务(虽然没有什么大的东西可以做好准备......所以不是专家).那么他们应该合作吗?

我在想什么:

  1. 让akka actor监听新的套接字连接.
  2. 将连接(WS或TCP套接字)包装到ClientConnectionManager实例中
  3. 将它传递给负责连接/ rpc逻辑的actor.

我考虑的其他线索:重新实现playframework Controller类.

或者是否已经实现了解决方案?

java raw-sockets websocket netty playframework

6
推荐指数
0
解决办法
923
查看次数

通过播放框架应用程序将文件上传到S3而不"触摸"磁盘

我必须实现一个服务器,让一些用户可能将大量文件(数千兆字节的文件)上传到S3(虽然他们不知道它是S3).我已经在Python中实现了类似的东西,并使用Play框架实现了基本实现.

现在我的上传功能如下所示:

public Result uploadFile() {
      List<Http.MultipartFormData.FilePart> files = request().body().asMultipartFormData().getFiles();
      if (CollectionUtils.isNotEmpty(files)) {
          Bucket bucket = MY_BUCKET;
          UUID timeuuid;
          Promise<UploadResult> promise;
          ObjectNode responseMessage = Json.newObject();  
          for (Http.MultipartFormData.FilePart file : files) {
              timeuuid = TimeUUID.now();
              promise = Promise.promise(new UploadFunction(timeuuid, bucket, file.getFile(), obtainS3Connection()));
              responseMessage.set(file.getFilename(), TextNode.valueOf(timeuuid.toString()));
          }
          return accepted(responseMessage);
      } else {
          return badRequest("files empty");
      }
}
Run Code Online (Sandbox Code Playgroud)

我并不担心上传代码本身,实际上我已经实现了很多次.我担心的是让它变成Play!不将文件保存到磁盘,并且只发送文件"通过"我的服务器而不写入磁盘(即使是临时文件).我有一些处理涉及到某些内容的"客户端"加密,我可以做一个流.

我想知道Play是否已经这样做了?或者我将如何实现这一目标?

我假设Play(以及我之前版本的此服务中的Django)的作用是:

Upload --> Play       MyProcessing -------> S3
               \     /
                \   /
                 Disk
Run Code Online (Sandbox Code Playgroud)

我想要它做什么:

Upload --> Play --> MyProcessing -------> S3
Run Code Online (Sandbox Code Playgroud)

我想这样做的原因是我希望有可能在具有非常小的磁盘的实例上部署我的服务,并且我还希望保证在上载后没有人能够找到未加密的文件(如果我选择加密它). …

java file-upload amazon-s3 playframework playframework-2.2

6
推荐指数
1
解决办法
1312
查看次数

MessagePack和Subclasses反序列化

我正在玩MessagePack和Java.在序列化工具方面,我曾经有过使用Protobuf和Json(使用Jackson和Gson)的经验.

当涉及到正常的序列化和反序列化时,我完全没有问题.当我想要另一个类的多个子类出现问题时.

我用以下代码测试它:

TestMessage.TestMessageSubClass sub = new TestMessage.TestMessageSubClass(); byte [] pack = MsgPack.pack(sub); Assert.assertTrue(ArrayUtils.isNotEmpty(包));

    List<? extends TestMessage> msg = MsgPack.unpack(pack, TestMessage.class);
    Assert.assertNotNull(msg);
    Assert.assertFalse(msg.isEmpty());
    TestMessage temp = msg.get(0);

    Assert.assertNotNull(temp);
    Assert.assertTrue(temp instanceof TestMessage.TestMessageSubClass);
    TestMessage.TestMessageSubClass sub2 = (TestMessage.TestMessageSubClass) temp;
    Assert.assertEquals(sub, sub2);

    System.out.println(sub);
    System.out.println(sub2);
Run Code Online (Sandbox Code Playgroud)

这两行失败,因为当我反序列化时,我只得到一个普通的TestMessage,而不是一个TestMessageSubClass实例.

    Assert.assertTrue(temp instanceof TestMessage.TestMessageSubClass);
    TestMessage.TestMessageSubClass sub2 = (TestMessage.TestMessageSubClass) temp;
Run Code Online (Sandbox Code Playgroud)

我想这是因为默认情况下,MessagePack解包器无法确定他需要反序列化的确切类.事实上,如果我直接要求他反序列化为TestMessageSubClass,这将工作得很好.

我的要求是TestMessage可能有任意数量的具有额外数​​据的子类,并且使用相同的代码我需要在正确的类实例中对它们进行反序列化而不会丢失任何内容.我可能正在反序列化包含这些TestMessage实例的异构列表的流.

我可以在JacksonJson中使用@JsonSubTypes注释获得我想要的行为.

有没有办法使用官方的MessagePack客户端API并获得它?我自己有一种已知的模式吗?

这是我的MsgPack包装类的代码:GIST

任何有关更有效地使用MessagePack的建议也是受欢迎的.

java polymorphism serialization msgpack

5
推荐指数
0
解决办法
944
查看次数

从java.util.concurrent.Future <T>到play.libs.F.Promise <T>:如何在Java中做到这一点?

我正在使用play框架来实现REST API服务.

在一个函数中,我使用java异步库与另一个服务进行通信,它返回一个 java.util.concurrent.Future<T>我映射(使用Guava Futures.transform(~))到一个java.util.concurrent.Future<play.mvc.Result>.

现在,我该怎么做play.libs.F.Promise<Result>才能做到AsyncResult

我发现play.libs.Akka.asPromise(scala.concurrent.Future<T> future)但是我找不到一种方法(在Java中)从Java获得scala未来.

编辑临时解决方案:这是我现在正在使用的:

Future<T> future = asyncGetTheFuture();
Promise<T> promise = Akka.future(new JFutureToPromise<T>(tempFuture));
Run Code Online (Sandbox Code Playgroud)

    class JFutureToPromise<T> implements Callable<T> {
        final Future<T> future;
        final long time;
        final TimeUnit unit;

        private JFutureToPromise(Future<T> future, long time, TimeUnit unit) {
            this.future = future;
            this.time = time;
            this.unit = unit;
        }

        private JFutureToPromise(Future<T> future) {
            this(future, 10L, TimeUnit.SECONDS);
        }

        @Override
        public T call() throws Exception {
            return future.get(time, unit); …
Run Code Online (Sandbox Code Playgroud)

java asynchronous akka playframework

5
推荐指数
1
解决办法
1409
查看次数