标签: cdi

从@WebService带注释的EJB访问@SessionScoped bean

我的一个合作伙伴需要一个SOAP接口,所以我想:让我们转移到一个应用服务器.我选择了Glassfish,开箱即用.我无法做到这一点:将@SessionScoped ManagedBean注入@Webservice注释EJB.

我可以访问EJB的唯一方法是通过JNDI.我在这里读到它

我的问题是:Glassfish中是否有一个错误,它将在未来的版本中运行,或者它应该工作,我做错了什么.

我希望能够DataAccess session使用@EJB注释注入属性但它不起作用.

以下是测试项目中的所有文件

这是我的WebService类:

@LocalBean
@Stateless
@WebService()
public class MySOAP implements Serializable {

   private DataAccess session;

   @WebMethod
   public String getUsername() {
      javax.naming.Context ctx = null;
      try {
         ctx = new javax.naming.InitialContext();
         session = ( DataAccess ) ctx.lookup( "java:comp/env/DataAccess" );
         return "user is " + session.getData();
      } catch ( NamingException e ) {
         e.printStackTrace();
      }
      return "exception occured";
   }
}
Run Code Online (Sandbox Code Playgroud)

我想要注入的EJB:

public abstract class AbstractDataBean {
   @Inject /* this just returns …
Run Code Online (Sandbox Code Playgroud)

soap ejb cdi glassfish-3

0
推荐指数
1
解决办法
1640
查看次数

MVP - 注册点击监听器还是使用CDI事件?

我正在评估CDI事件是否对我的新应用程序有意义.到目前为止,我总是使用MVP架构,其中View只有UI元素并在公共getter中公开它们,而Presenter寄存器点击它们上的监听器.

我来到这里CDI Events并考虑View直接在类中触发click事件,而只是observe在我的Presenters.

你能告诉我哪种方法更好吗?或者为什么你一般会选择一种方法呢?

MVP:

class LoginView {   
    private Button loginButton;

    public void getButton() {
        return loginButton;
    }
}


class LoginPresenter {
    @Inject
    private LoginView view;

    public LoginPresenter() {
        view.getButton.addClickListener(new ClickListener() {
            @Override
            public void buttonClick(ClickEvent event) {
                //perform the login business logic
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

CDI活动:

class LoginView {   
    private Button loginButton;

    @Inject
    private Events<LoginEvent> events;

    public LoginView() {
        loginButton.addClickListener(new …
Run Code Online (Sandbox Code Playgroud)

java java-ee vaadin cdi

0
推荐指数
1
解决办法
1129
查看次数

生产者参数注入?

如何创建一个根据参数创建对象的生成器方法?

我的目标是能够CrudService在我的应用程序中注入不同的类,但是使用服务所用的类(例如User.class)来对其进行参数化.

以下代码当然不起作用,但说明了我的意图.

@Produces
@JPAContainer(Class type) //something like this?
public JPAContainer getJPA() {
    @PersistenceContext
    private EntityManager em;

    @Produces
    @JPAContainerAnnot
    public JPAContainer getJPAContainer() {
       return JPAContainerFactory.make(type, em); //eg: class = User.class, Person.class
    }
}

@Stateless
public class CrudServiceUser() {
   @Inject
   @JPAContainer(type = User.class) //something like this parameter
   private JPAContainer container;
}

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({FIELD,METHOD,PARAMETER,TYPE})
public @interface JPAContainer {

}
Run Code Online (Sandbox Code Playgroud)

java jpa dependency-properties java-ee cdi

0
推荐指数
1
解决办法
543
查看次数

@Dependent范围在Wildfly中不是默认的吗?

我在使用Wildfly通过@Inject注入POJO时遇到了一些麻烦.文件明确指出:

@Dependent - 如果未指定,则为默认范围; 这意味着一个对象只存在一个客户端(bean),并且与该客户端(bean)具有相同的生命周期.

但是,当我有两个班级时:

@Singleton
@Startup
public class A{
    @Inject
    private B b;
}

public class B{
    public B(){}
}
Run Code Online (Sandbox Code Playgroud)

我一直在:

注入点上带有限定符@Default的类型B的不满意依赖[BackedAnnotatedField] @Inject [...]

当我添加@Dependent时,一切都像魅力一样.我错过了什么吗?这种行为是野生蝇特有的吗?希望你能帮忙,谢谢.

java java-ee cdi wildfly

0
推荐指数
1
解决办法
1496
查看次数

每次事件发生时都会调用@PostConstruct

我在Java SE应用程序中使用CDI(Weld).我做了一个Bean让我们称之为BeanA.

public class BeanA {
    @PostConstruct
    public void init() {
        System.out.println("INIT");
    }

    public void receive(@Observes String test) {
        System.out.println("received: " + test);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的测试方法中,我调用:

Weld weld = new Weld();
WeldContainer container = weld.initialize();
Instance<BeanA> instance = container.instance().select(BeanA.class);
BeanA bean = instance.get();

container.event().fire("TEST");
container.event().fire("TEST");
container.event().fire("TEST");
container.event().fire("TEST");
Run Code Online (Sandbox Code Playgroud)

为什么输出是这样的?为什么每次收到事件都会调用@PostConstruct?:

INIT
INIT
recived:TEST
INIT
recived:TEST
INIT
recived:TEST
INIT
recived:TEST

java cdi

0
推荐指数
1
解决办法
506
查看次数

在JSF页面中找不到@Named bean

我正在使用Netbeans 8.0.2.我使用File - > New Project - > Java Web:Web Application创建了一个非常简单的(什么是JSF)Web应用程序.

我试图在我的index.xhtml页面中打印一个@Named bean的实例变量,但它没有按预期工作.我正在使用Netbeans中的绿色"运行项目"按钮部署应用程序,该按钮自动打包,部署和启动浏览器.

在web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" 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/web-app_3_1.xsd">
<welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
<context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
</context-param>
<context-param>    
    <param-name>MyContext</param-name>
    <param-value>null</param-value>
</context-param>
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<session-config>
    <session-timeout>
        30
    </session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)

的index.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en"
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
    <title>Facelets Hello Greeting</title>
</h:head>
<h:body>
    <!-- I am expecting the beans name …
Run Code Online (Sandbox Code Playgroud)

jsf cdi managed-bean

0
推荐指数
1
解决办法
3883
查看次数

CDI @Interceptor 的@Priority 是什么意思?

1) CDI @Interceptor 的@Priority 是什么意思?

2)它与 beans.xml 中声明的拦截器顺序有什么关系?

3) @Priority 可以在 xml 文件中被覆盖吗?

java cdi java-ee-6 jakarta-ee

0
推荐指数
1
解决办法
1638
查看次数

我可以创建一个请求范围的对象并从任何地方访问它,并避免将其作为参数传递给JAX-RS吗?

假设我有一个Web服务/一个使用某些HTTP标头参数调用的REST资源。resource方法构建一个复杂的数据对象(当前为POJO),并最终将其返回给客户端(通过Gson作为JSON,但这无关紧要)。

所以我有这个调用层次结构:

@Path(foo) ProjectResource @GET getProject()
-> new Project()
-> new List<Participant> which contains lots of new Participant()s
-> new Affiliation()
Run Code Online (Sandbox Code Playgroud)

如果我想Affiliation根据标题参数以英语或德语填充对象,则必须将其作为参数传递给链下。我想避免这样做。也许这从根本上讲是不可能的,但是感觉太不对了。所有这些对象仅存在于请求中,因此能够从任何地方访问与请求相关的信息是否方便?

我希望我可以例如定义一个CDI @RequestScoped对象,该对象会初始化自身(或由某些WebFilter填充),然后可以在可能需要的位置注入。

但是显然,这在POJO内部是行不通的,而且我也很难从请求范围的对象内部获取标头。

我已经阅读了许多关于EJB,JAX-RS上下文和CDI的SO问题/答案,但是我无法解决。

我期望太多了吗?传递参数确实是首选选项吗?

jax-rs cdi

0
推荐指数
1
解决办法
968
查看次数

JavaFX和CDI:如何注入许多阶段

我想整合JavaFX和CDI.网上有一些关于这些的好例子:

https://dzone.com/articles/fxml-javafx-powered-cdi-jboss http://fxapps.blogspot.com.br/2017/10/using-cdi-20-in-javafx-application.html

但是,我看到的所有示例都不能在现实世界中工作,因为它们无法注入多个Stage(primaryStage),如果它们是,我不知道如何.

所以我想知道在JavaFX/CDI项目中是否可以注入多个Stage(例如在模态窗口中使用......)

谢谢!

cdi javafx-8

0
推荐指数
1
解决办法
812
查看次数

CDI 依赖注入可以是可选的吗?

在 Spring DI 中,将自动装配字段声明为 Optional 使客户端不会向其注入任何值。这可以使用 Java EE 的 CDI 吗?我试过 Optional 但它失败了。我想知道是否有我可以使用的等效机制。

这是我尝试过的:

public class OmeletteMaker implements EggMaker{
        public static void main(String[] args){
        WeldContainer container = new Weld().initialize();
        OmeletteMaker omeletteMaker = container.instance().select(OmeletteMaker.class).get();
    }

    @Inject
    Optional<Vegetable> vegetable;
}
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息:线程“main”org.jboss.weld.exceptions.DeploymentException 中的异常:WELD-001408 Unsatisfied dependencies for type [Optional] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject cafeteria.OmeletteMaker 。蔬菜]

dependency-injection cdi

0
推荐指数
1
解决办法
639
查看次数