Tag: java ee

如何为JAX-WS WebService调用设置超时

我正在使用WebService客户端,我想为我的WebService调用设置一个Timeout。 我尝试了不同的方法,但我仍然无法做到这一点。 我正在使用JAX-WS从WSDL生成代码。 我使用JBoss-eap-5.1作为App Server和JDK1.6.0_27。 我发现这些差异方法用于设置超时,但它们都不适用于我。 URL mbr_service_url = new URL(null,GlobalVars.MemberService_WSDL, new URLStreamHandler() { @Override protected URLConnection openConnection(URL url) throws IOException { URL clone_url = new URL(url.toString()); HttpURLConnection clone_urlconnection = (HttpURLConnection) clone_url.openConnection(); // TimeOut settings clone_urlconnection.setConnectTimeout(10000); clone_urlconnection.setReadTimeout(10000); return (clone_urlconnection); } }); MemberService service = new MemberService(mbr_service_url); MemberPortType soap = service.getMemberPort(); ObjectFactory factory = new ObjectFactory(); […]

独立Java程序中的Initialcontext

我正在使用JNDI来创建tomcat连接池。 它在Web应用程序中运行良好。 我相信InitialContext是由tomcat服务器提供的。 Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup(“java:/comp/env”); dataSource = (DataSource)envContext.lookup(“jdbc/testdb”); 但是当我尝试从独立的Java程序调用相同的实用程序时,initContext对象为null。 如何显式提供Context对象期望的所有必要属性。 错误:javax.naming.NoInitialContextException:需要在环境或系统属性或applet参数或应用程序资源文件中指定类名:java.naming.factory.initial

在Glassfish中制作数据源

我正在使用服务器的管理控制台为GlassFish创建JDBC连接池资源。 页面上用于创建池的字段之一标记为“资源类型”。 此字段有四个可能的值:javax.sql.DataSource,javax.sql.XADataSource,javax.sql.ConnectionPoolDataSource和javax.sql.Driver,但是创建JDBC连接池“向导”的帮助文本没有太多信息这些选择的优缺点。 当提示选择我应该选择的资源类型时? 我将连接到本地MySQL服务器。 对下拉列表中的选项之间的差异进行解释也是很好的。

了解EJB3 / JPA容器级事务和隔离级别

考虑一下我正在使用的一些代码的简化视图: @Stateless(…) @Remote(…) @TransactionAttribute(TransactionAttributeType.MANDATORY) public class FirstEjbType { @EJB(…) private SecondEjbType secondEjb; @EJB(…) private ThirdEjbType thirdEjb; public void doSomething() { secondEjb.doSomething(); // WRITES SOMETHING TO THE DATABASE thirdEjb.doSomething(); // CAN’T SEE THAT SOMETHING IN THE DATABASE! } 我已经在类级别将TransactionAttribute注释设置为MANDATORY 。 我理解这意味着必须在提供的事务中调用所有方法,如doSomething() 。 在这种情况下,我们使用容器管理的事务。 在SecondEjbType或ThirdEjbType中SecondEjbType不使用TransactionAttribute ……在类和方法级别都没有。 我理解这意味着secondEjb.doSomething()和thirdEjb.doSomething()都将在为firstEjb.doSomething()提供的事务中运行。 但是,我真的错过了什么 ! 如代码注释所示…… secondEjb将数据写入数据库, thirdEjb将该数据作为其操作的一部分进行读取。 由于所有这些都在同一个事务中运行,我不希望隔离级别存在任何问题。 但是,无论出于何种原因, secondEjb数据库写入对thirdEjb不可见。 我已经将跟踪一直转到最大值,并且显然没有exception或错误或回滚问题……初始写入对于后续读取是不可见的。 我并不是自称是世界上最伟大的交易管理大师……我是否错过了一些明显的东西,或者我的概念理解是否基本正确,问题可能在其他地方? […]

无状态会话bean中的multithreading?

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

使用EJBContext getContextData – 这样安全吗?

我打算使用EJBContext将一些属性从应用程序层(特别是消息驱动的bean)传递给持久性生命周期回调,该回调无法直接注入或传递参数(EclipseLink中的会话侦听器,实体生命周期回调等) ,该回调是通过JNDI获取EJBContext 。 这似乎工作,但有任何隐藏的陷阱,如我缺少的线程安全或对象寿命? (假设传递的属性值是不可变的,如String或Long。) 示例bean代码 @MessageDriven public class MDB implements MessageListener { private @Resource MessageDrivenContext context; public void onMessage(Message m) { context.getContextData().put(“property”, “value”); } } 然后是使用EJBContext的回调 public void callback() { InitialContext ic = new InitialContext(); EJBContext context = (EJBContext) ic.lookup(“java:comp/EJBContext”); String value = (String) context.getContextData().get(“property”); } 我想知道的是,我可以确定contextData映射内容只对当前调用/线程可见吗? 换句话说,如果两个线程同时运行callback方法,并且都从JNDI查找EJBContext ,它们实际上获得了不同的contextData映射内容? 而且,这实际上是如何工作的 – 从JNDI查找返回的EJBContext最终是一个ThreadLocal的结构的包装器对象?

在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请注意,我并非要求您回答过去的试卷中的问题。 只是好奇,如果你有任何想法,他们在问这个问题后会发生什么。

JEE6 @ApplicationScoped bean和并发

我需要编写一个bean来充当访问它的次数的计数器。 我正在考虑将@ApplicationScoped bean与AtomicInteger一起使用 @ApplicationScoped class VisitsCounter { private AtomicInteger counter; @PostConstruct public void construct() { counter = new AtomicInteger(0); } public int visited() { return counter.incrementAndGet(); } } 我的问题是:在同时考虑多个请求时可以吗? 或者我需要使用@ConcurrencyManagement和@Lock注释吗? 我想Atomic*应该可以做到,但我不确定。 当我将线程安全集合作为字段时,同样适用吗? 比如说我有 @ApplicationScoped class ValuesHolder { private List values; @PostConstruct public void construct() { values = Collections.synchronizedList(new LinkedList()); } public void insert(String value) { […]

tcnative-1.dll无法在IA 32位平台上加载AMD 64位.dll

我尝试运行tomcat时收到此错误: “java.lang.UnsatisfiedLinkError:C:\ Program Files(x86)\ apache-tomcat-7.0.34 \ bin \ tcnative-1.dll:无法在IA 32位平台上加载AMD 64位.dll” 。 但是,我下载了64位JRE,并仔细检查了我的java版本: C:\ Program Files(x86)\ apache-tomcat-7.0.34 \ bin> java -version java版“1.7.0_10” Java(TM)SE运行时环境(版本1.7.0_10-b18) Java HotSpot(TM)64位服务器VM(内置23.6-b04,混合模式) 我以前在这里看到过这个问题,但是其中一个没有解决方案,另一个是Eclipse问题,但是当我直接访问tomcat时,我遇到了这个错误。 如何找出正在检测哪个“IA 32位平台”,以及如何将Tomcat指向正确的方向? 这也就是为什么我的servlet通过Eclipse得到这个404错误的原因? 类型状态报告 message / JSPandServlet / Controller description请求的资源不可用。 日志: C:\ Program Files(x86)\ apache-tomcat-7.0.34 \ bin> configtest.bat 使用CATALINA_BASE:“C:\ Program Files(x86)\ apache-tomcat-7.0.34” 使用CATALINA_HOME:“C:\ Program Files(x86)\ apache-tomcat-7.0.34” 使用CATALINA_TMPDIR:“C:\ Program Files(x86)\ […]