我宣布这个课程没有用.
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) 所以我遇到了关于按位运算符和位移的奇怪行为.我试图通过使用位掩码来更快地做一个小检查,我来到这里:
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) 我希望一个模型在我创建一个新的实例时自动生成一个随机的字母数字字符串作为其主键.
例:
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文档之后我想出了它.
我试图通过让我知道我在控制器中调用的函数的参数来制作一个更好的@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) 我有一个"样式"或"有效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,甚至删除序列的构建器.
感谢您提供的任何帮助或评论.
假设我想发送result = true我希望得到的Json是:
{"result":true}
Run Code Online (Sandbox Code Playgroud)
并不是
{
"result": true,
"error": null,
"missing": []
}
Run Code Online (Sandbox Code Playgroud) 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) 我的服务已经使用Websockets与HTML5浏览器内客户端进行通信.客户端由普通的http请求由同一服务器提供服务.
现在我想提供相同的服务/应用程序但不在浏览器中,我想通过TCP套接字提供它.
我正在使用的RPC/action对象将是相同的,序列化将是相同的,逻辑是相同的.我只想使用TCP套接字而不是WebSocket.
我希望将代码保存在同一个"项目文件夹"下,在我部署playframework服务器时立即启动(基本上在启动时我想开始监听WebSockets,TCP套接字和http请求),并且所有内容都在部署相同的包.
我知道:
我在想什么:
ClientConnectionManager
实例中我考虑的其他线索:重新实现playframework Controller类.
或者是否已经实现了解决方案?
我必须实现一个服务器,让一些用户可能将大量文件(数千兆字节的文件)上传到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)
我想这样做的原因是我希望有可能在具有非常小的磁盘的实例上部署我的服务,并且我还希望保证在上载后没有人能够找到未加密的文件(如果我选择加密它). …
我正在玩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的建议也是受欢迎的.
我正在使用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 ×8
akka ×1
amazon-s3 ×1
asynchronous ×1
criteria-api ×1
django ×1
file-upload ×1
jpa-2.0 ×1
json ×1
msgpack ×1
netty ×1
orm ×1
polymorphism ×1
postgresql ×1
python ×1
raw-sockets ×1
scala ×1
websocket ×1