我有一个单例 bean,该@PostConstruct方法需要调用@Asynchronous其自身内部的方法。它不能直接使用来执行此操作,this因为这会使调用同步。我不能自己@Inject,因为它是圆形的。
我想使用JAX-RS构建RESTful Web服务(Jersey + Jackson,Jackson用于生成JSON).
我使用Glassfish 4.0作为服务器,netbeans作为IDE.
Web服务工作正常,但目前我没有任何身份验证.
所以现在我正在考虑散列密码的摘要验证,这样你就不需要以纯文本形式传输密码了.另外我想使用https,以便加密数据.
我理解了理论.但我不知道我怎么能用Glassfish在Netbeans中做到这一点.
我看到一些教程在glassfish的管理控制台中做了一些事情.但是,有没有办法在netbeans中做到这一点?我不能在部署应用程序时创建的netbeans中定义一个领域吗?
创建领域和东西之后.我想我需要在我的所有资源(WebServices)中注入某种经过身份验证的"用户"-Object.但我以前从未这样做过.我正在寻找一个很好的教程,它描述了我如何设置摘要认证,注入网络netbeans可以用netbeans做到这一点,这样我就能很好地理解它.
我有一个小问题。是否可以“删除”index.html 并创建(替换 index.html)index.jsp?如何?
我没有找到任何带有主页地址 (index.html) 的文件(web.xml、glassfish-resource.xml)来更改它(对于 index.jsp)。我在网上没有找到答案...
感谢您的回复!
我的拦截器没有在应该启动的时候启动,即使它已在 bean 中注册并且文件没有提供任何警告。我缺少什么?
编辑1:我希望能够在每次Genres.java调用和离开函数时进行记录,但使用此配置我根本没有得到任何输出。
编辑 2:按照 Svetlin 的建议应用断点后,我可以确认代码永远不会到达拦截器或生产者。
beans.xml
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all">
<interceptors>
<class>no.krystah.log.LoggingInterceptor</class>
</interceptors>
</beans>
Run Code Online (Sandbox Code Playgroud)
日志拦截器.java
package no.krystah.log;
import javax.inject.Inject;
import javax.interceptor.AroundConstruct;
import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptor;
import javax.interceptor.InvocationContext;
import org.slf4j.Logger;
@Log @Interceptor
public class LoggingInterceptor {
@Inject
Logger logger;
@AroundConstruct
private void init(InvocationContext ic) throws Exception {
logger.info("Entering constructor");
try {
ic.proceed();
} finally {
logger.info("Exiting constructor");
}
}
@AroundInvoke
public Object logMethod(InvocationContext ic) throws Exception {
logger.info(ic.getTarget().toString()+" - "+ ic.getMethod().getName()); …Run Code Online (Sandbox Code Playgroud) 在谷歌大学上没有找到任何东西,所以在这里检查。我有一个企业应用程序在 Docker 映像内的应用程序服务器上运行。在运行过程中,企业应用程序需要使用Java API调用来获取其运行所在的Docker Container Id。这是如何完成的?
我想通过Web套接字向特定用户发送消息。到目前为止,我可以打开Web套接字并像这样从客户端读取消息:
@ServerEndpoint(value = "/wsep")
public class WebSocketEndpoint {
private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketEndpoint.class);
private Session session;
@OnOpen
public void onOpen(Session session) {
this.session = session;
try {
session.getBasicRemote().sendText("You are connected. Your ID is " + session.getId());
} catch (Exception e) {
LOGGER.error("Error on open web socket", e);
}
}
@OnMessage
public void onClientMessage(String message, Session session) {
LOGGER.info("Message from {} is: {}", session.getId(), message);
}
@OnClose
public void onClose(Session session) {
this.session = null;
LOGGER.info("{} disconnected", session.getId());
} …Run Code Online (Sandbox Code Playgroud) 我有一个在 JBoss/Wildfly 上运行的应用程序。我使用 CDI 事件在模块之间进行通信。我希望能够使用事件作为插入自定义的一种方式,基本上动态加载一个额外的观察者,该观察者也将接收 CDI 事件。
这是我用来从 EJB 中动态加载类的片段:
File file = new File("D:\\workspace\\integrator\\target\\classes\\");
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};
ClassLoader cl = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader());
Class cls = cl.loadClass("demo.DemoObserver");
observerInstance=cls.newInstance();
Run Code Online (Sandbox Code Playgroud)
加载的类非常简单,只是一个普通的 CDI 事件观察器,注释为 @Dependent 以“看到”为一个 bean。我的 beans.xml 被配置为自动发现 bean。
@Dependent
public class DemoObserver {
private boolean observed=false;
public DemoObserver() {
observed=false;
}
@PermitAll
public void stateChanged(@Observes EquipmentE10StateChanged event) {
observed=true;
System.out.println("Demo observer received event E10 state changed: " + event.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
该类已加载并实例化(我可以看到来自其构造函数的日志),但它从不接收事件。
有什么我可以做的事情吗?
java-ee-7 ×7
java ×4
cdi ×2
java-ee-6 ×2
docker ×1
ejb ×1
ejb-3.1 ×1
glassfish ×1
glassfish-4 ×1
interceptor ×1
jakarta-ee ×1
jax-rs ×1
jboss ×1
jersey-2.0 ×1
jsp ×1
websocket ×1
wildfly ×1