标签: java-ee-6

如何将会话Bean注入消息驱动Bean?

我是Java EE的新手,所以这可能是愚蠢的......请耐心等待:D

我想将一个无状态会话bean注入一个消息驱动的bean.基本上,MDB获取JMS消息,然后使用会话bean来执行工作.会话bean保存业务逻辑.

这是我的会话Bean:

@Stateless
public class TestBean implements TestBeanRemote {

  public void doSomething() {
    // business logic goes here
  }
}
Run Code Online (Sandbox Code Playgroud)

匹配界面:

@Remote
public interface TestBeanRemote {

  public void doSomething();
}
Run Code Online (Sandbox Code Playgroud)

这是我的MDB:

@MessageDriven(mappedName = "jms/mvs.TestController", activationConfig =  {
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
    })
public class TestController implements MessageListener {

 @EJB
 private TestBean testBean;

    public TestController() {
    }

    public void onMessage(Message message) {
      testBean.doSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,还不是火箭科学吧?

不幸的是,当将其部署到glassfish v3并向相应的JMS队列发送消息时,我得到了glassfish无法找到TestBean EJB的错误:

java.lang.IllegalStateException: Exception …
Run Code Online (Sandbox Code Playgroud)

glassfish cdi java-ee-6 ejb-3.1 glassfish-3

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

GlassFish,CDI和构造函数注入

GlassFish 3.1的托管bean的CDI实现是否支持构造函数注入?我有一个@SingletonEJB,我想使用构造函数注入注入另一个托管bean(包含在同一个EJB模块中).现场注入确实有效.但随着构造器注入我收到了NullPointerExceptionAbstractSingletonContainer.

这确实有效:

@Singleton
public class FooBean implements Foo {

  @Inject private BarBean bar;

}
Run Code Online (Sandbox Code Playgroud)

这不起作用:

@Singleton
public class FooBean implements Foo {

    private final BarBean bar;

    @Inject
    public FooBean(BarBean bar) {
        this.bar = bar;
    }

}
Run Code Online (Sandbox Code Playgroud)

dependency-injection glassfish constructor-injection cdi java-ee-6

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

EE 6(GlassFish):多少个容器?有多少单身人士?

好的,仍然试图在这里理解基本的EE 6概念.我希望有人可以帮助我.

我正在使用单个域运行GlassFish v3服务器Kukla.我部署了MyEEApp.ear,它包含MyEEWebApp.war,MyEJBs.jar和MyUtilityLibrary.jar.我的EJB jar包含一个名为MySingleton的@Singleton bean.

然后我设置另一个名为Fran的服务器,并部署相同的EAR.我为第三台服务器做了同样的事情,叫做Ollie.

三个相同的EAR文件部署到三个相同(名称和IP地址除外)服务器.

所以这是我的问题:

  1. 在给定的服务器上,比如Kukla,我有多少"容器"?EAR只有一个容器吗?或者WAR和EJB jar也有自己的容器吗?
  2. 第一个答案的实际后果是什么?
  3. 就此而言,究竟是一个容器究竟是什么?
  4. 我的WAR中的类可以使用@EJB注入来访问EJB jar中的bean,因为它们都是同一个EAR的一部分吗?
  5. 就此而言,普通的旧Java类可以使用@EJB注入,还是仅适用于其他EJB?
  6. 我将创建多少单例bean的实例?每个服务器一个?或者只是一个?如果每个服务器一个,是否有任何方法可以保证整个集群中的"真正"单例?
  7. 在GlassFish中,我在何处以及如何配置JNDI以查找资源?例如,我可以将EJB jar从一台机器移动到另一台机器并让Web应用程序自动找到它吗?
  8. 是否可以为EJB bean配置负载平衡?如果是这样,怎么样?
  9. 对于WAR的三个实例怎么样?有没有办法配置负载平衡,以便请求转到最少使用的机器上的实例?

我知道,很多问题.对于那个很抱歉!

非常感谢您的帮助!杰夫

singleton java-ee java-ee-6 ejb-3.1 glassfish-3

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

如何在使用基于表单的安全性时实现注销

我使用基于JDBC表单的安全领域,我想实现注销,但是当我点击链接时,我看到了这个异常:

java.lang.RuntimeException:java.security.AccessControlException:access denied(java.lang.reflect.ReflectPermission suppressAccessChecks)...由以下引起:java.security.AccessControlException:access denied(java.lang.reflect.ReflectPermission suppressAccessChecks)

这是我为执行loggout而创建的EJB:

@Stateless(name = "ejbs/SessionSupportEJBImpl")
@DeclareRoles({"administrators","users"})
public class SessionSupportEJBImpl implements SessionSupportEJB {

    @PermitAll
    public void releaseUserState() {
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
                .getExternalContext().getSession(false);
        if (session != null) {
            session.invalidate();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里我从一个支持bean调用它:

@Named("logoutBB")
@RequestScoped
public class LogoutBean {

    @EJB
    private SessionSupportEJB sessionSupportEJB;

    public String logout() {
        sessionSupportEJB.releaseUserState();
        return "index.xhtml?faces-redirect=true";
    }
}
Run Code Online (Sandbox Code Playgroud)

这里应该触发它的标记:

<h:form>
        <h:commandLink value="LOGOUT" action="#{logoutBB.releaseUserState}"/>
    </h:form>
Run Code Online (Sandbox Code Playgroud)

我的怀疑是:

  • 如何使注销功能起作用?

  • 是否必须始终在我的EJB上使用ejbs安全注释来允许访问?(使用安全领域时)

  • 我应该用servlet代替EJB吗?

  • 这种方法是错误的,我应该尝试其他注销吗?

java security java-ee ejb-3.0 java-ee-6

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

EJB 3.1有状态和CDI范围对话

我有一个@StatefulEJB注释为@ConversationScoped.客户端(JSF)向我的EJB发出请求:启动对话 - conversation.begin()执行某些操作并显示对客户端的响应.

然后客户端发出另一个请求,EJB执行某些操作并关闭对话 - conversation.end().

@Stateful会话结束后是否删除了EJB?或者我必须明确打电话@Remove

ejb cdi java-ee-6 ejb-3.1

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

如何在JPA 2/Hibernate中生成便携式和本机ID?

我想在我的JPA 2实体上生成本机和便携式id,目前运行Hibernate和MySQL

当使用@GeneratedValue(strategy = AUTO)时,hibernate默认为MySQL上的"hibernate_sequence"表,我想要IDENTITY

如果我使用@GeneratedValue(strategy = IDENTITY)解决它,我将松散Oracle/Postgres可移植性

当@GeneratedValue strategy = AUTO时,如何将Hibernate设置为使用IDENTITY作为mysql的默认值?

mysql hibernate java-ee-6 jpa-2.0

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

Java EE 6 @Inject懒惰?

我正在做一些重构和审查我们正在开发的应用程序.在这样做时我发现注入了更多的豆子,我认为以懒惰方式装载它们会更适合它们的目的.我使用的是Java EE 6,并且倾向于使用比EJB注入更多的CDI.

所以问题是是否有可能懒得注入豆子,如果是这样,你怎么能这样做?

java dependency-injection inject cdi java-ee-6

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

如何使用scriptlet /表达式访问c:forEach中的迭代变量?

var是一个静态属性,用于公开当前元素(正文的本地元素)

如何通过scriptlet /表达式访问var属性?

初始化代码

<% 
Employee e = new Employee();
e.setName("name");
e.setEmail("abc@gmail.com");
java.util.List<Employee> empList = new java.util.ArrayList();
empList.add(e);
request.setAttribute("empList", empList); %>
Run Code Online (Sandbox Code Playgroud)

forEach code 1 deferredExpression错误

<c:forEach var="emp" items="${employees}">
  <c:out value="${emp.name}"/><br><%=emp.getName()%> 
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

也不

forEach code 2 deferredExpression错误

<c:forEach var="emp" items="${empList}" varStatus="status">
  Emp email: <%= ((Employee)(pageContext.findAttribute("emp"))).getName() %>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

foreach jstl java-ee java-ee-6

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

在jboss独立服务器上运行时,事务无法进行STATUS_MARKED_ROLLBACK

有人遇到以下问题吗?

我能够使用jboss工具在eclipse中的jboss中成功构建,部署和运行我的javaee6应用程序。但是,当我们将其部署在独立运行的另一台服务器上时,出现了错误。我在eclipse所在的同一台机器上尝试过,并在jboss上独立运行,并得到了相同的错误。

看到下面的错误,我已经删除了一些零件。

06:53:46,423 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-/127.0.0.1:8080-1) Transaction cannot proceed STATUS_MARKED_ROLLBACK
06:53:46,424 ERROR [org.jboss.as.ejb3.invocation] (http-/127.0.0.1:8080-1) JBAS014134: EJB Invocation failed on component OfferTemplateServiceApi for method public void org.meveo.asg.api.OfferTemplateServiceApi.preProcessRequest(org.meveo.api.dto.OfferDto) throws org.meveo.api.exception.MeveoApiException: javax.ejb.EJBTransactionRolledbackException: Transaction rolled back
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleEndTransactionException(CMTTxInterceptor.java:114) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(CMTTxInterceptor.java:94) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:252) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:339) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:216) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
    at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
    at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
    at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
    at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) [jboss-as-ee-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final-redhat-2.jar:1.1.1.Final-redhat-2]
    at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:55) [jboss-as-ejb3-7.2.0.Final-redhat-8.jar:7.2.0.Final-redhat-8]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) …
Run Code Online (Sandbox Code Playgroud)

jboss hibernate ejb java-ee-6 jboss7.x

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

将Singleton会话Bean注入无状态会话Bean

通过在无状态会话Bean中使用Singleton会话Bean,是否允许(和良好实践)在我们的应用程序中保存一些共享信息?

SSB将被注入SLSB.

@Stateless
public class MySLSB {

    @Inject
    MySSB mySSB;
Run Code Online (Sandbox Code Playgroud)

-

@Singleton
@Lock(READ)
public class MySSB implements Serializable {

    private static final long serialVersionUID = 1L;
Run Code Online (Sandbox Code Playgroud)

java stateful-session-bean java-ee-6

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