标签: seam3

在注入点使用限定符[@Default]的类型[...]的不满意依赖(使用带有CDI的@Stateful EJB)

我有以下代码来管理两种存储库.两个存储库类都继承一个接口以允许重新初始化其资源.

public interface CachingRepository
{
    public void invalidateCache();
}
Run Code Online (Sandbox Code Playgroud)

全局,应用程序范围的回购:

@Named("globalRepo")
@ApplicationScoped
public class GlobalRepository implements CachingRepository
{
    private List<Category> categories;

    ...

    @Override
    public void invalidateCache()
    {
        categories = null;
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

每个用户,会话范围的回购:

@Named("userRepo")
@SessionScoped
//@Stateful         // <- NOTE HERE
public class UserRepository implements CachingRepository, Serializable
{
    private List<MyFile> files;

    @Override
    public void invalidateCache()
    {
        files = null;
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

将此(不@Stateful)注入上下文时

@Named
@ViewScoped
public class MyHandler implements Serializable
{
    @Inject
    private UserRepository userRepo;

    ...
}
Run Code Online (Sandbox Code Playgroud)

有用.但是,在添加 …

java cdi seam3 ejb-3.0 java-ee-6

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

了解Java Application Server中的身份验证

我目前正在研究在JBoss AS 7上运行的项目,该项目需要来自各种来源的身份验证.我试图了解组合提供身份验证的各种组件.

关于这一切如何融合,我有一些假设/猜测,但我需要确保我的理解是正确的.以下是我所理解的JBoss AS7的身份验证过程.


您有一个安全领域,用于定义用户的身份验证方式.然后,这个领域会暴露给您的应用程序,以保护其中的部分或全部内容.在AS7中,这是在<subsystem xmlns ="urn:jboss:domain:security:1.0">元素中配置的.

可以将域配置为使用登录模块(例如数据库,LDAP,本地文件或其他内容)针对各种源对用户进行身份验证.可以定义多个登录模块,您可以指定登录模块的某些组合必须"成功"才能进行身份验证.

实际的用户名和密码通过web.xml文件(对于servlet)中定义的机制传递,该机制在<login-config>元素中定义.


假设上述过程是正确的(可能不是):

  • 整个身份验证过程是否属于JAAS之类的规范,或者JAAS只是此过程的一小部分或可选部分?
  • 所有类型的<auth-methods>(即BASIC,DIGEST和FORM)是否适用于各种登录模块?这个页面似乎没有提示,但我没有看到任何与<login-module> options <login-config>选项匹配的明确文档.
  • 从登录配置到登录模块的用户名和密码流似乎很直接,但是对于像OpenID或OAuth这样的系统会发生什么呢?还有中间步骤(比如重定向到外部登录页面)?
  • Seam 3 Security,Apache ShiroSpring Security等项目如何适应这种情况?

spring-security jaas shiro seam3 jboss7.x

14
推荐指数
1
解决办法
4197
查看次数

javax.enterprise.event.ObserverException

现在我遇到了一个令人不快的问题.我在JBoss AS 7上运行了6个项目.它们以独立模式部署.工作了一段时间(5-25小时)后,我开始在我的所有项目中收到相同的错误:javax.enterprise.event.ObserverException.

这是堆栈:

ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[site.technorational.kz]] (http--192.168.1.2-80-3) Exception sending request initialized lifecycle event to listener instance of class org.jboss.seam.transaction.TransactionServletListener: javax.enterprise.event.ObserverException
        at sun.reflect.GeneratedConstructorAccessor136.newInstance(Unknown Source) [:1.6.0_21]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) [rt.jar:1.6.0_21]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513) [rt.jar:1.6.0_21]
        at java.lang.Class.newInstance0(Class.java:355) [rt.jar:1.6.0_21]
        at java.lang.Class.newInstance(Class.java:308) [rt.jar:1.6.0_21]
        at org.jboss.weld.util.reflection.SecureReflections$16.work(SecureReflections.java:343) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
        at org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:52) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
        at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInstantiation(SecureReflectionAccess.java:173) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
        at org.jboss.weld.util.reflection.SecureReflections.newInstance(SecureReflections.java:340) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
        at org.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:33) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
        at org.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:73) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
        at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:162) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
        at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:241) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
        at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:229) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
        at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:207) [weld-core-1.1.5.AS71.Final.jar:2012-02-10 15:31]
        at org.jboss.weld.manager.BeanManagerImpl.notifyObservers(BeanManagerImpl.java:569) …
Run Code Online (Sandbox Code Playgroud)

mysql jsf jboss transactions seam3

8
推荐指数
1
解决办法
3909
查看次数

ViewScoped bean的内存泄漏?

在我们 在JBoss 7.1.1上的JavaEE6项目(EJB3,JSF2)中,似乎我们有SeamFaces的内存泄漏.@ViewScoped

我们制作了一个小原型来检查这个事实:

  • 我们使用JMeter来调用页面200次;
  • 该页面包含并调用一个注入有状态EJB的viewscoped bean;
  • 我们将会话超时修复为1分钟.

在测试结束时,我们使用VisualVM检查内存的内容,这里我们得到了:

  • 使用@ViewScopedbean,我们仍然可以获得200个有状态实例MyController- 并且该@PreDestroy方法永远不会被调用;
  • 使用@ConversationScopedbean,@preDestroy方法称为会话结束,然后我们得到一个干净的内存.

我们是否严重使用视图范围,还是真的是一个错误?


这是XHTML页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:f="http://java.sun.com/jsf/core"
   xmlns:h="http://java.sun.com/jsf/html"
   xmlns:ui="http://java.sun.com/jsf/facelets"   
   xmlns:s="http://jboss.org/seam/faces">
   <f:metadata>
        <f:viewParam name="u" value="#{myBean.uselessParam}" />
        <s:viewAction action="#{myBean.callService}" />
   </f:metadata>
   <h:body >
        <f:view>
        </f:view>
   </h:body>    
</html>
Run Code Online (Sandbox Code Playgroud)

现在包含的bean myBean.对于@ConversationScoped变体,所有注释的部分都是未注释的.

@ViewScoped
// @ConversationScoped
@Named
public class MyBean implements Serializable 
{
    @Inject
    MyController myController; …
Run Code Online (Sandbox Code Playgroud)

memory-leaks cdi seam3 jsf-2 view-scope

6
推荐指数
2
解决办法
6697
查看次数

如何将JPA验证与CDI和Seam验证集成

关于我之前的问题,JSR 303 bean验证,扩展的ConstraintValidator不能使用CDI,Seam Validation Module为我提供了一个完美的解决方案,可以集中所有JSF和EJB业务验证而不需要重复代码.

无论如何,当我尝试让JPA(EclipseLink)执行验证时,系统会给我如下:

java.lang.IllegalStateException:WEB9031:WebappClassLoader无法加载资源[javax.enterprise.inject.spi.BeanManager],因为它尚未启动或已经停止

完整堆栈跟踪如下: -

Caused by: java.lang.IllegalStateException: WEB9031: WebappClassLoader unable to load resource [javax.enterprise.inject.spi.BeanManager], because it has not yet been started, or was already stopped
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1401)
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1359)
at org.jboss.seam.validation.InjectingConstraintValidatorFactory.getInstance(InjectingConstraintValidatorFactory.java:67)
at org.hibernate.validator.internal.engine.ConstraintTree.createAndInitializeValidator(ConstraintTree.java:346)
at org.hibernate.validator.internal.engine.ConstraintTree.getInitializedValidator(ConstraintTree.java:334)
at org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:155)
at org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:125)
at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:86)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:442)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:387)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:351)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:303)
at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:133)
at org.eclipse.persistence.internal.jpa.metadata.listeners.BeanValidationListener.validateOnCallbackEvent(BeanValidationListener.java:84)
at org.eclipse.persistence.internal.jpa.metadata.listeners.BeanValidationListener.prePersist(BeanValidationListener.java:62)
at org.eclipse.persistence.descriptors.DescriptorEventManager.notifyListener(DescriptorEventManager.java:698)
at org.eclipse.persistence.descriptors.DescriptorEventManager.notifyEJB30Listeners(DescriptorEventManager.java:641)
at org.eclipse.persistence.descriptors.DescriptorEventManager.executeEvent(DescriptorEventManager.java:200)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectClone(UnitOfWorkImpl.java:4257)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNotRegisteredNewObjectForPersist(UnitOfWorkImpl.java:4234)
at …
Run Code Online (Sandbox Code Playgroud)

cdi bean-validation seam3 jpa-2.0

6
推荐指数
1
解决办法
1293
查看次数

Seam Faces导致部署时错误

我正在使用ICEfaces 2.0 Beta 1和Seam Faces 3.0.0 Alpha 3快照在GlassFish 3.0.1上运行EAR(捆绑EJB-JAR和WAR)的Java EE 6应用程序.

当我部署EAR时,我收到错误.删除Seam Faces时不会发生此错误.这是我的GlassFish日志中的错误(我编写了第一个位,它只列出了我的会话bean并说它们已被转换.我切断了最后几个例外,因为StackOverflow的30000字符限制.):

INFO: Loading application com.example.science_ScienceEar_ear_2.0.3-SNAPSHOT#ScheduleWeb-2.0.3-SNAPSHOT.war at /schedule
INFO: Initializing Mojarra 2.0.2 (FCS b10) for context '/science'
WARNING: JSF1059: WARNING!  The com.sun.faces.verifyObjects feature is to aid developers not using tools.  It shouldn't be enabled if using an IDE, or if this application is being deployed for production as it will impact application start times.
INFO: Ajax Push Resource Handling not available: java.lang.NoClassDefFoundError: org/icepush/servlet/MainServlet
INFO: ICEsoft Technologies Inc. …
Run Code Online (Sandbox Code Playgroud)

java seam java-ee cdi seam3

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

JPA/Hibernate在EJB/Seam环境中的提交时不发出UPDATE

我有一个使用JBoss 7的Seam 3沙箱应用程序,Hibernate作为默认的JPA实现,以及作为Web前端的JSF.

我有问题,默认情况下吞下SQL UPDATE.

我在会话范围内的有状态EJB维护一个扩展范围的EntityManager和一个实体,容器管理事务(需要新的)

  1. EntityManager被注入
  2. EJB使用EM加载实体并将其保存在字段中
  3. JSF应用程序访问EJB及其实体,更改String字段
  4. JSF应用程序在EJB中调用"Save"方法
  5. 在save()中,我检查,如果实体字段已更改 - >它已正确更改
  6. 我什么也没做,容器在save()完成后提交事务.
  7. 问题:没有对数据库执行SQL更新.

如果我通过以下方式扩展save():

a)entityManager.contains(entity)UPDATE按预期执行(结果为"true")

要么

b)entityManager.persist(entity)UPDATE按预期执行

问:据我所知,a)或b)都不需要规格,因为实体在整个过程中仍然受到管理.我不明白,为什么a)对储蓄有影响.我可以成像b)对保存有影响,但它不应该被要求,是吗?

欢迎任何解释.

这是我的EJB:

@Named
@ConversationScoped
@Stateful
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public class LanguageBean {

    @PersistenceContext(type = PersistenceContextType.EXTENDED)
    private EntityManager em;
    @Inject
    private UserTransaction transaction;

    private Language value;

    @Inject
    Conversation conversation;

    public LanguageBean() {
        super();
    }

    @Begin
    public void selectLanguage(Long anId) {
        conversation.setTimeout(10 * 60 * 1000);
        if (anId != null) {
            value = em.find(Language.class, anId);
        }
    }

    @BeforeCompletion
    public void transactionComplete(){
        System.out.println("transactionComplete");
    }

    public …
Run Code Online (Sandbox Code Playgroud)

hibernate seam3 ejb-3.0 jpa-2.0 jboss7.x

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

如何在当前视图(范围)中找到 CDI bean?

Java EE 6、CDI 1.1.x、Seam 3 等环境中,我们需要查找当前视图的所有 CDI beans ( @ViewScoped)。到目前为止我所尝试的是使用:

@Named
@ViewScoped
public class ViewHelper
{
    @Inject
    private BeanManager beanManager;

    public doSomethingWithTheBeanInstances()
    {
        Set<Bean<?>> beans = this.getBeanManager().getBeans( 
            Object.class, new AnnotationLiteral<Any>(){}
        );

        // do something
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这会返回它管理的所有bean。

我只需要找到当前视图范围内的那些,并且 - 这将是理想的 - 只找到那些实现特定接口(在多个层次结构级别上继承)的接口。

有什么方法可以做到呢?

请注意,由于 CDI 没有视图范围,因此我们使用Seam 3来注释所有视图范围的 bean,例如:

@Named
@ViewScoped
public class ResultManagerColumnHandler extends BaseColumnHandler
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

上面是一个需要寻找的实例(它@ViewScoped是 Seam 3 的 CDI 替代品)。

如何做呢?

jsf cdi seam3 view-scope jakarta-ee

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

从Seam 2切换到普通JavaEE 6的最大变化(损失)可能是什么?

问题几乎说明了一切,但显然我正在寻找在Java EE 6环境中可能会错过Seam 2的事情("损失").

对于我的最新(小)项目JavaEE 6或更具体的JSF 2是修复要求,因此使用Seam 2不是一个选项(也不会是).尽管有些人说要让Seam 2使用JSF 2,但我从未做过.到目前为止,我只使用了Seam 2,我担心切换到普通的JavaEE环境会带来比我目前所知更多的问题.

该项目具有以下基本/核心要求:

  • 基于角色和权限的安全概念(约50个用户)
  • JPA 2事务持久性
  • ...

其余的将是基于GUI,搜索表单,客户端验证等,将由RichFaces 4和JavaEE 6 bean验证处理.没有Web服务,没有宁静的URL,没有消息,没有电子邮件.

我可以看到使用Seam安全性肯定是一种损失,但我不确定Seam持久性,实体/查询框架,JBoss EL和其他将是什么,尤其是整体编程模型(导航,EL,bean) .请注意,我们将能够在有意义的时候添加Seam 3模块,因此您可以在"增益"部分的讨论中包含Seam 3.

那么,任何人都能清楚这一点吗?(它不一定是一个完整的总结,无论你想到什么,继续)

PS:我无法连接到Seam论坛所以我觉得我需要在这里问.

seam cdi seam2 seam3 java-ee-6

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

Seam3和Weld CDI是一回事吗?

也许这似乎是一个愚蠢的问题,但我真的很困惑.Seam 3和Weld CDI是一样的吗?我读一些职位,其中提到"CDI(焊接)/接缝3",我应该把它们看成是一回事吗?

seam seam3 jboss-weld weld

3
推荐指数
1
解决办法
2355
查看次数