标签: jakarta-ee

如何获取 ConstraintValidatorContext?

我正在编写显式调用 Bean Validation (JSR-303) 的代码,如下所示:

public class Example {

    @DecimalMin(value = "0")
    private static final String ANNOTATED = "";

    public void isPossitiveNumber(String str){

        ValidatorFactory factory =
             Validation.buildDefaultValidatorFactory();

        ConstraintValidator<DecimalMin, String>
             validator = 
                  factory.getConstraintValidatorFactory().getInstance(
                          DecimalMinValidatorForString.class);


        validator.initialize(
                  ReflectionUtils.findField(getClass(), "ANNOTATED")
                         .getAnnotation(
                          DecimalMin.class));

        boolean isValid = validator.isValid(str, null);

        return isValid;


    }


}
Run Code Online (Sandbox Code Playgroud)

请注意boolean isValid = validator.isValid(str, null); 行 我转移nullConstraintValidatorContext因为我找不到获得/构建它的方法。在这种特殊情况下,这很好,因为ConstraintValidatorContext内部没有使用,但很明显是一个黑客。我应该如何获得ConstraintValidatorContext

添加

我被要求提供用例。因此,例如,我正在编写自定义验证器,并且我想重用现有的验证。或者我正在编写上面描述的平面 Java 代码,我想重用现有的验证。

java bean-validation jakarta-ee

5
推荐指数
2
解决办法
2万
查看次数

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

发送大量 POST 请求

我的情况是,我将接收多个请求,处理来自请求的数据,然后使用 POST 将数据转发到另一台服务器。可能有数千个请求同时发送到服务器。我以前从来没有处理过这种卷,所以我不得不对如何进行一些(受过教育的)猜测。

我正在使用 Jave EE 应用程序服务器,并且正在使用 org.apache.client.HttpClient 作为 POST 请求转发数据。每包数据比较小(每包50-100kb)以下是我目前的策略:

当一个请求进来时,我会立即生成一个新线程来处理和发送数据(每个请求一个线程)。我使用 java.util.concurrent.ThreadPoolExecutor 和 java.util.concurrent.ArrayBlockingQueue 来控制线程和排队。如果线程池中的所有线程都被使用,则传入数据将排队。如果队列已满,则数据将被丢弃(我完全没问题)。我正在关注有关使用 org.apache.client.HttpClient 进行线程处理的文档,因此所有线程共享 HttpClient 对象,并且每个请求只创建 HttpPost 对象。

我知道在我自己对此进行基准测试之前我不会完全知道我的实现的含义,但我想知道在走那么远之前是否有任何危险信号。为了弄清楚我的实际问题是什么:

  • 我的方法有任何危险信号吗?(我做错的任何明显的事情都可能导致严重的性能损失,因为我对此比较陌生)

  • 知道将有数千个数据包,为每个数据包提供自己的线程是否不明智?(但是线程数将受到线程池的限制)

  • 将传入请求排队并为每个线程发送多个数据包而不是每个线程一个更聪明吗?

java performance multithreading servlets jakarta-ee

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

计数和所有字符相同的最大字符串的起始索引

在给定的字符串中,我想找出由相同字符组成的最大子字符串的起始索引,并计算该子字符串在主字符串中出现的次数。

例如:“aaakkkkkbbkkkkk” 在这种情况下,子串“kkkkk”的计数为 5,起始位置为 9。

到目前为止我的代码:

String str = "aaakkkkbbkkkkk";
int count = 0;
//converting string into character array
char[] vals = str.toCharArray(); 

for(int i=0; i < vals.length; ){

   for(int j=i+1; j<vals.length; j++){
       //if value match then increment counter
       if(vals[i]== str.charAt(j)){
           counter++;
       }
       //else break from inner loop 
       break; //break from inner loop
   }
   //assign the index value of j to the i to start with new substring
   i = vals.indexOf(j);
}
Run Code Online (Sandbox Code Playgroud)

我的问题:无法存储计数器值,因为此计数器值是子字符串的实际出现,稍后我将比较子字符串与计数器出现。

我的逻辑也不达标。

java jakarta-ee

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

使用 REST 服务上传文件

我使用以下 REST 服务(来自本教程)使用 jersey 多部分实现将文件从不同数量的客户端上传到我的 GlassFish 服务器:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.sun.jersey.core.header.FormDataContentDisposition;
import com.sun.jersey.multipart.FormDataParam;

@Path("/fileupload")
public class UploadFileService {

    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(
        @FormDataParam("file") InputStream uploadedInputStream,
        @FormDataParam("file") FormDataContentDisposition fileDetail) {

        String uploadedFileLocation = "c://uploadedFiles/" + fileDetail.getFileName();

        // save it
        saveToFile(uploadedInputStream, uploadedFileLocation);

        String output = "File uploaded via Jersey based RESTFul Webservice to: " + uploadedFileLocation;

        return Response.status(200).entity(output).build();
    }

    // save …
Run Code Online (Sandbox Code Playgroud)

java rest glassfish jersey jakarta-ee

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

如何使用 gradle 从 WSDL 和 XSD 生成工件?

您可以发布示例代码以使用 gradle 从 wsdl 和 xsd 生成工件吗?也有可用的内置插件吗?另外,我们如何使用 gradle 加载自定义绑定文件?

gradle build.gradle jakarta-ee

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

Hibernate Criteria order by term length

我想按长度排序我的条款,这相当于:

SELECT term FROM <table_name> where term  like '%now%' order by length(term ) asc;
Run Code Online (Sandbox Code Playgroud)

在休眠状态。

目前这是我的标准代码:

    Criteria criteria = session.createCriteria(myClass.class);
    criteria.setProjection(Projections.distinct(Projections.property("term")));
    criteria.add(Restrictions.ilike("term", "%xyz%"));
    criteria.addOrder(Order.asc("term"));
    criteria.setMaxResults(10);
    List<String> list = criteria.list();
Run Code Online (Sandbox Code Playgroud)

干杯

java mysql hibernate criteria jakarta-ee

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

在 Java 中不断清零并重新创建 Timer、TimerTask

我知道使用 Timer 和 TimerTask 不再是当前公认的做法(有些人建议使用线程,其他人建议使用 ScheduledExecutorService 或其变体),所以这个问题不是关于良好的编程实践,而是关于实际错误或异常的可能性.

本质上,我拥有的是一个 servlet,它保持一个每秒递增的运行计数器(它是一个静态 Calendar 对象)。当达到指定的截止日期时(默认情况下我们达到 10 分钟),我从我的应用程序调用 NIST 时间服务器以获取当前时间,然后我用它来重新设置我的计数器。

增加计数器(每秒)的相同 TimerTask 定义的方法也是每次我调用 NIST 服务器(每 10 分钟)时必须暂停和重新安排的方法。我在暂停不成功/取消现有的定时器/ TimerTask的对象,之前的NIST调用服务器并重新安排一个TimerTask调用。

此处描述了由此产生的异常: 当需要多次设置和取消时,如何在 Java 中使用计时器?

可以这么说,TimerTask 和 Timer 都不能被多次调度,即使使用 purge() 或 cancel(),这似乎只适用于将这些对象设置为符合 Java 垃圾收集的条件。

使用 wait() 和 notify() 导致同步异常,不幸的是,我没有时间弄清楚,所以我最初的线程实验失败了。

我最终做的是这样的:

secondTickerTask.cancel();
secondTicker.purge();
secondTicker.cancel();

secondTickerTask = null;
secondTicker = null;

Date newCurrentTime = getNistTimeFromFirstWorkingServer();

// Save new date to current time, reset second counter.
setCurrentTimeAndDeadline(newCurrentTime);
startSecondIncrementTimer(newCurrentTime);

secondTicker = new Timer();
secondTickerTask = new TimerTask(){
    public …
Run Code Online (Sandbox Code Playgroud)

java timer jakarta-ee

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

无法像测试 JSF ViewScoped 托管 bean 那样测试 CDI ViewScoped bean

我们正在将我们的项目迁移到针对 JBoss Wildfly 的 Java EE 7。

我们有几十个@ManagedBean @javax.faces.bean.ViewScoped(旧的非 CDI ViewScoped)控制器,我们要转换成@Named @javax.faces.view.ViewScoped(新的 CDI 版本)。

我们现在在使用 Arquillian 对远程 Wildfly(每晚 beta2)服务器进行测试时遇到此异常:

org.jboss.arquillian.test.spi.ArquillianProxyException: org.jboss.weld.context.ContextNotActiveException : WELD-001303: No active contexts for scope type javax.faces.view.ViewScoped [Proxied because : Original exception not deserilizable, ClassNotFoundException]  
    at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:680)  
    at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:79)  
    at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:78)  
    at controller.ViewScopedEE7Controller$Proxy$_$$_WeldClientProxy.getNumber(Unknown Source)  
    at controller.ViewScopedEE7ControllerTest.test(ViewScopedEE7ControllerTest.java:47)  
Run Code Online (Sandbox Code Playgroud)

有几件事对我来说很突出:

No active contexts for scope type javax.faces.view.ViewScoped
Run Code Online (Sandbox Code Playgroud)

[Proxied because : Original exception not deserilizable, ClassNotFoundException]  
Run Code Online (Sandbox Code Playgroud)

我有点理解第一部分,虽然这对我们使用旧的非 CDI ViewScoped 来说从来都不是问题,但我不明白第二部分,找不到什么类?或者这是一个红鲱鱼?

这是一个完整的工作示例:

ViewScopedEE7Controller.java

    package controller;  

import javax.faces.view.ViewScoped; …
Run Code Online (Sandbox Code Playgroud)

jboss cdi jboss-arquillian jsf-2.2 jakarta-ee

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

正确使用 LabelValueBean

我有一个变量:

private ArrayList<LabelValueBean> circleNameIdList;
Run Code Online (Sandbox Code Playgroud)

在我的Action班级中,它的价值被填充。

I want to display the label in my drop-down in JSP and when one label is selected, the corresponding value to that particular label in circleNameIdListto be passed to the server. 例如:如果 label:NewYork被选中,那么它是对应的id = 5,被发送到服务器。

我怎样才能做到这一点?

到目前为止,我在 JSP 中是这样做的:

<s:select list="#session.circleNameIdList" label="Select Circle:" name="circleNameIdList" id="circleNameIdList"></s:select>
Run Code Online (Sandbox Code Playgroud)

但是,显示不正确。

java jsp struts2 ognl jakarta-ee

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