小编ber*_*nie的帖子

在Eclipse中进入Java EE代码

Eclipse和Java EE代码中的调试会话很痛苦,我希望有人比我的方法更好.

这是两个EJB无状态bean方法之间的典型调用堆栈(使用TomEE 1.0):

NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]  
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39  
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25  
Method.invoke(Object, Object...) line: 597  
ReflectionInvocationContext$BeanInvocation(ReflectionInvocationContext$Invocation).invoke() line: 181   
ReflectionInvocationContext.proceed() line: 163 
StatsInterceptor.record(InvocationContext, Method) line: 176    
StatsInterceptor.invoke(InvocationContext) line: 95 
GeneratedMethodAccessor35.invoke(Object, Object[]) line: not available  
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25  
Method.invoke(Object, Object...) line: 597  
ReflectionInvocationContext$InterceptorInvocation(ReflectionInvocationContext$Invocation).invoke() line: 181    
ReflectionInvocationContext.proceed() line: 163 
CdiInterceptor.invoke(InvocationContext) line: 129  
CdiInterceptor.access$000(CdiInterceptor, InvocationContext) line: 45   
CdiInterceptor$1.call() line: 66    
CdiInterceptor.aroundInvoke(InvocationContext) line: 72 
GeneratedMethodAccessor34.invoke(Object, Object[]) line: not available  
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25  
Method.invoke(Object, Object...) …
Run Code Online (Sandbox Code Playgroud)

java eclipse debugging java-ee

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

配额、孤立文件和使用带有 Google Drive API 的服务帐户上传

语境

我正在构建一个需要将文件上传到属于用户的 Google 云端硬盘的 php 网络应用程序(我们称他为 Bob)。我使用了Google Drive 服务帐户(我们称之为 service@gmail.com)。

Bob 在他的 Google 云端硬盘中创建了一个文件夹(“上传”)并与 service@gmail.com 共享。

服务帐户 (service@gmail.com) 可以使用 Drive API 列出该共享上传文件夹中的文件并将文件上传到该文件夹​​。上传的文件也会显示在 Bob 的 Google Drive 中。到现在为止还挺好。

问题

正如人们所料,service@gmail.com 上传的文件的所有者是 service@gmail.com。这有以下后果:

  1. 由于 service@gmail.com 是上传文件的所有者,因此它们计入该帐户的配额。但是,Bob 为他的 Google Drive 购买了更多空间,并希望上传的文件计入他的配额,以免服务帐户中的空间不足。
  2. 当 service@gmail.com 先前上传的文件(由 Bob)从共享上传文件夹中删除时,会发生一些事情:
    • 删除的文件不会显示在任一用户的上传文件夹中。
    • Bob 仍然可以在他的“所有项目”视图中看到已删除的文件。
    • 当服务帐户通过 API 列出所有文件但它没有任何父文件(即它是孤立的)时,删除的文件仍然存在。
    • 通过 API 获取已删除文件的详细信息时,它显示它正在使用配额。

该怎么办?

如何(干净地)处理这个用例?我看到两种可能的解决方案:

  1. 上传文件时,将所有权设置为 Bob。那可能吗?这不起作用!首先,它不适用于普通帐户的上传文件。其次,服务帐户有一个电子邮件@developer.gserviceaccount.com,而 Bob 的帐户有@gmail.com。从文档说:

Google Apps 客户:您不能让域外的人成为您的 Google 文档的所有者。只有专业版、政府版和教育版域中的 Google Apps 客户可以转让已同步或上传的文件(如 PDF 或图像文件)的所有权。

消费者云端硬盘用户:您无法转让已同步或上传的文件(如 PDF 或图像文件)的所有权。

  1. 不要使用服务帐户,而是让网络应用直接使用 Bob 的帐户。但是,这确实需要为 Bob 获取 …

google-drive-api

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

如何在计算着色器中对 SSBO 使用原子操作

示例代码

这是一个简单的计算着色器来说明我的问题

layout(local_size_x = 64) in;

// Persistent LIFO structure with a count of elements
layout(std430, binding = 0) restrict buffer SMyBuffer
{
    int count;
    float data[];
} MyBuffer;

bool AddDataElement(uint i);
float ComputeDataElement(uint i);

void main()
{
    for (uint i = gl_GlobalInvocationID.x; i < some_end_condition; i += gl_WorkGroupSize.x)
    {
        if (AddDataElement(i))
        {
            // We want to store this data piece in the next available free space
            uint dataIndex = atomicAdd(MyBuffer.count, 1);
            // [1] memoryBarrierBuffer() ?
            MyBuffer.data[dataIndex] = ComputeDataElement(i);
        } …
Run Code Online (Sandbox Code Playgroud)

opengl glsl gpu-atomics

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

删除当前页面的Vuex记录时如何处理导航?

我有一个ClientManagePage显示客户端信息并允许删除显示的客户端的位置。

该页面的 vue-router 路由配置如下所示:

{
  path: '/client/:id/manage',
  name: 'client',
  component: ClientManagePage,
  props: ({ params }) => ({ id: params.id }),
}
Run Code Online (Sandbox Code Playgroud)

客户端实体存储在 vuex 存储中。ClientManagePage使用 prop 从商店获取其客户端实体id,并显示客户端的各种属性和“删除”按钮。

删除按钮侦听器是(在 内mapActions):

async removeClientClicked(dispatch) {
  // Wait for the action to complete before navigating to the client list
  // because otherwise the ClientListPage might fetch the client list before
  // this client is actually deleted on the backend and display it again.
  await dispatch('removeClientAction', this.id);
  this.$router.push({ …
Run Code Online (Sandbox Code Playgroud)

vue.js vue-router vuex vuejs2

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

如何管理一个项目中多个版本的npm模块,让不同的包内部依赖于特定的版本?

我的主要反应项目使用的情况是"@material-ui/core": "^1.5.1",对于我正在尝试构建的新组件,我想使用 #@rjsf/material-ui":"3.2.1" 内部需要最新版本的"@material-ui/core": "4.12.3". 在不影响主项目@material-ui/core版本的情况下,我如何安装这两个版本并强制"@rjsf/material-ui":"3.2.1"引用"@material-ui/core": "4.12.3"

我在这里寻找可能的解决方案,但是"@rjsf/material-ui":"3.2.1", 仍然在内部引用"@material-ui/core": "^1.5.1"并中断。解决这个问题的出路是什么?提前致谢。

npm node-modules reactjs material-ui

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

使用JavaMail的Java EE 6 Application Server for Web Profile

我有一个Java EE Web应用程序,它使用Java EE 6 Web配置文件+ EJB Timer服务和JavaMail中的功能.我目前正在开发期间使用GlassFish 3.1.2完整配置文件,但我想调查替代方案,因为:

  • GlassFish 3.1.2中的多部分表单似乎存在错误,而GlassFish 3.1.1还有其他问题在3.1.2中修复了.(捕获22 ...)该错误由票证中的jar修复.
  • 支持"网络配置文件"的应用程序服务器似乎有比"完整配置文件"更多的选项,前者应该更加轻量级.
  • 我想选择最佳的部署选项

我目前正在使用GlassFish的嵌入式应用程序服务器功能进行测试,因此需要任何替代方案的类似工具.在最坏的情况下,我可以使用嵌入式自动测试的GlassFish.

是否可以将JavaMail和EJB Timer Service实现模块"添加"到仅实现Web配置文件的应用程序服务器?它运作良好吗?如果无法做到这一点,是否有使用JavaMail和EJB Timer Service的替代方法?

您可以推荐哪些应用服务器符合我的要求?

最后,我考虑使用EJB的"异步调用"功能,它不是EJB lite的一部分.如果我理解正确,在Java EE容器中运行时手动启动线程是违法的.在这种情况下,如何在Java EE Web Profile中启动异步操作?

我仍然是整个Java EE生态系统和术语的新手,所以请不要犹豫,让我澄清我的问题的任何部分.

支持文档

编辑1

根据Apache TomEE文档,TomEE,TomEE +和OpenEJB符合该法案.

编辑2

根据AS 7.1发行说明,这个问题和JBoss AS 7.1.0 这个问题似乎实现了我需要的所有功能.

java web-applications application-server java-ee java-ee-6

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

“显示完整站点”按钮绕过CSS媒体查询

我在网站上使用CSS媒体查询来切换到较小设备上的垂直布局。效果很好,但是我想在网站上添加一个类似“显示桌面版本”的按钮。我想使此按钮(或链接,无论如何)强制或更改媒体查询评估,以便它们评估时好像屏幕宽度大于实际宽度(例如1200px而不是320px)。这可能吗?

我的CSS看起来像这样:

#logo {
    /* Mobile style */
    [...]

    @media (min-width: @screen-sm) {
        /* Desktop style */
        [...]
    }
}

#footer {
    /* Mobile style */
    [...]

    @media (min-width: @screen-sm) {
        /* Desktop style */
        [...]
    }
}

/* And so on... i.e. multiple piecewise styles, following the same pattern used in Bootstrap's css */
Run Code Online (Sandbox Code Playgroud)

我发现了一种有趣的方法,该方法在主体上使用CSS类而不是媒体查询来在布局之间进行切换。但是,它完全消除了实际的媒体查询,而是使用了javascript。 “全网”移动浏览器和基于屏幕大小的媒体查询

编辑

完善了CSS示例。前两个答案非常有帮助,但我不想完全修改css组织以将其分为根桌面版本和移动版本。一种更有趣的技术: 更少:您可以将CSS选择器与媒体查询组合在一起吗?

编辑2

一种有趣的方法是通过javascript修改CSS媒体查询。不过,这让我有些害怕,因为浏览器支持对于这种晦涩的技术可能并不可靠:http//jonhiggins.co.uk/words/max-device-width/

html javascript css media-queries

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

在Sprint引导Web应用程序中运行脚本

我有一个Spring Boot Web应用程序打包为WAR文件,我希望能够按需运行某些任务(脚本或命令).例如:

  • 初始化数据库架构
  • 编程方式为数据库播种
  • 新版本应用程序需要时的数据迁移(移动文件,数据库操作等)
  • 验证存储文件和数据库内容之间的数据完整性

如果这些"命令"可以访问与Web应用程序相同的bean(服务,DAO)和模型,则它们将更容易实现.我希望我必须在某处创建一个Spring应用程序上下文.我还希望将这些命令与应用程序的其余部分打包在一起,以便与它一起进行测试并易于部署.

基本上,我想知道如何实现类似于Laravel的工匠命令(PHP).

我已经阅读了在这里这里运行WAR内部的类.我正在寻找包装和运行命令的"Spring方式".我是否必须为此集成Spring Batch作业?据我所知,Spring Batch适用于较大的工作负载,可以分批分批.我应该咬紧牙关并将命令放在第二个单独的maven模块中,该模块引用第一个模块吗?

更新

我实现了一个ApplicationRunner(感谢Stefan!),看看它们是如何工作的,并发现它们在Spring应用程序上下文刷新后运行.这意味着整个Web应用程序在跑步者执行之前已初始化并处于活动状态.这包括MVC端点映射器和配置中定义的计划任务.虽然这肯定是有用的,但我需要在所有不活动的情况下运行命令,因为它可能与命令冲突(特别是在命令运行期间的瞬态数据状态).

更新2

我只需要创建另一个可执行jar,使用a创建一个Spring Boot应用程序CommandLineRunner.如果我使用3个模块,这可以引用Web应用程序中的所有bean:

  1. 春天的"服务"豆模块
  2. Web应用程序模块
  3. 命令行运行程序模块

java spring spring-mvc war spring-boot

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

如何添加正好1行高的填充或边距

我想在底部填充ul(或到最后一个li)添加底部填充,它恰好等于line-height属性at 的计算值ulli(它们都继承它们line-height).换句话说,我希望在"项目3"下的白色空间大小与li添加"项目4"相同.那可能吗?

需要注意的是emrem单位没有做到这一点,如果line-height不等于1.此外,考虑到"环境"中的ul生活是未知的.例如,我不知道是否bodyline-height: 1.1,line-height: 2等等.

我希望在此图像中将蓝色空间作为填充.

在此输入图像描述

这实现了期望的外观,但是对于这样一个简单的用例而言必须使用伪元素是错误的.

ul {
  list-style: none;
  background: #ccc;
}

ul::after {
  content: "\00a0";
  display: list-item;
}
Run Code Online (Sandbox Code Playgroud)
<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

css

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

Vue.js 组件的 vm.$el 是常量还是可以重新分配?

Vue.js 组件实例有一个vm.$em属性,可以访问组件的根 DOM 元素。此属性的在组件的生命周期中是否会发生变化,还是在组件安装后保持不变?换句话说,一旦创建了一个组件的根 DOM 元素,它是否可以在某些情况下被 Vue 替换?

我知道 DOM 元素的内容当然可以改变。

根据下面的组件生命周期图,当数据发生变化时,会出现“虚拟 DOM 重新渲染和补丁”。我阅读了文档并试图在 Vue 的源代码中找到答案,但到目前为止我还没有找到任何决定性的答案。

我最接近源代码的是src/core/instance/lifecycle.js

Vue.prototype._update = function (vnode: VNode, hydrating?: boolean) {
  const vm: Component = this
  const prevEl = vm.$el
  const prevVnode = vm._vnode
  const restoreActiveInstance = setActiveInstance(vm)
  vm._vnode = vnode
  // Vue.prototype.__patch__ is injected in entry points
  // based on the rendering backend used.
  if (!prevVnode) {
    // initial render
    vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly …
Run Code Online (Sandbox Code Playgroud)

javascript vue.js vuejs2

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