- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在关注 EJB cookbook ,来自 packt,使用以下代码:
package packt;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
//@Stateless
@LocalBean
@Stateless(mappedName="salutationBean")
public class Salutation {
public String getFormalSalutation(String name) {
return "Dear " + name;
}
public String getInformalSalutation(String name) {
return "Hi " + name;
}
}
我如何从不扩展 HttpServlet
的类访问这个 bean? servlet 本身工作正常:
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import packt.Salutation;
@WebServlet(urlPatterns = {"/SalutationServlet"})
public class SalutationServlet extends HttpServlet {
@EJB
private Salutation salutation;
protected void processRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet SalutationServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>"
+ salutation.getFormalSalutation("Sherlock Holmes")
+ "</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.flush();
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
并且可以从指定的 URL 查看:
thufir@dur:~$
thufir@dur:~$ lynx http://localhost:8080/SalutationApplication-war/SalutationServlet -dump
Dear Sherlock Holmes
thufir@dur:~$
当前结构:
thufir@dur:~/NetBeansProjects$
thufir@dur:~/NetBeansProjects$ tree SalutationApplication/
SalutationApplication/
├── build.xml
├── nbproject
│ ├── ant-deploy.xml
│ ├── build-impl.xml
│ ├── genfiles.properties
│ ├── private
│ │ └── private.properties
│ ├── project.properties
│ └── project.xml
├── SalutationApplication-ejb
│ ├── build.xml
│ ├── nbproject
│ │ ├── ant-deploy.xml
│ │ ├── build-impl.xml
│ │ ├── genfiles.properties
│ │ ├── private
│ │ │ └── private.properties
│ │ ├── project.properties
│ │ └── project.xml
│ └── src
│ ├── conf
│ │ └── MANIFEST.MF
│ └── java
│ └── packt
│ └── Salutation.java
├── SalutationApplication-war
│ ├── build.xml
│ ├── nbproject
│ │ ├── ant-deploy.xml
│ │ ├── build-impl.xml
│ │ ├── genfiles.properties
│ │ ├── private
│ │ │ └── private.properties
│ │ ├── project.properties
│ │ └── project.xml
│ ├── src
│ │ ├── conf
│ │ │ └── MANIFEST.MF
│ │ └── java
│ │ └── servlet
│ │ └── SalutationServlet.java
│ └── web
│ ├── index.html
│ └── WEB-INF
└── src
└── conf
└── MANIFEST.MF
20 directories, 27 files
thufir@dur:~/NetBeansProjects$
现在它只是一个本地 bean 很好,但最终我希望 Salutation.java bean 可以远程访问。我从 Head First EJB 对 EJB 有一定的了解。 ,但那已经很老了。
最佳答案
(这个答案与我上面的评论有关。)
在容器未自动管理的对象中,您可以通过获取对 BeanManager
的引用来初始化手动注入(inject),并让 CDI 容器为您完成所有工作。这适用于您还可以注入(inject)托管 bean 的所有内容,但您不必进行复杂的 JNDI 查找。
public class CDIUtils {
public static BeanManager beanManager() {
try {
return (BeanManager) new InitialContext().lookup("java:comp/BeanManager");
} catch (NamingException e) {
throw new IllegalStateException("Unable to obtain CDI BeanManager", e);
}
}
public static void makeManagedStatic(Object obj) {
BeanManager bm = beanManager();
makeManaged(obj, bm);
}
public static void makeManaged(Object obj, BeanManager beanManager) {
Class objClass = (Class) obj.getClass();
AnnotatedType annotatedType = beanManager.createAnnotatedType(objClass);
InjectionTarget injectionTarget = beanManager.createInjectionTarget(annotatedType);
CreationalContext context = beanManager.createCreationalContext(null);
injectionTarget.inject(obj, context);
}
}
假设这是您的客户:
public class MyClient {
@EJB private MyEJB myEJB;
public void run() {
if (myEJB == null)
CDIUtils.makeManagedStatic(this);
myEJB.someMethod();
}
}
您也可以简单地让它们在创建时被管理,这样可以避免对 null
的测试:
MyClient client = new MyClient();
CDIUtils.makeManagedStatic(client);
client.run(); // etc
关于java - 如何远程访问@Stateless @LocalBean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25700311/
我的 Elasticsearch 安装在 azure 虚拟机上。 在本地工作正常: http://localhost:9200/ 如何从外部使用它? 谢谢 最佳答案 在您的 Elasticsearch
我已经在 Linux(CenOS) 服务器上安装了 mongodb,正如 docs 中所写的那样.但是远程访问仍然是不可能的(尽管从本地的 mongo shell 连接是可以的)。有人可以提供有关正确
当Microsoft Sqlserver 2012 安装好后,接下的的工作需要配置Sqlserver数据库允许远程访问,只有配置了Sqlserver远程访问,其他ip客户端才能访问,配置sqlser
我有两台装有 windows xp 的电脑。 我想将第一个用作 git 服务器,第二个用作工作站。 在本地计算机上运行 git 非常好,但是对于两台计算机之间的通信,我需要 ssh。 (我想) 我找到
我在本地安装了 openMQ,它运行良好。我使用以下代码通过 JNDI 查找获取 QueueConnectionFactory。 Hashtable env = new Hashtable(); en
我正在使用 laravel 5.4 并在远程服务器 ubuntu 16.04 上使用最新的 mariaDB, 我几乎完成了谷歌中列出的所有配置,并且还恢复到原始状态。 我当前的问题是无法连接到远程 m
我想使用现有用户名访问我的 PostgreSQL 8.3 数据库,但是当我尝试时,密码验证失败。我可以通过创建一个新的 Postgres 用户来访问数据库: postgres createuser -
我已经在我的 Win2k3x86 虚拟机上安装了 MySql,并尝试在我的 Mac 上使用 SequelPro 连接到它,这样我就可以运行一个大的 sql 语句(~30mb - SQL Workben
我想通过命令行连接到网络上 VM 上的 MySql 数据库。我正在尝试使用 telnet user@192.xxxx 3306,但我收到以下消息 Name or service not known。我
我在服务器 10.37.45.89 上安装了 apache httpd,服务器上安装了 wsgi_module。我已将我的 wsgi.conf 文件放在 /etc/apache2/conf.d 位置下
我已经在 Linux 上安装了 glassfish 应用服务器。因此,我部署了一个应用程序,一切正常。但我只能从本地网络访问该服务器。我无法远程访问 glassfish(无法访问应用程序或 glass
我在某个服务器上运行 hadoop 服务器,比方说在 IP 192.168.11.7 上并使其 core-site.xml 如下: fs.defaultFS hdf
我正在研究 Hive。我想通过 Hive JDBC 访问 Hive 表。我正在使用的代码如下: public class HiveJdbcClient { private static String
在过去的三四个月里,我在本地部署了 PostGIS,但现在我刚刚获得了一个服务器来部署 PostGIS 并扩展我的开源冒险。我已经安装了 Postgres/gis 并且它在我的 Windows 服务器
我已经在远程 Ubuntu 服务器上安装了 Apache Cassandra。如何允许远程访问 Apache Cassandra 数据库?以及如何建立联系? 最佳答案 cassandra 3.11.3
我正在尝试从我的 mac 远程访问 Jetson Nano。到目前为止,我已经完成了以下工作: 我在我的 Mac 上安装了 microsoft Remote Desktop 我通过 Micro-usb
我有一个安装在 Amazon EC2 实例中的 k8s 集群,我想使用 GitLab 配置 CI。为此,GitLab 向我请求了 Kubernetes API URL。 我跑了kubectl clus
我有一个开源 xenserver 产品(来自 xenserver.org)。我需要从 Java 代码远程访问 VM。例如,远程重启。我找到了SDK“API入门”http://docs.vmd.citr
我想详细地远程连接 mysql 数据库,我想制作这样的应用程序,我的数据库仅在托管服务器中,而我的 php 页面在客户端电脑中始终处于离线状态。可能或不可能。如果是的话怎么可能。我正在使用 godad
我想为 iPad 制作一个应用程序,通过 iPhone 应用程序进行控制。是否可以在 iPhone 上访问 PhoneGap-App?我不想使用外部服务器,因为应用程序应该在临时网络中离线运行。 首先
我是一名优秀的程序员,十分优秀!