在本文中,您将会了解到关于GoogleAppEngineJava世界中的MVC的新资讯,同时我们还将为您解释googlejavastyleguide的相关在本文中,我们将带你探索GoogleAppEn
在本文中,您将会了解到关于Google App Engine Java世界中的MVC的新资讯,同时我们还将为您解释google java style guide的相关在本文中,我们将带你探索Google App Engine Java世界中的MVC的奥秘,分析google java style guide的特点,并给出一些关于Google App Engine / Java SDK在哪里存储logging和Blob?、Google App Engine for Java中的多对多关系(带有属性)、Google App Engine GAE - Java - 根据请求运行长进程、Google App Engine SDK for Java 1.3.2的实用技巧。
本文目录一览:- Google App Engine Java世界中的MVC(google java style guide)
- Google App Engine / Java SDK在哪里存储logging和Blob?
- Google App Engine for Java中的多对多关系(带有属性)
- Google App Engine GAE - Java - 根据请求运行长进程
- Google App Engine SDK for Java 1.3.2
Google App Engine Java世界中的MVC(google java style guide)
我是从C#和ASP.NET MVC来学习Java的,我很想在Java世界中找到可以在Google App
Engine上使用的等效语言。我已经开始玩FreeMarker,甚至迈出了编写一个非常简单的框架的第一步。理想情况下,虽然我不必做所有艰苦的工作,但一定有人已经做到了!所以我的问题是-
从ASP.NET MVC那里可以找到我熟悉的哪些框架,并且可以在Java的Google App Engine上使用它们。
我想要的关键是:
- 简单路由 -
/products/view/1
以productid为1映射到产品控制器的视图操作 - 模板引擎 -一种轻松地将“ ViewData”传递给视图并从视图轻松访问的方法,理想情况下,我希望避免使用XMLy太高的东西(因此,我喜欢FreeMarker)。
答案1
小编典典我目前正在使用Spring MVC开发Google App Engine应用。它比ASP.NET
MVC成熟得多,因此您不要失望。另外,您还拥有Spring的全部IoC功能。
对于视图层,我正在尝试Velocity。这很简单,但是我还没有决定是否比JSP更喜欢它。我简要介绍了FreeMaker,但不喜欢我看到的内容。如果您想远离XML’y
JSP模板,我建议您试试Velocity。
我在GAE上使用Spring遇到的唯一问题是文件上传。MultipartResolver实现都依赖于临时文件目录。编写完自己的实现后,我将回到无缝上传模型中的文件。
Google App Engine / Java SDK在哪里存储logging和Blob?
Google App Engine / Java商店的SDK在哪里存储logging和blob?
我特别感兴趣的Windows SDK。
在手动和自动testing期间,我希望看到并清除数据。
理想情况下,还会有一个pipe理控制台的精简版本。
默认情况下,java应用程序引擎sdk在应用程序的WEB-INF/appengine-generated/子目录中存储local_db.bin在该目录的local_db.bin文件中存储数据存储记录。
您可以通过设置datastore.backing_store和blobstore.backing_store java属性来更改这些属性(请参阅LocalBlobstoreService.backing_STORE_PROPERTY和LocalDatastoreService.backing_STORE_PROPERTY )。
至于修剪管理控制台, 有一个 ,类似于Python的SDK。 启动java开发服务器并转到http:// localhost:8080 / _ah / admin 。
总结
以上是小编为你收集整理的Google App Engine / Java SDK在哪里存储logging和Blob?全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
Google App Engine for Java中的多对多关系(带有属性)
我从有关无主关系的官方文档中了解到,应用程序必须在关系的任一侧使用一组Key对象。这是很合理的。
但是,由于使用了多年的RDBM风格的编程,我对如何建模该关系本身的属性感到非常困惑。例如,如果我在多对多关系中具有实体 类别 和 条目
,并且想保留dateAdded
属性,或者某些其他数据(仅当关系的双方都已知时才相关)。
我想可以创建第三个类: CategoryEntry ,将两者链接在一起,但这似乎很麻烦。
为这种情况建模的建议方法是什么?
Google App Engine GAE - Java - 根据请求运行长进程
如何解决Google App Engine GAE - Java - 根据请求运行长进程?
我正在使用 GAE 创建一个 HTTPservlet,这是我编辑的代码:
@WebServlet(name = "DoGetMillionsRow",value = "/do-get-million-row")
public class DoGetMillionsRow extends HttpServlet{
private static final Logger LOGGER = LoggerFactory.getLogger(DoGetMillionsRow.class);
private final BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
String projectId = "myprojectid";
public DoGetMillionsRow() throws IOException {
}
@Override
protected void doPost(HttpServletRequest req,HttpServletResponse resp) throws servletexception,IOException {
try {
Base64.Decoder decoder = Base64.getDecoder();
String body = req.getReader().lines().collect(Collectors.joining(System.lineseparator()));
ObjectMapper mapper = new ObjectMapper();
MyCustomSpec spec = mapper.readValue(body,MyCustomSpec.class);
CompletableFuture.runAsync(() ->
{
try {
doSomeProcess(spec);
LOGGER.info("CompletableFuture success");
} catch (Exception e) {
LOGGER.error("CompletableFuture error",e);
}
}
);
resp.setHeader("Access-Control-Allow-Origin","*");
resp.setContentType("application/json");
resp.setStatus(200);
AmsApiResponse finalResponse = new AmsApiResponse(true,"success");
resp.getWriter().write(new Gson().toJson(finalResponse));
} catch (Exception e) {
LOGGER.error("API Exception",e);
resp.setStatus(400);
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
private boolean doSomeProcess(MyCustomSpec spec) throws APIException,ExecutionException,InterruptedException {
List<Customresponse> result = getMyData(spec);
sendDataToStackoverflow()
return true;
}
private void sendDataToStackoverflow(List<Customresponse> spec){
//SEND DATA TO STACKOVERFLOW
}
private List<Customresponse> getMyData(MyCustomSpec spec){
List<String> result = new ArrayList<>();
String query = "SELECT field1,field2 FROM `myProjectId.myDataSet.myTable` WHERE field3=@field3"
QueryJobConfiguration queryConfig =
QueryJobConfiguration.newBuilder(query)
.addNamedParameter("field3",QueryParameterValue.string(spec.getFilter))
.setUseLegacysql(false)
.setJobTimeoutMs(600000L)
.build();
List<String> result = new ArrayList<>();
LOGGER.info("progress 1 ");
TableResult tableResult = getTableResult(bigquery,queryConfig);
for (FieldValueList row : tableResult.iterateall()) {
result.add(new Customresponse(
row.get("field1").getValue(),row.get("field").getValue()
));
}
LOGGER.info("progress 9 ");
return result;
}
private TableResult getTableResult(BigQuery bigquery,QueryJobConfiguration queryConfig) throws InterruptedException {
LOGGER.info("progress 3");
JobId jobId = JobId.of(UUID.randomUUID().toString());
Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());
queryJob = queryJob.waitFor();
LOGGER.info("progress 4");
if (queryJob == null) {
LOGGER.info("progress 5");
throw new RuntimeException("Job no longer exists");
} else if (queryJob.getStatus().getError() != null) {
LOGGER.info("progress 6");
// You can also look at queryJob.getStatus().getExecutionErrors() for all
// errors,not just the latest one.
throw new RuntimeException(queryJob.getStatus().getError().toString());
}
LOGGER.info("progress 7");
TableResult result = queryJob.getQueryResults();
LOGGER.info("progress 8");
return result;
}
@Override
protected void doOptions(HttpServletRequest req,IOException {
resp.setHeader("Access-Control-Allow-Origin","*");
resp.setHeader("Access-Control-Allow-Methods","*");
resp.setHeader("Access-Control-Allow-Headers","Authorization,Content-Type");
}
}
在第一次尝试时,我没有使用 CompletableFuture runAsync,并且出现此错误
started at 2021/04/27 08:06:28.845 UTC
and was still executing at 2021/04/27 08:07:33.165 UTC.
at java.util.Collections$UnmodifiableCollection.size(Collections.java:1030)
at com.google.api.client.util.DataMap$EntryIterator.hasNext(DataMap.java:151)
at com.google.api.client.util.GenericData$EntryIterator.hasNext(GenericData.java:269)
at java.util.AbstractMap.containsKey(AbstractMap.java:153)
已经在网上做了一些研究,据说最大超时时间为 60 秒且不可更改
在第二次尝试中,我尝试了 runAsync 没有错误日志,进程正在运行,我得到了一些日志 但是最后一个日志是在“progress 3”上,之后的进程没有运行
仅供参考:
- 在 bigquery 控制台上查询需要 12 秒
- 查询过程大约2.4GB数据(未来应该是240GB或更多)
- 查询结果大约有 140k 行,当我将其下载为 json 文件时,数据大小为 (16mb)
有什么办法或解决方法吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
Google App Engine SDK for Java 1.3.2
Google App Engine 可让您在 Google 的基础架构上运行您的网络应用程序。App Engine 应用程序易于构建和维护,并可根据您的访问量和数据存储需要的增长轻松扩展。使用 Google App Engine,将不再需要维护服务器:您只需上传您的应用程序,它便可立即为您的用户提供服务.
下 载:Google App Engine SDK for Java 1.3.2
以下是该版本的发布说明:
App Engine Java SDK - Release Notes
Version 1.3.2 - March 25, 2010
- New API to read the contents of uploaded Blobs (fetch_data)
- http://code.google.com/p/googleappengine/issues/detail?id=2536
- URLFetch now supports accessing ports 80-90, 440-450, and 1024-65535
- Mail API now allows common document formats as attachments
- http://code.google.com/p/googleappengine/issues/detail?id=494
- The Task Queue API now supports adding multiple tasks in a single call to Queue.add()
- Fixed charset handling for inbound emails
- http://code.google.com/p/googleappengine/issues/detail?id=2326
- Fixed issue with compositing background colors in dev_appserver
- New feature in the datastore to specify whether to use strong or eventually consistent reads (the default is strong)
- New datastore feature allows setting deadlines for operations
- Increased the maximum Task Queue refill rate from 20/s to 50/s
- Support for IP blacklisting to prevent denial of service (DoS) attacks
- App Stats is now available for the Java SDK in addition to Python
- Fix issue with expiration times not being reset on Put on the Memchache API
- http://code.google.com/p/googleappengine/issues/detail?id=1284
- Fix issue preventing static files from being served when a servlet is mapped to root
- http://code.google.com/p/googleappengine/issues/detail?id=1379
JDO/JPA Changes
- Support default rpc deadlines and query-specific deadlines
- Support default read consistency config and query-specific read consistency config
我们今天的关于Google App Engine Java世界中的MVC和google java style guide的分享就到这里,谢谢您的阅读,如果想了解更多关于Google App Engine / Java SDK在哪里存储logging和Blob?、Google App Engine for Java中的多对多关系(带有属性)、Google App Engine GAE - Java - 根据请求运行长进程、Google App Engine SDK for Java 1.3.2的相关信息,可以在本站进行搜索。
本文标签: