对于 JSR 356 - Java API for WebSocket,我知道参考实现是 Tyrus。
还有其他人吗?
如果没有,那么我猜 Tyrus 是所有应用程序服务器(Glassfish、JBossAS/Wildfly 等...)中的实现
我真的被这个问题困扰了,所以我很高兴有人能帮助我!
当我在一分钟后登录时,系统注销,当我尝试再次登录时,我收到此错误: 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) 我有一个在 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 标准中定义的?第三个问题是:你将如何解决这个问题?不开放外部交易吗?(仅)增加该事务的超时?
令人费解的是,我读过的大多数交易文章甚至没有提到这一事实。关于该主题的唯一提示是一篇博客文章。
我的技术栈包括
为了能够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)
似乎没有任何效果,异常消失
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.
这可能是由于 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)
显然,事实并非如此。
我的问题是
是否可以在非 EE 服务器上设置并发实用程序,尤其是 …
我需要从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 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管理实体.这会以某种方式干涉吗?
什么是使用存储在数据库中的随机盐渍密码的WildFly(8.2)方法?
是的实现org.jboss.crypto.digest.DigestCallback意味着有机会获得部分盐从数据库(在密码验证过程)?
或者我应该简单地将密码哈希并加密密码,然后再将其交给login方法HttpServletRequest?
我有一个在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.proxyHost和http.proxyPort系统属性在WildFly中没有任何效果(我宁愿不在全局配置它).
有谁知道如何解决这个问题?
我想使用安排重复的后台任务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) 我只需要将查询参数附加到传出请求上.(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).随意问的问题.谢谢!