标签: java-ee-7

有哪些可用的 Java EE Websockets 实现?

对于 JSR 356 - Java API for WebSocket,我知道参考实现是 Tyrus。

还有其他人吗?

如果没有,那么我猜 Tyrus 是所有应用程序服务器(Glassfish、JBossAS/Wildfly 等...)中的实现

websocket java-ee-7 java-websocket jakarta-ee

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

为什么数据库连接不断关闭

我真的被这个问题困扰了,所以我很高兴有人能帮助我!

当我在一分钟后登录时,系统注销,当我尝试再次登录时,我收到此错误: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:连接关闭后不允许任何操作。

我怎样才能防止这个连接关闭。最好的连接池是什么

注意:我仍然是一个学习者,正在做我的第一个 CRUD!数据库实用程序:

  private static Connection connet;
        public static Connection getConnection() {
            if( connet != null )
                return connet;

            InputStream inputStream = DButil.class.getClassLoader().getResourceAsStream( "/db.properties" );
            Properties properties = new Properties();
            try {
                properties.load( inputStream );
                String url = properties.getProperty("url");
                String driver = properties.getProperty("driver");
                String userName = properties.getProperty("user");
                String password = properties.getProperty("password");

                Class.forName(driver);
                connet = DriverManager.getConnection(url,userName,password);

            } catch (IOException | ClassNotFoundException | SQLException e) {

                e.printStackTrace();
            }

            return connet;      
    }
// connection commit 
    public static void commit() { …
Run Code Online (Sandbox Code Playgroud)

java mysql jdbc java-ee-7

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

暂停的交易会超时吗?

我有一个在 JBOSS EAP 7 上运行的 JEE 应用程序。有一个长时间运行的异步方法可以将数据导入到另一个系统中。被触发后,它会在 5 分钟后遇到事务问题,这是 JBOSS 默认事务超时。到目前为止,一切都很好。我改变了行为(伪代码):

Before:
@Transactional(Required) //which is default
//The whole process takes usually longer than 5 min
void doImport{
 for(n-number of datsets){
   importOneDataSet();
 }
}

After:
@Transactional
void doImport{
 for(n-number of datsets){
   importOneDataSet();
 }
}
...
@Transactional(Requires_New) 
//a new transaction is created and the "outer" is suspended
//to import one dataset is below 5min
void importOneDataSet(){
...
}
Run Code Online (Sandbox Code Playgroud)

我假设外部事务超时在暂停/暂停时停止,但 5 分钟后我仍然遇到事务超时错误。

那么看来暂停交易并不会影响它的交易超时时间?该应用程序服务器是否特定于 JEE 标准中定义的?第三个问题是:你将如何解决这个问题?不开放外部交易吗?(仅)增加该事务的超时?

令人费解的是,我读过的大多数交易文章甚至没有提到这一事实。关于该主题的唯一提示是一篇博客文章

jboss transactions ejb-3.0 java-ee-7 jakarta-ee

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

如何使并发实用程序 (JSR 236) 在普通的非 EE Tomcat 8 中工作?

我的技术栈包括

为了能够ManagedExecutorService更明智、更安全地使用和管理线程,我想包含此依赖项

我尝试以不同的方式将 bean 注入到不同范围的 bean(基于视图、会话、基于应用程序)中。

  @Inject
  private javax.enterprise.concurrent.ManagedExecutorService service;
Run Code Online (Sandbox Code Playgroud)

  @Resource
  private javax.enterprise.concurrent.ManagedExecutorService service;
Run Code Online (Sandbox Code Playgroud)

  @Resource(lookup="java:comp/DefaultManagedExecutorService")
  private javax.enterprise.concurrent.ManagedExecutorService service;
Run Code Online (Sandbox Code Playgroud)

似乎没有任何效果,异常消失

java.lang.RuntimeException:
    Error looking up java:comp/env/.../ManagedExecutorService in JNDI
javax.naming.NameNotFoundException:
    Name [.../ManagedExecutorService] is not bound in this Context.
Run Code Online (Sandbox Code Playgroud)

这可能是由于 bean 注册不当造成的。因为我没有找到。我扫描了整个类路径,但在ManagedExecutorService某处找不到任何定义或其任何实现的东西。

我试图自己注册它,context.xml但无济于事。我使用这个 TomEE 教程(天真地)假设我的非 EE Tomcat 的配置是相同的。

<Resource name="ManagedExecutorService"
          type="javax.enterprise.concurrent.ManagedExecutorService" />
Run Code Online (Sandbox Code Playgroud)

<Resource id="ManagedExecutorService"
          type="javax.enterprise.concurrent.ManagedExecutorService" />
Run Code Online (Sandbox Code Playgroud)

显然,事实并非如此。

我的问题是

  1. 是否可以在非 EE 服务器上设置并发实用程序,尤其是 …

java tomcat executorservice apache-tomee java-ee-7

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

从List创建JsonArray


我需要从JsonObjects的java.util.List 创建一个javax.json.JsonArray对象(Java EE 7 API).以前,在使用JSON API时,我习惯只使用以下方法:

JSONArray jsonArray = new JSONArray(list);
Run Code Online (Sandbox Code Playgroud)

但我可以看到javax.json.JsonArray中没有等效的构造函数.有没有一种简单的方法(浏览所有列表除外)来做到这一点?
谢谢

java json java-ee java-ee-7

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

可以在同一个实例中实现Java拷贝构造函数结果吗?

我在Java 8中实现了一个复制构造函数,并使用它:

User user = // some object
LOG.debug("{}", user);
this.userAccount = new User(user);
LOG.debug("{}", this.userAccount);
Run Code Online (Sandbox Code Playgroud)

输出:

User@2799061
User@2799061
Run Code Online (Sandbox Code Playgroud)

这是同一个对象!怎么会这样?这是某种我没有意识到的最优化吗?

此外,我的"用户"类是JPA管理实体.这会以某种方式干涉吗?

java jpa java-8 glassfish-4 java-ee-7

4
推荐指数
1
解决办法
396
查看次数

WildFly:Java EE应用程序中随机加密的密码

什么是使用存储在数据库中的随机盐渍密码的WildFly(8.2)方法?

是的实现org.jboss.crypto.digest.DigestCallback意味着有机会获得部分盐从数据库(在密码验证过程)?

或者我应该简单地将密码哈希并加密密码,然后再将其交给login方法HttpServletRequest

security salt java-ee-7 wildfly-8

4
推荐指数
1
解决办法
1872
查看次数

为JAX-RS 2.0客户端API配置代理

我有一个在Java EE 7应用程序服务器(WildFly)上运行的应用程序,它使用REST资源查询另一个服务.

在以前的应用程序中,我使用了Jersey 1.x客户端API.通过Web代理授予对REST服务的访问权限.

在Jersey中,我创建了Client这样的实例:

public Client create() {

    Client client;
    if ( proxyConfiguration != null && proxyConfiguration.getHost() != null && !proxyConfiguration.getHost().trim().isEmpty() ) {
        HttpURLConnectionFactory urlConnectionFactory = new ProxyUrlConnectionFactory( proxyConfiguration );
        client = new Client( new URLConnectionClientHandler( urlConnectionFactory ), clientConfig );
    } else {
        client = Client.create( clientConfig );
    }

    return client;
}
Run Code Online (Sandbox Code Playgroud)

在Java EE 7应用程序服务器上运行我想使用应用程序服务器提供的JAX-RS 2.0客户端API.

现在我很难找到有关如何以独立于平台的方式配置JAX-RS 2.0客户端的信息.设置http.proxyHosthttp.proxyPort系统属性在WildFly中没有任何效果(我宁愿不在全局配置它).

有谁知道如何解决这个问题?

jax-rs java-ee-7

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

TomEE 7.0.0上ManagedScheduledExecutorService的任务内部的事务?

上下文

我想使用安排重复的后台任务ManagedScheduledExecutorService.我通过一个获得我的Runnables/Callables Instance,所以我的任务中有注入功能.

我的应用程序运行TomEE 7.0.0-SNAPSHOT webprofile.

问题

当这些任务访问数据库时,他们需要一个事务.但是,Runnable/ Callableno事务内部是活动的.

用户交易

ManagedScheduledExecutorService文档说明了这一点

如果需要事务,请使用javax.transaction.UserTransaction实例.通过使用Resource注释请求注入UserTransaction对象,可以使用UserTransaction实例(...).

但是,注入了

@Resource
private UserTransaction userTransaction;
Run Code Online (Sandbox Code Playgroud)

null在调用任务时.

无国籍豆

我采用的另一种方法是将无状态EJB注入到我的任务中,希望这会为我创建一个事务.

这导致启动时出现以下异常:

SEVERE: CDI Beans module deployment failed
java.lang.IllegalStateException: no interface to proxy for ejb StatelessEjb, is this is a MDB maybe you shouldn't use a scope?
    at org.apache.openejb.cdi.CdiEjbBean.createEjb(CdiEjbBean.java:252)
    at org.apache.openejb.cdi.CdiPlugin.getSessionBeanProxy(CdiPlugin.java:224)
    at org.apache.webbeans.container.BeanManagerImpl.getEjbOrJmsProxyReference(BeanManagerImpl.java:951)
    at org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:777)
    at org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:651)
    at org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:111)
    at org.apache.webbeans.inject.InjectableConstructor.createParameters(InjectableConstructor.java:109)
    at org.apache.webbeans.inject.InjectableConstructor.doInjection(InjectableConstructor.java:72)
    at …
Run Code Online (Sandbox Code Playgroud)

ejb java-ee java-ee-7 tomee tomee-7

4
推荐指数
1
解决办法
495
查看次数

在ClientRequestFilter中附加查询参数

我只需要将查询参数附加到传出请求上.(Java EE 7.0,JAX-RS 2.0)

具体来说,我目前使用RESTeasy Client ver 3.0.14,所以我使用花哨的接口代理系统进行调用.我试图产生这样的东西:

myapplication/api/path?timestamp=000

有:

@Provider
public class MyRequestFilter implements ClientRequestFilter {

    @Context
    private HttpServletRequest servletRequest;

    public void filter(ClientRequestContext requestContext) throws IOException {

        servletRequest.getParameterMap().put("timestamp", new String[]{
                String.valueOf(new Date().getTime())
        });

    }
}
Run Code Online (Sandbox Code Playgroud)

我确定我也在注册它client.register(MyRequestFilter.class).随意问的问题.谢谢!

java jax-rs java-ee resteasy java-ee-7

4
推荐指数
1
解决办法
832
查看次数