小编Bri*_*asa的帖子

EJB - 何时使用远程和/或本地接口?

我是Java EE的新手,我正在尝试理解本地接口和远程接口的概念.我被告知Java EE的一大优势是它易于扩展(我相信这意味着您可以在不同的服务器上部署不同的组件).是远程和本地接口进来的地方吗?如果您希望应用程序在不同的服务器上具有不同的组件,您是否应该使用远程接口?如果您的应用程序只驻留在一台服务器上,请使用本地接口?

如果我的上述假设是正确的,那么您将如何选择是否为新应用程序使用本地或远程接口,而您不确定流量的大小是多少?从使用本地接口开始,逐步升级到适用的远程接口?

感谢您的任何澄清和建议.

java ejb java-ee

177
推荐指数
4
解决办法
8万
查看次数

在调用转发到JSP的Servlet时,浏览器无法访问/查找CSS,图像和链接等相关资源

当我将servlet转发到JSP时,我在加载CSS和图像以及创建指向其他页面的链接方面遇到了麻烦.具体而言,当我把我的<welcome-file>index.jsp的CSS被加载并正在显示我的图片.但是,如果我将我设置<welcome-file>HomeServlet哪个转发控制index.jsp,则不应用CSS并且不显示我的图像.

我的CSS文件在web/styles/default.css.
我的照片在web/images/.

我像这样链接到我的CSS:

<link href="styles/default.css" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

我正在显示我的图像如下:

<img src="images/image1.png" alt="Image1" />
Run Code Online (Sandbox Code Playgroud)

这个问题是怎么造成的,怎么解决?


更新1:我添加了应用程序的结构,以及其他一些可能有用的信息.

替代文字

header.jsp文件是包含CSS链接标记的文件.该HomeServlet设置为我welcome-fileweb.xml:

<welcome-file-list>
    <welcome-file>HomeServlet</welcome-file>
</welcome-file-list>
Run Code Online (Sandbox Code Playgroud)

servlet被声明并映射为web.xml:

<servlet>
    <servlet-name>HomeServlet</servlet-name>
    <servlet-class>com.brianblog.frontend.HomeServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>HomeServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

更新2:我最终发现了问题 - 我的servlet映射不正确.显然当设置一个Servlet时,<welcome-file>它不能有一个URL模式/,我觉得有点奇怪,因为它不代表网站的根目录?

新映射如下:

<servlet-mapping>
    <servlet-name>HomeServlet</servlet-name>
    <url-pattern>/HomeServlet</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

css jsp servlets image

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

Spring - 是否可以在同一个应用程序中使用多个事务管理器?

我是Spring的新手,我想知道是否可以在同一个应用程序中使用多个事务管理器?

我有两个数据访问层 - 一个用于两个数据库.我想知道,你如何为一层使用一个事务管理器而另一层使用不同的事务管理器.我不需要跨两个数据库执行事务.但我确实需要单独对每个数据库执行事务.我创建了一个图像来帮助概述我的问题:

替代文字

这是我的应用程序上下文配置:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <context:component-scan base-package="cheetah.repositories" />
    <tx:annotation-driven />

    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
        <property name="persistenceUnitName" value="accounts" />
    </bean>

    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

    <bean id="transactionManager"
        class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

</beans>
Run Code Online (Sandbox Code Playgroud)

以下是使用此配置的示例:

@Repository
public class JpaAccountRepository implements AccountRepository {

    @PersistenceContext(unitName = "cheetahAccounts")
    private EntityManager accountManager;

    @Override
    @Transactional
    public Account findById(long id) {

        Account account = accountManager.find(Account.class, id);
        return account;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,对于帐户存储库,我想使用实体管理器工厂,并将持久性单元设置为帐户.但是,使用我的BusinessData Repository,我想使用具有不同持久性单元的实体管理器工厂.由于我只能定义一个事务管理器bean,我如何为不同的存储库使用不同的事务管理器?

谢谢你的帮助.

java spring jpa transactionmanager spring-transactions

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

Akka - 你应该创建多少个演员实例?

我是Akka框架的新手,我正在Netty + Akka上构建一个HTTP服务器应用程序.

到目前为止,我的想法是为每种类型的请求创建一个actor.例如,我有一个POST到/ my-resource的actor和另一个GET到/ my-resource的actor.

在哪里我感到困惑的是我应该如何创作演员呢?我是不是该:

  1. 为每个请求创建一个新的actor(我的意思是我应该为每个请求做一个相应的actor的TypedActor.newInstance())?创建新演员有多贵?

  2. 在服务器启动时创建每个actor的一个实例,并为每个请求使用该actor实例?我读过一个演员一次只能处理一条消息,所以这不是瓶颈吗?

  3. 做点别的吗?

感谢您的任何反馈.

scala akka

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

Java EE架构 - 使用像JPA 2这样的ORM时,仍然建议使用DAO吗?

如果我使用像JPA2这样的ORM - 我的实体映射到我的数据库,我还应该使用DAO吗?这似乎是一个更多的开销.

例如,我需要维护三个额外的包:

  1. 一个指定我的域对象(几乎映射我的Entity对象):

    public class Employee {
        private String firstName;
        private String lastName;
        ...
        // Getters and setters
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 一个包含指定我的DAO方法的接口

    public interface EmployeeDAO {
        public void addEmployee(Employee employee);
        public Employee getEmployeeById(long id);
        ...
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 一个包含实现我的DAO的会话bean

    public EmployeeJpaDAO implements EmployeeDAO {
        interface method implementations here
        ....
        private method that transform my Employee entity into my Employee domain object
    }
    
    Run Code Online (Sandbox Code Playgroud)

现在,每次我需要执行新的CRUD操作时,需要添加许多额外的行李.

但是,从DAO中看到的好处是:

  1. 您可以使用DAO的内存实现来对服务层进行单元测试.这意味着您不需要访问数据库来测试业务逻辑,并且可以确保您的对象始终包含属性的相同值

  2. 它将业务逻辑与数据库访问逻辑分开

不涉及实现DAO的选项是在服务层中使用实体对象和EntityManager:

@Stateless
public class EmployeeEjb {
    @PersistenceContext(unitName = "employee")
    private EntityManager manager;

    public Employee getEmployeeById(long id) …
Run Code Online (Sandbox Code Playgroud)

java architecture dao java-ee jpa-2.0

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

jax-rs检索表单参数

我正在尝试使用HttpServletRequest检索从已发布表单传递给jax-rs的一些参数.但是,我的请求对象始终为我的参数返回空值.我不是以正确的方式解决这个问题吗?我已经发布了下面的代码,以及一个发送的示例请求.

这是我的服务:

@Path("/")
@Stateless
public class HomeController {

    @Context
    private HttpServletRequest request;
    @Context
    private HttpServletResponse response;
    @EJB
    private LoginServiceLocal loginService;

    @POST
    @Path("/authenticate")
    @Consumes("application/x-www-form-urlencoded")
    public void authenticate() throws Exception {
        String email = request.getParameter("email");
        String password = request.getParameter("password");
        if (loginService.authenticate(email, password)) {
            response.sendRedirect("/app");
        } else {
            request.setAttribute("authenticationError", "Invalid email/password.");

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

示例请求:

POST http://localhost:8081/cheetah-web/authenticate HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101026    Firefox/3.6.12
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive …
Run Code Online (Sandbox Code Playgroud)

java rest jax-rs java-ee java-ee-6

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

如何平衡TCP流量?

我正在尝试确定如何平衡TCP流量.我理解HTTP负载平衡是如何工作的,因为它是一个简单的请求/响应架构.但是,当您的服务器尝试将数据写入其他客户端时,我不确定如何平衡TCP流量.我附上了一个简单的TCP聊天服务器的工作流图像,我们希望在N个应用服务器之间平衡流量.是否有任何负载平衡器可以做我正在尝试做的事情,或者我是否需要研究不同的主题?谢谢.

在此输入图像描述

tcp load-balancing

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

在AWS中扩展聊天的想法?

我正在努力想出在AWS中扩展聊天服务的最佳解决方案.我想出了几个潜在的解决方案:

  1. Redis Pub/Sub - 当用户与服务器建立连接时,服务器订阅该用户的ID.当有人向该用户发送消息时,服务器将使用用户的id对该频道执行发布.用户连接的服务器将接收消息并将其下推到相应的客户端.

  2. SQS - 我想过为每个用户创建一个队列.用户连接的服务器将轮询(或使用SQS长轮询)该队列.发现新消息时,它将从服务器推送给用户.

  3. SNS - 我真的很喜欢这个解决方案,直到我发现100个主题限制.我需要为每个用户创建一个主题,该主题仅支持100个用户.

他们可以使用AWS扩展聊天的其他方式吗?SQS方法是否可行?AWS向队列添加消息需要多长时间?

scalability real-time amazon-sqs amazon-web-services redis

19
推荐指数
3
解决办法
9569
查看次数

Rails ActionController为每个操作执行相同的代码

对于那里的rails专家,我想知道在Web应用程序中的每个操作执行相同代码的位置和方式?如果你能指出我的文章或提供一个简短的代码片段,我将非常感激.

提前感谢任何可以提供帮助的人.

ruby-on-rails actioncontroller

17
推荐指数
2
解决办法
5893
查看次数

在异常映射器中检索请求主体

我正在尝试在JAX-RS ExceptionMapper中检索请求的主体.到目前为止,这是我的代码:

@Provider @Componenet
public class BaseExceptionMapper implements ExceptionMapper<Exception> {

    @Context private HttpServletRequest request;

    @Override
    public Response toResponse(Exception ex) {

        // Trying to retrieve request body for logging throws an error
        String requestBody = IOUtils.toString(request.getInputStream());

    }

}
Run Code Online (Sandbox Code Playgroud)

所以我的困境是我无法获取日志记录的请求体,因为servlet API不允许你多次为请求调用request.getInputStream()/ request.getReader()(并且JAX-RS显然是在调用它解析请求).有谁知道是否有办法做我想做的事情?

java servlets jax-rs jersey

15
推荐指数
2
解决办法
8388
查看次数