标签: cdi

没有Application Server的Java EE

由于EJB 3我们有可嵌入的EJB容器,因此可以在没有应用程序服务器的情况下使用JPA实现,有上下文和依赖注入等的Weld.因为在许多系统上只有Tomcat可用,我想知道,如果Java EE可以在没有应用程序服务器的情况下使用,而是使用像Tomcat这样的Servlet容器.

我需要做什么才能建立Java环境?你看到了什么缺点?

java tomcat application-server java-ee cdi

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

Richfaces 4 a4j:commandLink操作未在rich:popupPanel中触发

我似乎遇到一个问题,我在rich:popupPanel上有一个a4j:commandLink,但是没有触发动作.xhtml看起来如下:

<rich:popupPanel id="rate-panel" modal="true" height="444" width="780" top="60" show="false" onmaskclick="#{rich:component('rate-panel')}.hide()" styleClass="cs-modal">
  /**Some html here**/    
  <a4j:commandLink immediate="false" action="#{venueScore.up}" render="rate-panel" styleClass="rate love">
    <span>Love it</span>
  </a4j:commandLink>    
  /**Some more html here**/    
</rich:popupPanel>
Run Code Online (Sandbox Code Playgroud)

托管bean看起来如下:

@Named("venueScore")
@ViewScoped
public class VenueScoreManager extends BaseManager implements Serializable {
  public void up() {
    System.out.println("TEST");
    //Do something
  }
}
Run Code Online (Sandbox Code Playgroud)

我已经创建了托管bean @ViewScoped.

我也试过<h:form>在commandLink周围添加一个,但是,这比没有它更少.我实际上认为这是因为commandLink <h:form>位于打开popupPanel的链接所在的位置.

无论如何,有人可以指点我为什么行动不开火?

richfaces commandlink cdi jsf-2 jboss-weld

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

JSF Bean属性未更新

我有一个名为'name'的字段的bean,以及一个使用此字段映射的inputText的JSF表单.字段的初始值很好地显示在表单上.

问题是当我提交表单时,值不会随inputText的内容更新.在下面的savePlayer()方法中,name的值始终是'name',而不是我在表单输入中输入的值.

豆子:

@Named
@RequestScoped
public class PlayerForm {

    @Inject
    private PlayerRepository playerRepository;

    private String name = "name";


    public String savePlayer(){
        Player player = new Player();
        player.setName(name);
        playerRepository.savePlayer(player);
        return "saveUserOk";
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}
Run Code Online (Sandbox Code Playgroud)

表格 :

   <h:form>
        <h:inputText value="#{playerForm.name}" />
        <h:commandButton value="Submit" action="#{playerForm.savePlayer}" />
    </h:form>
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助!

java jsf cdi

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

控制EJB 3.1中的CDI启动

我是这里的新手,也是CDI世界的新手,我在工作中得到的第一项任务就是找到一种控制CDI上传的方法.

我们同时使用EJB 3.1CDI 1.0,因为它们是由不同的容器控制的,我们可以控制何时和以何种顺序EJB管Bean将达到使用@Startup@Singleton标注.

但是@Inject我在我的类中声明的CDI bean因为CDI容器尚未启动而变为空.

我已经尝试了好几天来寻找解决方案,而我在这里找到的解决方案没有用(仍然是空的).

我们正在使用Java EE 6并在WebSphere Application Server 8上运行该应用程序.

请问,如果你能帮我找到一种方法来控制内部和不管EJB的CDI上传?

这是一个示例代码:

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;

@Singleton
@Startup
public class BaseStartupLoader{


/**
 * Default constructor. 
 */
@Inject @MyStartup
BaseStartUp myStartup;

private static Logger m_logger = LoggerFactory.getLogger(BaseStartupLoader.class);
public BaseStartupLoader() {

}

@PostConstruct
public void init(){

    String applicationName = null;

    try {

            applicationName = myStartup.getClass().getName();
            myStartup.load();

    } catch (IllegalAccessException e) {
        m_logger.error("Faild to load data …
Run Code Online (Sandbox Code Playgroud)

java java-ee cdi java-ee-6 ejb-3.1

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

在JSF 2.0中注入Bean

我有一个Session scoped bean

import javax.faces.bean.SessionScoped;
import javax.inject.Named;
@Named
@SessionScoped
public class SessionBean implements Serializable{
Run Code Online (Sandbox Code Playgroud)

我在一个过滤器中进行了对象...

public class FiltroSeguridad implements Filter{

@Inject
private SessionBean sessionBean;

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  HttpServletRequest httpRequest = (HttpServletRequest) request;
  sessionBean.setRutaRedirect(httpRequest.getRequestURI());
}
}
Run Code Online (Sandbox Code Playgroud)

但是,我在下一次互动中使用SessionBean ...

@Model
public class CuentaUsuarioWebBean implements Serializable{
 @Inject
 private SessionBean sessionBean;

public void loginUsuario() throws IOException{
   sessionBean.getRutaRedirect();
}

}
Run Code Online (Sandbox Code Playgroud)

但该属性getRutaRedirect()返回null

我通过CDI注释更改导入它仍然不起作用(javax.enterprise.context.SessionScoped),与JSF注释相同(javax.faces.bean.ManagedBean@ManagedProperty).

谢谢.

PD:对不起我的英文!

java dependency-injection javabeans cdi jsf-2

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

是否可以在Java SE环境中使用javax.interceptor?

我需要使用AOP来解决特定问题,但它是一个小型的独立Java程序(没有Java EE容器).

我可以使用javax.interceptor功能,还是必须下载一些第三方AOP实现?如果可能的话,我宁愿使用Java SE SDK附带的东西.

java aop java-ee cdi

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

Apache Tomcat 7.0.47上的BeanManager无法创建资源实例

运行:Apache Tomcat 7.0.47 OmniFaces 1.6.3 JSF Mojarra 2.1.26 CDI Weld 2.1.0.Final

RuntimeException通过访问JNDI"java:comp/BeanManager",Threre是Apache Tomcat 7.0.47上的一个.CDI BenManager必然会java:comp/env/BeanManager在您的BeanManager类中无法到达.

  /**
         * Perform automatic initialization whereby the bean manager is looked up from the JNDI. If the bean manager is
         * found, then invoke {@link #init(Object)} with the found bean manager.
         */
        private void init() {
                if (!initialized.getAndSet(true)) {
                        try {
                                Class.forName("javax.enterprise.inject.spi.BeanManager"); // Is CDI present?
                                Class.forName("javax.naming.InitialContext"); // Is JNDI present? (not on Google App Engine)
                        }
                        catch (Exception e) {
                                return; …
Run Code Online (Sandbox Code Playgroud)

jsf tomcat cdi omnifaces weld

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

在OmniFaces @Eager豆注入@EJB导致"重度:无有效EE环境org.omnifaces.cdi.eager.EagerBeansRepository的注射液"

使用@ApplicationScoped @Named @Eager,my @EJB-injected @Statelessbean没有正确实例化并进行评估null.

我有一个@ApplicationScoped @ManagedBean(eager=true)习惯于安排一些工作的人.一些@Statelessbean使用@EJB注释注入,并且工作正常.

在转向CDI注释时,我添加了OmniFaces@Eager注释作为@ManagedBean(eager=true)标准CDI中缺少的注释:

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.EJB;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.omnifaces.cdi.Eager;

@Named
@ApplicationScoped
@Eager
public class MyScheduler implements Serializable {

    @EJB
    private MyService myService;
    @Inject
    private MyNamedBean myNamedBean;

    @PostConstruct
    public void init() {
        setupSchedulers();
    }

    @PreDestroy
    public void destroy() {
        destroySchedulers();
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)

使用此设置,@PostConstruct在应用程序启动时正确调用该方法(尽管它似乎甚至在初始化上下文之前运行),但随后myService进行求值null.

在日志中,将显示以下警告: …

ejb glassfish eager-loading cdi omnifaces

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

将CDI bean注入JSF @ViewScoped bean

我有一个JSF,CDI项目的问题.我做了很多研究,我发现在CDI中没有@ViewedScoped注释.我用对话框解决了基于ajax的页面的问题.我想从datatable传递变量到对话框.为此,我不能使用@RequestedScopedbean,因为在请求结束后丢弃值.任何人都可以帮我解决吗?我不能用,@SessionScoped但这是一个不好的做法恕我直言.或者也许只将这一个变量保存到知道的会话中.你们能给我任何提示如何优雅地解决这个问题吗?

import javax.enterprise.context.ApplicationScoped;    
@ApplicationScoped
public class ServiceBean implements Serializable {
...
Run Code Online (Sandbox Code Playgroud)
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class SomeBean {

@Inject
ServiceBean serviceBean;


@Postconstruct ...
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

com.sun.faces.mgbean.ManagedBeanCreationException: An error occurred performing resource injection on managed bean warDetailBean
Run Code Online (Sandbox Code Playgroud)

jsf cdi jsf-2 view-scope

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

@Inject无法在AttributeConverter中工作

我有一个简单的AttributeConverter实现,我尝试注入一个必须提供转换逻辑的对象,但@Inject似乎不适用于这种情况.转换器类看起来像这样:

@Converter(autoApply=false)
public class String2ByteArrayConverter implements AttributeConverter<String, byte[]>
{
    @Inject
    private Crypto crypto;

    @Override
    public byte[] convertToDatabaseColumn(String usrReadable) 
    {
        return crypto.pg_encrypt(usrReadable);
    }

    @Override
    public String convertToEntityAttribute(byte[] dbType)
    {
        return crypto.pg_decrypt(dbType);
    }
}
Run Code Online (Sandbox Code Playgroud)

@Converter触发它时会抛出一个NullPointerException因为该属性crypto没有从容器初始化.这是为什么?

我正在使用Glassfish 4,在所有其他情况下@Inject工作得很好.

是否无法在转换器上使用CDI?

任何帮助将不胜感激 :)


我的问题的重点是AttributeConverter部分.我知道,要使CDI工作,bean必须满足http://docs.oracle.com/javaee/6/tutorial/doc/gjfzi.html所述的条件.我也尝试通过实现以下构造函数来强制CDI工作:

@Inject
public String2ByteArrayConverter(Crypto crypto) 
{
    this.crypto = crypto;
}
Run Code Online (Sandbox Code Playgroud)

现在我得到以下异常,但没有给我任何线索:

2015-07-23T01:03:24.835+0200|Severe: Exception during life cycle processing
org.glassfish.deployment.common.DeploymentException: Exception [EclipseLink-28019] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: …
Run Code Online (Sandbox Code Playgroud)

jpa glassfish converter cdi

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