Tag: ejb

如何让@RolesAllowed注释适用于我的Web应用程序?

我使用Backbone.js,Bootstrap,NetBeans IDE 8.0,Java EE 7,JDK 8,WildFly服务器8.1.0,JBoss RESTEasy(resteasy-jaxrs-3.0.8),JBoss 2.2.22,JBoss EJB 3制作Web应用程序。 我(相对)是Web开发的新手,因此我刚开始掌握了很多基本概念和技术。 我正在尝试将用户和角色的权限系统构建到Web应用程序中,但我似乎无法使@RolesAllowed注释在我的RESTful Web服务中工作。 我已经在这个问题上工作了几天。 我有一个名为UserResource.java的RESTful资源(Java Enterprise / Session Bean?),在这里我有一个方法create来为应用程序创建一个新用户: import java.net.URI; import java.security.Principal; import java.util.List; import javax.annotation.security.PermitAll; import javax.annotation.security.RolesAllowed; import javax.ejb.EJB; import javax.ejb.Stateless; import javax.ws.rs.*; import javax.ws.rs.core.*; import org.jboss.ejb3.annotation.SecurityDomain; @Stateless @SecurityDomain(“other”) @Path(“/user”) public class UserResource { @EJB(name = “UserServiceImp”) UserService userService; @Context private UriInfo uriInfo; […]

如何在Spring / EJB / Mockito …代理上处理内部调用?

众所周知,当你代理一个对象时,就像你为Spring / EJB创建一个具有事务属性的bean,或者甚至在你创建一个带有某些框架的部分模拟时,代理对象不知道这一点,并且内部调用不会被重定向,然后没有截获…… 这就是为什么如果你在Spring做类似的事情: @Transactionnal public void doSomething() { doSomethingInNewTransaction(); doSomethingInNewTransaction(); doSomethingInNewTransaction(); } @Transactional(propagation = Propagation.REQUIRES_NEW) public void doSomethingInNewTransaction() { … } 当您调用doSomething时,除了主要事件之外,您预计会有3个新事务,但实际上,由于此问题,您只能获得一个… 所以我想知道你是如何处理这些问题的… 我实际上处于一种必须处理复杂事务系统的情况,我没有看到比将服务分成许多servlets更好的方法,所以我肯定会通过所有代理… 这让我很烦恼,因为所有的代码都属于同一个function域,不应该被拆分…… 我发现这个相关问题的答案很有趣: Spring – @Transactional – 后台会发生什么? Rob H说我们可以在服务中注入spring代理,并调用proxy.doSomethingInNewTransaction(); 代替。 它很容易做到并且有效,但我真的不喜欢它…… 侯云峰说: 所以我编写了自己的CglibSubclassingInstantiationStrategy和代理创建器版本,以便它将使用CGLIB生成一个真正的子类,该子类将调用委托给它的super而不是Spring现在正在做的另一个实例。 所以我可以自由地注释任何方法(只要它不是私有的),并且从我称之为这些方法的地方,它们将被处理。 好吧,我还有代价:1。我必须列出我想要启用新CGLIB子类创建的所有注释。 2.由于我现在正在生成子类,因此无法对最终方法进行注释,因此无法截获最终方法。 他说“现在哪个spring在做什么”是什么意思? 这是否意味着内部交易呼叫现在被截获? 你觉得哪个更好? 当您需要某些事务粒度时,是否拆分了类? 或者您使用上面的一些解决方法? (请分享)

EJB客户端如何在没有url的情况下找到EJB服务器?

我是Java EE的新手。 目前,我正在阅读Sun Microsystems 的Java EE 6 Tutorial,Volume 1(Basic Concepts Beta) 。 为了避免单调的阅读时间,我玩其他人编写的Java EE项目/代码很少。 我来自SE。 我的头仍然充满了SE。 在SE( 两层应用程序)中我使用 DATABASE_URL = “jdbc:mysql://something.db_server.com/db_name” 这就是我的客户端知道数据库服务器的位置。 在我看到的一个Java EE示例中 // Access JNDI Initial Context. Properties p = new Properties(); p.put(“java.naming.factory.initial”,”org.jnp.interfaces.NamingContextFactory”); p.put(“java.naming.provider.url”,”jnp://localhost:1099″); p.put(“java.naming.factory.url.pkgs”,”org.jboss.naming:org.jnp.interfaces”); InitialContext ctx = new InitialContext(p); // Change jndi name according to your server and ejb HelloRemote remote = […]

Java:跟踪用户登录会话 – 会话EJB与HTTPSession

如果我想使用我的Web应用程序跟踪每个客户端的会话状态,那么更好的选择 – 会话Bean还是HTTP会话 – 要使用? 使用HTTP会话: //request is a variable of the class javax.servlet.http.HttpServletRequest //UserState is a POJO HttpSession session = request.getSession(true); UserState state = (UserState)(session.getAttribute(“UserState”)); if (state == null) { //create default value .. } String uid = state.getUID(); //now do things with the user id 使用Session EJB: 在ServletContextListener的实现中,在WEB-INF/web.xml注册为Web应用程序侦听器: //UserState NOT a POJO this […]

无状态会话bean中的multithreading?

EJB 3.0规范不允许无状态会话bean的业务方法创建新线程。 这是为什么? 创建仅执行原始计算并且从不调用应用程序服务器的其他工作线程有什么问题? 比如说,我的会话bean实现了一个允许用户上传图像的服务,而业务方法对这些图像进行了cpu密集型图像处理。 那么即使机器有8个或更多核心,它也只能使用一个cpu核心来完成这项工作? 如果我利用第三方图像处理库,在内部创建工作线程,我也会违反EJB规范,即使该库和这些线程根本与EJB容器无关。 这似乎不对。 如果我忽略EJB规则并仍然创建一些工作线程来进行cpu密集处理会发生什么? 当然这些线程永远不会触及任何app服务器对象,bean线程会在返回之前加入它们。 还能发生什么坏事吗?

在JBoss启动时调用EJB中的方法

我正在寻找在JBoss上部署的EJB的入口点。 Servlet具有要在其web.xml使用的load-on-startup标记。 我正在为EJB搜索类似的init()function。

EJB – Home / Remote和LocalHome / Local接口

修改一些过去的考试试卷主要关注面向组件的设计和J2EE,我遇到了以下问题: 方案3的初步调查:“Exchange请求”表明两个EJB将提供合适的解决方案:一个名为EnterExchangeRequest的会话bean来控制处理,一个名为ExchangeRequest的实体bean来表示请求的持久属性。 讨论以下接口的作用: 家 远程 LocalHome 本地 以及它们如何提供对上述EJB服务的访问。 我可以尝试解释Home和Remote接口如何适应图片。 我也听说讲师说可以用LocalHome取代Home ,而用Local取代Remote (为什么?),但为什么他们要我同时讨论这四种角色呢? 当我说, EJB容器 (应用程序服务器)会看到一个接口是Home或Remote然后决定bean可以“生存”在集群中的任何一台机器上时,我是否正确,而在这种情况下接口是LocalHome和Local容器会知道bean不能分布在多台机器上,因此只能在一台机器中保持“活着”状态吗? 我完全迷失在这个企业Java丛林中。 我正在体验BeanOverflow。 你能告诉我哪些假设是错的,指出我的误解和错误。 感谢所有愿意帮助我使用这些EJB接口的人。 PS请注意,我并非要求您回答过去的试卷中的问题。 只是好奇,如果你有任何想法,他们在问这个问题后会发生什么。

分离的实体和管理的实体

什么是“独立实体”意味着什么? 如何在交易期间将管理实体转换为分离实体?

我可以(以及如何)使用EJB模块中的javax.naming.Context#lookup查找CDI托管bean吗?

我可以(如果是这样,如何?)在EJB模块中使用javax.naming.Context#lookup查找CDI托管bean? 我正在使用GlassFish v3。 我想我可以使用@Named ,但是什么是CDI托管bean的JNDI名称? 我想从非托管POJO中查找它们,所以我不能使用@Inject 。

如何在unit testing中模拟InitialContext构造函数

当我尝试为Junit测试模拟以下方法(Method使用远程EJB调用业务逻辑)时,它给出了javax.naming.NoInitialContextException private void someMethod(int id1, int id2, HashMap map){ ……some code…….. Context ctx = new InitialContext(); Object ref = ctx.lookup(“com.java.ejbs.MyEJB”); EJBHome ejbHome = (EJBHome)PortableRemoteObject.narrow(ref, EJBHome.class); EJBBean ejbBean = (EJBBean)PortableRemoteObject.narrow(ejbHome.create(), EJBBean.class); ejbBean.someMethod(id1,name); …….some code…….} 我对上述方法的unit testing @Test public void testsomeMethod() throws Exception { …….setting initial code… //Mock context and JNDI InitialContext cntxMock = PowerMock.createMock(InitialContext.class); PowerMock.expectNew(InitialContext.class).andReturn(cntxMock); expect(cntxMock.lookup(“com.java.ejbs.MyEJB”)).andReturn(refMock); […]